基于python Django 实现外卖点菜管理系统 计算机毕设

简介: 基于python Django 实现外卖点菜管理系统 计算机毕设

问题描述: 随着网络的迅速发展,越来越多的人开始接受甚至时依赖了网络营业的这种交易形式,传统的点菜模式不仅浪费时间,效率低下,而且特别耗费成本与人力,因此不少商家开始使用网上点菜系统。网上点菜系统是一种可以自主选择、个性化、便捷化、特色化的点餐模式,它的大力推广使用为餐厅节约了成本,同时也解决了消费者在传统点菜时存在的不少麻烦,这使得网上点菜系统迅速占领市场。


2、设计要求

该系统设计实现时主要从以下三个角色方面入手进行,每个角色具有不同功能:

  1. 用户端功能:
  • 顾客进入系统浏览整体菜单;
  • 顾客根据菜单进行选菜下单点菜;
  • 顾客通过核对订单进行结账。
  1. 后台管理功能:


  • 管理员可以进入后台系统;
  • 管理员可以查询系统内所有存在订单;
  • 管理员有权对所有在职员工信息进行操作。
  1. 后厨系统功能:
  • 订单保存在数据库中,并传入后厨系统;
  • 后厨界面同步显示所有正在进行的订单;
  • 后厨对订单具有查询,接单等操作功能。


三.课程设计说明书


1 需求分析

(1) 数据需求

点菜管理信息系统需要完成功能主要有:

餐厅基础信息:餐厅提供基本的菜谱等信息并且能对所有信息进行增、删、改、查等操作;


顾客点菜信息:用户登录系统后,在相应的页面浏览菜谱信息,根据自己的用餐需求下单,使得该信息显示在系统订单信息列表中,在结账时通过订单信息进行结账;


职工管理信息:管理员可以登录该系统对已经注册的职工个人信息进行增、删、改、查等操作;


(2) 事务需求

  1. 在餐厅基础信息部分,要求:
  • 展示整体菜谱,主要由菜品编号、菜名、数量、价格等组成;
  • 菜谱上所有信息管理员都有权进行更新修改。


  1. 在顾客点菜信息部分,要求:
  • 通过自主选择桌号进入点菜;
  • 浏览所有的菜谱信息;
  • 通过自主选择菜品,生成订单;
  • 核对订单信息及订单状态,完成结账。
  1. 在职工管理信息部分,要求:


  • 在职员工通过身份信息注册、登陆系统;
  • 职工有权对自己的职工信息进行增、删、改等操作;
  • 管理员可以对所有职工信息进行查询及操作。


(3) 关系模式


  1. 菜品类(菜品编号,菜品名称)
  2. 菜品(菜品编号,菜品种类编号,菜名,制作时间,数量,价格)
  3. 订单(订单编号,餐桌编号,菜品总数,消费金额,下单时间,备注信息,支付时间,负责职工编号,支付状态)
  1. 订单明细(编号,订单编号,菜品编号,菜品数量,消费金额,备注信息,订单状态,接单时间,完成时间)
  2. 职工(职工编号,个人 ID,姓名,性别,出生日期,联系方式,联系地址)
  3. 餐桌信息(餐桌编号,餐桌名字,负责职工编号)

(4) 数据字典


  1. 菜品类表


image.png


  1. 菜品表


image.png


  1. 订单表


image.png

  1. 订单明细表


image.png


  1. 职工表


image.png


  1. 餐桌信息表


image.png


2 概要设计

(1) 实体图及 E-R 图


19a64b6b04271070d2771767fc90e5b7.png

a7e41e63f75adaf4ab9aa5cd2a776bb2.png


(2) 数据流图

1c25fe1b9e54e8e130dd239256e8b27b.png


9e4ce8cdba3c3db650a96977e576f62c.png


3 逻辑设计


8dd60c9a077717724dfb6f67af6c6fd3.png


4 数据库建立

(1) 创建数据库

Django 中默认使用 SQLite 作为数据库,也可将其换为 MySQL、Oracle 等,仅需提供连接地址、用户名及密码。

ccf8db58d04b1f9c36ea2f0ce13435bc.png


(2) 菜品类表建立


CREATE TABLE OrderSystem_foodtype
(
  ID  INTEGER   NOT NULL  PRIMARY KEY AUTOINCREMENT,
  name VARCHAR (20) NOT NULL
);

(3) 菜品表建立

CREATE TABLE OrderSystem_food
(
    title       VARCHAR (20) NOT NULL,
    amount      INTEGER      NOT NULL,
    price       REAL         NOT NULL,
    ID          INTEGER      NOT NULL  PRIMARY KEY AUTOINCREMENT,
  foodType_id INTEGER      NOT NULL  REFERENCES 
    OrderSystem_foodtype (ID)  DEFERRABLE INITIALLY DEFERRED,
    cost_time   INTEGER      NOT NULL
);

(4) 订单表建立


