基于python Django 餐馆点菜管理系统

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

2、设计要求

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

  1. 用户端功能:

  • 顾客进入系统浏览整体菜单;

  • 顾客根据菜单进行选菜下单点菜;

  • 顾客通过核对订单进行结账。

  1. 后台管理功能:

  • 管理员可以进入后台系统;

  • 管理员可以查询系统内所有存在订单;

  • 管理员有权对所有在职员工信息进行操作。

  1. 后厨系统功能:

  • 订单保存在数据库中,并传入后厨系统;

  • 后厨界面同步显示所有正在进行的订单;

  • 后厨对订单具有查询,接单等操作功能。

三.课程设计说明书


1 需求分析

(1) 数据需求

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

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

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

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

(2) 事务需求

  1. 在餐厅基础信息部分,要求:

  • 展示整体菜谱,主要由菜品编号、菜名、数量、价格等组成;

  • 菜谱上所有信息管理员都有权进行更新修改。

  1. 在顾客点菜信息部分,要求:

  • 通过自主选择桌号进入点菜;

  • 浏览所有的菜谱信息;

  • 通过自主选择菜品,生成订单;

  • 核对订单信息及订单状态,完成结账。

  1. 在职工管理信息部分,要求:

  • 在职员工通过身份信息注册、登陆系统;

  • 职工有权对自己的职工信息进行增、删、改等操作;

  • 管理员可以对所有职工信息进行查询及操作。

(3) 关系模式

  1. 菜品类(菜品编号,菜品名称)

  1. 菜品(菜品编号,菜品种类编号,菜名,制作时间,数量,价格)

  1. 订单(订单编号,餐桌编号,菜品总数,消费金额,下单时间,备注信息,支付时间,负责职工编号,支付状态)

  1. 订单明细(编号,订单编号,菜品编号,菜品数量,消费金额,备注信息,订单状态,接单时间,完成时间)

  1. 职工(职工编号,个人 ID,姓名,性别,出生日期,联系方式,联系地址)

  1. 餐桌信息(餐桌编号,餐桌名字,负责职工编号)

(4) 数据字典

  1. 菜品类表

字段

类型

可否为 Null

主外码

默认值

中文名

ID

Int

NotNull

主码

菜品类编号

name

Varchar(20)

NotNull

菜品类名称

  1. 菜品表

字段

类型

可否为 Null

主外码

默认值

中文名

ID

Int

NotNull

主码

菜品编号

foodType_id

Int

外码

菜品种类编号

title

Varchar(20)

NotNull

菜名

cost_time

Int

制作时间

amount

Int

NotNull

大于 0

数量

price

Float

NotNull

大于 0

价格

  1. 订单表

字段

类型

可否为 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)

备注

  1. 订单明细表

字段

类型

可否为 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

完成时间

  1. 职工表

字段

类型

可否为 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)

联系地址

  1. 餐桌信息表

字段

类型

可否为 Null

主外键

默认值

中文名

ID

主码

餐桌编号

name

餐桌名字

staff_id

外码

负责职工编号

2 概要设计

(1) 实体图及 E-R 图

(2) 数据流图

3 逻辑设计

4 数据库建立

(1) 创建数据库

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

(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  REFERENCESOrderSystem_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  REFERENCESOrderSystem_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  REFERENCESOrderSystem_staff (ID) DEFERRABLE INITIALLY DEFERRED
);

5 系统实现

(1)系统功能模块图

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

  • Web 前端使用 jQuery、Bootstrap4 等进行实现;

  • 使用 Python + Django 作为后端实现;

  • 使用 SQLite 进行数据库实现。

(3)设计与实现

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

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

  1. 管理员及职工注册,然后通过登陆进入后台管理系统

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

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

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

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

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

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

界面截图


主界面

点菜界面

后厨界面

管理界面

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

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

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

订单管理界面

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

订单详情界面

批量结账界面

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

菜品管理界面

使用


cd FoodOrder
python manage.py runserver

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试项目实战,一比一还原可以写进简历的

项目一:ShopNC商城 项目概况: ShopNC商城是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城,系统PC后台是基于ThinkPHP MVC构架开发的跨…

软件测试【个人简历】展示模板

个人简历 就职目标:软件测试工程师 简历是我们求职的第一步,也是非常重要的一步。 如果你简历写的一塌糊涂,那么你瞬间就会被淘汰,那么一份好的简历应该怎么写呢? 一般分为如下几部分内容: 1、个人基本…

软件测试电商项目实战(写进简历没问题)

前言 说实话,在找项目的过程中,我下载过(甚至付费下载过)N多个项目、联系过很多项目的作者,但是绝大部分项目,在我看来,并不适合你拿来练习,它们或多或少都存在着“问题”&#xff…

如何介绍简历中的项目呢?请看软件测试老师的分享

项目经验与工作经验是相辅相成的,但较之于工作经验,项目经验更侧重于表现求职者在某个专业领域内的技能水平(技能水平决定了工资水平)。因而,技术类岗招聘的时候,更注重项目经验。项目介绍是有套路的&#…

软件测试的简历里面,项目介绍要怎么写好呢

