




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南科技大学课 程 设 计 说 明 书课程名称 程序设计方法课程设计 题 目 酒店餐饮管理系统的设计 院 系 经济与管理学院 班 级 信管122 学生姓名 韦一 指导教师 靖恒昌 日 期 2012年12月20日 课程设计任务书(指导教师填写)课程设计名称 程序设计方法课程设计 学生姓名 韦一 专业班级 信管122 设计题目 酒店餐饮管理系统 一、 课程设计目的该课程设计是信息管理本科集中实践性环节之一,是学习完数据库基础与应用和程序设计方法课程后进行的一次全面的综合练习。其目的是通过本课程设计使学生对具体问题应用程序设计方法课程中所学的方法与技术,进行需求分析及软件设计的过程,不仅对程序设计方
2、法课程中的所有知识点进行一个全面的复习巩固,更重要的是增强学生解决实际问题的能力。二、 设计内容、技术条件和要求(1)本环节要求学生根据程序设计方法整个课程的所学内容,自己独立设计完成一个比较复杂的小型管理系统。(2)所设计的小型管理系统要求功能比较完善,应包含输入输出、查询、插入、删除、打印等基本功能(2)程序内容自己灵活设计,包括规划自己的数据库和设计程序功能和界面设计。(3)数据库中不能少于两个表。(5)程序应功能完善,界面友好,容错性好,操作方便。三、时间进度安排系统分析与规划 半周系统设计与调试 一周撰写课程设计说明书 半周四、主要参考文献郑阿奇,PowerBuilder 实用教程(
3、第二版),电子工业出版社董军,王玉,康祥顺,PowerBuilder案例开发集锦,电子工业出版社张长富,PowerBuilder9.0实例教程,电子科技大学出版社指导教师签字: 2012 年 12 月 23 日 需求分析 通过实际了解,要求本系统具有以下功能:系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储安全可靠。实现对餐厅顾客开台、点菜/加菜、账目查询和结账等操作。对用户输入的数据,进行严格的数据检验,尽可能的避免人为错误。实现对消费账目自动结算。实现对消费的历史记录进行查询。实现对餐厅人员流动进行管理以及能够管理餐厅桌台信息。系统应最大限度地实现易维护性和易操作性。餐饮
4、管理系统的用例图,如下图2.1所示。图2.1 餐饮管理系统的用例图 项目规划餐饮管理系统主要由用户登录、桌台信息管理、服务员信息管理、修改密码、开台、取消开台、点/加菜、消费查询、数据库管理和退出等模块组成,具体规划如下。(1) 用户登录模块该模块主要用于实现验证用户是否合法,只有合法用户才能有权登录,只有登录成功情况下才能进入系统功能主界面,并且在登录的同时能验证登录人员的管理权限,根据权限显示其能管理范围。(2) 桌台信息管理模块该模块主要用于管理桌台的信息,可以设置桌台名称,桌台位置,桌台占用所需价钱。(3) 服务员信息管理模块该模块主要用于方便对服务人员的信息进行管理。(4) 修改密码
5、模块该模块主要用于实现对登录人员的密码进行管理,长时间不更换密码是不安全的,增加此模块能增加系统的安全性。(5) 开台模块该模块主要用于实现对顾客进行开台,已经占用的桌台不能被再次分配,方便分配未占用的桌台给顾客(6) 取消开台模块该模块主要用于实现对已经开台的桌台进行取消开台。(7) 消费查询模块该模块主要用于实现客户能够查询自己已消费清单情况,进行核对自己的消费。(8) 结账模块该模块主要用于实现对客户的消费进行自动汇总,显示消费金额,能进行找零计算。(9) 数据库管理模块该模块主要用于实现对系统数据库的备份,防止系统在死机的情况下丢失大量重要信息。餐饮管理系统的业务流程图如图3.1所示。
6、 系统功能结构系统功能结构图如图3.2所示。餐饮管理系统密码管理服务员管理消费查询管理结账管理数据库管理用户登录管理guanl桌台信息管理修改密码删除更新添加恢复备份删除更新开台取消开台添加数据表概要说明为了对本系统后台数据库中的数据表有一个更清晰的认识,在此设计了一个数据表树形结构图,该结构图包括系统所有数据表,如图所示。数据表树状结构图部分数据表E-R图本里中规化出的实体主要有菜品信息实体、顾客点菜信息实体、桌台信息实体、用户登录信息实体和服务员信息实体。其中部分实体的E-R图如下所示。用户表实体E-R图菜品信息实体E-R图桌台信息实体E-R图员工信息实体E-R图顾客点菜信息实体E-R图数
7、据表的结构(1) food表(菜品信息表)表food用于保存菜品的基本信息,该表的结构如图所示。菜品信息表(2) guestfood表(顾客点菜信息表)表guestfood用于保存顾客点菜的详细信息,该表的结构如图所示。(3) room表(桌台信息表)表room用于保存桌台的一些有关信息,该表的结构如图4.9所示。桌台信息表(4) userlogin 表(登录人员信息表)表userlogin用于保存登录用户基本信息,表的结构如图4.10所示。登录用户信息表(5) waiter表(餐厅服务人员信息表)表waiter用于保存餐厅服务人员的一些基本信息,表的结构如图所示。餐厅服务人员信息表系统登录模
8、块的设计与实现系统登录主要用于对进入餐饮管理系统的用户进行安全性检查,以防止非法用户进入该系统。在登录时,只有合法的用户,才可以进入该系统。系统登录窗体如图4.12所示。系统登录代码设计单击【确定】按钮,程序执行判断用户输入的用户名和密码是否正确,如果正确,则成功登录餐饮管理系统,并将用户名、用户使用权限、用户登陆时间传到主窗体中,同时分别使用Names、power、Times全局变量进行接受。否则,弹出“用户名或密码错误”信息提示。【确定】按钮的Click事件代码如下: private void btnSure_Click(object sender, EventArgs e) if (tx
9、tUserName .Text = "")/判断用户名是否为空 MessageBox.Show("用户名不能为空", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); else if (txtPwd.Text = "")/判断密码是否为空 MessageBox.Show("请输入密码", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); else/用户名及密码不为空
10、的情况下执行如下代码 SqlConnection conn = connectToDatabase .restaurantManagementConn (); conn.Open(); SqlCommand cmd = new SqlCommand("select count(*) from UserLogin where UserName='" + txtUserName .Text + "' and UserPwd='" + txtPwd .Text + "'", conn); int i = Co
11、nvert.ToInt32(cmd.ExecuteScalar(); if (i > 0) cmd = new SqlCommand("select * from UserLogin where UserName='" + txtUserName .Text + "'", conn); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); string UserPower = sdr"Power".ToString().Trim(); conn.Close();
12、 formMain main = new formMain(); main.power = UserPower; main.Names = txtUserName .Text ; main.Times = DateTime.Now.ToShortDateString(); main.Show(); this.Hide(); else MessageBox.Show("用户名或密码错误"); 主窗体的设计与实现在正确验证用户的用户名和密码以后,就显示出餐饮管理系统的主窗体。主窗体主要用于显示系统所具有的功能,例如菜单栏里显示了基础信息、辅助工具、系统设置、退出系统、系统维护等
13、几个功能模块。用户可以选择相应的按钮对应的子功能对系统进行不同的操作,餐饮管理系统的主窗体如图4.13所示。主窗体主窗体实现的几个重要功能实现代码如下: /接收从login窗体传来的信息,以下四个定义的变量是以后代码用到的全局变量 public string power; public string Names; public string Times; private SqlDataReader sdr; /以下是窗体加载时执行的代码 private void formMain_Load(object sender, EventArgs e) StatusLabeUser.Text = Na
14、mes; StatusLabeLoginTime.Text = Times; switch (power) case "0": StatusLabePower.Text = "超级管理员" break; case "1": StatusLabePower.Text = "经理" TSMenuItemSystemMaintenance.Enabled = false; break; private void formMain_Activated(object sender, EventArgs e)/窗体激发时执行如
15、下代码 lvDesk.Items.Clear(); SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); SqlCommand cmd = new SqlCommand("select * from Room", conn); sdr = cmd.ExecuteReader(); while ( sdr .Read() string status = sdr"RoomStatus".ToString().Trim(); AddItems(status
16、 );/根据桌台使用与否,选择图片显示桌子是否在被用中 conn.Close(); private void AddItems(string status) if (status = "使用") lvDesk.Items.Add(sdr"RoomName".ToString(), 1); else lvDesk.Items.Add(sdr"RoomName".ToString(), 0); /右键中单击开台会执行如下代码 private void 开台ToolStripMenuItem_Click(object sender, Eve
17、ntArgs e) if (lvDesk.SelectedItems.Count != 0) string names = lvDesk.SelectedItems0.SubItems0.Text; formOpen frm = new formOpen(); = names; frm.ShowDialog(); else MessageBox.Show("请选择一个桌台进行开台"); /右键中单击取消开台会执行如下代码 private void 取消开台ToolStripMenuItem_Click(object sender, EventArgs e)
18、 if (lvDesk.SelectedItems.Count != 0) string names = lvDesk.SelectedItems0.SubItems0.Text; SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); SqlCommand cmd = new SqlCommand("update Room set RoomStatus='待用',Num=0 Where RoomName='" + names + "
19、39;", conn); cmd.ExecuteNonQuery(); cmd = new SqlCommand("delete from GuestFood where DiningTable='" + names + "'", conn); cmd.ExecuteNonQuery(); conn.Close(); formMain_Activated(sender, e); else MessageBox.Show("请选择桌台"); 其他右键功能代码在源代码中,代码设计思想和开台代码类似。 /单击lis
20、tview控件中的一项内容时会执行如下代码,这里我们将listview的name定义为lvDesk private void lvDesk_Click(object sender, EventArgs e) string names = lvDesk.SelectedItems0.SubItems0.Text; SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); SqlCommand cmd = new SqlCommand("select * from Room where
21、RoomName='" + names + "'", conn); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); string status = sdr"RoomStatus".ToString().Trim();/将选中桌台的状态信息提取出来 sdr.Close(); if (status = "使用") this.contextMenuStrip1.Items0.Enabled = false; this.contextMenuStrip1.It
22、ems1.Enabled = true; this.contextMenuStrip1.Items3.Enabled = true; this.contextMenuStrip1.Items5.Enabled = true; this.contextMenuStrip1.Items6.Enabled = true; if (status = "待用") this.contextMenuStrip1.Items0.Enabled = true; this.contextMenuStrip1.Items1.Enabled = false; this.contextMenuStr
23、ip1.Items3.Enabled = false; this.contextMenuStrip1.Items5.Enabled = false; this.contextMenuStrip1.Items6.Enabled = false; conn.Close(); /双击listview控件中的一项内容时会执行如下代码 private void lvDesk_DoubleClick(object sender, EventArgs e) deskInfo desk = new deskInfo (); desk .tableName = lvDesk.SelectedItems0.Sub
24、Items0.Text; desk.ShowDialog(); /单击menustrip控件中基础信息下的桌台信息管理按钮会执行如下代码 private void TSMenuItemTableInfo_Click(object sender, EventArgs e) deskInfoManagement desk = new deskInfoManagement(); desk.ShowDialog(); menustrip控件中的其他按钮的代码设计思路与上面的单击menustrip控件中基础信息下的桌台信息管理按钮类似都是初始化一个相应窗体的对象,显示窗体。注:其他代码详见系统设计文档。
25、右键菜单中的几个重要功能的介绍右键菜单功能中顾客可以选择开台,取消开台,点菜,查询消费记录以及结账,下面介绍其中三个重要功能的实现代码,有开台,点菜以及结账,窗体运行结果分别如图4.14、图4.15和图4.16所示。开台窗体点菜窗体结账窗体凭证信息录入窗体的主要实现代码如下: 实现代码 public string name; public SqlConnection conn; private void formOpen_Load(object sender, EventArgs e) conn = connectToDatabase.restaurantManagementConn(); c
26、onn.Open(); SqlCommand cmd = new SqlCommand("select * from Room", conn); SqlDataReader sdr = cmd.ExecuteReader(); while (sdr.Read() cbNum.Items.Add(sdr"RoomName".ToString().Trim(); cbNum.SelectedItem = name.Trim(); sdr.Close(); cmd = new SqlCommand("select * from Waiter"
27、;, conn); sdr = cmd.ExecuteReader(); while (sdr.Read() cbWaiter.Items.Add(sdr"WaiterName".ToString().Trim(); cbWaiter.SelectedIndex = 0; sdr.Close(); private void txtNum_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar != 8 && !char.IsDigit(e.KeyChar) && e.KeyChar
28、 != 13) MessageBox.Show("请输入数字"); e.Handled = true; private void btnSave_Click(object sender, EventArgs e) if (txtNum.Text = "" | Convert.ToInt32(txtNum.Text) <= 0) MessageBox.Show("请输入用餐人数"); else string RoomName = cbNum.SelectedItem.ToString(); SqlCommand cmd1 = ne
29、w SqlCommand("update Room set GuestName='" + txtName.Text + "',PaymentDate='" + dateTimePicker1.Value.ToString() + "',Num='" + Convert.ToInt32(txtNum.Text) + "',WaiterName='" + cbWaiter.SelectedItem.ToString() + " ',RoomSta
30、tus='使用' where RoomName='" + name + "'", conn); cmd1.ExecuteNonQuery(); this.Close(); public string RName; public int i = 0; private void formOrder_Load(object sender, EventArgs e)/formOrder窗体加载时执行下列语句 / TODO: 这行代码将数据加载到表“restaurantManageDataSet.GuestFood”中。您可以根据需要 移动或
31、移除它。 this.guestFoodTableAdapter.Fill(this.restaurantManageDataSet.GuestFood); /向treeview节点添加四类菜 TreeNode newnode1 = tvFood.Nodes.Add("煲汤"); TreeNode newnode2 = tvFood.Nodes.Add("肉菜"); TreeNode newnode3 = tvFood.Nodes.Add("素菜"); TreeNode newnode4 = tvFood.Nodes.Add("
32、;主食"); SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); /表中foodtype为1的是“煲汤”类的菜 SqlCommand cmd = new SqlCommand("select * from food where FoodType='1'", conn); SqlDataReader sdr = cmd.ExecuteReader(); while (sdr.Read() /将属于“煲汤”类的菜从数据表中找出,加到treevie
33、w节点上 newnode1.Nodes.Add(sdr3.ToString().Trim(); sdr.Close(); cmd = new SqlCommand("select * from food where FoodType='2'", conn); sdr = cmd.ExecuteReader(); while (sdr.Read() newnode2.Nodes.Add(sdr3.ToString().Trim(); sdr.Close(); cmd = new SqlCommand("select * from food where
34、 FoodType='3'", conn); sdr = cmd.ExecuteReader(); while (sdr.Read() newnode3.Nodes.Add(sdr3.ToString().Trim(); sdr.Close(); cmd = new SqlCommand("select * from food where FoodType='4'", conn); sdr = cmd.ExecuteReader(); while (sdr.Read() newnode4.Nodes.Add(sdr3.ToStrin
35、g().Trim(); sdr.Close(); cmd = new SqlCommand("select * from Waiter", conn);/找出所有服务员信息 sdr = cmd.ExecuteReader(); while (sdr.Read() /将WaiterName字段信息找出添加到cbWaiter.Items上 cbWaiter.Items.Add(sdr"WaiterName".ToString().Trim(); cbWaiter.SelectedIndex = 0; sdr.Close(); cmd = new SqlCom
36、mand("select RoomStatus from Room where RoomName='" + RName + "'", conn); string zt = Convert.ToString(cmd.ExecuteScalar(); if (zt.Trim() = "待用") groupBox1.Enabled = false; groupBox2.Enabled = false; groupBox3.Enabled = false; groupBox4.Enabled = false; conn.Clo
37、se(); GetData(); tvFood.ExpandAll(); private void GetData()/以下代码用来将GuestFood表中信息查询出来捆绑到DataGridView上 SqlConnection conn = connectToDatabase.restaurantManagementConn(); SqlDataAdapter sda = new SqlDataAdapter("select foodname,foodsum,foodallprice,waitername, textOfDetails,diningTable,datetime fr
38、om GuestFood where diningtable='" + RName + "'order by ID desc", conn); DataSet ds = new DataSet(); sda.Fill(ds); dgvFoods.DataSource = ds.Tables0; /对treeview上节点执行双击操作时会执行以下代码 private void tvFood_DoubleClick(object sender, EventArgs e) string foodname = tvFood.SelectedNode.Tex
39、t;/将双击项名称取出赋值给foodname if (foodname = "煲汤" | foodname = "肉菜" | foodname = "素菜" | foodname = "主食") else SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); SqlCommand cmd = new SqlCommand("select * from food where foodname='
40、" + foodname + "'", conn); SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read(); txtNum.Text = sdr"foodnum".ToString().Trim(); txtName.Text = foodname; txtprice.Text = sdr"foodprice".ToString().Trim(); conn.Close(); if (txtpnum.Text = "") MessageBox.Sh
41、ow("数量不能为空"); return; else txtallprice.Text = Convert.ToString(Convert.ToInt32(txtprice.Text) * Convert.ToInt32(txtpnum.Text); private void btnDelete_Click(object sender, EventArgs e)/单击删除按钮时执行如下代码 if (dgvFoods.SelectedRows.Count > 0) string names = dgvFoods.SelectedCells0.Value.ToStrin
42、g(); SqlConnection conn = connectToDatabase.restaurantManagementConn(); conn.Open(); SqlCommand cmd = new SqlCommand("delete from GuestFood where foodname='" + names + "' and diningTable='" + RName + "'", conn); cmd.ExecuteNonQuery(); conn.Close(); GetData(); private void btnSave_Click(object sender, EventArgs e) if (txtName.Text = "" | txtNum.Text = "" | txtprice.Text = "") MessageBox.Show("请将选择菜系"); return; else if (txtpnum.Text = "") MessageBox.Show("数量不能为空"); return; else i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册土木工程师考试注意力管理试题及答案
- 家具设计中的市场调研方法与数据综合分析试题及答案
- 提高商务写作技巧的试题及答案
- 实验结果分析和讨论题目及答案
- 抖音创业常用合同协议书
- 家具安全性设计的重要性试题及答案
- 美术山东一模试题及答案
- 安全工程师建筑施工考试新变化试题及答案
- 山东学前综评试题及答案
- 汕尾电工考试试题及答案
- 湖南中医药大学学位英语历年真题及答案
- DL-T+1860-2018自动电压控制试验技术导则
- 单螺杆泵说明书
- JT-T-1213-2018陆港设施设备配置和运营技术规范
- 五年级劳动课件收纳
- 行政复议法-形考作业2-国开(ZJ)-参考资料
- 2023-2024学年人教版数学八年级下册期中复习卷
- (高清版)TDT 1044-2014 生产项目土地复垦验收规程
- MBA-组织行为学课件
- 白云枕头-模板参考
- 奥迪汽车介绍
评论
0/150
提交评论