小型订餐系统

1.数据库设计

1.1需求分析

本小型订餐系统是基于java,通过连接数据库完成。可以有两种运行方式:命令行输出和GUI页面输出。

下面是对本系统的各个功能进行分别说明:

1.管理员:

(1)注册:输入姓名和密码之后进行注册,注册成功后自动登录成功。

(2)登录:输入姓名和密码,进行查询是否有匹配的数据,如果有就登录成功。

(3)查询全部菜品:管理员可以浏览所有的菜品信息

(4)添加菜品:通过输入的菜品信息来添加菜品

(5)修改菜品:通过输入的菜品信息来修改菜品

(6)删除菜品:通过菜品id来进行删除菜品数据

(7)查询全部消费者信息:管理员可以查询全部消费者信息

(8)查询全部管理员信息:管理员可以查询全部管理员信息

(9)查询全部订单信息:管理员可以查询全部订单信息

2.消费者:

(1)注册:输入姓名和密码之后进行注册,注册成功后自动登录成功。

(2)登录:输入姓名和密码,进行查询是否有匹配的数据,如果有就登录成功。

(3)查询全部菜品:消费者可以浏览所有的菜品信息

(4)购买菜品:用户可以选择订什么菜品、菜品数量,购买,生成订单。系统将保留交易的全部信息,包括订单消费人姓名、消费总价、订单日期的信息。

(5)查询订单(是只能查询自己的订单信息):当消费者选择查询的姓名之后,可以进行查询该名字所有的订单信息。

1.2概念结构设计

1.消费者管理

消费者管理主要包括消费者姓名、消费者编号、消费者密码属性。

图一

2.菜品管理

菜品管理主要包括菜品编号、菜品名称、菜品说明、菜品价格属性。

图二

3.订单管理

订单管理主要包括订单编号、消费总价、订单时间、消费者姓名属性。

图三

4.员工管理

员工管理主要包括管理员姓名、管理员编号、管理员密码属性。

图四

5.全局E-R图

图五

1.3逻辑结构设计

1.消费者(消费者姓名,消费者编号,消费者手机号,消费者密码)

1-1消费者信息表:Customer

字段名

数据类型

约束

说明

xid

int

主键,长度20

消费者编号

xname

varchar

长度20

消费者姓名

xphone

varchar

长度11

消费者手机号

xpassword

varchar

长度21

消费者密码

2.员工(员工姓名,员工编号,员工手机号,员工密码)

1-2员工信息表:Employee

字段名

数据类型

约束

说明

yid

int

主键,长度20

员工编号

yname

varchar

长度20

员工姓名

yphone

varchar

长度11

员工手机号

ypassword

varchar

长度21

员工密码

3.菜品(菜品名,菜品编号,菜品说明,菜品价格)

1-3菜品信息表:Food

字段名

数据类型

约束

说明

cid

int

主键,长度20

菜品编号

cname

varchar

长度20

菜品名

cintro

varchar

长度50

菜品说明

cprice

int

长度20

菜品价格

4.订单(订单编号,订单时间,订单状态,消费总额,消费者编号)

1-4订单信息表:Order

字段名

数据类型

约束

说明

did

int

主键,长度20

订单编号

dtime

date

长度20

订单时间

dstate

boolean

长度20

订单状态(ture--完成,false--未完成)

dprice

int

长度20

消费总额

xid

int

长度20

消费者编号

1.4数据库实施

1.创建数据库并使用数据库

-- 创建数据库shujuku
CREATE DATABASE shujuku;

-- 使用数据库shujuku
USE shujuku;

2.创建四个表

(1)消费者表

-- 1.创建customer顾客表
CREATE TABLE customer(
xid	INT PRIMARY KEY AUTO_INCREMENT COMMENT '消费者编号',
xname	VARCHAR(20)	COMMENT '消费者姓名',
xpassword VARCHAR(21)	COMMENT '消费者密码'
);

-- 查询customer顾客表
SELECT * FROM customer;
 
-- 给customer顾客表 插入数据
INSERT INTO customer VALUES(1,'小明','123456');
-- 一些数据 写
INSERT INTO customer VALUES(2,'李华','020203');
INSERT INTO customer VALUES(3,'刘洋','010304');
INSERT INTO customer VALUES(4,'妮妮','100016');
INSERT INTO customer VALUES(5,'小杜','123456');
INSERT INTO customer VALUES(6,'彭飞','102309');

