餐饮管理系统
摘要:近年来,随着人民的生活水平的不断提高,餐饮业的消费持续增长,竞争愈来愈激烈。然而,传统餐饮企业的日常运作还是靠人工管理,从原材料入库到客人点单,再到结账基本上由人工完成记录,这样做不仅耗费人力资源而且容易导致记录丢失或重复等错误,造成管理水平低下。作为传统的餐饮企业更是存在这些问题,进货,库存有人工管理,客人点单需服务员记录并送至厨房,客人结账由手工记录,人力耗费大,客人等待时间长,管理效率低下,这就迫切需要标准的、高效率的计算机管理方式引导其发展,通过计算机管理企业的日常运作,给管理者以决策参考的模型,来不断完善管理水平,提高工作效率。
作为计算机应用的一部分,使用计算机对餐饮企业信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,也是企业的科学化、正规化管理与世界接轨的重要条件。
经过分析,本系统运用了Microsoft SQL Server2008为后台数据库,以Visual studio.NET 2008为前端开发工具,系统实现了前台管理、桌台信息的查询、开台信息、点菜、打印,报表、收银、桌台信息管理、员工管理、菜单维护、消费查询和盈利信息查询等功能。
C#语言介绍
C#语言是从C和C++语言演化而来的,是一种简单、现代、面向对象且类型安全的编程语言。C#具备了C++固有的强大能力,同时也吸收了Java和Delphi等语言的特点和精华,是目前进行.NET开发的首选语言。
C# (C sharp) 是微软对这一问题的解决方案。C#是一种最新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选——无论是高级的商业对象还是系统级的应用程序。使用简单的C#语言结构,这些组件可以方便的转化为XML 网络服务,从而使它们可以由任何语言在任何操作系统上通过Internet进行调用。
最重要的是,C#使得C++程序员可以高效的开发程序,而绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
C#语言技术优点
效率与安全性
新兴的网络经济迫使商务企业必须更加迅速的应对竞争的威胁。开发者必须不断缩短开发周期,不断推出应用程序的新版本,而不仅仅是开发一个“标志性”的版本。
C#在设计时就考虑了这些问题。它使开发者用更少的代码做更多的事,同时也不易出错。 支持现有的网络编程新标准
新的应用程序开发模型意味着越来越多地解决方案依赖于新出现的网络标准,例如HTML,XML,SOAP等。现存的开发工具往往都是早于Internet出现的,或者是在我们所
熟知的网络还处于孕育期时出现的。所以,它们一般无法很好地支持最新的网络技术。
C#程序员可以在Microsoft .NET平台上事半功倍的构建应用程序的扩展框架。C#包含了内置的特性,使任何组件可以轻松转化为XML网络服务,通过Internet被任何操作系统上运行的任何程序调用。 更突出的是,XML网络服务框架可以使现有的XML网络服务对程序员来说就和C#对象一样。这样,程序员就可以方便地使用他们已有的面向对象的编程技巧来开发利用现有的XML网络服务。 还有一些精细的特性,使得C#成为一流的网络编程工具。例如,XML正逐渐成为在网络上传输结构化数据的标准。这种数据集合往往非常小。为提高性能,C#允许把XML数据直接映射到struct数据类型,而不是class。这样对处理少量的数据非常有效。 消除大量程序错误
即使是专家级的C++程序员也常会犯一些最简单的小错误——比如忘了初始化变量,但往往就是这些小错误带来了难以预料的问题,有些甚至需要很长时间来寻找和解决。一旦一个程序作为产品来使用,就算最简单的错误纠正起来也可能要付出极其昂贵的代价。 C#的现代化设计能够消除很多常见的C++编程错误。 例如:
1. 资源回收减轻了程序员内存管理的负担。
2. C#中变量由环境自动初始化。
3. 变量是类型安全的。
这样,程序员编写与维护那些解决复杂商业问题的程序就更方便了。 对版本的更新提供内在的支持降低了开发成本
更新软件组件是一项很容易出错的工作,因为代码的修改可能无意间改变原有程序的语义。为协助开发者进行这项工作,C#为版本的更新提供内在的支持。例如,方法重载必须显式声明。这样可以防止编码错误,保证版本更新的灵活性。还有一个相关的特性就是对接口和接口继承的内在支持。这些特性使得C#可以开发复杂的框架并且随着时间不断发展更新它。
总体来说,这些特性使得开发程序项目的后续版本的过程更加健壮,从而减少后续版本的开发成本。
商业过程和软件实现的更好对应
企业的商业计划要付诸现实,必须在抽象的商业过程和实际的软件实现之间建立紧密地对应。不过大多数语言都很难做到这点。例如,如今的程序员们一般使用代码注释来注明哪个类对应于某个抽象的商业对象。
C#语言允许类型定义的,扩展的元数据。这些元数据可以应用于任何对象。项目构建者可以定义领域特有的属性并把他们应用于任何语言元素-类,接口等等。然后,开发人员可以编程检查每个元素的属性。这样,很多工作都变得方便多了,比如编写一个小工具来自动检查每个类或接口是否被正确定义为某个抽象商业对象的一部分,或者只是创建一份基于对象的领域特有属性的报表。定制的元数据和程序代码之间的紧密对应有助于加强程序的预期行为和实际实现的之间的对应关系。 扩展交互性
作为一种自动管理的,类型安全的环境,C#适合于大多数企业应用程序。但实际的经验表明有些应用程序仍然需要一些底层的代码,要么是因为基于性能的考虑,要么是因为要与现有的应用程序接口兼容。这些情况可能会迫使开发者使用C++, 即使他们本身宁愿使
用更高效的开发环境。 C#采用以下对策来解决这一问题:
1. 内置对组建对象模型(COM)和基于Windows?的API的支持; 2.允许有限制地使用纯指针(Native Pointer)。
在C#中,每个对象都自动生成为一个COM对象。开发者不再需要显式的实现IUnknown和其他COM接口.这些功能都是内置的.类似的,C#可以调用现有的COM对象,无论它是由什么语言编写的。
C#包含了一个特殊的功能,使程序可以调用任何纯API。在一段特别标记的代码中,开发者可以使用指针和传统C/C++特性,如手工的内存管理和指针运算。这是其相对于其它环境的极大优势。这意味着C#程序员可以在原有的C/C++代码的基础上编写程序,而不是彻底放弃那些代码。 无论是支持COM还是纯API的调用,都是为了使开发者在C#环境中直接拥有必要的强大功能。
一、问题及难点所在
1.数据库操作。
包括ACCESS数据库中数据表的制作,在程序中利用ADO技术进行数据的查询,检索,增加删除等操作,以及数据库。
2.模块之间的连接问题。
模块之间相互联系,进行数据交换,必须兼顾数据安全性和各个类之间的连接性的问
题。
3.系统安全性问题,由于数据库中存在金额等重要数据,必须对每个用户的访问权限加以限制,并可以修改用户权限。
二、 需求分析
随着现代社会的发展,餐饮行业作为服务业的龙头企业规模不断扩大,一个大型酒店的餐饮服务部门往往服务许多客人,而一个企业的经营管理人员往往分工明确,一个人或几个人无法完成如此繁杂的账目统计和餐饮结账等工作,传统的算账、记账等人工操作系统已经不能再适应现代企业的发展。为了使餐饮系统可以得到高效运转,伴随着计算机的普及,因此需要专业的餐饮管理系统来完成工作。
我的课程设计就是在此背景下完成的,本套餐饮管理系统有着完整的客人消费流程,餐馆的经理和营业员均可已使用该系统,该系统解决了人工计算餐饮费用的各种不利因素,实现科学的点菜和结账管理,省时省力,适合大多数中小型餐馆使用,市场前景广阔。
三、 概要设计
首先,要实现餐饮管理的功能,需要设计五个功能模块,分别为开台,点菜,加减菜,结账,数量选择等模块。然后先进行对话框的设计,分别设计IDD_diancai,IDD_jiacai,IDD_jiezhangdlg,IDD_kaitai,IDD_SHULIANG这五个对话框,在对话框上摆放控件,给控件修改ID号码,同时给各个对话框建立一个类,分别为CDiancaidlg,CJiacaidlg,CJiezhangdlg,CKaitaidlg,CSLdlg,并根据需要利用类向导为控件关联成员变量,建立成员函数和消息响应函数。
其次,要增加系统的安全性能,实现管理员的登录功能,为管理员设置权限,分为经理和营业员两种,分别对不同权限的人开放不同的模块,在登录之前将所有功能都屏蔽。设计登录、注册和账户权限管理对话框,并为每个对话框设置类,给控件添加成员变量,编写代码。
本系统使用ACCESS数据库对数据进行存储,利用ADO技术访问数据库,实现数据的检索,查询,插入,删除,更改等功能。在数据库中设计了四张数据表,分别为caishiinfo存放菜式信息,Login存放用户名和密码信息,paybill存放账单信息,TableUSE存放桌子使用情况的信息。然后再MFC程序中可以通过ADO语句来访问和操作数据库实现功能。
对界面进行美化,使用MFC皮肤给应用程序添加自己喜欢的皮肤,给对话框添加FALSH插件进行美化。
六、代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace 餐饮管理系统
{
public partial class frmManagement : Form
...{
ArrayList RoomStatus = new ArrayList();
ArrayList VipClass = new ArrayList();
public frmManagement()
...{
InitializeComponent();
}
private void 房间类型BindingNavigatorSaveItem_Click(object sender, EventArgs e)
...{
this.Validate();
this.房间类型BindingSource.EndEdit();
this.房间类型TableAdapter.Update(this.dieteticManagementDataSet.房间类型);
}
private void frmManagement_Load(object sender, EventArgs e)
...{
this.管理员TableAdapter.Fill(this.dieteticManagementDataSet.管理员);
this.vipTableAdapter.Fill(this.dieteticManagementDataSet.Vip); 33
this.餐牌TableAdapter.Fill(this.dieteticManagementDataSet.餐牌);
this.食品类别TableAdapter.Fill(this.dieteticManagementDataSet.食品类别);
this.餐房TableAdapter.Fill(this.dieteticManagementDataSet.餐房);
this.房间类型TableAdapter.Fill(this.dieteticManagementDataSet.房间类型);
VipClass.Add(\"普通会员\");
VipClass.Add("中级会员\");
VipClass.Add(\"高级会员");
RoomStatus.Add(\"可供\");
RoomStatus.Add(\"预订\");
RoomStatus.Add(\"占用\");
RoomStatus.Add(\"停用\");
RoomStatus.Add(\"脏台");
性别ComboBox.Items.Add(\"男\");
性别ComboBox.Items.Add(\"女\");
级别ComboBox.Items.Clear();
foreach (string s in VipClass)
级别ComboBox.Items.Add(s);
餐台状态ComboBox.Items.Clear();
foreach (string s in RoomStatus)
餐台状态ComboBox.Items.Add(s);
string[] sdata = Program.DBOpertor.GetRoomClass();
房间类型ComboBox.Items.Clear();
for (int i = 0; i < sdata.Length; i++)
房间类型ComboBox.Items.Add(sdata[i]);
}
private void 餐房BindingNavigatorSaveItem_Click(object sender, EventArgs e)
...{
this.Validate();
this.餐房BindingSource.EndEdit();
this.餐房TableAdapter.Update(this.dieteticManagementDataSet.餐房);
}
private void Add_Click(object sender, EventArgs e)
...{
//new frmAddAndModification(餐房DataGridView, this.dieteticManagementDataSet.餐房).Show();
frm餐房 f=new frm餐房(this.dieteticManagementDataSet.餐房,\"Add\");
foreach (string s in RoomStatus)
f.餐台状态ComboBox.Items.Add(s);
string[] sdata = Program.DBOpertor.GetRoomClass();
for (int i = 0; i < sdata.Length; i++)
f.房间类型ComboBox.Items.Add(sdata[i]);
f.ShowDialog();
// f.Dispose();
}
private void Delete_Click(object sender, EventArgs e)
...{
if (MessageBox.Show(\"确定要删除吗?\删除确定\", MessageBoxButtons.YesNo) == DialogResult.Yes)
...{
string no = 餐房DataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.餐房.Rows.Find(no).Delete();
}
}
private void Modification_Click(object sender, EventArgs e)
...{
string no = 餐房DataGridView.CurrentRow.Cells[0].Value.ToString();
using (frm餐房 f = new frm餐房(this.dieteticManagementDataSet.餐房.Rows.Find(no), \"Modification\"))
...{
foreach (string s in RoomStatus)
f.餐台状态ComboBox.Items.Add(s);
string[] sdata = Program.DBOpertor.GetRoomClass();
for (int i = 0; i < sdata.Length; i++)
f.房间类型ComboBox.Items.Add(sdata[i]);
f.ShowDialog();
}
}
private void button1_Click(object sender, EventArgs e)
...{
using (frm房间类型 f = new frm房间类型(this.dieteticManagementDataSet.房间类型,\"Add\")) ...{
f.ShowDialog();
}
}
private void button2_Click(object sender, EventArgs e)
...{
if (MessageBox.Show("确定要删除吗?", "删除确定\", MessageBoxButtons.YesNo) == DialogResult.Yes)
...{
string no = 房间类型DataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.房间类型.Rows.Find(no).Delete();
}
}
private void button3_Click(object sender, EventArgs e)
...{
string no = 房间类型DataGridView.CurrentRow.Cells[0].Value.ToS
tring();
using (frm房间类型 f = new frm房间类型(this.dieteticManagementDataSet.房间类型.Rows.Find(no), \"Modification\"))
...{
f.ShowDialog();
}
}
private void 商品类型添加_Click(object sender, EventArgs e)
...{
using (frm商品类型 f = new frm商品类型(this.dieteticManagementDataSet.食品类别, \"Add\"))
...{
f.ShowDialog();
}
}
private void 商品类型删除_Click(object sender, EventArgs e)
...{
if (MessageBox.Show(\"确定要删除吗?\", "删除确定\oxButtons.YesNo) == DialogResult.Yes)
...{
string no = 商品类型DataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.食品类别.Rows.Find(no).Delete();
}
}
private void 商品类型修改_Click(object sender, EventArgs e)
...{
string no = 商品类型DataGridView.CurrentRow.Cells[0].Valu
e.ToString();
using (frm商品类型 f = new frm商品类型(this.dieteticManagementDataSet.食品类别.Rows.Find(no), "Modification\"))
...{
f.ShowDialog();
}
}
private void 商品类型保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.食品类别BindingSource.EndEdit();
this.食品类别TableAdapter.Update(this.dieteticManagementDataSet.食品类别);
}
private void 餐牌添加_Click(object sender, EventArgs e)
...{
using (frm餐牌 f = new frm餐牌(this.dieteticManagementDataSet.餐牌, \"Add"))
...{
DataTable BigClass = Program.DBOpertor.GetBigClass();
string SBigClass;
for (int i = 0; i < BigClass.Rows.Count; i++)
...{
SBigClass = BigClass.Rows[i][\"食品类别"].ToString();
f.食品类别ComboBox.Items.Add(SBigClass);
}
f.ShowDialog();
}
}
private void 餐牌删除_Click(object sender, EventArgs e)
...{
if (MessageBox.Show(\"确定要删除吗?\", \"删除确定\", MessageBoxButtons.YesNo) == DialogResult.Yes)
...{
string no = 餐牌DataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.餐牌.Rows.Find(no).Delete();
}
} private void 餐牌修改_Click(object sender, EventArgs e)
} string no = 餐牌DataGridView.CurrentRow.Cells[0].Value.ToString();
using (frm餐牌 f = new frm餐牌(this.dieteticManagementDataSet.餐牌.Rows.Find(no), \"Modification")) 198 ...{
f.ShowDialog();
}
}
private void 餐牌保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.餐牌BindingSource.EndEdit();
this.餐牌TableAdapter.Update(this.dieteticManagementDataSet.餐牌);
}
private void 房间类型保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.房间类型BindingSource.EndEdit();
this.房间类型TableAdapter.Update(this.dieteticManagementDataSet.房间类型);
}
private void 餐房保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.餐房BindingSource.EndEdit();
this.餐房TableAdapter.Update(this.dieteticManagementDataSet.餐房);
}
private void Vip添加_Click(object sender, EventArgs e)
...{
using (frmVip f = new frmVip(this.dieteticManagementDataSet.Vip, \"Add\"))
...{
f.性别ComboBox.Items.Add(\"男");
f.性别ComboBox.Items.Add(\"女\");
foreach (string s in VipClass)
f.级别ComboBox.Items.Add(s); 232 f.ShowDialog();
}
}
private void Vip修改_Click(object sender, EventArgs e)
...{
string no = vipDataGridView.CurrentRow.Cells[0].Value.ToString();
using (frmVip f = new frmVip(this.dieteticManagementDataSet.Vip.Rows.Find(no), "Modification"))
...{
f.性别ComboBox.Items.Add(\"男");
f.性别ComboBox.Items.Add(\"女");
foreach (string s in VipClass)
f.级别ComboBox.Items.Add(s); f.ShowDialog();
}
}
private void Vip删除_Click(object sender, EventArgs e)
...{
if (MessageBox.Show(\"确定要删除吗?\删除确定\", MessageBoxButtons.YesNo) == DialogResult.Yes)
...{
string no = vipDataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.Vip.Rows.Find(no).Delete();
}
}
private void Vip保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.vipBindingSource.EndEdit();
this.vipTableAdapter.Update(this.dieteticManagementDataSet.Vip);
}
private void Save_Click(object sender, EventArgs e)
...{
餐牌保存_Click(sender, e);
房间类型保存_Click(sender, e);
商品类型保存_Click(sender, e);
餐房保存_Click(sender, e);
Vip保存_Click(sender, e);
管理员保存_Click(sender, e);
Program.f.GetUpToDate();
this.Close();
}
private void Cancel_Click(object sender, EventArgs e)
...{
this.Close();
}
private void 管理员添加_Click(object sender, EventArgs e)
...{
using (frm管理员 f = new frm管理员(this.dietetManagementDataSet.管理员, \"Add\"))
...{
ic
f.ShowDialog();
}
}
private void 管理员删除_Click(object sender, EventArgs e)
...{
if (MessageBox.Show(\"确定要删除吗?", \"删除确定\essageBoxButtons.YesNo) == DialogResult.Yes)
...{
string no = 管理员DataGridView.CurrentRow.Cells[0].Value.ToString();
this.dieteticManagementDataSet.管理员.Rows.Find(no).Delete();
}
}
private void 管理员修改_Click(object sender, EventArgs e) 300 ...{
string no = 管理员DataGridView.CurrentRow.Cells[0].Value.ToString();
using (frm管理员 f = new frm管理员(this.dieteticManagementDataSet.管理员.Rows.Find(no), "Modification\"))
...{
f.ShowDialog();
}
}
private void 管理员保存_Click(object sender, EventArgs e)
...{
this.Validate();
this.管理员BindingSource.EndEdit();
this.管理员TableAdapter.Update(this.dieteticManagementDataSet.管理员);
}
}
}
七、总 结
当初之所以选择餐饮信息管理系统,不仅仅是因为其具有挑战性,更是因为它更加符合中国广大的中小餐饮企业的发展需要,大家都知道,中国的餐饮服务行业最多的是个体经营模式,他们根本不会花费过多的费用架设网络服务器,大多数店主都希望有一款产品可以满足餐饮管理的需要而且花费的价格也相对低廉,甚至一次投资终身受益。而餐饮信息管理系统的出现就完全可以满足他们的愿望。餐饮信息管理系统的诞生可以为他们提供便捷的管理服务。并且几乎为零的错误率也使得餐厅可以更好的为顾客服务。它不仅可以为餐厅降低人力资源的付出,节省了成本,而且也可以提升自身的形象,使餐厅迎来更多的食客。
经过这么长时间的努力,餐饮信息管理系统终于得以实现其功能了,在这里我对.NET技术有了更深一步的认识,程序开发到后来比刚刚开发时的速度要快上好多,一开始遇到问题,我需要停下来查找相关资料,在网上搜实例代码下来学习,自己解决不了还要去请教指导老师,但程序编写到后来就轻松多了,遇到的问题几乎都能自己解决而不像一开始那样。
世界上没有任何一样东西是十全十美的,在完成了餐饮信息管理系统后,我发现,原本看上去应该比较完善的系统又有了新的可以改进的地方,如预定的餐点要取消其中的一份该如何实现。我想如果我把这个功能实现了,也许又会有新的功能需要我去做,系统的完善不是一朝一夕可以完成的,如果给我更多的时间,我一定能将它制作的更好。
八、参考文献 与网站
[1]林卓然 . VB语言程序设计 . 电子工业出版社 . 2009-1-1
[2]李英杰 . VB.NET 2005 程序设计实例教程 . 天津大学出版社 . 2008-11-1
[3]杨晶 . VB6.0程序设计教程与实训 . 科学出版社 . 2006-09-01
[4]刘志妩 . 基于VB和SQL的数据库编程技术 . 清华大学出版社 . 2008-4-1
[5]刘玉山 . VB数据库项目设计模块化教程 . 机械工业出版社 . 2009-8-1 [6]孟德欣 . VB程序设计 . 清华大学出版社 . 2009-7-1
[7].http://baike.baidu.com/
设计人员:殷世军、张进、王向阳、丁超平
因篇幅问题不能全部显示,请点此查看更多更全内容