满汉楼项目

这篇具有很好参考价值的文章主要介绍了满汉楼项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

满汉楼项目

1. 满汉楼介绍

满汉楼是一个综合餐饮管理系统,其主要分为:

  • 人事登记:各部门人员信息
  • 登录管理:员工号、姓名、职位、密码
  • 菜谱价格:菜谱及价格
  • 报表统计:统计销售额
  • 成本及库房:名称注册登记 -> 录入初期余额 -> 入库出库清单 -> 库存统计盘点 -> 查询分析统计
  • 系统设置
  • 动画帮助

该项目应用到的核心知识:java+jdbc(druid)+mysql

满汉楼项目有很多界面,这里展示部分:

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

2. 需求说明

满汉楼项目的功能比较多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整:

  1. 去掉界面和事件处理(工作中使用很少),使用控制台界面
  2. 完成满汉楼项目的登录、订座、点餐、结账和查看账单等功能

3. 界面设计

我们先大致弄成以下界面:

  1. 用户登录

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  2. 显示餐桌状态

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  3. 预定餐桌

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  4. 显示所有菜品

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  5. 点餐服务

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  6. 查看账单

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  7. 结账

    满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  8. 退出满汉楼

4. 项目设计

项目设计—程序框架图

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

5. 功能实现

5.1 准备阶段

  1. 准备工具类Utility,提高开发效率,并搭建项目的整体结构
  2. 在实际开发中,公司都会提供相应的工具类和开发库,提高开发效率
    • 了解Utility的使用
    • 测试Utility
  3. 在本项目下创建一个libs目录,把相应的jar包导入到libs目录

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  1. 导入Utility和JDBCUtilsByDruid工具类

    • 添加配置文件druid.properties
    #key=value
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/sys_db02?rewriteBatchedStatements=true
    #url=jdbc:mysql://localhost:3306/sys_db02
    username=root
    password=sys
    #initial connection Size
    initialSize=10
    #min idle connecton size
    minIdle=5
    #max active connection size
    maxActive=20
    #max wait time (5000 mil seconds)
    maxWait=5000
    
    • 添加Utility工具类
    package com.song.mhl.utils;
    
    
    /**
    	工具类的作用:
    	处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
    */
    
    import java.util.*;
    /**
    
    	
    */
    public class Utility {
         
    	//静态属性。。。
        private static Scanner scanner = new Scanner(System.in);
    
        
        /**
         * 功能:读取键盘输入的一个菜单选项,值:1——5的范围
         * @return 1——5
         */
    	public static char readMenuSelection() {
         
            char c;
            for (; ; ) {
         
                String str = readKeyBoard(1, false);//包含一个字符的字符串
                c = str.charAt(0);//将字符串转换成字符char类型
                if (c != '1' && c != '2' && 
                    c != '3' && c != '4' && c != '5') {
         
                    System.out.print("选择错误,请重新输入:");
                } else break;
            }
            return c;
        }
    
    	/**
    	 * 功能:读取键盘输入的一个字符
    	 * @return 一个字符
    	 */
        public static char readChar() {
         
            String str = readKeyBoard(1, false);//就是一个字符
            return str.charAt(0);
        }
        /**
         * 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
         * @param defaultValue 指定的默认值
         * @return 默认值或输入的字符
         */
        
        public static char readChar(char defaultValue) {
         
            String str = readKeyBoard(1, true);//要么是空字符串,要么是一个字符
            return (str.length() == 0) ? defaultValue : str.charAt(0);
        }
    	
        /**
         * 功能:读取键盘输入的整型,长度小于2位
         * @return 整数
         */
        public static int readInt() {
         
            int n;
            for (; ; ) {
         
                String str = readKeyBoard(2, false);//一个整数,长度<=2位
                try {
         
                    n = Integer.parseInt(str);//将字符串转换成整数
                    break;
                } catch (NumberFormatException e) {
         
                    System.out.print("数字输入错误,请重新输入:");
                }
            }
            return n;
        }
        /**
         * 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
         * @param defaultValue 指定的默认值
         * @return 整数或默认值
         */
        public static int readInt(int defaultValue) {
         
            int n;
            for (; ; ) {
         
                String str = readKeyBoard(10, true);
                if (str.equals("")) {
         
                    return defaultValue;
                }
    			
    			//异常处理...
                try {
         
                    n = Integer.parseInt(str);
                    break;
                } catch (NumberFormatException e) {
         
                    System.out.print("数字输入错误,请重新输入:");
                }
            }
            return n;
        }
    
        /**
         * 功能:读取键盘输入的指定长度的字符串
         * @param limit 限制的长度
         * @return 指定长度的字符串
         */
    
        public static String readString(int limit) {
         
            return readKeyBoard(limit, false);
        }
    
        /**
         * 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
         * @param limit 限制的长度
         * @param defaultValue 指定的默认值
         * @return 指定长度的字符串
         */
    	
        public static String readString(int limit, String defaultValue) {
         
            String str = readKeyBoard(limit, true);
            return str.equals("")? defaultValue : str;
        }
    
    
    	/**
    	 * 功能:读取键盘输入的确认选项,Y或N
    	 * 将小的功能,封装到一个方法中.
    	 * @return Y或N
    	 */
        public static char readConfirmSelection() {
         
            System.out.println("请输入你的选择(Y/N)");
            char c;
            for (; ; ) {
         //无限循环
            	//在这里,将接受到字符,转成了大写字母
            	//y => Y n=>N
                String str = readKeyBoard(1, false).toUpperCase();
                c = str.charAt(0);
                if (c == 'Y' || c == 'N') {
         
                    break;
                } else {
         
                    System.out.print("选择错误,请重新输入:");
                }
            }
            return c;
        }
    
        /**
         * 功能: 读取一个字符串
         * @param limit 读取的长度
         * @param blankReturn 如果为true ,表示 可以读空字符串。 
         * 					  如果为false表示 不能读空字符串。
         * 			
    	 *	如果输入为空,或者输入大于limit的长度,就会提示重新输入。
         * @return
         */
        private static String readKeyBoard(int limit, boolean blankReturn) {
         
            
    		//定义了字符串
    		String line = "";
    
    		//scanner.hasNextLine() 判断有没有下一行
            while (scanner.hasNextLine()) {
         
                line = scanner.nextLine();//读取这一行
               
    			//如果line.length=0, 即用户没有输入任何内容,直接回车
    			if (line.length() == 0) {
         
                    if (blankReturn) return line;//如果blankReturn=true,可以返回空串
                    else continue; //如果blankReturn=false,不接受空串,必须输入内容
                }
    
    			//如果用户输入的内容大于了 limit,就提示重写输入  
    			//如果用户如的内容 >0 <= limit ,我就接受
                if (line.length() < 1 || line.length() > limit) {
         
                    System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
                    continue;
                }
                break;
            }
    
            return line;
        }
    }
    
    • 添加JDBCUtilsByDruid工具类
    package com.song.mhl.utils;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.FileInputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    /**
     * 基于Druid数据库连接池的工具类
     */
    public class JDBCUtilsByDruid {
         
        private static DataSource ds;
        //用静态代码块完成 ds 初始化
        static{
         
            Properties properties = new Properties();
            try {
         
                properties.load(new FileInputStream("src\\druid.properties"));
                ds = DruidDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
         
                throw new RuntimeException(e);
            }
        }
    
        //编写getConnection方法
        public static Connection getConncteion() throws SQLException {
         
            return ds.getConnection();
        }
    
        //关闭连接
        //注意:这里的关闭连接,在数据库连接池技术中,不是真的断掉连接
        //而是把使用的Connection对象放回连接池
        public static void close(ResultSet resultSet, Statement statement,Connection connection){
         
            try {
         
                if (resultSet!=null){
         
                    resultSet.close();
                }
                if (statement!=null){
         
                    statement.close();
                }
                if (connection!=null){
         
                    connection.close();
                }
            } catch (SQLException e) {
         
                throw new RuntimeException(e);
            }
        }
    }
    
  2. 对上面两个工具类做个简单的测试,查看是否导入成功

