郑州科技学院C#课程设计院系信息工程学院项目名称餐饮管理系统班级10计科2班学号201015058姓名刘云涛指导老师王玉萍完成日期2013年6月2号目录摘要.......................................................................................................一.需求分析 (1)1.系统可行性分析 (1)2.经济上可行性分析 (1)3.管理上的可行性分析 (2)4.简要总结 (2)二、总体设计 (3)2.1 项目规划 (3)2.2系统功能结构图 (8)三.系统设计 (8)四系统的具体实施 (10)(一) 系统介绍 (10)(二) 各个模块的实现 (10)五、详细设计 (17)5.1主界面的代码 (17)5.2职工信息查询代码 (25)5.3消费查询部分代码 (29)五、致谢词 (30)六、参考文献 (31)摘要当今社会已经进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已经变得十分普遍了,如同我们离不开的自行车、汽车一样。
我们应该承认,谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能够在各种竞争中立于不败之地。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已经为人们深刻认识,它以已经进入人类社会的各个领域并发挥着越来越重要的作用。
越来越多的管理人员意识到信息管理的重要性。
作为计算机应用的一部分,使用计算机对餐饮企业信息进行管理,具有手工管理所无法比拟的优点。
例如:检索迅速、查询方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高信息管理的效率,也是企业科学化、正规化、管理与世界接轨的重要条件。
关键词:餐饮管理系统开台点菜消费查询结账一.需求分析1.系统可行性分析(1)技术上的可行性:技术方面的可行性就是根据现有的技术条件,能否实现系统的各项要求。
据分析此系统采用VS2008位开发平台、C#为开发语言、SQL Server 2000为后台数据库,根据所学的知识完全可以设计出此系统的各个功能和模块。
(2)硬件设备上的可行性分析:设备上的可行性是指该系统对所需的硬件设备,如PC机、打印机或网络等的性能要求。
据分析现有设备的性能完全能够满足系统功能的要求。
(3)软件上的可行性分析:本系统属于数据库应用程序,本餐饮管理系统需求一个数据库服务器及其运行的操作系统,根据客户的数据量并不是十分巨大,我们选择目前市场上价格比较低廉的数据库服务器产品:Microsoft SQL Server 2000及配套的平台Windows Server 2003操作系统。
而前台开发工具采用Visual Studio 2008,利用其可视化的开发环境、丰富的控件资源,能够快速地开发出应用程序。
这些软件在中小型MIS开发中已经被大量应用,技术上都比较成熟,因此技术上是可行的2.经济上可行性分析(1)费用上可行性分析:根据酒店多年来良好的经济效益,酒店的经济实力比较雄厚,加上硬件设备和软件的价格比较便宜,就这为系统的实施奠定了经济基础,足能提供购买硬件设备和开发软件所需的资金。
(2)效用上的可行性分析:实施该系统也能给公司带来长期效益,它可以帮助领导实现管理方法的现代化、科学化、极大地提高餐饮企业的工作质量与工作效率、减少管理支出的费用,从而保证酒店管理的可持续的良好发展。
因此经济上具有了系统开发的可行性。
3.管理上的可行性分析酒店的领导认识到当今社会的发展趋势,认为使用计算机从事酒店管理是公司当前非行必要的举措。
公司员工也会对本系统的开发十分的欢迎,因为采用计算机管理方式可以减少或避免酒店服务人员因为马虎大意而导致经济财产的错误,或由于客人过多,造成开台、点菜等方面的混乱。
另外,为了提高酒店的管理水平,适应管理信息系统的要求,该酒店对管理人员进行了全面的培训,提高了他们对餐饮管理信息系统的认识。
因此在管理上具有了系统开发的可能性。
4.简要总结经过细致地初步调查和严密地可行性分析,我认为在现有的条件下,为餐饮业开发一款功能较齐全的餐饮管理系统是完全可行的。
二、总体设计2.1 项目规划餐饮管理系统主要由用户登录、桌台信息管理、服务员信息管理、修改密码、开台、取消开台、点/加菜、消费查询、和退出等模块组成,具体规划如下。
2.1.1用户登录模块该模块主要用于实现验证用户是否合法,只有合法用户才能有权登录,只有登录成功情况下才能进入系统功能主界面,并且在登录的同时能验证登录人员的管理权限,根据权限显示其能管理范围。
2.2.2 桌台信息管理模块该模块主要用于管理桌台的信息,可以设置桌台名称,桌台位置,桌台占用所需价钱。
2.2.3服务员信息管理模块该模块主要用于方便对服务人员的信息进行管理。
2.2.4 修改密码模块该模块主要用于实现对登录人员的密码进行管理,长时间不更换密码是不安全的,增加此模块能增加系统的安全性。
2.2.5开台模块该模块主要用于实现对顾客进行开台,已经占用的桌台不能被再次分配,方便分配未占用的桌台给顾客2.2.6取消开台模块该模块主要用于实现对已经开台的桌台进行取消开台。
2.2.7消费查询模块该模块主要用于实现客户能够查询自己已消费清单情况,进行核对自己的消费。
2.2.8结账模块该模块主要用于实现对客户的消费进行自动汇总,显示消费金额,能进行找零计算。
2.2.9数据库模块该模块主要关于数据表的设计,各个表的命名及字段命名都是以相应名称的拼音首字母组合而成,下面所示为上面所说的在数据库中的六张表的截图信息。
图2-1用户登陆表tb_User图2-2服务人员信息表tb_Waiter图2-3餐桌和房间信息表tb_Room图2-4食物种类表tb_foodtype图2-5食物表tb_food图2-6客人点菜信息表tb_GuestFood图2-1用户登陆表tb_User图2-2服务人员信息表tb_Waiter图2-3餐桌和房间信息表tb_Room图2-4食物种类表tb_foodtype图2-5食物表tb_food图2-6客人点菜信息表tb_GuestFood2.2系统功能结构图三.系统设计 1.当用户登陆系统时,系统会根据用户填写的用户名和密码根据数据库中的tb_User 表进行查询用户名和密码是否正确,进而决定是否登陆成功进入主界面。
2.如果用户登陆成功则进入系统主窗体,系统根据当前用户数的权限决定当前用户的操作级别。
该系统有三种级别,分别是超级管理员、经理和一般用户。
如果当前用户的权限是超级管理员,则可以使用系统的所有功能其中包括:系统维护、基础信息、系统设置、辅助工具、帮助和退出系统。
如果用户的权限是经理权限,则可使用基础信息、系统设置、桌台信息职员信息日历计算器记事本系统备份和恢复关于退出系统权限管理修改密码锁定系统基础信息 辅助工具 系统维护 帮助 退出 系统设置 餐饮管理系统辅助工具、帮助和退出系统。
如果当前用户的权限是一般用户权限,则只能使用系统设置、辅助工具、帮助和退出系统。
注:以上三种权限的用户都可以对客户进行开桌、点菜、消费查询、结账功能。
采用这种不同权限的登陆方式可以保障系统的安全性和可靠性,下图为系统的业务流程图。
如图所示。
否 是是否系统登录是否登陆 系统主窗体系统管理员 系统维护基础信息 系统设置退出系统工具 帮助四系统的具体实施(一) 系统介绍本系统属于小型的餐饮管理系统,可以有效地对中小型餐厅消费进行管理,本系统应达到以下目标:1.系统采用人机交互的方式,界面美观友好,信息查询灵活、方便,数据存储安全可靠。
2.实现对餐厅顾客开台、点菜/加菜、账目查询和结账等操作。
3.对用户输入的数据,进行严格的数据检验,尽可能的避免人为错误。
4.实现对消费账目自动结算。
5.实现对消费的历史记录进行查询,支持模糊查询。
6.系统应最大限度地实现易维护性和易操作性。
(二) 各个模块的实现4.1登陆模块进入系统前首先进入登录这个界面,当用户登录成功后,可以进入主界面。
如图:图4-1登陆模块用户信息ER 图4.2.主窗体设计用户信息 Tb_User系统编号 ID 用户名Username 用户权限power 用户密码UserPwd4.2.1基础信息—-桌台信息可实现重填、修改有增加、删除、查询桌台信息的功能双击图标是桌台基本信息4.2.2基础信息—职工信息4.3辅助工具4.3.1辅助工具—日历4.3.2辅助工具—计算器4.3.3辅助工具—记事本4.4系统维护4.4.1系统维护—权限管理4.5系统设置4.5.1系统设置—修改密码4.5.2系统设置—锁定系统4.6帮助4.7快捷菜单4.7.1开台4.7.2点\加菜4.7.3消费查询4.7.4结账五、详细设计5.1主界面的代码namespace MrCy{public partial class frmMain : Form {public frmMain(){InitializeComponent();}public SqlDataReader sdr;public string power;public string Names;public string Times;private void frmMain_Load(object sender, EventArgs e){switch (power){case"0": toolStripStatusLabel13.Text = "超级管理员"; break;case"1": toolStripStatusLabel13.Text = "经理"; break;case"2": toolStripStatusLabel13.Text = "一般用户"; break;}toolStripStatusLabel10.Text = Names;toolStripStatusLabel16.Text = Times;if (power == "2"){系统维护SToolStripMenuItem.Enabled = false;基础信息MToolStripMenuItem.Enabled = false;}if (power == "1"){系统维护SToolStripMenuItem.Enabled = false;}}private void AddItems(string rzt){if (rzt == "使用"){lvDesk.Items.Add(sdr["RoomName"].ToString(), 1);}else{lvDesk.Items.Add(sdr["RoomName"].ToString(), 0);}}private void开台ToolStripMenuItem_Click(object sender, EventArgs e) {if (lvDesk.SelectedItems.Count != 0){string names = lvDesk.SelectedItems[0].SubItems[0].Text;frmOpen openroom = new frmOpen(); = names;openroom.ShowDialog();}else{MessageBox.Show("请选择桌台");}}private void frmMain_Activated(object sender, EventArgs e){lvDesk.Items.Clear();SqlConnection conn = BaseClass.DBConn.CyCon();conn.Open();SqlCommand cmd = new SqlCommand("select * from tb_Room", conn); sdr = cmd.ExecuteReader();while (sdr.Read()){string zt = sdr["RoomZT"].ToString().Trim();AddItems(zt);}conn.Close();}private void点菜ToolStripMenuItem_Click(object sender, EventArgs e) {if (lvDesk.SelectedItems.Count != 0){string names = lvDesk.SelectedItems[0].SubItems[0].Text;frmDC dc = new frmDC();dc.RName = names;dc.ShowDialog();}else{MessageBox.Show("请选择桌台");}}private void消费查询ToolStripMenuItem_Click(object sender, EventArgs e){if (lvDesk.SelectedItems.Count != 0){string names = lvDesk.SelectedItems[0].SubItems[0].Text;frmSerch serch = new frmSerch();serch.RName = names;serch.ShowDialog();}else{MessageBox.Show("请选择桌台");}}private void结账ToolStripMenuItem_Click(object sender, EventArgs e) {if (lvDesk.SelectedItems.Count != 0){string names = lvDesk.SelectedItems[0].SubItems[0].Text;frmJZ jz = new frmJZ();jz.Rname = names;jz.ShowDialog();}else{MessageBox.Show("请选择桌台");}}private void lvDesk_DoubleClick(object sender, EventArgs e){frmDetails details = new frmDetails();details.TableName = lvDesk.SelectedItems[0].SubItems[0].Text; details.ShowDialog();}private void lvDesk_Click(object sender, EventArgs e){string names = lvDesk.SelectedItems[0].SubItems[0].Text;SqlConnection conn = BaseClass.DBConn.CyCon();conn.Open();SqlCommand cmd = new SqlCommand("select * from tb_Room where RoomName='" + names + "'", conn);SqlDataReader sdr = cmd.ExecuteReader();sdr.Read();string zt = sdr["RoomZT"].ToString().Trim();sdr.Close();if (zt == "使用"){this.contextMenuStrip1.Items[0].Enabled = false;this.contextMenuStrip1.Items[1].Enabled = true;this.contextMenuStrip1.Items[3].Enabled = true;this.contextMenuStrip1.Items[5].Enabled = true;this.contextMenuStrip1.Items[6].Enabled = true;}if (zt == "待用"){this.contextMenuStrip1.Items[0].Enabled = true;this.contextMenuStrip1.Items[1].Enabled = false;this.contextMenuStrip1.Items[3].Enabled = false;this.contextMenuStrip1.Items[5].Enabled = false;this.contextMenuStrip1.Items[6].Enabled = false;}conn.Close();}private void取消开台toolStripMenuItem_Click(object sender, EventArgs e){if (lvDesk.SelectedItems.Count != 0){string names = lvDesk.SelectedItems[0].SubItems[0].Text;SqlConnection conn = BaseClass.DBConn.CyCon();conn.Open();SqlCommand cmd = new SqlCommand("update tb_Room set RoomZT='待用',Num=0 where RoomName='" + names + "'", conn);cmd.ExecuteNonQuery();cmd = new SqlCommand("delete from tb_GuestFood where zhuotai='" + names + "'", conn);cmd.ExecuteNonQuery();conn.Close();frmMain_Activated(sender, e);}else{MessageBox.Show("请选择桌台");}}private void桌台信息ToolStripMenuItem1_Click(object sender, EventArgs e){frmDesk desk = new frmDesk();desk.ShowDialog();}private void职员信息ToolStripMenuItem1_Click(object sender, EventArgs e){frmUser users = new frmUser();users.ShowDialog();}private void日历ToolStripMenuItem1_Click(object sender, EventArgs e){frmCalender calender = new frmCalender();calender.ShowDialog();}private void记事本ToolStripMenuItem1_Click(object sender, EventArgs e){System.Diagnostics.Process.Start("notepad.exe");}private void计算器ToolStripMenuItem1_Click(object sender, EventArgs e){System.Diagnostics.Process.Start("calc.exe");}private void权限管理ToolStripMenuItem1_Click(object sender, EventArgs e){frmQxGl qx = new frmQxGl();qx.ShowDialog();}private void系统备份ToolStripMenuItem1_Click(object sender, EventArgs e){frmBF bf = new frmBF();bf.ShowDialog();}private void系统恢复ToolStripMenuItem1_Click(object sender, EventArgs e){frmHF hf = new frmHF();hf.ShowDialog();}private void口令设置ToolStripMenuItem1_Click(object sender, EventArgs e){frmPwd pwd = new frmPwd();s = Names;pwd.ShowDialog();}private void锁定系统ToolStripMenuItem1_Click(object sender, EventArgs e){frmLock locksystem = new frmLock();locksystem.Owner = this;locksystem.ShowDialog();}private void关于ToolStripMenuItem1_Click(object sender, EventArgs e){AboutBox1 ab = new AboutBox1();ab.ShowDialog();}private void退出系统ToolStripMenuItem1_Click(object sender, EventArgs e){if (MessageBox.Show("确定退出本系统吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK) {Application.Exit();}}private void系统维护SToolStripMenuItem_Click(object sender, EventArgs e){}}5.2职工信息查询代码namespace MyCyMS{public partial class frmUser : Form{public frmUser(){InitializeComponent();}private void btQuery_Click(object sender, EventArgs e){BindData();}private void BindData(){SqlConnection conn = BaseClass.BaseClass.CyCon();SqlDataAdapter sda = new SqlDataAdapter("select ID,WaiterName 姓名,CardNum 身份证号,WaiterNum 服务员编号,Sex 性别,Age 年龄,Tell 电话号码from tb_Waiter order by ID ", conn);DataSet ds = new DataSet();sda.Fill(ds);dataGridView1.DataSource = ds.Tables[0];}//修改按钮private void button1_Click(object sender, EventArgs e) {btReWrite.Enabled = false;btSave.Enabled = true;btConcle.Enabled = true;txtname.Enabled = false;txtAge.Enabled = true;txtIDcard.Enabled = true;txtWaiterNum.Enabled = true;txtTel.Enabled = true;cbSex.Enabled = true;}private void btExit_Click(object sender, EventArgs e){this.Close();}private void btReWrite_Click(object sender, EventArgs e) {txtname.Text = "";txtAge.Text = "";txtIDcard.Text = "";txtTel.Text = "";txtWaiterNum.Text = "";txtname.Enabled = true;txtAge.Enabled = true;txtIDcard.Enabled = true;txtWaiterNum.Enabled = true;txtTel.Enabled = true;cbSex.Enabled = true;btChange.Enabled = false;btDelete.Enabled = true;btSave.Enabled = true;}private void btDelete_Click(object sender, EventArgs e){SqlConnection conn = BaseClass.BaseClass.CyCon();conn.Open();SqlCommand cmd = new SqlCommand("delete from tb_Waiter where ID='" + dataGridView1.SelectedCells[0].Value.ToString() + "'", conn);cmd.ExecuteNonQuery();conn.Close();BindData();}private void btSave_Click(object sender, EventArgs e){SqlConnection conn = BaseClass.BaseClass.CyCon();conn.Open();SqlCommand cmd = new SqlCommand("select count(*) from tb_Waiter where WaiterName='" + txtname.Text + "'", conn);int i = Convert.ToInt32(cmd.ExecuteScalar());if (i > 0){cmd = new SqlCommand("update tb_Waiter set WaiterName='" + txtname.Text + "',CardNum='" + txtIDcard.Text + "',WaiterNum='" + txtWaiterNum.Text + "',Sex='" + cbSex.SelectedItem.ToString() + "',Age='" + txtAge.Text + "',Tell='" + txtTel.Text + "' where ID='" +dataGridView1.SelectedCells[0].Value.ToString() + "'", conn);cmd.ExecuteNonQuery();conn.Close();BindData();btReWrite.Enabled = true;btChange.Enabled = false;btSave.Enabled = false;btQuery.Enabled = true;btConcle.Enabled = false;btDelete.Enabled = false;btExit.Enabled = true;txtname.Enabled = false;}else{cmd = new SqlCommand("insert intotb_Waiter(WaiterName,CardNum,WaiterNum,Sex,Age,Tell) values('" +txtname.Text + "','" + txtIDcard.Text + "','" + txtWaiterNum.Text + "','" + cbSex.SelectedItem.ToString() + "','" + txtAge.Text + "','" + txtTel.Text + "')", conn);cmd.ExecuteNonQuery();conn.Close();BindData();btChange.Enabled = true;btReWrite.Enabled = true;btSave.Enabled = false;btQuery.Enabled = true;btConcle.Enabled = false;btDelete.Enabled = true;btExit.Enabled = true;txtname.Enabled = false;txtname.Enabled = false;}}private void frmUser_Load(object sender, EventArgs e){cbSex.SelectedIndex = 0;}private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){try{txtname.Text =dataGridView1.SelectedCells[1].Value.ToString();txtIDcard.Text =dataGridView1.SelectedCells[2].Value.ToString();txtWaiterNum.Text =dataGridView1.SelectedCells[3].Value.ToString();cbSex.SelectedItem =dataGridView1.SelectedCells[4].Value.ToString().Trim();txtAge.Text =dataGridView1.SelectedCells[5].Value.ToString();txtTel.Text =dataGridView1.SelectedCells[6].Value.ToString();btChange.Enabled = true;btDelete.Enabled = true;}catch (Exception err){MessageBox.Show("不能单击单元格 " + err.ToString(), "错误!");}}}}5.3消费查询部分代码namespace MrCy{public partial class frmSerch : Form{public frmSerch(){InitializeComponent();}public string RName;private void frmSerch_Load(object sender, EventArgs e){SqlConnection conn = BaseClass.DBConn.CyCon();SqlDataAdapter sda = new SqlDataAdapter("selectfoodname,foodsum,foodallprice,waitername,beizhu,zhuotai,datatime fromtb_GuestFood where zhuotai='" + RName + "'order by ID desc", conn);DataSet ds = new DataSet();sda.Fill(ds);dataGridView1.DataSource = ds.Tables[0];}private void button1_Click(object sender, EventArgs e){this.Close();}private void printDocument1_BeginPrint(object sender,System.Drawing.Printing.PrintEventArgs e){}}}五、致谢词我认为这个收获应该说是相当大的。