(2)管理员表

-- 2.创建Employee员工表
CREATE TABLE employee(
yid	INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工编号',
yname	VARCHAR(20)	COMMENT '员工姓名',
ypassword VARCHAR(21)	COMMENT '员工密码'
);

-- 查询employee员工表
SELECT * FROM employee;

-- 给employee员工表 插入数据
INSERT INTO employee VALUES(1,'张三','123456');
-- 一些数据
INSERT INTO employee VALUES(2,'小张','123456');
INSERT INTO employee VALUES(3,'小王','123456');
INSERT INTO employee VALUES(4,'小景','123456');
INSERT INTO employee VALUES(5,'小华','123456');
INSERT INTO employee VALUES(6,'小龙','123456');

(3)食物表

-- 3.创建Food食物表
CREATE TABLE food(
cid	INT PRIMARY KEY AUTO_INCREMENT COMMENT '菜品编号',
cname	VARCHAR(20)	COMMENT '菜品名',
cintro  VARCHAR(50)	COMMENT '菜品说明',
cprice  VARCHAR(20) COMMENT '菜品价格'
);

-- 查询food食物表
SELECT * FROM food;

 
-- 给food食物表 插入数据
INSERT INTO food VALUES(1,'金陵烤鸭','肥而不腻,卤汁是金陵烤鸭的灵魂','38');
INSERT INTO food VALUES(2,'招牌盐水鸭','秘方腌制,肉质细嫩,咸鲜味十足','30');
INSERT INTO food VALUES(3,'姜汁肴蹄','秘制卤水浸泡,咸鲜味美','28');
INSERT INTO food VALUES(4,'苏式熏鱼','经典传统制法,口感甘香','28');
INSERT INTO food VALUES(5,'松仁香干马兰头','爽口清淡','28');
INSERT INTO food VALUES(6,'鸭血粉丝砂锅','南京传统地方风味,鲜美无比','24');
INSERT INTO food VALUES(7,'王府泡椒鸡','微酸、微辣、微甜,三重口感','32');
INSERT INTO food VALUES(8,'鸡汁白鱼','色泽银白肉质细腻,鲜美无比','78');
INSERT INTO food VALUES(9,'麻辣鸭血','鸭血辣辣很开胃,口感顺滑','18');
INSERT INTO food VALUES(10,'状元大春卷','手工现包,香脆可口','15');
INSERT INTO food VALUES(11,'江南水乡一桶鲜','各色水鲜,汇聚一桶','42');
INSERT INTO food VALUES(12,'民国美龄粥','宋美龄钟爱的一道粥,口味独特','18');
INSERT INTO food VALUES(13,'韭香水晶虾饺','外皮晶莹澄澈,虾仁新鲜大只','9');
INSERT INTO food VALUES(14,'清炖狮子头','肥瘦搭配黄金比例,入口即化','28');
INSERT INTO food VALUES(15,'东北大米饭','颗颗饱满(规格:碗)','2');

(4)订单表

-- 4.创建Order订单表
CREATE TABLE IF NOT EXISTS `order`(
did	INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单编号',
dtime	DATE	    COMMENT '订单时间',
dprice  VARCHAR(20)	COMMENT '消费总额',
xname	VARCHAR(20) COMMENT '消费者姓名'
);

-- 删除订单表
DROP TABLE `order`;

-- 查询order订单表
SELECT * FROM `order`;

-- 给order订单表 插入数据
INSERT INTO `order` VALUES(1,'2023-03-20','28','李华');
-- 一些数据
INSERT INTO `order` VALUES(2,'2023-03-22','28','小明'); 
INSERT INTO `order` VALUES(3,'2023-04-25','30','妮妮');
INSERT INTO `order` VALUES(4,'2023-04-27','42','李华');
INSERT INTO `order` VALUES(5,'2023-05-20','78','刘洋');

2.应用程序

首先我们把程序分成几个包:Util类、Entity实体类、Dao接口类、Impl实现类、Test测试类、Gui类

2.1Util类:

建立连接和释放连接(主要是建立与数据库的连接,可以对数据进行增删改查)

连接数据库时,要注意地址不要写错,写错会导致连接不上数据库。特别是,前面用两个斜线(为什么:要多一个斜线是因为其中一个斜线是转义字符)后面用一个斜线。

public class DBUtil {
	
