星球的眼睛 发表于 2025-4-14 16:34:34

基于Python(Django)+SQLite 实现(Web) 点菜管理系统

点菜管理系统

课程计划使命与要求

1、使命

题目:点菜管理信息系统
问题描述:  随着网络的敏捷发展,越来越多的人开始接受乃至时依赖了网络营业的这种交易形式,传统的点菜模式不但浪费时间,服从低下,而且特别耗费本钱与人力,因此不少商家开始使用网上点菜系统。网上点菜系统是一种可以自主选择、个性化、便捷化、特色化的点餐模式,它的鼎力大举推广使用为餐厅节省了本钱,同时也解决了消费者在传统点菜时存在的不少贫困,这使得网上点菜系统敏捷霸占市场。
2、计划要求

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

[*]用户端功能:


[*]

[*]顾客进入系统欣赏整体菜单;
[*]顾客根据菜单进行选菜下单点菜;
[*]顾客通过核对订单进行结账。


[*]后台管理功能:


[*]

[*]管理员可以进入后台系统;
[*]管理员可以查询系统内全部存在订单;
[*]管理员有权对全部在职员工信息进行操作。


[*]后厨系统功能:


[*]

[*]订单保存在数据库中,并传入后厨系统;
[*]后厨界面同步显示全部正在进行的订单;
[*]后厨对订单具有查询,接单等操作功能。

三.课程计划说明书

1 需求分析

(1) 数据需求

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

[*]餐厅基础信息:餐厅提供根本的菜谱等信息并且能对全部信息进行增、删、改、查等操作;
[*]顾客点菜信息:用户登录系统后,在相应的页面欣赏菜谱信息,根据自己的用餐需求下单,使得该信息显示在系统订单信息列表中,在结账时通过订单信息进行结账;
[*]职工管理信息:管理员可以登录该系统对已经注册的职工个人信息进行增、删、改、查等操作;
(2) 事务需求


[*]在餐厅基础信息部门,要求:


[*]

[*]展示整体菜谱,重要由菜品编号、菜名、数量、价格等组成;
[*]菜谱上全部信息管理员都有权进行更新修改。


[*]在顾客点菜信息部门,要求:


[*]

[*]通过自主选择桌号进入点菜;
[*]欣赏全部的菜谱信息;
[*]通过自主选择菜品,生成订单;
[*]核对订单信息及订单状态,完成结账。


[*]在职工管理信息部门,要求:


[*]

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

(3) 关系模式


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


[*]菜品类表
字段
范例
可否为 Null
主外码
默认值
中文名
ID
Int
NotNull
主码
菜品类编号
name
Varchar(20)
NotNull
菜品类名称

[*]菜品表
字段
范例
可否为 Null
主外码
默认值
中文名
ID
Int
NotNull
主码
菜品编号
foodType_id
Int
外码
菜品种类编号
title
Varchar(20)
NotNull
菜名
cost_time
Int
制作时间
amount
Int
NotNull
大于 0
数量
price
Float
NotNull
大于 0
价格

[*]订单表
字段
范例
可否为 Null
主外码
默认值
中文名
ID
Int
主码
订单编号
table_id
Int
餐桌编号
food_amount
Int
菜品总数
table_price
Float
消费金额
create_time
Varchar(20)
下单时间
pay_time
Varchar(20)
付出时间
staff_id
Int
外码
负责职工编号
is-pay
Boolean
付出状态
comment
Varchar(50)
备注

[*]订单明细表
字段
范例
可否为 Null
主外键
默认值
中文名
id
Int
主码
编号
orderID_id
Int
NotNull
外码
订单编号
foodID_id
Int
NotNull
外码
菜品编号
amount
Int
NotNull
大于 0
菜品数量
sum_price
Float
消费金额
comment
Varchar(50)
备注信息
status
Varchar(20)
NotNull
订单状态
start_cook_time
接单时间
end_cook_time
完成时间

[*]职工表
字段
范例
可否为 Null
主外键
默认值
中文名
ID
Int
NotNull
主码
职工编号
citizenID
Varchar(20)
NotNull
个人 ID
name
Varchar(20)
NotNull
姓名
gender
Varchar(20)
NotNull
性别
born_date
Varchar(20)
出生日期
phone
Varchar(20)
NotNull
联系方式
address
Varchar(50)
联系地点

[*]餐桌信息表
字段
范例
可否为 Null
主外键
默认值
中文名
ID
主码
餐桌编号
name
餐桌名字
staff_id
外码
负责职工编号
2 概要计划

(1) 实体图及 E-R 图

https://i-blog.csdnimg.cn/img_convert/49af17a7315d823592904db2befda608.png
https://i-blog.csdnimg.cn/img_convert/ea351f44adf6ec3e7bbf03ee75a6cc75.png
(2) 数据流图

https://i-blog.csdnimg.cn/img_convert/4cd3b4ea9a5210cebdb895df2fe2a133.png
https://i-blog.csdnimg.cn/img_convert/2354f13e1d305c78a53e753349ddd13a.png
3 逻辑计划

https://i-blog.csdnimg.cn/img_convert/c5f66b25658128a85542cacbb0262719.png
4 数据库创建

