SmartCanteen

1.课程设计目的

掌握面向对象程序设计的基本思维方式,熟悉并结合理论课程对面向对象分析、设计的基本理论和方法,实现一个简单的小规模的应用程序。最终能够熟悉并掌握一门面向对象程序设计语言

2.课程设计题目描述和要求

课程设计的问题描述和需求如下:
某大学食堂希望改变当前的堂食服务模式,将以自主点餐、自主取餐、自动结算的方式进一步提升食堂运转效率,解决食堂人员成本高、用餐高峰期拥堵等问题。

新的食堂运转模式如下:
用餐人员进入食堂后,不用去取餐盘,也不用去窗口点餐,而是直接寻找到空闲的餐桌坐下。每个餐桌上有若干个餐位,每个餐位的桌面上都有一个二维码。用餐人员用食堂APP扫该二维码进行点餐。如果用餐人员未注册过账号,需要先注册。食堂APP上把菜品分类显示,包括猪肉类、牛肉类、羊肉类、水产类、豆制品类、蔬菜类、鸡蛋类、主食类。每个分类下显示具体的菜品名称、配料、价格。用餐人员可在APP中点菜,选中菜品时默认份数为1份,也可调整数量。选择菜品时,APP上实时显示已选菜品总份数和价格。点餐的过程中可以终止本次点餐。点餐完可进行结算,如果账户余额充足,则点餐成功;如果余额不足,则需要先在线充值。点餐成功后,用餐人员可坐在餐位上等待配餐完成,在食堂APP上可以看到他的等待排序(按点餐提交的时间,先来先服务)。

食堂工作人员的主要职责是根据点餐结果进行配餐。工作人员的工作台上有一台带触摸屏和打印机的一体机,屏上显示分配给他的所有点餐记录。每条点餐记录包括餐位号、菜品及其份数。工作人员按顺序配餐,他先点击“开始”按钮(按钮上的文字切换为“完成”),为点餐记录列表的第一条点餐记录配餐。此时用餐人员在食堂APP上可以看到工作人员已经开始为他配餐。工作人员配餐完币,点击“完成”按钮(按钮上的文字切换为“开始”),此时用餐人员在食堂APP上可以看到配餐完成,一体机也将打印出一张含有餐位号及点餐人员ID的单据。用餐人员自行到取餐区取餐。

食堂工作人员可以通过该系统进行查询分析,包括:各菜品的受欢迎程度、食堂各时间段的用餐人数、平均点餐配餐时间、工作人员的工作量、累计收入等。

3.课程设计报告内容

3.1用例分析

执行者:用餐人员、食堂工作人员
用例:点餐、注册、充值、点餐记录、查询分析打印票据。

用例描述

用例名称 点餐
执行者 用餐人员
前置条件 已经注册登录成功
功能描述 满足用餐人员选择菜品、调整数量、结算等功能,并且将点餐记录呈现在一体机的触摸屏上
主要步骤 1.分类显示菜品,并且显示具体的菜品名称、配料、价格
2.选择菜品,调整数量,默认数量为1
3.若账户余额充足,则可结算,否则需进行充值
4.点餐成功,显示等待顺序
5.点餐过程中可终止点餐
相关用例 选择菜品、调整数量、结算、终止点餐
用例名称 查询分析
执行者 食堂工作者
前置条件 系统投入使用一段时间有记录
功能描述 为食堂工作人员提供查询分析功能,包括:各菜品的受欢迎程度、食堂各时间段的用餐人数、平均点餐配餐时间、工作人员的工作量、累计收入等。
主要步骤 1.记录各种菜品的点餐次数、点餐时间、每次点餐的配餐时间、总价价格等
2.根据记录的数据计算出相应的参数
相关用例 点餐、点餐记录、配菜
用例名称 配菜
执行者 食堂工作者
前置条件 有点餐者在系统上进行点餐,产生点餐记录
功能描述 对于正在进行的点餐记录进行配菜,使订单从未处理状态变为配菜中和已完成状态
主要步骤 1.选中订单记录列表的一条记录(先来先服务),查看其具体的菜品名称及数量
2.开始配餐(点击开始按钮),选中的订单的状态变为“配菜中”
3.完成配菜(点击完成按钮),选中的订单的装填变为“已完成”
4.将菜品名称、数量、配菜等数据记录下来
相关用例 完成、开始、点餐记录

其他用例描述略过

3.2静态建模

该问题中出现的对象有用餐人员、账号、菜品、菜品名称、菜品配料、菜品价格、账户余额、食堂工作人员、触摸屏、打印机、一体机、点餐记录、餐位号、菜品份数、点餐人员ID
其中针对本问题选择用餐人员、菜品、食堂工作人员、触摸屏、打印机、点餐记录作为类,其余均为类的属性
基本的类如下:

因为需要为工作人员提供查询分析的功能,多以需要一个点餐记录列表的类来记录点餐记录的数据并计算相关数据。每个菜品对象包含了菜品名称、份数、价格,由菜品组成每条点餐记录,每条点餐记录组成点餐记录列表

所有类之间的关系如下:

3.3动态建模

点餐者活动图如下:

食堂工作人员活动图如下:

顺序图:

3.4程序简要操作说明

3.4.1登录和注册

双击运行SmartCanteen.jar文件,如果无法运行,请解压缩后编译运行LogOnFrm类。
运行成功后将打开登录页面

目前有4个账号已经注册,可以直接使用这些账号进行登录,也可以自行注册,其中编号为00000,名称为admin的是管理员账号,登录该账号后进入食堂工作人员的管理界面。

3.4.2点餐者界面

登录成功普通账号后会进入点餐者的主界面
如果无法成功登录,有可能是本人笔记本的数据库服务没有开启或者IP地址发生改变,请联系qq:2227693837,可能需要修改DbUtil类中jdbc的参数。

点击导航栏的菜单选项会进入相应的界面

下面已点餐界面为例介绍系统的点餐功能

改变购物车中某一菜品的数量后需要点击右侧购物车表格的其他地方,是修改的单元格处于没有被选中的状态,这样才能检测出数据修改了,然后在点击刷新按钮刷新总金额。
也可以选中购物车中的某一菜品点击删除按钮即可删除。

等待顺序界面可以看到当前系统要处理的所有订单记录,处理顺序为从上到下,可以通过餐位号判断自己的顺序,但是需要不断点击刷新按钮才能刷新订单状态的显示

更详细的操作步骤及一些注意事项请查看下一篇文章
附:github仓库链接

4.结论及总结

本次实验对于课程设计的需求基本上实现了,但是也有一些细节的地方没有设计好,比如说对于食堂的工作人员或许可以再细分成配菜的工作人员和数据查询分析的工作人员,打印机打印订单信息的功能也没有具体实现。还有对于订单状态实时变化的情况,不知道该如何将其状态的变化通知给点餐者,这一点没什么思路。在整体上,感觉代码量有点大,有点冗杂繁多,或许有一些更加清晰、明确的设计方案和框架能够比较简单的来实现课程设计中的需求。
本次实验我使用Swing框架来实现系统的可视化效果,因为这个实现可视化似乎比较快,但是依旧花了不少时间来学习,现在大多数人很少用这个库,并且现在也可以通过拖动具体的组件来实现窗体、组件的大小设计和位置摆放。
对于数据的输出,保存,取出等操作借助了MySQL数据库,将菜品、订单、用户等建立成为二维的基本表,使得对于数据的记录和读取都需要使用sql语言来进行更新或者查询,这次的课程设计也算是对于数据库理论和实践的又一次熟悉。