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

目录

一、系统定义

二、需求分析

三、系统设计

四、详细设计

五、参考文献


一、系统定义

订餐系统是一种基于网络技术的在线点餐平台,旨在为用户提供方便快捷的订餐服务。该系统主要包括用户登录、用户管理、菜单管理、订单管理、支付管理、评价管理等功能模块,用户可以通过系统浏览菜品、下单、支付、评价等操作,商家可以通过系统管理菜品、接收订单、配送等操作。(#系统采用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/796410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云服务器重置密码后,xshell远程连接不上,重新启用密码登录方式

云服务器重置密码后 ,xshell连接出现不能使用密码登录 解决方案:以下来自阿里云重新启用密码登录方式帮助文档 为轻量应用服务器创建密钥且重启服务器使密钥生效后,服务器会自动禁止使用root用户及密码登录。如果您需要重新启用密码登录方式&…

比特币交易繁忙的一天

早晨:市场开盘与准备工作 6:00 AM - 全球市场监测 交易员们早早起床,开始监测全球市场动态,尤其是亚洲市场的动向。通过查看新闻、分析报告和市场数据,了解可能影响比特币价格的因素。 7:00 AM - 团队会议 召开晨会,讨论当天的交易策略。团队分析前一天的交易情况,评…

OpenGL笔记五之VBO与VAO

OpenGL笔记五之VBO与VAO 总结自bilibili赵新政老师的教程 code review! 文章目录 OpenGL笔记五之VBO与VAO1.VBO2.VAO3.VBO与VAO对比 1.VBO 代码 void prepareVBO() {//1 创建一个vbo *******还没有真正分配显存*********GLuint vbo 0;GL_CALL(glGenBuffers(1, &vbo))…

适合创业公司使用的wordpress主题

对于创业公司来说,‌选择一个适合的WordPress主题至关重要,‌它不仅能够提升公司网站的外观和用户体验,‌还能帮助优化搜索引擎排名,‌从而吸引更多的潜在客户。‌以下是一些推荐的WordPress主题,‌特别适合创业公司使…

人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作与代码详解。在上一节课中的OpenCV基础操作我们了解到OpenCV是一个开源的计算机视觉软件库。它提供了各种视觉处理函数,并支持多种编程语言&…

传感器标定(三)激光雷达外参标定(lidar2ins)

一、数据采集 1、LiDAR 传感器的 LiDAR PCD 数据 2、来自 IMU 传感器的姿势文件 3、手动测量传感器之间外部参数初始值并写入的 JSON 文件 二、下载标定工具 //总的git地址: https://github.com/PJLab-ADG/SensorsCalibration git地址: https://githu…

扩散基生物打印:打造多材料组织构建的新篇章

生物打印技术正在经历快速发展,而扩散基生物打印作为一种新兴策略,为制造更复杂和功能化的组织构建物提供了新的可能性。这种方法利用扩散原理,通过在不同区域之间扩散酶、交联剂或可交联聚合物来促进交联,从而实现多种材料的集成…

【论文阅读笔记】ASPS: Augmented Segment Anything Model for Polyp Segmentation

1.论文介绍 ASPS: Augmented Segment Anything Model for Polyp Segmentation ASPS:用于息肉分割的扩展SAM模型 2024年 arxiv Paper Code 2.摘要 息肉分割在结直肠癌诊断中起着至关重要的作用。最近,Segment Anything Model(SAM)的出现利用其在大规模…

软件缺陷简介

缺陷种类 遗漏,指规定或预期的需求为体现在产品种错误,需求是明确的,在实现阶段未将需求的功能正确实现冗余,需求说明文档中未涉及的需求被实现了不满意,用户对产品的实现不满意也成为缺陷 缺陷等级划分 致命&#…

【测试】软件测试报告模板(直接套用)

软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解…

PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南

小编特将PostgreSQL证书申报个税退税流程,编辑成文,供大家申报参考哦~ 1.申报专项附加扣除 第一步:打开个人所得税APP,选择“专项附加扣除填报”: 第二步:“扣除年度”选择您要申报的年度,并…

Java之封装、继承,多态

文章目录 Java 之封装、继承,多态一、封装1.封装的基本介绍2. 封装的实现3. 将构造器与 setXxx 方法结合 二、继承1. 继承的基本介绍2. 基本语法3.继承的深入理解4. 继承的本质分析(内存存在形式)5. 子类创建的内存布局6. super 关键字6.1 su…

Altium Designer软件绘制一个stm32最小系统的电路原理图

文章目录 一、安装软件二、新建工程 一、安装软件 教程: Altium Designer 24下载安装教程,免费汉化版,保姆级教程,附安装包 二、新建工程 1.新建项目 2.新建原理图 3.和上面一样的方法新建PCB文件 文件->原理图,这样文件…

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。 通俗来说,敏捷开发是一个软件开发流程,是一个采用了迭代方法的开发流程 简单来说,迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…

组合模式(大话设计模式)C/C++版本

组合模式 C #include <iostream> #include <list> using namespace std; // 公司类... 抽象或者接口 class Company { public:Company(string name){this->name name;}virtual void Add(Company *c) 0; // 增加virtual void Remove(Company *c) 0; // 移…

docker inspect 如何提取容器的ip和端口 网络信息?

目录 通过原生Linux命令过滤找到IP 通过jq工具找到IP 使用docker -f 的过滤&#xff08;模板&#xff09; 查找端口映射信息 查看容器内部细节 docker inspect 容器ID或容器名 通过原生Linux命令过滤找到IP 通过jq工具找到IP jq 是一个轻量级且灵活的命令行工具&#xf…

几何距离与函数距离:解锁数据空间中的奥秘

几何距离&#xff1a;直观的空间度量 几何距离&#xff0c;顾名思义&#xff0c;是我们在几何学中熟悉的距离概念&#xff0c;如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离&#xff1a;最为人熟知的几何距…

基于springboot+vue+uniapp的机电公司管理信息系统

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Coze:如何使用团队空间?

你好&#xff0c;我是三桥君 团队空间&#xff0c;是一个允许我们组建团队并共享机器人、插件等资源的功能。 好的&#xff0c;让我们开始创建一个团队。我们将这个团队命名为“三桥君AI”&#xff0c;并在描述中也填写“这里是关于“三桥君AI”团队的描述”。点击确定后&…

【代码随想录】【算法训练营】【第67天】 [卡码97]小明逛公园 [卡码127]骑士的攻击

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 67&#xff0c;周六&#xff0c;ding~ [卡码97] 小明逛公园 题目描述 卡码97 小明逛公园 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 Floyd 算法 [卡码…