(1) 创建数据库

Django 中默认使用 SQLite 作为数据库,也可将其换为 MySQL、Oracle 等,仅需提供连接地点、用户名及暗码。
https://i-blog.csdnimg.cn/img_convert/385e1000a938bafe90f635908b6cba42.png
(2) 菜品类表创建

CREATE TABLE OrderSystem_foodtype
(
IDINTEGER   NOT NULLPRIMARY 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 NULLPRIMARY KEY AUTOINCREMENT,
        foodType_id INTEGER      NOT NULLREFERENCES
                OrderSystem_foodtype (ID)DEFERRABLE INITIALLY DEFERRED,
    cost_time   INTEGER      NOT NULL
); (4) 订单表创建

CREATE TABLE OrderSystem_order(
    ID          INTEGERNOT NULLPRIMARY KEY AUTOINCREMENT,
    table_id    INTEGERNOT NULL,
    food_amount INTEGERNOT NULL,
    total_price REAL   NOT NULL,
    staff_id    INTEGERNOT NULLREFERENCES
                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 NULLPRIMARY KEY AUTOINCREMENT,
    amount          INTEGER      NOT NULL,
    sum_price       REAL         NOT NULL,
    orderID_id      INTEGER      NOT NULLREFERENCES
                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 NULLPRIMARY 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 NULLREFERENCES
        OrderSystem_staff (ID) DEFERRABLE INITIALLY DEFERRED
); 5 系统实现

(1)系统功能模块图

https://i-blog.csdnimg.cn/img_convert/e733b63e35eb619624be600b5680053a.png
(2)前台开发平台的选择



[*]Web 前端使用 jQuery、Bootstrap4 等进行实现;
[*]使用 Python + Django 作为后端实现;
[*]使用 SQLite 进行数据库实现。
(3)计划与实现


[*]展示全部菜品类及菜品,顾客可以自主选择餐桌及菜品来进行下单 https://i-blog.csdnimg.cn/img_convert/8991c7635f96f9e5c53acfc05477fc5b.png
[*]生成订单明细,顾客可以对自己的订单进行查询核对 https://i-blog.csdnimg.cn/img_convert/9825b0318415a084ba402d69debcf891.png
[*]管理员及职工注册,然后通过登陆进入后台管理系统
[*]后台管理系统同步显示订单及当前订单全部状态,后厨完成订单时选择上菜,管理界面主动刷新提示服务员进行上菜服务,餐桌负责人后台可自行切换 https://i-blog.csdnimg.cn/img_convert/c604b955017b6d339296252130a2631c.png
[*]点击结账时可以先核对订单,然后再进行对订单的批量付出大概全部付出 https://i-blog.csdnimg.cn/img_convert/e2f8509dde26df2076a51632c1ccc683.png
[*]后台管理系统显示全部订单以及订单付出状态,红色为未付出订单,绿色为已付出订单,点击订单号可进入对应订单的详情页 https://i-blog.csdnimg.cn/img_convert/e2e364894e2a3c4f0845cbbe8610cf46.png
[*]管理员对菜品类、菜品、餐桌信息、员工信息等进行更新操作,即增、删、改等 https://i-blog.csdnimg.cn/img_convert/63385a712f63e87178219ed603526535.png
[*]进如后厨系统,后厨对订单信息进行选择接单,完成后关照上菜等操作,订单明细显示 4 种状态(等候后厨接单,后厨已接单,等候上菜,上菜完成) https://i-blog.csdnimg.cn/img_convert/39d19370e0e895a3a906bd68f716bbad.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 参考文献

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

主界面

https://i-blog.csdnimg.cn/img_convert/6832c50ccd30155f4527e9f526d18d77.png
点菜界面

https://i-blog.csdnimg.cn/img_convert/c500eca91ba45b21d2b2131bbb809ae6.png
后厨界面

https://i-blog.csdnimg.cn/img_convert/bf2314233d85a4b1e3fdf9e63e075e91.png
管理界面

餐桌负责状态表中绿色表示有订单,红色表示后厨已经做好了菜,处于等候上菜阶段。
餐桌和上菜信息每 30 秒和每 10 秒动态刷新,仅刷新指定地区。
点击负责人可切换该桌负责人。
https://i-blog.csdnimg.cn/img_convert/f66c0dc16f66b62c933bfc3dd9ebae7c.png
订单管理界面

点击订单号进入订单详情,绿色代表已付出订单,红色代表未付出订单。
https://i-blog.csdnimg.cn/img_convert/42c6af01490385774bdfc49d69884a2d.png
订单详情界面

https://i-blog.csdnimg.cn/img_convert/49a827b44096a60703020d65e56e339b.png
批量结账界面

点击单条订单可进入相应订单详情页。
https://i-blog.csdnimg.cn/img_convert/db8b09b46bc9dba4d4f1dc52987fe613.png
菜品管理界面

https://i-blog.csdnimg.cn/img_convert/536e29e0de13dd8af66aa70b1ff48608.png
使用

cd FoodOrder
python manage.py runserver 打开 http://127.0.0.1:8000/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于Python(Django)+SQLite 实现(Web) 点菜管理系统