找回密码
 会员注册
查看: 38|回复: 0

mysql数据库课程设计——点餐系统(python连接实现可视化,含源码,含报告)

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-3 23:52:33 | 显示全部楼层 |阅读模式
附:完整的sql和python文件都单独放在了主页,附录部分也有源码,大家自行选择查看,欢迎留言提出疑问。sql文件下载链接:https://download.csdn.net/download/m0_63975371/87094012python文件下载链接:https://download.csdn.net/download/m0_63975371/87093891一、设计题目与内容通过了解餐饮行业的特点和实际情况,从分析饭店的基本情况入手,结合要实现的功能,对系统的可行性进行分析,为提高其可行性,故做了以下数据分析,用以完成饭店点餐系统二、系统分析与设计2.1数据需求餐桌数据包括餐桌号、座位数、状态(空/有人)。餐厅存储有顾客信息,员工信息。菜品信息有菜品编号、名称、类别、价格等。具体数据需求如下:2.1.1下订单阶段需要的数据: 顾客信息:包括顾客编号。 订单信息:包括订单编号、消费时间。 餐桌信息:包括编号、可容人数、使用状态等 员工信息:包括员工工号。2.1.2点菜阶段需要的数据: 订单信息:订单编号 菜品信息:包括菜品编号、菜品名称、菜品数量等。2.1.3结账阶段需要的数据: 订单信息:包括订单编号、顾客编号 菜品信息:包括菜品编号、菜品名称、菜品数量等。 员工信息:包括员工工号 折扣信息:包括消费金额、折扣数 2.1.4员工管理需要的数据: 员工档案:包括工号、姓名、性别、工资2.1.5顾客管理需要的数据:顾客档案:包括编号、姓名、性别等。2.1.6消费记录管理需要的数据有:消费信息:订单编号、消费金额、折扣后金额、结账时间2.2事务需求 2.2.1数据录入 录入顾客信息、录入餐桌信息、录入员工信息、录入菜品信息 2.2.2数据更新/删除 更新/删除餐桌信息、更新/删除菜谱菜品信息、更新/删除员工信息、更新/删除顾客信息、更新/删除订单菜品信息 2.2.3数据查询 查询可用餐桌信息、查询在售菜品信息、查询订单信息、查询顾客点菜信息、查询员工信息、查询顾客消费信息 三、数据库概念设计3.1菜谱(Menus)E-R图3.2顾客(Tomer)E-R图3.3餐桌(FoodTable)E-R图3.4员工(Worke)E-R图3.5订单(Oder)E-R图3.6消费记录(Sales_bill)E-R图3.7折扣规则(Discount_rules)E-R图3.8全局E-R图四、数据库逻辑设计4.1转换规则一个实体型转换成一个关系模型。实体的属性就是关系的属性,实体的码就是关系的码。实体型间的联系常有如下不同的情况:a.一个1:1联系可以转换为一个独立的关系模式,也可以任意一端对应的关系模式合并。b.一个1:n联系可以转换成一个独立的关系模式,也可以与n端对应的关系模式合并。c.一个m:n联系转换成一个关系模式。d.3或3个以上实体间的一个多联系可以转换成一个关系模式。e.具有相同码的关系模式可合并。4.1.1关系模型:(红色为主码)菜谱(菜品编号,菜品名称,菜品类别,菜品价格)顾客(顾客编号,姓名,性别,年龄,联系方式)餐桌(餐桌号,座位数,使用状态)员工(工号,姓名,性别,年龄,工资)订单(订单编号,顾客编号,消费时间,餐桌编号,服务员编号)菜谱_订单(订单编号,菜品编号,菜品名称,菜品数量)消费记录(订单号,消费金额,折扣后金额,账单时间)折扣规则(消费金额,折扣)4.2建立基本表4.2.1菜谱(Menus)createtableMenus(M_idvarchar(10)primarykey,M_namevarchar(20),M_classvarchar(10),M_pricefloat);4.2.2顾客(Tomer)createtaleTomer(T_idvarchar(10)primarykey, T_namevarchar(10)notnullT_rsexvarchar(4)check(T_sex='男'orT_sex='女'),T_phonevarchar(20));4.2.3餐桌(FoodTable)createtableFoodtable(Cz_idvarchar(10)primarykey,Cz_numberintnotnull,Cz_ztvarchar(6)check(Cz_zt="空"orCz_zt="有人"));4.2.4员工(Worke)createtableWorke (W_idvarchar(10)primarykey,W_namevarchar(10), W_sexvarchar(4)check(W_sex='男'orW_sex='女'),W_ageint,W_salaryfloat);4.2.5订单(Oder)createtableMenus_Oder(O_idvarchar(10),M_idvarchar(10),M_namevarchar(10),M_number intnotnull,Primarykey(M_id,O_id),foreignkey(M_id)referencesMenus(M_id),foreignkey(O_id)referencesOder(O_id));4.2.6菜谱_订单(Menus_Oder)createtableMenus_Oder(O_idvarchar(10),M_idvarchar(10),M_namevarchar(10),M_number intnotnull,Primarykey(M_id,O_id),foreignkey(M_id)referencesMenus(M_id),foreignkey(O_id)referencesOder(O_id));4.2.7折扣规则(Discount_rules)createtableDiscount_rules (Jefloatprimarykey, Zkfloat);4.2.8消费账单(Sales_bill)createtableSales_bill(O_idvarchar(10)primarykey, S_pricefloat,S_priceafterfloat,timedatetime,foreignkey(O_id)referencesOder(O_id));4.3管理基本表有时候应用环境和应用需求的改变,我们需要修改已经建立好的基本表的模式结构或者更新已经插入的数据。mysql语句采用altertable语句修改基本表的结构,利用drop子句删除基本表,利用update更新已经插入的数据。altertable语句以修改基本表的名字,增加新列或者增加新的完整性约束条件,修改原有列的定义,包括修改列名和数据类型等。drop子句用于删除指定的完整性约束条件。UPDATE用于把插入表的数据更新改变。因为在建立表时将Tomer表中的T_sex错误的录为T_rsex,因此用altertable表名change旧字段名新字段名新字段类型。五、系统实现访问数据库5.1数据查询5.1.1Foodtable表5.2.1menus表5.1.3员工表(worke)5.1.4消费记录(Sales_bill)5.1.5顾客(Tomer)5.1.6订单(Oder)5.1.7折扣规则(Discount_rules)5.1.8点菜(menus_oder)5.2数据更新将员工表(worker)中的01号员工W_age数据项改为20.原来的表:改过之后5.3python连接数据库对数据库进行测试:基础点餐系统:5.4数据库的维护数据库维护包括许多内容,包括用户权限的设置、数据库完整性维护、数据库的备份、表的备份、日志备份等。5.4.1备份数据库完全备份:这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。事务日志备份:事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。差异备份:也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。文件备份:数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。附录(sql源码):1.sql代码--------------------------------Recordsofdiscount_rules------------------------------INSERTINTO`discount_rules`VALUES('100','9.9');INSERTINTO`discount_rules`VALUES('200','9.5');INSERTINTO`discount_rules`VALUES('300','9.2');INSERTINTO`discount_rules`VALUES('500','9');INSERTINTO`discount_rules`VALUES('1000','8.5');--------------------------------Tablestructureforfoodtable------------------------------DROPTABLEIFEXISTS`foodtable`;CREATETABLE`foodtable`( `Cz_id`varchar(10)NOTNULL,  `Cz_number`int(11)NOTNULL,  `Cz_zt`varchar(6)DEFAULTNULL, RIMARYKEY(`Cz_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsoffoodtable------------------------------INSERTINTO`foodtable`VALUES('1','6','有人');INSERTINTO`foodtable`VALUES('2','6','空');INSERTINTO`foodtable`VALUES('3','6','空');INSERTINTO`foodtable`VALUES('4','6','空');INSERTINTO`foodtable`VALUES('5','8','空');INSERTINTO`foodtable`VALUES('6','8','有人');INSERTINTO`foodtable`VALUES('7','8','有人');INSERTINTO`foodtable`VALUES('8','8','空');INSERTINTO`foodtable`VALUES('9','10','有人');--------------------------------Tablestructureformenus------------------------------DROPTABLEIFEXISTS`menus`;CREATETABLE`menus`( `M_id`varchar(10)NOTNULL, `M_name`varchar(20)DEFAULTNULL, `M_class`varchar(10)DEFAULTNULL, `M_price`floatDEFAULTNULL, RIMARYKEY(`M_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofmenus------------------------------INSERTINTO`menus`VALUES('001','小鸡炖蘑菇','荤素搭配','49.99');INSERTINTO`menus`VALUES('002','黄焖鸡','荤','12');INSERTINTO`menus`VALUES('003','混沌','荤','10');INSERTINTO`menus`VALUES('004','混沌','素','8');INSERTINTO`menus`VALUES('005','兰州拉面','素','10');INSERTINTO`menus`VALUES('006','鸭血粉丝','荤素搭配','9.99');INSERTINTO`menus`VALUES('007','小酥肉','荤','11.99');INSERTINTO`menus`VALUES('008','大盘鸡','荤','55.99');INSERTINTO`menus`VALUES('009','烤鱼','荤','20.99');INSERTINTO`menus`VALUES('010','花生米','小吃','5.99');INSERTINTO`menus`VALUES('011','啤酒','饮品','4.5');INSERTINTO`menus`VALUES('012','腐竹','素','10');INSERTINTO`menus`VALUES('013','拍黄瓜','素','5.5');--------------------------------Tablestructureformenus_oder------------------------------DROPTABLEIFEXISTS`menus_oder`;CREATETABLE`menus_oder`( `O_id`varchar(10)NOTNULL, `M_id`varchar(10)NOTNULL, `M_name`varchar(10)DEFAULTNULL, `M_number`int(11)NOTNULL, RIMARYKEY(`M_id`,`O_id`), KEY`O_id`(`O_id`), CONSTRAINT`menus_oder_ibfk_1`FOREIGNKEY(`M_id`)REFERENCES`menus`(`M_id`), CONSTRAINT`menus_oder_ibfk_2`FOREIGNKEY(`O_id`)REFERENCES`oder`(`O_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofmenus_oder------------------------------INSERTINTO`menus_oder`VALUES('000001','001','小鸡炖蘑菇','20');INSERTINTO`menus_oder`VALUES('000020','001','兰州拉面','23');INSERTINTO`menus_oder`VALUES('000002','002','黄焖鸡','24');INSERTINTO`menus_oder`VALUES('000003','003','混沌','25');INSERTINTO`menus_oder`VALUES('000007','003','混沌','40');INSERTINTO`menus_oder`VALUES('000013','003','小鸡炖蘑菇','25');INSERTINTO`menus_oder`VALUES('000015','003','腐竹','38');INSERTINTO`menus_oder`VALUES('000018','003','鸭血粉丝','50');INSERTINTO`menus_oder`VALUES('000004','004','混沌','23');INSERTINTO`menus_oder`VALUES('000014','004','兰州拉面','23');INSERTINTO`menus_oder`VALUES('000005','005','兰州拉面','28');INSERTINTO`menus_oder`VALUES('000008','005','烤鱼','50');INSERTINTO`menus_oder`VALUES('000016','005','兰州拉面','40');INSERTINTO`menus_oder`VALUES('000005','006','鸭血粉丝','38');INSERTINTO`menus_oder`VALUES('000010','006','兰州拉面','23');INSERTINTO`menus_oder`VALUES('000014','006','花生米','28');INSERTINTO`menus_oder`VALUES('000017','006','混沌','40');INSERTINTO`menus_oder`VALUES('000006','007','小酥肉','40');INSERTINTO`menus_oder`VALUES('000009','008','烤鱼','46');INSERTINTO`menus_oder`VALUES('000012','008','黄焖鸡','24');INSERTINTO`menus_oder`VALUES('000019','008','拌黄瓜','46');INSERTINTO`menus_oder`VALUES('000011','009','鸭血粉丝','20');--------------------------------Tablestructureforoder------------------------------DROPTABLEIFEXISTS`oder`;CREATETABLE`oder`( `O_id`varchar(10)NOTNULL, `T_id`varchar(10)NOTNULL, `time`datetimeNOTNULL, `Cz_id`varchar(10)NOTNULL, `W_id`varchar(10)NOTNULL, RIMARYKEY(`O_id`), KEY`T_id`(`T_id`), KEY`Cz_id`(`Cz_id`), KEY`W_id`(`W_id`), CONSTRAINT`oder_ibfk_1`FOREIGNKEY(`T_id`)REFERENCES`tomer`(`T_id`), CONSTRAINT`oder_ibfk_2`FOREIGNKEY(`Cz_id`)REFERENCES`foodtable`(`Cz_id`), CONSTRAINT`oder_ibfk_3`FOREIGNKEY(`W_id`)REFERENCES`worke`(`W_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofoder------------------------------INSERTINTO`oder`VALUES('000001','00001','2020-06-0109:30:45','1','01');INSERTINTO`oder`VALUES('000002','00002','2021-06-2216:15:31','2','02');INSERTINTO`oder`VALUES('000003','00003','2021-06-2216:15:57','3','03');INSERTINTO`oder`VALUES('000004','00004','2021-06-2216:16:19','4','04');INSERTINTO`oder`VALUES('000005','00005','2021-06-2216:16:40','5','05');INSERTINTO`oder`VALUES('000006','00006','2021-06-2216:17:01','6','06');INSERTINTO`oder`VALUES('000007','00007','2021-06-2216:17:23','7','07');INSERTINTO`oder`VALUES('000008','00008','2021-06-2216:17:47','8','08');INSERTINTO`oder`VALUES('000009','00009','2021-06-2216:18:07','9','09');INSERTINTO`oder`VALUES('000010','00010','2021-06-2216:18:30','1','10');INSERTINTO`oder`VALUES('000011','00011','2021-06-2216:19:08','2','01');INSERTINTO`oder`VALUES('000012','00012','2021-06-2216:19:28','3','02');INSERTINTO`oder`VALUES('000013','00013','2021-06-2216:19:53','4','03');INSERTINTO`oder`VALUES('000014','00014','2021-06-2216:20:17','5','04');INSERTINTO`oder`VALUES('000015','00015','2021-06-2216:20:40','6','05');INSERTINTO`oder`VALUES('000016','00016','2021-06-2216:21:08','7','06');INSERTINTO`oder`VALUES('000017','00017','2021-06-2216:21:33','8','07');INSERTINTO`oder`VALUES('000018','00018','2021-06-2216:21:54','9','08');INSERTINTO`oder`VALUES('000019','00019','2021-06-2216:22:12','1','09');INSERTINTO`oder`VALUES('000020','00020','2021-06-2216:22:34','2','10');--------------------------------Tablestructureforsales_bill------------------------------DROPTABLEIFEXISTS`sales_bill`;CREATETABLE`sales_bill`( `O_id`varchar(10)NOTNULL, `S_price`floatDEFAULTNULL, `S_priceafter`floatDEFAULTNULL, `time`datetimeDEFAULTNULL, RIMARYKEY(`O_id`), CONSTRAINT`sales_bill_ibfk_1`FOREIGNKEY(`O_id`)REFERENCES`oder`(`O_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofsales_bill------------------------------INSERTINTO`sales_bill`VALUES('000001','100.07','99.0693','2021-06-2216:42:22');INSERTINTO`sales_bill`VALUES('000002','120.25','119.048','2021-06-2216:42:24');INSERTINTO`sales_bill`VALUES('000003','132.52','131.195','2021-06-2216:42:28');INSERTINTO`sales_bill`VALUES('000004','154.42','152.876','2021-06-2216:42:31');INSERTINTO`sales_bill`VALUES('000005','2546.2','2164.27','2021-06-2216:42:35');INSERTINTO`sales_bill`VALUES('000006','487.45','448.454','2021-06-2216:42:38');INSERTINTO`sales_bill`VALUES('000007','165.23','163.578','2021-06-2216:42:41');INSERTINTO`sales_bill`VALUES('000008','235.55','223.773','2021-06-2216:42:44');INSERTINTO`sales_bill`VALUES('000009','345.26','317.639','2021-06-2216:42:47');INSERTINTO`sales_bill`VALUES('000010','256.42','243.599','2021-06-2216:42:50');INSERTINTO`sales_bill`VALUES('000011','354.42','326.006','2021-06-2216:42:52');INSERTINTO`sales_bill`VALUES('000012','145.23','143.778','2021-06-2216:42:54');INSERTINTO`sales_bill`VALUES('000013','200.12','190.114','2021-06-2216:42:57');INSERTINTO`sales_bill`VALUES('000014','300.14','276.129','2021-06-2216:42:59');INSERTINTO`sales_bill`VALUES('000015','1000.23','850.195','2021-06-2216:43:01');INSERTINTO`sales_bill`VALUES('000016','154.15','152.609','2021-06-2216:43:03');INSERTINTO`sales_bill`VALUES('000017','1120.23','952.192','2021-06-2216:43:05');INSERTINTO`sales_bill`VALUES('000018','1523.45','1294.93','2021-06-2216:43:08');INSERTINTO`sales_bill`VALUES('000019','123.23','121.998','2021-06-2216:43:11');INSERTINTO`sales_bill`VALUES('000020','154.5','326.14','2021-06-2216:43:14');--------------------------------Tablestructurefortomer------------------------------DROPTABLEIFEXISTS`tomer`;CREATETABLE`tomer`( `T_id`varchar(10)NOTNULL, `T_name`varchar(10)NOTNULL, `T_rsex`varchar(4)DEFAULTNULL, `T_phone`varchar(20)DEFAULTNULL, RIMARYKEY(`T_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsoftomer------------------------------INSERTINTO`tomer`VALUES('00001','李一','男','12345678910');INSERTINTO`tomer`VALUES('00002','李二','男','11345678910');INSERTINTO`tomer`VALUES('00003','李三','男','12145678910');INSERTINTO`tomer`VALUES('00004','李四','男','12315678910');INSERTINTO`tomer`VALUES('00005','李五','男','12341678910');INSERTINTO`tomer`VALUES('00006','李六','男','12345178910');INSERTINTO`tomer`VALUES('00007','李七','女','15936053010');INSERTINTO`tomer`VALUES('00008','李八','女','12345671910');INSERTINTO`tomer`VALUES('00009','李九','女','12345678110');INSERTINTO`tomer`VALUES('00010','李十','男','12345678900');INSERTINTO`tomer`VALUES('00011','田一','男','12345678911');INSERTINTO`tomer`VALUES('00012','田二','男','10345678910');INSERTINTO`tomer`VALUES('00013','田三','男','12045678910');INSERTINTO`tomer`VALUES('00014','田四','男','12305678910');INSERTINTO`tomer`VALUES('00015','田五','女','12340678910');INSERTINTO`tomer`VALUES('00016','田六','女','12345078910');INSERTINTO`tomer`VALUES('00017','田七','女','12345608910');INSERTINTO`tomer`VALUES('00018','田八','女','12345670910');INSERTINTO`tomer`VALUES('00019','田九','男','12345678010');INSERTINTO`tomer`VALUES('00020','暴徒','男','12345678920');--------------------------------Tablestructureforworke------------------------------DROPTABLEIFEXISTS`worke`;CREATETABLE`worke`( `W_id`varchar(10)NOTNULL, `W_name`varchar(10)DEFAULTNULL, `W_sex`varchar(4)DEFAULTNULL, `W_age`int(11)DEFAULTNULL, `W_salary`floatDEFAULTNULL, RIMARYKEY(`W_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;--------------------------------Recordsofworke------------------------------INSERTINTO`worke`VALUES('01','张一','男','21','5200');INSERTINTO`worke`VALUES('02','张二','男','21','5100');INSERTINTO`worke`VALUES('03','张三','男','22','5000');INSERTINTO`worke`VALUES('04','张四','男','22','4900');INSERTINTO`worke`VALUES('05','张五','男','22','4800');INSERTINTO`worke`VALUES('06','张六','女','21','5200');INSERTINTO`worke`VALUES('07','张七','女','20','5100');INSERTINTO`worke`VALUES('08','张八','女','20','5000');INSERTINTO`worke`VALUES('09','张九','女','20','5000');INSERTINTO`worke`VALUES('10','不可以色色','女','20','5000');--------------------------------Viewstructurefortomer_t------------------------------DROPVIEWIFEXISTS`tomer_t`;CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`tomer_t`ASselect`tomer`.`T_id`AS`T_id`,`tomer`.`T_name`AS`T_name`,`tomer`.`T_rsex`AS`T_rsex`,`tomer`.`T_phone`AS`T_phone`from`tomer`where(`tomer`.`T_rsex`='女');2.python代码#主菜单defmain():   #while死循环   whileTrue:       #打印主菜单       print('------------欢迎使用点餐系统------------\n本软件提供如下功能:')       lis=['1.查看菜单','2.查看顾客信息','3.查看员工信息','4.退出系统']       foriinlis:           print(i)       #接收用户输入       a=int(input('请输入数字选择一项功能:'))       ifa==1:           print('开始点餐')           order_food()           continue       elifa==2:           print('正在打印报表')           print_work()           continue       elifa==3:           print('正在存储报表')           people()           continue       elifa==4:           print('成功退出系统')           #退出循环           break       else:           print('输入错误请重新输入!!')           continuedeforder_food():   importpymysql#打开数据库连接   db=pymysql.connect(host="localhost",user="root",password="123456",database="ks")   #使用cursor()方法获取操作游标   cursor=db.cursor()   #sql语句   sql="select*frommenus_oder"   try:       #执行sql语句       cursor.execute(sql)       #查询中的一个操作,获取所有记录       result=cursor.fetchall()       #打印表数据       forrowinresult:           O_id=row[0]           M_id=row[1]           M_name=row[2]           M_number=row[3]           print(O_id,M_id,M_name,M_number)   except:       print("Error!")defprint_work():   importpymysql   db=pymysql.connect(host="localhost",user="root",password="123456",database="ks")   cursor=db.cursor()   sql="select*fromtomer"   try:       cursor.execute(sql)       result=cursor.fetchall()       forrowinresult:           T_id=row[0]           T_name=row[1]           T_rxex=row[2]           T_phone=row[3]           print(T_id,T_name,T_rxex,T_phone)   except:       print("Error!")defpeople():   import pymysql   db=pymysql.connect(host="localhost",user="root",password="123456",database="ks")   cursor=db.cursor()   sql="select*fromworke"   try:       cursor.execute(sql)       result=cursor.fetchall()       forrowinresult:           W_id=row[0]           W_name=row[1]           W_sex=row[2]           W_age=row[3]           W_salary=row[4]           print(W_id,W_name,W_sex,W_age,W_salary)   except:       print("Error!")if__name__=='__main__':   main()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-13 06:33 , Processed in 0.480623 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表