当前位置: 代码网 > it编程>前端脚本>Python > MySQL数据库课程设计——订餐系统(MySQL数据库+Qt5用户界面+python)

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

2024年08月03日 • Python •我要评论
该系统主要包括用户登录、用户管理、菜单管理、订单管理等功能模块,用户可以通过系统浏览菜品、下单、支付等操作,商家可以通过系统管理菜品、接收订单、配送等操作。main文件中包含三个大类,LoginWindow类、GKMainWindow类和AdMainWindow类,每个类即是一个界面,其中包含界面中所需要的各种功能的实现。

目录

一、系统定义

二、需求分析

三、系统设计

四、详细设计

五、参考文献


一、系统定义

订餐系统是一种基于网络技术的在线点餐平台,旨在为用户提供方便快捷的订餐服务。该系统主要包括用户登录、用户管理、菜单管理、订单管理、支付管理、评价管理等功能模块,用户可以通过系统浏览菜品、下单、支付、评价等操作,商家可以通过系统管理菜品、接收订单、配送等操作。(#系统采用python连接mysql数据库的形式,前端使用qt designer等技术,后端使python语言,数据库采用mysql。)系统具有安全、稳定、高效、易用等特点,可以满足用户对订餐服务的需求。

二、需求分析

  • 系统综合需求
    1. 用户需求
      1. 易用性:订餐系统的操作应该简单易懂,用户可以快速完成订餐、支付等操作。
      2. 安全性:用户的个人信息应该得到保护,系统应该采用安全的加密技术,防止用户信息被窃取。
      3. 多样性:系统应该支持多种支付方式,满足不同用户的需求。
      4. 反馈机制:用户可以对订餐体验进行评价和反馈,系统应该及时处理用户的反馈意见。
    2. 商家需求
      1. 管理功能:商家可以对菜品、订单、库存等进行管理,方便商家进行经营管理。
      2. 数据分析功能:系统应该提供数据分析功能,帮助商家了解用户的消费习惯和需求,为商家提供决策依据。
      3. 营销功能:系统应该提供多种营销功能,如优惠券、满减等,吸引用户进行消费。
      4. 订单管理:商家可以通过系统对订单进行管理,方便商家进行配送和服务。
    3. 技术需求
      1. 稳定性:系统应该具备高稳定性,能够保证系统的正常运行。
      2. 安全性:系统应该采用安全的技术手段,保护用户的个人信息和交易安全。
      3. 扩展性:系统应该具备良好的扩展性,能够满足未来的业务发展需求。
      4. 兼容性:系统应该具备良好的兼容性,能够适应不同的操作系统和浏览器。
  • 系统逻辑模型

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 管理顾客信息流程

        其他附加功能:

        修改密码,重新登陆

        订单的生成与查询

        各种形式的查询

        公告的显示与编辑

        折扣信息公告自动读入

四、详细设计

(一) 开发平台及工具

  1. 开发工具: python
  2. dbms:mysql server
  3. 建模工具: qt designer
  4. 第三方库: 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著,刘洋等译,人民邮电出版社

演示视频:mysql数据库课设——订餐系统演示视频(python+qt5)_哔哩哔哩_bilibili

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com