5.2 显示主菜单、二级菜单和退出系统功能

5.2.1 主菜单界面
  1. 先创建一个MHLView类,把主菜单界面的相关代码写入
  2. 然后创建一个employee的表格,录入部分员工的信息,用于验证是否登录成功,如果登录成功,则进入二级菜单;
  3. 然后创建对应的Employee类:javabean和employee对应
  4. 然后再创建相应的EmployeeDAO继承BasicDAO
  5. 最后创建EmployeeService类,用于完成对employee表的各种操作(通过调用EmployeeDAO对象完成)

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

5.2.2 二级菜单界面
  • 显示餐桌状态界面
  1. 先创建一个diningTable表格,先初步填写几个空白的信息
  2. 然后创建对应的DiningTable类:javabean和diningTable对应
  3. 然后再创建相应的DiningTableDAO继承BasicDAO
  4. 最后创建DiningTableService类,完成对diningTable表的各种操作(通过调用DiningTableDAO对象完成)

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  • 预定餐桌界面
  1. 如果该餐桌处于已经预定或者就餐状态,给出提示
  2. 思路分析:
    1. 检测餐桌是否存在
    2. 检测餐桌的状态
    3. 如果餐桌存在并且未预定,那么可以进行预定
  3. 进行餐桌预定:
    1. 接收预定信息
    2. 更新餐桌状态
    3. 提示预订成功

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  • 显示所有菜品界面
  1. 先创建一个menu表格,先初步填写几个空白的信息
  2. 然后创建对应的Menu类:javabean和menu对应
  3. 然后再创建相应的MenuDAO继承BasicDAO
  4. 最后创建MenuService类,完成对menu表的各种操作(通过调用MenuDAO对象完成)

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  • 点餐服务界面
  1. 要求对餐桌号,菜品编号做合理性校验,如果不合理,给出提示信息
  2. 思路分析:
    1. 餐桌号,菜品编号进行检验
    2. 点单成功后,需要修改餐桌状态
    3. 生成账单

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  • 查看账单界面

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql

  • 结账界面
  1. 思路分析:
    1. 对餐桌号进行校验
    2. 修改bill表的state
    3. 修改diningTable信息
    4. 不需求增加新表,不需要增加新的类,需要增加新的业务逻辑

