基于VS2012和SQL SERVER的餐厅点餐系统设计与实现

Brokenner

发布日期: 2018-10-06 00:06:12 浏览量: 2262
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、需求分析

1. 面向对象

点典点菜系统是一款面向顾客和管理人员的全方面系统,其中管理人员又包括服务员、采购员和厨师。本组认真分析了不同对象的需求,为不同的对象都设计了独特的系统功能。简化了传统点菜、烧菜和采购方式繁琐的步骤,为顾客提供便捷操作的同时提高酒店管理的效率。

2. 市场背景

目前传统的点菜、烧菜和采购方式繁琐复杂。在人才配置方面,任何的餐厅或酒店都要配置大量的基层服务人员,这些基层服务人员大多从事简单的任务。例如:誊写顾客点菜的名称或代号、沟通顾客与厨房的材料状况、沟通采购员和厨房的材料状况。而这些工作恰恰是能由计算机代替人力来劳动的。在工作效率方面,传统的方式有着极大的时延缺陷。例如:服务员在为顾客点菜时并不能及时了解材料的剩余情况。如果材料已近用完了服务员又不知道,在顾客点菜后又要去询问顾客是否要取消或更改点菜情况。这样不仅极大地降低工作效率,还有可能引起顾客的不满。又或者材料用完了不能及时通知采购员,会降低销售额,不利于经营。

3. 运行环境

  • 操作系统及版本:Windows XP、Win7
  • 开发环境:VS 2012
  • 数据库环境:SQL Server 2005

二、数据库设计

1. 数据字典

  • 餐桌信息表:餐桌号、座位号、餐桌位置、餐桌使用情况
  • 顾客表:顾客号、餐桌号、顾客信息
  • 菜单表:菜号、菜名、价格、类别
  • 账单表:账单号、顾客号、菜号、数量、价格
  • 部门表:部门号、部门名
  • 员工表:员工号、员工密码、员工名、性别、部门号、工种
  • 进货表:商品号、员工号、商品名、进货数量、进货日期
  • 商品表:商品号、商品名、商品价格

2. 概念模型

点餐子系统E-R图

餐厅内部管理子系统E-R图

3. 表格合并化简过程

  • Dinner_Table:Table_ID,Table_Seat_quantity,Table_Position,Table_Situation
  • Table_Use:Table_ID,Client_ID
  • Client:Client_ID,Client_Message
  • Dishes_List:Dishes_ID,Dishes_Name,Dishes_Price,Dishes_Classification
  • Bill:Bill_ID,Dishes_ID,Quantity
  • Orders:Bill_ID,Client_ID
  • Employee:Employee_ID,Employee_Password,Employee_Name,Sex
  • Department:Department_ID,Department_Name
  • Dept_Belonging:Employee_ID,Department_ID
  • Goods:Good_ID,Good_Name,Goods_Price
  • Purchase:Goods_ID,Employee_ID,Good_Quantity,Purchase_Date

(加粗标注为关系集合)

合并表格后得:

  • Dinner_Table:Table_ID,Table_Seat_quantity,Table_Position,Table_Situation
  • Client:Client_ID,Table_ID,Client_Message(将餐桌使用表和顾客表合并)
  • Dishes_List:Dishes_ID,Dishes_Name,Dishes_Price,Dishes_Classification
  • Bill:Bill_ID,Client_ID,Dishes_ID,Quantity(将账单表和点菜表合并)
  • Employee:Employee_ID,Employee_Password,Department_ID,Employee_Name,Sex
  • (将员工表和部门隶属表合并)
  • Department:Department_ID,Department_Name
  • Goods:Good_ID,Good_Name,Goods_Price
  • Purchase:Goods_ID,Employee_ID,Good_Quantity,Purchase_Date

(加粗标注为合并表格后新增属性)

