首页 > Python资料 博客日记
MySQL数据库课程设计——订餐系统(MySQL数据库+Qt5用户界面+python)
2024-07-01 20:00:04Python资料围观160次
目录
一、系统定义
订餐系统是一种基于网络技术的在线点餐平台,旨在为用户提供方便快捷的订餐服务。该系统主要包括用户登录、用户管理、菜单管理、订单管理、支付管理、评价管理等功能模块,用户可以通过系统浏览菜品、下单、支付、评价等操作,商家可以通过系统管理菜品、接收订单、配送等操作。(#系统采用python连接MySQL数据库的形式,前端使用QT Designer等技术,后端使python语言,数据库采用MySQL。)系统具有安全、稳定、高效、易用等特点,可以满足用户对订餐服务的需求。
二、需求分析
- 系统综合需求
- 用户需求
- 易用性:订餐系统的操作应该简单易懂,用户可以快速完成订餐、支付等操作。
- 安全性:用户的个人信息应该得到保护,系统应该采用安全的加密技术,防止用户信息被窃取。
- 多样性:系统应该支持多种支付方式,满足不同用户的需求。
- 反馈机制:用户可以对订餐体验进行评价和反馈,系统应该及时处理用户的反馈意见。
- 商家需求
- 管理功能:商家可以对菜品、订单、库存等进行管理,方便商家进行经营管理。
- 数据分析功能:系统应该提供数据分析功能,帮助商家了解用户的消费习惯和需求,为商家提供决策依据。
- 营销功能:系统应该提供多种营销功能,如优惠券、满减等,吸引用户进行消费。
- 订单管理:商家可以通过系统对订单进行管理,方便商家进行配送和服务。
- 技术需求
- 稳定性:系统应该具备高稳定性,能够保证系统的正常运行。
- 安全性:系统应该采用安全的技术手段,保护用户的个人信息和交易安全。
- 扩展性:系统应该具备良好的扩展性,能够满足未来的业务发展需求。
- 兼容性:系统应该具备良好的兼容性,能够适应不同的操作系统和浏览器。
- 用户需求
- 系统逻辑模型
1.数据流图:
图1 系统数据流图
2.数据字典
表1 系统数据字典
编号 | 属性名 | 类型 | 解释 | 备注 |
1 | 员工号 | varchar(10) | 无 | 5位数字 |
2 | 员工姓名 | varchar(10) | 无 | 无 |
3 | 登陆密码 | varchar(100) | 无 | 8位密码 |
4 | 职位 | tinyint(1) | 0:管理人员 1:员工 2:厨师 | 无 |
5 | 在职情况 | bit(1) | 是否在职(0/1) | 无 |
6 | 顾客编号 | varchar(10) | 无 | 6位编号 |
7 | 顾客姓名 | varchar(20) | 无 | 无 |
8 | 顾客性别 | varchar(5) | 无 | 无 |
9 | 顾客电话 | varchar(15) | 无 | 无 |
10 | 顾客消费金额 | decimal | 无 | 无 |
11 | 菜品编号 | bigint(8) | 无 | 4位编号 |
12 | 菜品名称 | varchar(30) | 无 | 无 |
13 | 类别 | varchar(6) | 无 | 无 |
14 | 菜品价格 | float | 无 | 无 |
15 | 库存量 | int(5) | 无 | 无 |
16 | 订单编号 | bigint(8) | 无 | 来自订单表的编号 |
17 | 菜品编号 | bigint(8) | 无 | 来自菜单表的编号 |
18 | 菜品名称 | Varchar(20) | 无 | 无 |
19 | 菜品数量 | int(10) | 无 | 无 |
20 | 订单编号 | bigint(8) | 无 | 4位编号 |
21 | 顾客编号 | bigint(8) | 无 | 来自顾客表的编号 |
22 | 消费金额 | float | 无 | 无 |
23 | 折扣金额 | float | 通过折扣表计算后的金额 | 无 |
24 | 下单时间 | datetime | 无 | 无 |
25 | 销售编号 | bigint(10) | 无 | 6位编号 |
26 | 菜品编号 | bigint(8) | 无 | 来自菜单表的编号 |
27 | 销售价格 | decimal | 无 | 无 |
28 | 销售数量 | int(5) | 无 | 无 |
29 | 销售日期 | varchar(19) | 无 | 无 |
30 | 消费金额 | float | 无 | 无 |
31 | 折扣 | float | 无 | 无 |
三、系统设计
(一)概念结构设计
图2 E-R图
(二)逻辑结构设计
员工信息表 Employee * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
e_id | varchar(10) | PK | 员工号 | |
e_name | varchar(10) | Index | 员工姓名 | |
e_pwd | varchar(100) | Y | 登陆密码 | |
e_position | tinyint(1) | 职位(ad:管理人员 yg:员工 cs:厨师) | ||
e_state | bit(1) | 在职情况 |
顾客信息表 Tomer * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
T_id | varchar(10) | PK | 顾客编号 | |
T_name | varchar(50) | Index | 顾客姓名 | |
T_gender | varchar(10) | 顾客性别 | ||
T_tel | varchar(20) | 顾客电话 | ||
T_consume | decimal | 顾客消费金额 |
菜单信息表 Menu * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
M_id | bigint(8) | PK | 菜品编号 | |
M_name | varchar(30) | Index | 菜品名称 | |
M_class | varchar(6) | 类别 | ||
M_price | float | 菜品价格 | ||
M_qty | int(5) | Index | 库存量 |
点菜记录表 Menus_Oder * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
O_id | bigint(8) | Index,FK | 订单编号 | |
M_id | bigint(8) | Index,FK | 菜品编号 | |
M_name | Varchar(20) | 菜品名称 | ||
M_number | int(10) | 菜品数量 |
订单信息表 Orders * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
O_id | bigint(8) | PK | 订单编号 | |
T_id | bigint(8) | Index,FK | 顾客编号 | |
O_price | float | 消费金额 | ||
O_priceafter | float | 折扣金额 | ||
O_time | datetime | 下单时间 |
销售记录表 Sell * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
S_id | bigint(10) | PK | 销售编号 | |
M_id | bigint(8) | Index,FK | 菜品编号 | |
S_price | decimal | 销售价格 | ||
S_qty | int(5) | 销售数量 | ||
S_time | varchar(19) | 销售日期 |
优惠规则表 Discount * | ||||
字段名 | 类型 | NULL | 其他 | 备注 |
D_xfje | float | 消费金额 | ||
D_zk | float | 折扣 |
(三)子模块划分及功能概述
图4 系统功能划分
系统设置两种权限:用户和店内人员(店内人员又划分为员工、厨师和管理人员)。登陆后,可以进入不同的功能模块,在登陆界面可以修改登陆密码。子模块划分如下:
1.用户登录
用户登录界面拥有登录、注册功能,用户登录后便可进入菜单页面进行
线上订餐,菜品选择完并进行结账后便可进行订单的查看。
图5 用户登录、点餐流程
2.店员登录
店内人员登录,分为厨师,员工和管理人员,需输入相应账号和密码,管理人员账户只有唯一一个。
图6 店员登录流程
3.厨师操作
厨师操作界面可接受订单并查看订餐菜品和菜谱来进行制作,菜品制作完后可更新完成状态,将信息传送给员工并提醒上菜。
图7 厨师操作流程
4.查询修改菜单(需要权限:管理人员)
管理人员拥有对菜单查询和修改的权限,进入管理人员界面后即可对该功能进行操作。
图8 查询修改菜单流程
5.查询订单信息(需要权限:管理人员)
管理人员拥有对订单进行查询的权限。
图9 查询流程
6.管理人员变动(需要权限:管理人员)
管理人员拥有对店员变动和信息修改的权限。
图10 管理人员变动流程
7.修改优惠规则(需要权限:管理人员)
管理人员拥有对优惠规则进行修改的功能。先对优惠规则表进行查询,再对表中信息进行修改。
图11 修改优惠规则流程
8.查询销售记录(需要权限:管理人员)
管理人员拥有对销售记录查询的权限。
图12 查询销售记录流程
9.管理顾客信息(需要权限:管理人员)
管理人员拥有对顾客信息进行查询和修改的权限。
图13 管理顾客信息流程
其他附加功能:
修改密码,重新登陆
订单的生成与查询
各种形式的查询
公告的显示与编辑
折扣信息公告自动读入
四、详细设计
(一) 开发平台及工具
- 开发工具: Python
- DBMS:MySQL Server
- 建模工具: Qt Designer
- 第三方库: PyMySQL, PyQT5
说明:为了在Windows平台上更好地进行数据处理和管理,选择了适中的MySQL Server作为数据库管理系统。同时,为了提升Python做界面的体验,采用了Qt Designer进行可视化的快速开发和设计。在开发过程中,使用PyMySQL和PyQt5等第三方库,加快了开发进程。
(二) 存储过程
作为数据库应用系统,数据的一致性需要得到保证,通过单纯的手工编码方式,工作烦琐,容易出错,而且不易于扩展。采用DBMS的外码约束,Unique约束,DEFAUT默认值和AUTO_INCREMENT自增来解决这一问题。
在查询效率方面,连接查询的过程用存储过程实现。
对菜单、订单、订单详情的外码没有强制级联删除和级联修改。
查询公告信息的存储过程
def get_notice(self):
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
sql = "SELECT notice_content FROM notice"
cursor.execute(sql)
result = cursor.fetchone()
db.close()
if result: # 如果结果不为空
notice_text = result[0] # 获取公告内容
discounts = self.get_discounts() # 获取折扣信息
notice_with_discounts = f"{notice_text}\n\n折扣信息:\n{discounts}" # 将折扣信息添加到公告内容中
return notice_with_discounts
else:
return ""
查询订单信息的存储过程
def refresh_order(self):
global userid_now
model = QStandardItemModel()
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
customer_id = userid_now
sql = f"select * from orders where customer_id='{customer_id}'"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
qrow = []
for item in row:
qrow.append(QStandardItem(str(item)))
查询菜单信息的存储过程
def refresh_menu(self):
model = QStandardItemModel()
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
sql = "SELECT * FROM menu"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
qrow = []
for item in row:
qrow.append(QStandardItem(str(item)))
model.appendRow(qrow)
model.setHorizontalHeaderLabels(["菜品编号", "菜品名称", "类别", "菜价", "库存量"])
self.ui.tableView_3.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.ui.tableView_3.setModel(model)
db.close()
查询顾客信息的存储过程
def refresh_customers(self):
model = QStandardItemModel()
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
sql = "SELECT * FROM gk_personal_info"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
qrow = []
for item in row:
qrow.append(QStandardItem(str(item)))
# 添加一个按钮
qrow.append(QStandardItem('修改密码'))
model.appendRow(qrow)
model.setHorizontalHeaderLabels(['ID', '账户', '姓名', '性别', '电话', ''])
self.ui.tableView_2.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.ui.tableView_2.setModel(model)
db.close()
查询折扣信息的存储过程
def load_discounts(self):
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
sql = "SELECT * FROM discount"
cursor.execute(sql)
result = cursor.fetchall()
self.ui.tableWidget.setRowCount(len(result))
for row_idx, (amount, discount) in enumerate(result):
amount_item = QtWidgets.QTableWidgetItem(str(amount))
discount_item = QtWidgets.QTableWidgetItem(str(discount))
amount_item.setTextAlignment(Qt.AlignCenter)
discount_item.setTextAlignment(Qt.AlignCenter)
self.ui.tableWidget.setItem(row_idx, 0, amount_item)
self.ui.tableWidget.setItem(row_idx, 1, discount_item)
db.close()
(三)编码设计
系统采用pycharm应用程序以方便开发,pycharm对常用API做了很好的封装。每个对话框对应一个类,每个数据库表对应一个类。根据程序需要,自己再一次做了封装。
运用qtDesighner程序对界面进行设计在使用qt工具将ui文件转换为py文件,在一个主体函数中实现对各个界面的连接。
1. 连接数据库格式
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='osystem')
cursor = db.cursor()
sql = "SELECT * FROM discount"
cursor.execute(sql)
result = cursor.fetchall()
db.close()
2. main文件中包含三个大类,LoginWindow类、GKMainWindow类和AdMainWindow类,每个类即是一个界面,其中包含界面中所需要的各种功能的实现。
3. 在需要的地方采用多线程。
菜品出售后库存量自动更新
后台监控菜品库存
选择菜品时根据菜品数量、种类进行实时的总价和折扣价的计算与显示
(四) 界面设计
登陆界面:
顾客订餐主界面:
管理员主界面:
五、参考文献
1. 《Python灵活可扩展的架构》[中] 吴浩麟 著,电子工业出版社
2. 《数据库系统概论(第三版)》 萨师煊等 高等教育出版社
3. 《基于Qt的GUI开发》 刘均 著,机械工业出版社
4. 《Python GUI编程教程》(第二版) [荷] Boudewijn Rempt著,刘红艳等译,人民邮电出版社
5. 《MySQL必知必会》[美] Ben Forta著,刘洋等译,人民邮电出版社
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程