满汉楼项目,满汉楼项目,MySQL数据库,Java学习,开发语言,java,mysql文章来源地址https://www.toymoban.com/news/detail-536508.html

  • 退出满汉楼
5.2.3 代码实现
表格
  1. 创建员工表employee
-- 创建满汉楼的数据库
CREATE DATABASE mhl
-- 创建表 employee表(主键id,empid,name,pwd,job等)
CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,-- 主键id,自增
	empid VARCHAR(32) UNIQUE NOT NULL DEFAULT '',-- 员工号
	pwd CHAR(32) NOT NULL DEFAULT '',-- 密码
	NAME VARCHAR(32) NOT NULL DEFAULT '',-- 名字
	job VARCHAR(32) NOT NULL DEFAULT ''-- 职位
	)CHARSET=utf8;
	
-- 添加数据
INSERT INTO employee VALUES(NULL, '6668612', MD5('123456'), '张三丰', '经理');
INSERT INTO employee VALUES(NULL, '6668622', MD5('123456'),'小龙女', '服务员');
INSERT INTO employee VALUES(NULL, '6668633', MD5('123456'), '张无忌', '收银员');
INSERT INTO employee VALUES(NULL, '666', MD5('123456'), '老孙', '经理');

SELECT * FROM employee;

DROP TABLE employee;
  1. 创建订餐表diningTable
-- 创建表 diningTable 订餐表/餐桌表
CREATE TABLE diningTable (
	id INT PRIMARY KEY AUTO_INCREMENT, -- 自增, 表示餐桌编号
	state VARCHAR(20) NOT NULL DEFAULT '',-- 餐桌的状态
	orderName VARCHAR(50) NOT NULL DEFAULT '',-- 预订人的名字
	orderTel VARCHAR(20) NOT NULL DEFAULT ''-- 订餐人的电话
)CHARSET=utf8; 

INSERT INTO diningTable VALUES(NULL, '空','','');
INSERT INTO diningTable VALUES(NULL, '空','','');
INSERT INTO diningTable VALUES(NULL, '空','','');

SELECT * FROM diningTable;

SELECT * FROM diningTable WHERE id = 1;

UPDATE diningTable SET state = '空',orderName = '',orderTel = '' WHERE id = 1;
  1. 创建菜单表menu
-- 创建 menu表	菜单表
CREATE TABLE menu(
	id INT PRIMARY KEY AUTO_INCREMENT,

到了这里,关于满汉楼项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://blog.csdn.net/sunyusong666/article/details/131492499

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包