一、如果你是做功能测试(项目介绍可以这样) 项目一:2019/4-至今 项目简介:该项目是题库/考勤APP,主要的功能有题库、考勤、用户信息系统、直播视频、社区板块。迭代了多少次xxx,目前正在正常运营xxx. 负责模块&#…

详解9个写进简历的数据分析项目

核心知识点覆盖 Excel、Python、SQL、Pandas、Numpy、Matplotlib、Power BI、PyEcharts可视化、数据指标、波士顿矩阵、数据建模、AARRR模型、漏斗模型、RFM模型、A\BTest、逻辑回归、线性回归、预测分析、K近邻算法、网络爬虫、数据化运营、用户画像体系构建 9大企业项目实战 …

可以写进简历的软件测试项目实战经验(包含电商、银行、app等)

目录 目录 前言: 1、项目名称: 家电购 2、项目名称: 瑞德商城 3、项目名称:随意读(APP) 4、项目:东海农村商行 总结 前言: 今天给大家带来几个软件测试项目的实战总结及经验,适合想自学、转行或者面试的朋友,可…

postmessage通信

在业务中,有一种开发形式为:多个子系统集成为一个父系统。每个系统之间都管理着不同的业务与逻辑,他们是互不干涉的。 那么,我们如何在父系统页面中操作子系统中的内容呢? 首先通过vite初始化两个项目。 父系统端口…

微软历史上的12个Windows操作系统版本排名

作为全球最流行的操作系统之一,Windows 操作系统的发布对世界产生了深远的影响。Windows 操作系统的发布历程可以追溯到 1985 年,当时微软推出了第一个版本的 Windows。随着时间的推移,Windows 不断升级和改进,推出了多个版本&…

独立开发变现周刊(第86期):月收入4000美元的日程规划器

分享独立开发、产品变现相关内容,每周五发布。 目录 1、NotionReads: 在Notion中管理你的阅读书籍2、Zaap.ai: 面向创作者的一站式工具3、microfeed: 开源的可自我托管的轻量级内容管理系统(CMS)4、Reactive Resume:一个免费的开源简历生成器5、一个月收…

苹果的 Vision Pro 会重蹈谷歌眼镜的覆辙吗?

本文作者认为,一款成功的AR头戴式设备需要考虑以下几方面:成本高,回报低;安全与隐私问题;时机与市场;4、设计与社会接受度。 原文链接:https://uxdesign.cc/can-apples-vision-pro-succeed-wher…

chatgpt赋能python:Python描述性统计分析:基础概念、应用和实例分析

Python描述性统计分析:基础概念、应用和实例分析 作为一种高效、可扩展和易于学习的编程语言,Python在文本处理、数据挖掘、机器学习、数据可视化等方面已经得到了广泛应用。在数据分析领域,Python拥有强大的描述性统计分析库,可…

AIGC:Google Bard VS ChatGPT 简介及对比分析

文章目录 [toc]前言一、Bard和ChatGPT二、应用场景三、时效性小结其他 前言 自从 OpenAI 向公众发布ChatGPT以来的过去几个月里,我们都见证了围绕 ChatGPT 的各种测评,并为它带来的效果感到惊艳。昨晚Google开放了自家研发的AI聊天机器人Bard的测评入口…

R语言利用wordcloud2绘制词云

本次的重点绘制词云,所以并不太重视其他分析方面的论述。 本机环境: window 10 R x64 3.3.0 R包: tmcn:词频统计 wordcloud2:绘制词云 Rwordseg:分词 由于tmcn和Rwordseg包在R3.3.0的版本中没有可以…

同一界面画出多个QQ图(R语言)

题目:一名研究者用光子吸收法测量了妇女骨骼中无机物含量,对三根骨头主侧和非主侧记录了测量值,数据框“T1bones.txt”中的第2至第7列记录了相应数据。对各个变量做qq图,在同一个界面画出所有的qq图,不同的qq图用不同颜…

R语言各个包里面的数据集

关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 Package Item Title csv docdatasetsAirPassengersMonthly Airline Passenger Numbers 1949-1960CSVDOCdatasetsBJsalesSales Data with Leading IndicatorCSVDOCdatasetsBODBiochemical Oxygen Dema…

R语言 聊天词云图

准备聊天记录 建议使用QQ聊天记录,导出txt格式 进行文本分词并可视化 install.packages("wordcloud2") install.packages("jiebaR") install.packages("jiebaRD") library(wordcloud2) library(jiebaRD) library(jiebaR) enginew…

巧用R语言实现各种常用的数据输入与输出

将数据输入或加载到R工作空间中,是使用R进行数据分析的第一步。R语言支持读取众多格式的数据文件,excel文件,csv文件,txt文件和数据库(MYSQL数据库)等;其中,excel和csv是我们最常遇到…

R语言安装 + 读入csv数据画图的过程中学习到的东西~~(ง •_•)ง

总体来说,我觉得R语言和python在画图上是有些相似的~ 目录 一、安装二、读入CSV数据三、保存代码代码 一、安装 B站上搜一个UP主:基因学苑。看他的安装教程及设置,很详细。 总体来说就是先下 R,再下 RStudio,然后使用…

超级干货 :手把手教你学习R语言(附资源链接)

作者:NSS;翻译:杨金鸿;校对:韩海畴,林亦霖; 本文约3000字,建议阅读7分钟。本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题…