		//连接数据库
		//1.加载并注册数据库的驱动
		private static final String DRIVER="com.mysql.jdbc.Driver";
		//2.通过DriverManager获取数据库连接
		private static final String URL="jdbc:mysql://localhost:3306/shujuku?useSSL=false";
		private static final String USERNAME="root";
		private static final String USERPWD="root";
			
    	public static Connection DBConnection(){
    		try {
				Class.forName(DRIVER);
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}
			Connection conn=null;
			try {
				conn = DriverManager.getConnection(URL, USERNAME, USERPWD);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return conn;
    	}
    	
 		//prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
 		public static PreparedStatement setParam(Connection conn,String sql,Object...param) throws SQLException{
 			PreparedStatement pstmt=null;
 			pstmt=conn.prepareStatement(sql);
 			for(int i=0;i<param.length;i++) {
 				pstmt.setObject(i+1, param[i]);
 			}
 			return pstmt;
 		}
 		
 		//ResultSet
 		public static int exeUpdate(PreparedStatement pstmt) throws SQLException  {
 			int result=0;
 			result=pstmt.executeUpdate();
 			return result;
 			
 		}
 		
 		//关闭连接
 		public static void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs) {
 			try {
 				if(pstmt!=null) {
 					pstmt.close();
 				}
 				if(conn!=null) {
 					conn.close();
 				}
 				if(rs!=null) {
 					rs.close();
 				}
 			} catch (SQLException e) {
 				e.printStackTrace();
 			}
 		}

        /*
        需要弄懂具体步骤:

        1.加载并注册数据库驱动程序

        2.建立连接,获取连接对象

        3.获取Statement对象

        4.执行SQL语句(这里是把执行SQL语句放在了测试类)

        5.操作结果集

        6.关闭连接,释放资源
        */
}

2.2Entity实体类:

这个包一共有四个类,对应的是数据库的四个表。(这里只贴出来其中的一个)

类里面:首先要定义和数据库表里面的相同属性(比如说消费者表就对应这里面的实体类,定义属性是相同的,xid , xname , xpassword)

其次重写toString方法和get、set方法(直接自动生成)

然后写的就是构造方法(包括无参构造方法和有参构造方法)主要是方便实现类里面需要获取的方法。

//这是数据库中customer表的实体类
public class customerEntity {


	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	//这里是customer表里的属性
	private int xid = 0;
	private String xname = null;
    private String xpassword = null;
    
    //可以写多个构造方法,但是参数数量或类型一定不能相同(叫构造方法的重载)
    //构造方法--无参
    public customerEntity() {
		super();
		this.xid = xid;
		this.xname = xname;
		this.xpassword = xpassword;
	}


    //有参--消费者注册登录
    public customerEntity(String xname1, String xpassword1) {
		// TODO Auto-generated constructor stub
    	super();
		this.xname = xname1;
		this.xpassword = xpassword1;
	}
    
    //有参--查询消费者
	public customerEntity(int xid, String xname, String xpassword) {
		// TODO Auto-generated constructor stub
		super();
		this.xid = xid;
		this.xname = xname;
		this.xpassword = xpassword;
	}



	//重写toString方法
    @Override
	public String toString() {
		return "customerEntity [xid=" + xid + ", xname=" + xname + ", xphone="  + xpassword
				+ "]";
	}

    //get、set方法
	public int getXid() {
		return xid;
	}


	public void setXid(int xid) {
		this.xid = xid;
	}


	public String getXname() {
		return xname;
	}


	public void setXname(String xname) {
		this.xname = xname;
	}


	public String getXpassword() {
		return xpassword;
	}


	public void setXpassword(String xpassword) {
		this.xpassword = xpassword;
	}
    

}

2.3Dao 接口类:

这里面放的是一个DishDao接口,主要是定义出主要功能(操作数据库,对表进行增删改查)就是需求分析里的功能。

接口定义了多个在实现类中需要实现的方法,不关心具体实现方法。所以可以在不改变原有接口情况下,随时进行增加或删除类。(使用接口可以使得程序变得灵活,让实例和实现类的耦合度降低)

像消费者和管理员的注册登录功能是返回布尔值boolean,查询消费者、管理员、菜品和订单都是返回一个集合list,菜品的添加、删除、购买以及订单的删除都是定义成方法void。

public interface DishDao {

	//消费者注册,返回是否注册成功的结果
	boolean customerRegister(customerEntity customer);

	//消费者登录,返回是否登录成功的结果
	boolean customerLogon(customerEntity customer);