CREATE TABLE OrderSystem_order(
    ID          INTEGER  NOT NULL  PRIMARY KEY AUTOINCREMENT,
    table_id    INTEGER  NOT NULL,
    food_amount INTEGER  NOT NULL,
    total_price REAL     NOT NULL,
    staff_id    INTEGER  NOT NULL  REFERENCES
    OrderSystem_staff (ID) DEFERRABLE INITIALLY DEFERRED,
    is_pay      BOOL     NOT NULL,
    create_time DATETIME NOT NULL,
  pay_time    DATETIME,
  comment     VARCHAR (50) NOT NULL
);


(5) 订单明细表建立

CREATE TABLE OrderSystem_orderitem 
(
    id              INTEGER      NOT NULL  PRIMARY KEY AUTOINCREMENT,
    amount          INTEGER      NOT NULL,
    sum_price       REAL         NOT NULL,
    orderID_id      INTEGER      NOT NULL  REFERENCES
    OrderSystem_order (ID) DEFERRABLE INITIALLY DEFERRED,
    end_cook_time   TIME,
    start_cook_time TIME,
    status          INTEGER      NOT NULL,
    comment         VARCHAR (50) NOT NULL,
  foodID_id       INTEGER      REFERENCES 
  OrderSystem_food (ID) DEFERRABLE INITIALLY DEFERRED
);


(6) 职工信息表建立

CREATE TABLE OrderSystem_staff 
(
    ID        INTEGER      NOT NULL  PRIMARY KEY AUTOINCREMENT,
    citizenID VARCHAR (20) NOT NULL,
    name      VARCHAR (10) NOT NULL,
    gender    VARCHAR (5)  NOT NULL,
    born_date DATE,
    phone     VARCHAR (11) NOT NULL,
    address   VARCHAR (50) NOT NULL
);


(7) 餐桌信息表建立


CREATE TABLE OrderSystem_staff_table 
(
  ID    INTEGER   NOT NULL PRIMARY KEY,
  name   VARCHAR (20) NOT NULL,
  staff_id INTEGER   NOT NULL  REFERENCES
    OrderSystem_staff (ID) DEFERRABLE INITIALLY DEFERRED
);


5 系统实现

(1)系统功能模块图


c915a3b6071ab0db2fcb26a675f4fdce.png

(2)前台开发平台的选择

  • Web 前端使用 jQuery、Bootstrap4 等进行实现;
  • 使用 Python + Django 作为后端实现;
  • 使用 SQLite 进行数据库实现。


(3)设计与实现

  1. 展示所有菜品类及菜品,顾客可以自主选择餐桌及菜品来进行下单


4997732e9d35de4e3fc3e358022ee4cf.png


  1. 生成订单明细,顾客可以对自己的订单进行查询核对


48d99232e00eaa31dcd2eafcb94db459.png


  1. 管理员及职工注册,然后通过登陆进入后台管理系统
  2. 后台管理系统同步显示订单及当前订单所有状态,后厨完成订单时选择上菜,管理界面自动刷新提示服务员进行上菜服务,餐桌负责人后台可自行切换


147fae0f4a21893637861d4a4c5c5708.png

  1. 点击结账时可以先核对订单,然后再进行对订单的批量支付或者全部支付


31251c460f24676959cbed45e45c73e2.png


  1. 后台管理系统显示所有订单以及订单支付状态,红色为未支付订单,绿色为已支付订单,点击订单号可进入对应订单的详情页


06bab15beb877b980a4f1cc9562516f6.png


  1. 管理员对菜品类、菜品、餐桌信息、员工信息等进行更新操作,即增、删、改等


dc03bb11d7c6ee69569d10b4113b245e.png


  1. 进如后厨系统,后厨对订单信息进行选择接单,完成后通知上菜等操作,订单明细显示 4 种状态(等待后厨接单,后厨已接单,等待上菜,上菜完成)



230fc8c2eb9a0c10e3f2ff08703f96f9.png


6 编程与调试总结


在前端遇到的最多的问题就是对齐,在 JavaScript 以及 jQuery 的操作中,经常会发生无法绑定的情况,后来知道是因为我们的页面是动态加载,一次绑定无法将新的 HTML 元素也进行绑定,最后统一将绑定的操作放在了动态加载之后,而管理和后厨页面中的一些元素需要隔 10 秒、30 秒刷新餐桌信息和上菜信息的就需要在刷新的函数后面再进行绑定。


用 Django 写后端还是比较容易的,但是因为不是很熟悉这个框架,所以在 url 的路由设置上没有很清晰的分界,将管理与顾客点菜子系统放在了同一个 app 中,虽然便于处理数据,但是导致一个 app 的内容很多,不便于调试时查找,使得代码可读性变低,但好在 Django 框架将后端分为了页面视图 views、页面模板 templates 和数据关系模型 models 等,代码的耦合度不至于很高。


在做管理页面时遇到了数据库关系表中的外键在被参照表中数据被删除时参照表需不需要级联删除的问题,因为一开始将其设计成了 SET_NULL,但是实际调试时发现数据库报错,将 SQL 语句放在数据库中执行发现无法将其设为 NULL,最后查阅了相关问题的资料后将其设计成可以为空。


7 课程设计心得体会

这次的数据库课程设计只有一个星期的时间,而我们需要将在数据库课堂上和实验中学习到的知识运用到实际的管理系统中,还需要设计相应的界面,这着实不是一件容易的事情。


