引言
中国历来有“民以食为天”的传统,餐饮业作为我国第三产业中的一个支柱产业,一直在社会发展与人民生活中发挥着重要作用。特别是最近几年,我国餐饮业呈现出高速增长的发展势头,成为“热门”行业之一。餐饮业呈现出迅速发展、繁荣兴旺的景象,确实使不少想瞄准嘴巴做生意的人产生了跃跃欲试的念头。因为看到行业前景和利益驱动的原因,进入这一领域的经营者必然会大大增加,不可避免地要带来激烈而残酷的竞争。与其他行业相比,餐饮业由于餐饮方式的多样化,相对来说,在变换品种和经营形式时不需要投入很多的资金和花费大量的时间。因此,在竞争中比较容易找到出路,也不至于陷入低价竞争的泥潭拔不出腿来。由此运用计算机可以节省很多人力、物力资源,使用计算机对餐饮进行管理,具有人工管理所无法比拟的优点。例如统计结账快递、安全性保密性好、可靠性好,这些优点能够极大提高餐饮管理的效率,增强企业的竞争力,同时也是企业的科学化、正规化管理,与世界接轨的重要条件。
关键字:c#,microsoft visual studio 2005, sql server 2000 餐饮管理系统
1、系统分析
随着餐饮业的不断发展,餐饮管理系统的内容对于餐饮业的决策和管理者来说非常重要。本系统主要包括桌台显示、消费查询、人事档案及权限等几个部分,本系统有良好的用户接口,使用方便。具有完善的查询,对维护系统起到了辅助决策的作用,能及时方便的进行查询、修改、删除等操作。
用例描述图1-1餐饮管理系统用
用例描述
表1-1基础信息用例描述
简短描述 管理员对系统基础信息进行操作 逐步描述 1、 用户进入主界面,选择基础功能模块 2、 选择桌台信息,对桌台信息进行查询 3、 选择职员信息,对职员信息进行查询 表1-2辅助工具用例描述
简短描述 用户选用系统提供辅助工具 逐步描述 1、 用户进入主界面,选择辅助工具功能 2、 选择计算器,进行计算 3、 选择日历,查看日历 4、 选择记事本,打开记事本 表1-3系统维护用例描述
简短描述 管理员对系统进行维护操作 逐步描述 1、 管理员选择维护模块 2、 选择管理权限,对用户权限进行管理 3、 选择系统备份,对系统数据库进行备份操作 4、 选择系统恢复,将系统数据库恢复到指定状态 表1-4系统设置用例描述
简短描述 用户对系统进行简单设置 逐步描述 1、 用户登录主界面,选择系统设置功能 2、 用户选择修改密码,对自己密码进行修改 3、 用户选择锁定系统,则需重新输入号才能操作系统 表1-5系统帮助用例描述
简短描述 用户查看系统帮助模块 逐步描述 1、 用户登录主界面,选择帮助模块 2、 用户可以查看帮助界面信息 表1-6系统退出用例描述
简短描述 用户退出本系统 逐步描述 1、 用户登录主界面,选择退出功能模块 2、 用户退出本系统
图1-2开台协作图
图1-3开台顺序图
图1-4开台、点菜、结账状态图
图1-5开台活动图
图1-7包图
2、 系统设计
2.1系统目标
1、系统采用人及交互方式,界面友好美观,信息查询灵活方便,数据存
储安全可靠。
2、实现对餐厅顾客开台。点菜/加菜、账目查询和避免人为错误。 3、实现对消费账目的自动结算。
4、实现对消费的历史记录进行查询,支持模糊查询。 5、系统应最大限度实现易维护性和易操作性。
6、实现对用户输入的数据进行严格的数据检验,尽可能避免人为错误
2.2功能结构图
图2-1系统功能结构图
2.3程序运行的环境
1、 系统开发平台:microsoft visual studio 2005。. 2、 系统开发语言:c#。
3、 数据库管理系统:microsoft sql server 2000。 4、 运行平台:window xp/window 2000/window7。 5、 运行环境:microsoft.net framework sdk 2.0。 6、 分辨率:最佳效果1024*768。
2.4数据库设计
由于系统管理餐饮方面数据较多,商品信息、消费信息以及账目,占较大空间,选择用microsoft sql server 2000 数据库存储数据,数据库名为db-Mrcy,如图
图2-2数据库db-Mrcy数据表图
2.5数据库的概念结构设计
图2-3商品类别实体的E-R图
图2-4商品信息实体E-R图
图2-5顾客消费信息实体E-R图
图2-6用户信息表
图2-7桌台信息实体E-R图
图2-8职员信息实体E-R图
2.6数据库的逻辑结构设计
表2-1顾客消费信息表
表2-2商品信息表
表2-3商品类别信息表
表2-4桌台信息表
表2-5用户信息表
表2-6职员信息表
3、系统代码和实现
3.1、登录界面设计
3.11登录界面代码设计
运行效果如下:
登录本系统的登录模块,用户输入用户名与密码,单击“登录”进行验证。在数据库中查询。使用sqlDataReader对象的HasRows属性判断登录用户名与密码是否正确,主要代码如下:
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;
using System.Windows.Forms; using System.Data.SqlClient; namespace MrCy {
public partial class frmLogin : Form {
public frmLogin() {
InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) {
txtName.Focus();
}
private void txtPwd_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == 13) {
btnSubmit_Click(sender, e); } }
private void btnSubmit_Click(object sender, EventArgs e) {
if (txtName.Text == \"\") {
MessageBox.Show(\"请?输º?入¨?用®?户¡ì名?\", \"警¡¥告?\", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else {
if (txtPwd.Text == \"\") {
MessageBox.Show(\"请?输º?入¨?密¨¹码?\", \"警¡¥告?\", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else {
SqlConnection conn = BaseClass.DBConn.CyCon(); conn.Open();
SqlCommand cmd = new SqlCommand(\"select count(*) from tb_User where UserName='\" + txtName.Text + \"' and UserPwd='\" + txtPwd.Text + \"'\", conn); int i = Convert.ToInt32(cmd.ExecuteScalar()); if (i > 0) {
cmd = new SqlCommand(\"select * from tb_User where UserName='\" + txtName.Text + \"'\", conn);
SqlDataReader sdr = cmd.ExecuteReader(); sdr.Read();
string UserPower = sdr[\"power\"].ToString().Trim(); conn.Close();
frmMain main = new frmMain(); main.power = UserPower; main.Names = txtName.Text;
main.Times = DateTime.Now.ToShortDateString();
main.Show(); this.Hide(); } else {
MessageBox.Show(\"用®?户¡ì名?或¨°密¨¹码?错䨪误¨®\"); } } } }
private void btnConcel_Click(object sender, EventArgs e) {
if (MessageBox.Show(\"确¨¡¤定¡§退ª?出?系¦Ì统ª3吗e?ê?\", \"提¬¨¢示º?\", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.OK) {
Application.Exit(); } } } }
3.12登录窗体控件
登录窗体用到的主要控件如下:
3.2主窗体模块的设计
3.21主窗体代码设计 运行的效果图如下:
主窗体的主要代码如下:
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;
using System.Windows.Forms; using System.Data.SqlClient; 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\") {
系¦Ì统ª3维?护¡èSToolStripMenuItem.Enabled = false; 基¨´础ä?信?息¡éMToolStripMenuItem.Enabled = false; }
if (power == \"1\") {
系¦Ì统ª3维?护¡èSToolStripMenuItem.Enabled = false; } }
private void AddItems(string rzt) {
if (rzt == \"使º1用®?\") {
lvDesk.Items.Add(sdr[\"RoomName\"].ToString(), 1); } else {
lvDesk.Items.Add(sdr[\"RoomName\"].ToString(), 0); } }
private void 开a台¬¡§ToolStripMenuItem_Click(object sender, EventArgs e) {
if (lvDesk.SelectedItems.Count != 0) {
string names = lvDesk.SelectedItems[0].SubItems[0].Text; frmOpen openroom = new frmOpen(); openroom.name = 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 == \"使º1用®?\") {
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 == \"待äy用®?\")
{
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 取¨?消?开a台¬¡§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='待äy用®?',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 权¨¡§限T管¨¹理¤¨ªToolStripMenuItem1_Click(object sender, EventArgs e) {
frmQxGl qx = new frmQxGl(); qx.ShowDialog(); }
private void 系¦Ì统ª3备À?份¤YToolStripMenuItem1_Click(object sender, EventArgs e) {
frmBF bf = new frmBF(); bf.ShowDialog(); }
private void 系¦Ì统ª3恢?复¡äToolStripMenuItem1_Click(object sender, EventArgs e) {
frmHF hf = new frmHF(); hf.ShowDialog(); }
private void 口¨²令¢?设¦¨¨置?ToolStripMenuItem1_Click(object sender, EventArgs e) {
frmPwd pwd = new frmPwd(); pwd.names = Names; pwd.ShowDialog(); }
private void 锁?定¡§系¦Ì统ª3ToolStripMenuItem1_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 退ª?出?系¦Ì统ª3ToolStripMenuItem1_Click(object sender, EventArgs e) {
if (MessageBox.Show(\"确¨¡¤定¡§退ª?出?本À?系¦Ì统ª3吗e?ê?\", \"提¬¨¢示º?\", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK) {
Application.Exit(); } }
private void 系¦Ì统ª3维?护¡èSToolStripMenuItem_Click(object sender, EventArgs e) {
} } }
3.22主窗体主要控件 主窗体用到的控件如下:
3.3开台模块的设计与实现
3.31开台模块代码设计
运行的效果图如下:
主要代码如下:
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;
using System.Windows.Forms; using System.Data.SqlClient; namespace MrCy {
public partial class frmOpen : Form {
public frmOpen() {
InitializeComponent(); }
public string name; public SqlConnection conn;
private void frmOpen_Load(object sender, EventArgs e) {
conn = BaseClass.DBConn.CyCon(); conn.Open();
SqlCommand cmd = new SqlCommand(\"select * from tb_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 tb_Waiter\",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 != 13) {
MessageBox.Show(\"请?输º?入¨?数ºy字Á?\"); e.Handled = true; } }
private void btnSave_Click(object sender, EventArgs e) {
if (txtNum.Text == \"\"||Convert.ToInt32(txtNum.Text)<=0) {
MessageBox.Show(\"请?输º?入¨?用®?餐¨ª人¨?数ºy\"); } else {
string RoomName = cbNum.SelectedItem.ToString();
SqlCommand cmd1 = new SqlCommand(\"update tb_Room set GuestName='\" + txtName.Text + \"',zhangdanDate='\" + dateTimePicker1.Value.ToString() + \"',Num='\" +
Convert.ToInt32(txtNum.Text) + \"',WaiterName='\" + cbWaiter.SelectedItem.ToString() + \"',RoomZT='使º1用®?' where RoomName='\" + name + \"'\", conn); cmd1.ExecuteNonQuery(); this.Close(); } }
private void btnExit_Click(object sender, EventArgs e) {
this.Close();
} } }
3.32开台窗体主要控件 用到的主要的控件如下:
4、总结
开发餐饮管理系统,要抓住开发的核心部分。对餐饮管理系统的整体设计有一个深入的了解,餐饮管理系统大体有桌台显示、开台、点菜和结账4大核心组成,掌握着四个部分的开发,其他功能去补充添加。并且要注重软件的测试工作。
5、参考文献
[1] 曹步清,金瓯. Java中的Abstract Class与Interface技术研究[J].计算机技术与发展,2006,16(8):110-112,115.
[2] Watson Karli, Bellinaso Marco,等. C#入门经典[M].康博译.北京:清华大学出版社,2002. [3] 郝春强.C#基础与实例教程[M].北京:中国电力出版社,2006. [4] 刘克成,张凌晓.C#程序设计[M].北京:中国铁道出版社,2008. [5] 西红柿炒鸭蛋.面试题:接口和抽象类的区别[DB/OL].
[6] 尉哲明,郝建文. Java中利用内部类简化程序的编写[J].微机发展,2003,13(3):41-44. [7] 施艳妹.C#语言程序设计教程[M].北京:中国水利水电出版社,2004. [8] 李兰友,杨晓光.Visual C#.NET开发实践[M].北京:人民邮电出版社,2001. [9] 杨应红.Web技术文档[DB/OL].
[10] 点点滴滴.C#抽象类与接口的比较[DB/OL].
图1-6类图
因篇幅问题不能全部显示,请点此查看更多更全内容