	//员工注册,返回是否注册成功的结果
	boolean employeeRegister(employeeEntity employee);

	//员工登录,返回是否注册成功的结果
	boolean employeeLogon(employeeEntity employee);

	//查询消费者,查询全部消费者数据
	List<customerEntity> customerQuery();

	//查询管理员,查询全部管理员数据
	List<employeeEntity> employeeQuery();

	//菜品添加,传入一个新的菜品信息来添加数据
	void foodAdd(foodEntity food);

	//菜品删除,根据返回的菜品id来进行删除
	void foodDel(int cid);

	//菜品修改,传入一个新的菜品信息来替代要修改的数据
	void foodUpdate(foodEntity food);

	//菜品查询,查询全部菜品数据
	List<foodEntity> foodQuery();

	//菜品购买(是新增订单)
	void orderAdd(orderEntity order);

	//订单删除,根据返回的订单id来进行删除
	void orderDel(int did);

	//消费者订单查询,根据返回的消费者姓名来进行查询
	List<orderEntity> orderQuery1(String xname);

	//管理员订单查询,查询全部订单数据
	List<orderEntity> orderQuery2();
	
}

2.4Impl实现类:

这里是Dao接口的实现类。接口不能实例化,但我们可以使用接口的实现类来进行实例化。

如何进行实例化:

接口 实例 = new 接口的实现类();

实现类里面主要利用SQL语句来进行方法的实现。方法大同小异。

1.定义sql语句,不同的方法是使用不同的语句。

2.给占位符注入值(有多少个问号就注入多少个,参数是需要和SQL语句相匹配)

//定义一个类实现接口DishDao
public class DishDaoImpl implements DishDao{

	//实例化四个表
	customerEntity customer = new customerEntity();
	employeeEntity employee = new employeeEntity();
	foodEntity food = new foodEntity();
	orderEntity order = new orderEntity();
	