4. 建表代码

  1. Create table Dinner_Table
  2. (
  3. Table_ID char(3) not null ,
  4. Seat_Num int not null,
  5. Table_Position varchar(20),
  6. Table_Situation varchar(10)
  7. Primary key(Table_ID)
  8. );
  1. Create table Client
  2. (
  3. Client_ID char(6) not null,--从000001开始
  4. Table_ID char(3),
  5. Client_Message varchar(10)
  6. Primary key(Client_ID),
  7. Foreign key(Table_ID) references Dinner_Table On delete cascade On update cascade
  8. );
  1. Create table Dishes_List
  2. (
  3. Dishes_ID char(6) not null ,
  4. Dishes_Name varchar(20) not null,
  5. Dishes_Price int not null,
  6. Dishes_Classification varchar(10) not null,
  7. Primary key (Dishes_ID )
  8. );
  1. Create table Bill
  2. (
  3. Bill_ID char(6) not null ,
  4. Client_ID char(6) not null,
  5. Dishes_ID char(6) not null,
  6. Quantity int not null,
  7. Price int,
  8. Foreign key(Client_ID ) references Client On delete cascade On update cascade,
  9. Foreign key(Dishes_ID) references Dishes_List On delete cascade On update cascade,
  10. Primary key(Bill_ID,Dishes_ID)
  11. );
  1. Create table Department
  2. (
  3. Department_ID char(6),
  4. Department_Name varchar(10),
  5. Primary key(Department_ID)
  6. );
  1. Create table Employee
  2. (
  3. Employee_ID char(11),
  4. Employee_Password varchar(6) not null,
  5. Employee_Name varchar(20),
  6. Employee_Sex char(2) check(Employee_Sex='男' or Employee_Sex='女'),
  7. Department_ID char(6),
  8. Employee_Style char(10),
  9. Primary key(Employee_ID),
  10. Foreign key(Department_ID) references Department On delete cascade On update cascade
  11. );
  1. Create table Purchase
  2. (
  3. Goods_ID char(6),
  4. Employee_ID char(11),
  5. Goods_Name char(20),
  6. Goods_Quantity int,
  7. Purchase_Date char(10),
  8. Foreign key(Employee_ID) references Employee On delete cascade On update cascade,
  9. Primary key(Goods_ID)
  10. );
  1. Create table Goods
  2. (
  3. Goods_ID char(6),
  4. Goods_Name varchar(20),
  5. Goods_Price int,
  6. Foreign key(Goods_ID) references Goods On delete cascade On update cascade
  7. Primary key(Goods_ID)
  8. );

三、系统功能模块说明

本系统主要分为点餐和餐馆内部管理两个大的功能模块。

在点餐模块,程序分为管理终端和顾客终端。设想的是在每台餐桌上都有一台用以点餐的pc终端,顾客可以通过此终端浏览菜品进行点菜,同时可以和餐馆管理端进行通信,实时获得所需的服务。在管理终端,可以直观地看到各台餐桌的使用情况以及各个顾客的点餐信息,同时可以和各台顾客进行通信。程序截图如下:

管理端登录界面

输入错误时输出提示信息

管理端工作界面

使用不同图标表示餐桌的使用情况

和客户端的通信


客户端开始界面

客户端功能菜单窗口

客户点餐

客户查看菜单

客户修改菜单

客户与管理端的通信界面

客户点击结账时看到的账单界面

餐馆内部管理模块,在此模块我设置了不同的接口,对不同的登录员工显示不同的界面。程序截图如下:

采购员登录后显示的界面(为方便管理,设置了查找功能)

餐馆管理员登录后显示的界面

管理员对本系统所有表格均能进行更新修改

四、项目总结

1. 问题

项目开发中遇到的主要问题是多台客户端和管理终端的通信。比如客户在对管理端发起通话时,若管理端未打开对话窗口,要如何将收到的信息暂存起来,并且如何在管理端打开对话框后正确的显示;其次还有管理端与多个客户端通信时要如何做到信息的正确发送给对应的客户。然后因为是网络软件,和平时简单的写个程序调用数据库不同,这里采用的是各个终端连接远程的数据库,因为没有接触过,费了一番周折。其次还有一些小的问题,比如列表控件显示图标,子、父窗口之间数据参数的传递。同时程序中还需处理大量事先约定的带特定意义的字符串,以此辨别此次通信的目的,否则程序中在通信方面涉及多种功能,如果为每一种功能都维系一个通信套接字对资源的利用将非常低。

2. 解决方法

对于第一个问题,没有采用进程间通信,而是在通信对话框未打开时由其父窗口接收信息并写入临时文件夹,当打开通信对话框时由初始化函数将信息从临时文件夹读出显示在编辑框上,这样也实现了聊天记录的保存。

对于第二个问题,采用iocp框架的服务器,维护各个客户端与管理端通信的套接字,以便准确转发各种信息。同时完成端口框架的服务器也非常适合处理多用户并发通信的问题。

五、参考资料

上传的附件 cloud_download 基于VS2012和SQL SERVER的餐厅点餐系统设计与实现.7z ( 13.35mb, 187次下载 )
error_outline 下载需要9点积分

发送私信

时间能冲淡一切,但却冲不掉一切

9
文章数
6
评论数
最近文章
eject