确定选择“点菜管理系统”这个题目后,我们通过查找相关资料以及自己对点菜系统的理解确定了需要做的几个主要功能:点菜、结账、查账等,然后一点一点拓展到现在的所有功能。功能的完善大多是在开发过程中因为实际需要而发现问题并解决的,还有的是为了更人性化更适合用户角度使用而添加的,相应的数据库表单也是在开发过程中逐步完善。


但是这样的开发是有问题的,比如订单的几个数据项前前后后改了很多次,因为生成订单需要前后端沟通,每次修改也就会耗费许多时间来进行调试,而如果一开始就能详细地对订单表进行描述,在后期不需要添加新的主属性,那么一定会减少很多可压缩的调试时间。


在开发技术方面,这次尝试了 Python 的 Web 框架 Django 作为后端的 Web 应用,后端的数据库使用了 Django 推荐的 SQLite ,虽然不适合实际生产环境,但是便于上手,也使得我们能够在系统的其他地方进行一点点细节上的打磨,前端使用了 Bootstrap4 + jQuery 来开发。


在开发前期,许多时间用在了前端的细节优化上,通过 Bootstrap 将界面统一风格,也因此将管理页面中订单和上菜提醒直观表现出来,不需要进入二级菜单就能将上菜信息传达上来。在后期逐渐将数据存储所需的约束与触发操作完善,使得各个关系合理存在。


这次数据库课设对我们来说是一个综合能力的考验,也是将数据库系统与所学知识的结合,通过这次课设,我对数据库设计能力有了很大提高,也学会了在应用中引入数据库、维护数据库,不过所体现的问题也是以后需要不断学习、实践的地方。


8 参考文献

[1] 范长青. 智能点菜系统设计开发与引用[J].微型电脑应用. 2019-06-14 [2] 石爱好. 基于 SQL Server 2012 数据库的应用及研究[J].电脑迷. 2017(03) [3] 单立娟. 数据库技术在移动点菜系统上的应用[J].数字技术与应用. 2016-08-15 [4] 于卓立,刘沙沙,苏家鹏,宋文苑,邹晓琳. 智能餐桌系统设计与实现[J].电脑编程技术与维护. 2014-12-18 [5] 李源. 餐厅点菜系统的设计与实现[J].电子技术与软件工程. 2015-10-16 [6] 王欣. 智能电子点菜系统的研究[J].北京交通大学. 2017-06-01 [7] 尹亮. 餐厅点菜及后厨系统的设计与实现[J].电子科技大学. 2015-03-15


界面截图

主界面


c100f497b1f7a3f3f0c7bf090854dfc1.png

点菜界面


后厨界面


d767ae3a167f905c7f6c7332afb03c97.png


管理界面

餐桌负责状态表中绿色表示有订单,红色表示后厨已经做好了菜,处于等待上菜阶段。

餐桌和上菜信息每 30 秒和每 10 秒动态刷新,仅刷新指定区域。

点击负责人可切换该桌负责人。

943060ea2ac3ab468dc11af41a56bd5d.png


订单管理界面

点击订单号进入订单详情,绿色代表已支付订单,红色代表未支付订单。


2f1540de55577df764e026e7b1744563.png


订单详情界面


29525f59ac0dede74c3088c3692b56cf.png


批量结账界面

点击单条订单可进入相应订单详情页。


b79aefd479739a022e3b8310f84ba608.png


菜品管理界面


c50d5ffc395388987f2bd1cd2ace1785.png



使用


1. cd FoodOrder
2. python manage.py runserver


完整代码:https://download.csdn.net/download/qq_38735017/87415895

相关文章
|
20天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
217 55
|
2月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品安全追溯系统的深度学习模型
使用Python实现智能食品安全追溯系统的深度学习模型
71 4
|
8天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
102 66
|
30天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
155 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
10天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
41 5
|
1月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习的果蔬识别系统实现
果蔬识别系统,主要开发语言为Python,基于TensorFlow搭建ResNet卷积神经网络算法模型,通过对12种常见的果蔬('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜')图像数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django框架搭建Web网页端可视化操作界面,以下为项目实现介绍。
39 4
基于Python深度学习的果蔬识别系统实现
|
2月前
|
Python
Python之音乐专辑管理系统
音乐专辑管理系统是一款用于管理和维护音乐专辑信息的应用程序,支持添加、删除、修改和查询专辑详情(如专辑名、艺术家、发行日期及曲目列表)。系统运行需Python 3.x环境,硬件要求较低,适合个人及小型团队使用。
64 4
|
2月前
|
Python
Django 框架的路由系统
Django 框架的路由系统
54 6
|
2月前
|
Python
Python实现摇号系统
本文介绍了如何使用Python构建一个简单的摇号系统,包括用户输入、随机抽取、结果展示和日志记录等功能。通过导入`random`、`datetime`和`logging`模块,实现了从参与者名单中随机抽取中奖者,并记录每次摇号的结果,方便后续查看和审计。完整代码示例提供了从功能实现到主程序调用的全过程。
38 2