	//消费者注册
	@Override
	public boolean customerRegister(customerEntity customer) {
        //1.定义sql语句,这里是给消费者表插入数据(姓名和密码),编号设置的是自动增长所以不用插入
		String sql = "INSERT INTO customer(xname,xpassword) VALUES(?,?)";
		Connection conn = null;
        //PreparedStatement是Statement的子接口,这个接口里面的语句可以使用占位符“?”来代替(安全性强)
		PreparedStatement pstmt = null;
		if(true) {
			try {
				conn = DBUtil.DBConnection();
				pstmt = DBUtil.setParam(conn, sql);
                //2.给占位符注入值,使用参数与SQL类型相匹配的方法
				pstmt.setString(1,customer.getXname());
				pstmt.setString(2,customer.getXpassword());
                //这里是调用了DBUtil的exeUpdate()方法,这个方法里是executeUpdate()用在增删改
				int result = DBUtil.exeUpdate(pstmt);
				if (result > 0) {
					System.out.println("注册成功,自动登录");
				} else {
					System.out.println("注册失败");
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				DBUtil.closeAll(conn, pstmt, null);
			}	
			return true;
		}
		return false;
	}

	//消费者登录
	@Override
	public boolean customerLogon(customerEntity customer) {
        //1.定义sql语句 筛选查询
		String sql = "SELECT * from customer where xname= ? and xpassword = ? ";
		int flag=0;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
            //2.给占位符注入值
			pstmt.setString(1,customer.getXname());
			pstmt.setString(2,customer.getXpassword());
            //executeQuery()是用在查询,返回一个ResultSet对象
			rs = pstmt.executeQuery();
            //rs.next()是将游标移动到下一行,如果下一行没数据,则返回false
			if(rs.next()){
				flag = 1;
			}
			if(flag == 1){
				System.out.println("登录成功!");
				return true;
			}else{
				System.out.println("登录失败!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return false;
	}

	//员工注册,其实就是把员工的数据信息插入表中
	@Override
	public boolean employeeRegister(employeeEntity employee) {
		String sql = "INSERT INTO employee(yname,ypassword) VALUES(?,?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		{
			try {
				conn = DBUtil.DBConnection();
				pstmt = DBUtil.setParam(conn, sql);
				pstmt.setString(1,employee.getYname());
				pstmt.setString(2,employee.getYpassword());
				int result = DBUtil.exeUpdate(pstmt);
				if (result > 0) {
					System.out.println("注册成功,自动登录");
				} else {
					System.out.println("注册失败");
				}
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
				
			} finally {
				DBUtil.closeAll(conn, pstmt, null);
			}
			return true;
		}
	}

	//员工登录
	@Override
	public boolean employeeLogon(employeeEntity employee) {
		String sql = "SELECT * from employee where yname= ? and ypassword= ? ";
		int flag=0;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			pstmt.setString(1,employee.getYname());
			pstmt.setString(2,employee.getYpassword());
			//由于传值过来了,可以直接取到
			rs = pstmt.executeQuery();
			if(rs.next()){
				flag = 1;
			}
			if(flag == 1){
				System.out.println("登录成功!");
				return true;
			}else{
				System.out.println("登录失败!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return false;
	}
	
	//查询消费者
	@Override
	public List<customerEntity> customerQuery() {
		String sql = "SELECT * from customer";
		List<customerEntity> list = new ArrayList<customerEntity>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				int xid = rs.getInt(1);
				String xname = rs.getString("xname");
				String xpassword = rs.getString("xpassword");
				System.out.println("消费者编号:" + xid + " 消费者名字: "+ xname + " 消费者密码: " + xpassword);
				list.add(new customerEntity(xid, xname, xpassword));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return list;
	}
	
	//查询管理员
	@Override
	public List<employeeEntity> employeeQuery() {
		String sql = "SELECT * from employee ";
		List<employeeEntity> list = new ArrayList<employeeEntity>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				int yid = rs.getInt(1);
				String yname = rs.getString("yname");
				String ypassword = rs.getString("ypassword");
				System.out.println("管理员编号:" + yid + " 管理员名字: "+ yname + " 管理员密码: " + ypassword);
				list.add(new employeeEntity(yid, yname, ypassword));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return list;
	}

	//菜品添加
	@Override
	public void foodAdd(foodEntity food) {
		String sql = "INSERT INTO food(cname,cintro,cprice) VALUES(?,?,?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql, food.getCname(), food.getCintro(),food.getCprice());
			int result = DBUtil.exeUpdate(pstmt);
			if (result > 0) {
				System.out.println("插入成功");
			} else {
				System.out.println("插入失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, null);
		}
		
	}

	//菜品删除
	@Override
	public void foodDel(int cid) {
		String sql = "delete from food where cid=?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql, cid);
			int result = pstmt.executeUpdate();
			if (result > 0) {
				System.out.println("删除成功");
			} else {
				System.out.println("删除失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, null);
		}
		
	}

	//菜品修改
	@Override
	public void foodUpdate(foodEntity food) {
		String sql = "UPDATE food SET cname=?,cintro=?,cprice=? WHERE cid=?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			pstmt.setString(1, food.getCname());
			pstmt.setString(2, food.getCintro());
			pstmt.setString(3, food.getCprice());
			pstmt.setInt(4, food.getCid());
			int result = DBUtil.exeUpdate(pstmt);
			if (result > 0) {
				System.out.println("修改成功");
			} else {
				System.out.println("修改失败");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//菜品查询
	@Override
	public List<foodEntity> foodQuery() {
		String sql = "SELECT * from food";
		List<foodEntity> list = new ArrayList<foodEntity>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				int cid = rs.getInt(1);
				String cname = rs.getString("cname");
				String cintro = rs.getString("cintro");
				String cprice = rs.getString("cprice");
				System.out.println("菜品编号:" + cid + " 菜品名: "+ cname + " 介绍: " + cintro + " 价格: " + cprice+"元");
				list.add(new foodEntity(cid, cname, cintro, cprice));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return list;
	}

	//购买(新增订单)
	@Override
	public void orderAdd(orderEntity order) {
		String sql = "INSERT INTO `order`(dtime,dprice,xname) VALUES(?,?,?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			pstmt.setDate(1,new Date(System.currentTimeMillis()));
			pstmt.setString(2,order.getDprice());
			pstmt.setString(3,order.getXname());
			int result = DBUtil.exeUpdate(pstmt);
			if ( result == 1) {
				System.out.println("购买成功,生成订单");
			} else {
				System.out.println("购买失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, null);
			System.out.println(" 订单生成时间:"+order.getDtime()+"  消费总价:"+order.getDprice()+"元"+"  消费者姓名:"+order.getXname());
		}
	}
	
	//订单删除
	@Override
	public void orderDel(int did) {
		String sql = "delete from `order` where did=?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql, did);
			int result = pstmt.executeUpdate();
			if (result > 0) {
				System.out.println("删除成功");
			} else {
				System.out.println("删除失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt, null);
		}
		
	}
	
	//消费者订单查询
	@Override
	public List<orderEntity> orderQuery1(String xname) {
		String sql = "SELECT * from `order` where xname=?";
		int flag=0;
		List<orderEntity> list = new ArrayList<orderEntity>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			pstmt.setString(1,xname);
			//传过来
			rs = pstmt.executeQuery();
			if(rs.next()){
				flag = 1;
			}
			if(flag == 1){
				System.out.println("查询成功!");
				while (rs.next()) {
					int did = rs.getInt("did");
					Date dtime = rs.getDate("dtime");
					String dprice = rs.getString("dprice");
					xname = rs.getString("xname");
					System.out.println("订单编号:" + did + " 订单生成时间: "+ dtime + " 消费总价: " + dprice +"元"+ " 消费者姓名: " + xname);
					list.add(new orderEntity(did,dtime,dprice,xname));
				}
			}else{
				System.out.println("查询失败,您没有订单!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return list;
	}

	//管理员订单查询
	@Override
	public List<orderEntity> orderQuery2() {
		String sql = "SELECT * from `order`";
		List<orderEntity> list = new ArrayList<orderEntity>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBUtil.DBConnection();
			pstmt = DBUtil.setParam(conn, sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				int did = rs.getInt(1);
				Date dtime = rs.getDate("dtime");
				String dprice = rs.getString("dprice");
				String xname = rs.getString("xname");
				System.out.println("订单编号:" + did + " 订单生成时间: "+ dtime + " 消费总价: " + dprice +"元"+ " 消费者姓名: " + xname);
				list.add(new orderEntity(did,dtime,dprice,xname));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.closeAll(conn, pstmt,rs);
		}
		return list;
	}

}

2.5Test测试类

测试类里写的是命令行里运行的

public class TestMenu {
	
	//实例化
	private DishDao dd=new DishDaoImpl();
	private foodEntity menu=new foodEntity();
	private employeeEntity employee=new employeeEntity();
	private customerEntity customer=new customerEntity();
	private orderEntity order=new orderEntity();
	
	Scanner sc = new Scanner(System.in);
	String err=""; // 吸收错误输入
	public void menu() {

		do {
			System.out.println("----欢迎订餐管理系统----");
			System.out.println("1、员工");
			System.out.println("2、消费者");
			System.out.println("3、退出系统");
			System.out.println("请输入对应菜单序号:(输入1~3的数字)");
			int checkNum =0;
			if(sc.hasNextInt()) {	//判断是否输入格式错误
				checkNum = sc.nextInt();
			}else {
				System.out.println("输入错误!");
				err=sc.next();	//吸收错误
				menu();
			}
			switch (checkNum) {// 选择点击菜单
			case 1:
				int flag=0;
				boolean flagmana=employee();	//判断管理员是否登录成功
				while(flag==0) {
					if(flagmana==true) {
						System.out.println("请输入你要进行的操作:(请输入数字)");
						System.out.println("1.查看菜品");
						System.out.println("2.添加菜品");
						System.out.println("3.修改菜品");
						System.out.println("4.删除菜品");
						System.out.println("5.查看消费者");
						System.out.println("6.查看管理员");
						System.out.println("7.查看订单");
						System.out.println("8.返回主界面");
						int manachoose=0;
						if(sc.hasNextInt()) {	//判断是否输入格式错误
							manachoose=sc.nextInt();
						}else{
							System.out.println("输入错误,请输入数字!");
							err=sc.next();
							menu();	//返回菜单
						}
						switch(manachoose) {
						case 1:
							dishque();
							continue;	//此处不用break,可以让 管理员自主选择退出界面
						case 2:
							menuadd();
							continue;
						case 3:
							menuupd();
							continue;
						case 4:
							menudel();
							continue;
						case 5://消费者查询
							System.out.println("管理员的查询消费者功能");
							dd.customerQuery();
							break;
						case 6://管理员查询
							System.out.println("管理员的查询管理员功能");
							dd.employeeQuery();
							break;
						case 7://订单查询
							System.out.println("管理员的查询订单功能");
							dd.orderQuery2();
							break;
						case 8:
							flag=1;
							System.out.println("退出成功!");
							menu();
							break;
						default :
							System.out.println("输入错误!");
							break;
						}	
					}
					
				}
				
				break;
			case 2:
				int flag02=0;
				boolean userflag=false;	//判断用户是否登录成功
				customer();
				while(flag02==0) {
					if(userflag==false) {
						System.out.println("请输入你要进行的操作:(请输入数字)");
						System.out.println("1.查看菜品:");
						System.out.println("2.购买菜品:");
						System.out.println("3.查看所有订单:");
						System.out.println("4.返回主菜单:");
						int userchoose=0;
						if(sc.hasNextInt()) {	//判断是否输入格式错误
							userchoose=sc.nextInt();
						}else{
							System.out.println("输入错误,请输入数字!");
							err=sc.next();
							menu();	//登录失败,重新回到菜单界面
						}
						switch(userchoose) {
						case 1:
							dishque();
							continue;
						case 2:
							orderAdd();
							continue;
						case 3:
							orderque1();
							continue;
						case 4:
							flag=1;
							menu();
							System.out.println("退出成功!");
							break;
						default :
							System.out.println("输入错误!");
							break;
						}	
					}
				}
					break;
				case 3:
					System.out.println("退出成功!");
					System.exit(1);
					break;
				default:
					System.out.println("输入错误!!!");
					break;
				}
			} while (1==1);
				
	}

	// 管理员操作
	public boolean employee() {
		boolean flag=false;
		while(flag==false) {
			System.out.println("1.登录");
			System.out.println("2.注册");
			System.out.println("3.返回主菜单");
			int k=0;
			if(sc.hasNextInt()) {	//判断是否输入格式错误
				k=sc.nextInt();
			}else {
				System.out.println("输入错误,请输入数字!");
				err=sc.next();
				employee();
			}
			switch(k) {
			case 1:	//管理员登录功能
				System.out.println("管理员登录功能");
				System.out.println("请输入姓名:");
				String yname=sc.next();
				System.out.println("请输入密码(6位数):");
				String ypassword=sc.next();
				employeeEntity employee11=new employeeEntity(yname,ypassword);
				//这里是直接把两个值传到了employeeEntity里面
				if(flag=dd.employeeLogon(employee11)) {
					return true;
				}else{
				}
				break;
			case 2:	//管理员注册
				System.out.println("管理员注册功能");
				System.out.println("请输入姓名:");
				String yname1=sc.next();
				System.out.println("请输入密码:");
				String ypassword1=sc.next();
				employeeEntity employee111=new employeeEntity(yname1,ypassword1);
				if(flag=dd.employeeRegister(employee111)) {
					return true;
				}
				break;
			case 3:
				flag=true;
				menu();
				break;
			default:
				System.out.println("输入错误!!!");
				break;
			}
		}
		return false;
		
	}
	
	//用户操作
	public boolean customer() {
		boolean flag=false;
		while(flag==false) {
			System.out.println("1.登录");
			System.out.println("2.注册");
			System.out.println("3.返回主菜单");
			int k=0;
			if(sc.hasNextInt()) {	//判断是否使用数字输入
				k=sc.nextInt();
			}else {
				System.out.println("输入错误,请输入数字!");
				err=sc.next();
				customer();
			}
			switch(k) {
			case 1:
				System.out.println("消费者登录功能");
				System.out.println("请输入姓名:");
				String xname=sc.next();
				System.out.println("请输入密码(6位数):");
				String xpassword=sc.next();
				customerEntity customer11=new customerEntity(xname,xpassword);
				if(flag=dd.customerLogon(customer11)) {
					return true;
				}
				break;
			case 2:
				System.out.println("消费者注册功能");
				System.out.println("请输入姓名:");
				String xname1=sc.next();
				System.out.println("请输入密码(6位数):");
				String xpassword1=sc.next();
				customerEntity customer111=new customerEntity(xname1,xpassword1);
				if(flag=dd.customerRegister(customer111)) {
					return true;
				}
				break;
			case 3:
				flag=true;
				customer();
				break;
			default:
				System.out.println("输入错误!!!");
				break;
			}	
		}	
		return false;
	}
	
	//查询菜品
	public void dishque() {
		dd.foodQuery();
	}
	
	//添加菜品
	public void menuadd() {
		System.out.println("请输入菜品名:");
		String cname=sc.next();
		System.out.println("请输入介绍:(30字以内)");
		String cintro=sc.next();
		System.out.println("请输入价格:(不超过500元)");
		String cprice=sc.next();
		foodEntity menu=new foodEntity(cname,cintro,cprice);
		dd.foodAdd(menu);
	}
	
	//修改菜品
	public void menuupd() {
		System.out.println("请输入你要修改的菜品编号:(请输入数字)");
		int cid=sc.nextInt();
		System.out.println("请输入菜品名:");
		String cname=sc.next();
		System.out.println("请输入介绍:");
		String cintro=sc.next();
		System.out.println("请输入价格:");
		String cprice=sc.next();
		foodEntity menu=new foodEntity(cid,cname,cintro,cprice);
		dd.foodUpdate(menu);
	}
	
	//菜品删除
	public void menudel() {
		System.out.println("请输入你要删除的菜品编号:(请输入数字)");
		int cid=sc.nextInt();
		dd.foodDel(cid);
	}
	
	//购买菜品(其实是新增订单)
	public void orderAdd() {
	        Date dtime = new Date(System.currentTimeMillis());
			int flag=0;	//判断是否结束购买
			int k=0;
			int id1,id2=0;
			String price1 = null;
			int price2,price3 = 0;
			while(flag==0){
				System.out.println("请输入您要购买的菜品id:(请输入数字)");
				id1=sc.nextInt()-1;//
				price1 = dd.foodQuery().get(id1).getCprice();//这个是一个菜品的价格
				int i=Integer.parseInt(price1);//我们需要通过菜品id来获取菜品的价格
				System.out.println("请输入您要购买的菜品数量:(请输入数字)");
				id2=sc.nextInt();
				price2 = i*id2;//这个是乘上数量的菜品的价格
				price3 = price3+price2;//总价
				System.out.println("是否继续购买?(1.是  2.否)");
				k=sc.nextInt();
				String dprice=Integer.toString(price3);
				if(k==2) {
					flag=1;
					System.out.println("请输入购买人姓名,进行购买");
					String xname = sc.next();
					System.out.println("结束购买!");
//					System.out.println("总价为:"+dprice+"元");
					orderEntity order11=new orderEntity( dtime, dprice,xname);
					dd.orderAdd(order11);
				}
			}
	}
	
	//消费者查询订单
	public void orderque1() {
		System.out.println("请输入您的名字,进行查询");
		String xname =sc.next();
		orderEntity order = new orderEntity(xname);
		//把值传过去
		dd.orderQuery1(xname);
	}
	
	//管理员查询订单
	public void orderque2() {
		dd.orderQuery2();
	}
	
}

2.6Gui类

Gui类里写的是在GUI里运行的。

这里贴的是首页(一运行进去的样子),一共有三个按钮:管理员、消费者、退出系统。

给三个按钮都添加监听器,当点击之后做出反应。比如点击管理员会跳转到管理员的板块,也就是利用实例化来跳转页面。

//首页
public class Main {
	public static void createAndShow() {
	
		//创建窗体容器
		JFrame jf1 = new JFrame("小型订餐系统");
		jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf1.setLayout(new FlowLayout(FlowLayout.CENTER));//流式布局
		jf1.setVisible(true);
		
		//按钮
		JButton button1=new JButton("管理员");
		JButton button2=new JButton("消费者");
		JButton button3=new JButton("退出系统");
        
		//设置可见
        jf1.setBounds(800,350,400,400);
        //添加按钮
        jf1.add(button1);
        jf1.add(button2);
        jf1.add(button3);
        
        //给管理员按钮注册鼠标监听器!!
        button1.addMouseListener(new MouseListener() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				//如果按的是左键
				if(arg0.getButton() == MouseEvent.BUTTON1){
                //如果想要跳转页面,要先新建了界面的类,然后通过构造函数对界面进行初始化,然后其他地方用到的话,就直接新建一个实例就好了。(这里就是实例化)
					employeeFrame ee = new employeeFrame();
				}else {
					System.out.println("你点了右键");
				}
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		});
        
        //给消费者按钮注册鼠标监听器!!
        button2.addMouseListener(new MouseListener() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				//如果按的是左键
				if(arg0.getButton() == MouseEvent.BUTTON1){
					customerFrame cc = new customerFrame();
				}else {
					System.out.println("你点了右键");
				}
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		});
        
        //给退出系统按钮注册监听器!!
        button3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
	}

	public Main(){
		createAndShow();
	}
	
	public static void main(String[] args) {
		createAndShow();

	}
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值