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

MySQL数据库课程设计——订餐系统(MySQL数据库+Qt5用户界面+python)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
73500
发表于 2024-9-3 23:55:42 | 显示全部楼层 |阅读模式
目录一、系统定义二、需求分析三、系统设计四、详细设计五、参考文献一、系统定义订餐系统是一种基于网络技术的在线点餐平台,旨在为用户提供方便快捷的订餐服务。该系统主要包括用户登录、用户管理、菜单管理、订单管理、支付管理、评价管理等功能模块,用户可以通过系统浏览菜品、下单、支付、评价等操作,商家可以通过系统管理菜品、接收订单、配送等操作。(#系统采用python连接MySQL数据库的形式,前端使用QTDesigner等技术,后端使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_idvarchar(10)PK员工号e_namevarchar(10)Index员工姓名e_pwdvarchar(100)Y登陆密码e_positiontinyint(1)职位(ad:管理人员yg:员工 cs:厨师)e_statebit(1)在职情况顾客信息表 Tomer *字段名类型NULL其他备注T_idvarchar(10)PK顾客编号T_namevarchar(50)Index顾客姓名T_gendervarchar(10)顾客性别T_telvarchar(20)顾客电话T_consumedecimal顾客消费金额菜单信息表 Menu *字段名类型NULL其他备注M_idbigint(8)PK菜品编号M_namevarchar(30)Index菜品名称M_classvarchar(6)类别M_pricefloat菜品价格M_qtyint(5)Index库存量点菜记录表 Menus_Oder*字段名类型NULL其他备注O_idbigint(8)Index,FK订单编号M_idbigint(8)Index,FK菜品编号M_nameVarchar(20)菜品名称M_numberint(10)菜品数量订单信息表 Orders*字段名类型NULL其他备注O_idbigint(8)PK订单编号T_idbigint(8)Index,FK顾客编号O_pricefloat消费金额O_priceafterfloat折扣金额O_timedatetime下单时间销售记录表 Sell *字段名类型NULL其他备注S_idbigint(10)PK销售编号M_idbigint(8)Index,FK菜品编号S_pricedecimal销售价格S_qtyint(5)销售数量S_timevarchar(19)销售日期优惠规则表 Discount *字段名类型NULL其他备注D_xfjefloat消费金额D_zkfloat折扣(三)子模块划分及功能概述图4 系统功能划分系统设置两种权限:用户和店内人员(店内人员又划分为员工、厨师和管理人员)。登陆后,可以进入不同的功能模块,在登陆界面可以修改登陆密码。子模块划分如下:        1.用户登录用户登录界面拥有登录、注册功能,用户登录后便可进入菜单页面进行线上订餐,菜品选择完并进行结账后便可进行订单的查看。图5用户登录、点餐流程        2.店员登录店内人员登录,分为厨师,员工和管理人员,需输入相应账号和密码,管理人员账户只有唯一一个。图6店员登录流程        3.厨师操作厨师操作界面可接受订单并查看订餐菜品和菜谱来进行制作,菜品制作完后可更新完成状态,将信息传送给员工并提醒上菜。图7厨师操作流程        4.查询修改菜单(需要权限:管理人员)管理人员拥有对菜单查询和修改的权限,进入管理人员界面后即可对该功能进行操作。图8查询修改菜单流程        5.查询订单信息(需要权限:管理人员)管理人员拥有对订单进行查询的权限。图9查询流程        6.管理人员变动(需要权限:管理人员)管理人员拥有对店员变动和信息修改的权限。图10管理人员变动流程        7.修改优惠规则(需要权限:管理人员)管理人员拥有对优惠规则进行修改的功能。先对优惠规则表进行查询,再对表中信息进行修改。图11修改优惠规则流程        8.查询销售记录(需要权限:管理人员)管理人员拥有对销售记录查询的权限。图12查询销售记录流程        9.管理顾客信息(需要权限:管理人员)管理人员拥有对顾客信息进行查询和修改的权限。图13管理顾客信息流程        其他附加功能:        修改密码,重新登陆        订单的生成与查询        各种形式的查询        公告的显示与编辑        折扣信息公告自动读入四、详细设计(一)开发平台及工具开发工具:PythonDBMS:MySQLServer建模工具: Qt Designer第三方库:PyMySQL,PyQT5说明:为了在Windows平台上更好地进行数据处理和管理,选择了适中的MySQLServer作为数据库管理系统。同时,为了提升Python做界面的体验,采用了QtDesigner进行可视化的快速开发和设计。在开发过程中,使用PyMySQL和PyQt5等第三方库,加快了开发进程。(二)存储过程作为数据库应用系统,数据的一致性需要得到保证,通过单纯的手工编码方式,工作烦琐,容易出错,而且不易于扩展。采用DBMS的外码约束,Unique约束,DEFAUT默认值和AUTO_INCREMENT自增来解决这一问题。在查询效率方面,连接查询的过程用存储过程实现。对菜单、订单、订单详情的外码没有强制级联删除和级联修改。查询公告信息的存储过程defget_notice(self):    db=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db='osystem')    cursor=db.cursor()    sql="SELECTnotice_contentFROMnotice"    cursor.execute(sql)    result=cursor.fetchone()    db.close()    ifresult: #如果结果不为空        notice_text=result[0] #获取公告内容        discounts=self.get_discounts() #获取折扣信息        notice_with_discounts=f"{notice_text}\n\n折扣信息:\n{discounts}" #将折扣信息添加到公告内容中        returnnotice_with_discounts    else:        return""查询订单信息的存储过程defrefresh_order(self):    globaluserid_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*fromorderswherecustomer_id='{customer_id}'"    cursor.execute(sql)    result=cursor.fetchall()    forrowinresult:        qrow=[]        foriteminrow:            qrow.append(QStandardItem(str(item)))查询菜单信息的存储过程defrefresh_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*FROMmenu"    cursor.execute(sql)    result=cursor.fetchall()    forrowinresult:        qrow=[]        foriteminrow:            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()查询顾客信息的存储过程defrefresh_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*FROMgk_personal_info"    cursor.execute(sql)    result=cursor.fetchall()    forrowinresult:        qrow=[]        foriteminrow:            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()查询折扣信息的存储过程defload_discounts(self):    db=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db='osystem')    cursor=db.cursor()    sql="SELECT*FROMdiscount"    cursor.execute(sql)    result=cursor.fetchall()    self.ui.tableWidget.setRowCount(len(result))    forrow_idx,(amount,discount)inenumerate(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*FROMdiscount"cursor.execute(sql)result=cursor.fetchall()db.close()2.main文件中包含三个大类,LoginWindow类、GKMainWindow类和AdMainWindow类,每个类即是一个界面,其中包含界面中所需要的各种功能的实现。3.在需要的地方采用多线程。        菜品出售后库存量自动更新        后台监控菜品库存        选择菜品时根据菜品数量、种类进行实时的总价和折扣价的计算与显示(四)界面设计登陆界面:顾客订餐主界面:管理员主界面:五、参考文献1.《Python灵活可扩展的架构》[中]吴浩麟著,电子工业出版社2.《数据库系统概论(第三版)》萨师煊等高等教育出版社3.《基于Qt的GUI开发》刘均著,机械工业出版社4.《PythonGUI编程教程》(第二版)[荷]BoudewijnRempt著,刘红艳等译,人民邮电出版社5.《MySQL必知必会》[美]BenForta著,刘洋等译,人民邮电出版社演示视频:MySQL数据库课设——订餐系统演示视频(Python+Qt5)_哔哩哔哩_bilibili
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 05:58 , Processed in 0.477349 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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