餐饮管理系统的设计与实现毕业论文.docx
高职毕业论文题目: 餐饮管理系统的设计与实现学 院: 计算机科学与技术专 业:计算机应用技术学 号:200812388104学生姓名: 訚 新 俊指导教师: 李 顺 新日 期: 2011年6月1日武汉科技大学高职生毕业论文 摘 要随着社会的进步,人民生活水平的不断提高,餐饮业的消费持续增长,竞争愈来愈激烈。然而,传统餐饮企业的日常运作还是靠人工管理,从客人点单,再到结账基本上由人工完成记录,这样做不仅耗费人力资源而且容易导致记录丢失或重复等错误,造成管理水平低下。现在的餐饮行业正向着规模化,集团化方向发展,传统的经营管理模式已经不能适应这种发展势趋。这就迫切需要标准的、高效率的计算机管理方式引导其发展,通过计算机管理日常运作,来不断完善管理水平,提高工作效率。餐饮管理系统就是专门为餐饮业量身定制的软件。适用于各种规模的餐饮娱乐企业,如:餐厅、酒楼、咖啡屋、快餐店、酒吧、桑拿、夜总会、歌舞厅等。操作界面简洁、直观,非常容易上手;支持纯键盘和纯鼠标两种操作方式,点菜、结账、收银可在最短时间内飞速完成。系统包括日常运营、运营设置、查询统计,系统设置、系统维护、帮助信息等几大模块,各大模块下又各自包含若干子模块,是餐饮娱乐企业进行现代化信息管理的最佳选择。全动态的系统设置:酒菜类别、出品方式、消费方式、付款方式、酒菜要求、折扣、特价、套餐、等等均可实现按用户需要进行动态设置。作为计算机应用的一部分,使用计算机对餐饮企业信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高信息管理的效率,也是企业的科学化、正规化管理与世界接轨的重要条件。关键词:餐饮管理系统;sql2000;vs2008AbstractAlong with the progress of the society, people's living level unceasing enhancement, the restaurant industry consumption growth, increasingly fierce competition. However, the daily operation of traditional catering enterprises or on artificially management, order from the guest, again to check by artificially complete records, basically do not only the human cost resources and easy to cause the records lost or repeat mistake, causing management level is low. Now of the catering industry is toward scale, collectivize direction, the traditional management pattern already can not adapt to the development potential of fashion. This is urgent needs standards, efficient management style guide the development of computer, through the computer management daily operation, to constantly perfect management level, and improve work efficiency. Catering management system is tailored specifically for catering software. Applicable to various sizes of catering and entertainment enterprise, such as: restaurant, restaurants, cafes, fast-food restaurants and bars, sauna, nightclub, singing and dancing hall, etc. Operation interface is simple, intuitive and very easy to use; Support pure keyboard and pure mouse two operating mode, order and checkout, cashier can in the shortest possible time rapid completed. System including the daily operations, operating setting, inquires the statistics, the system Settings, system maintenance and help information and so on several big modules, each big module again under their respective contain several son module, entertainment enterprise is the best choice for modern information management. Fully dynamic system Settings: product categories, the waiters way, consumption mode, payment, waiters, requirements, discounts, specials, package, etc according to user's requirements can be realized dynamic Settings.As a part of computer application, use the computer to catering enterprises information management, has the advantages of crafts incomparable. For example: retrieves, the search rapidly convenient, the reliability high, thereserves big, the secrecy good, the life is long, low cost. These merits can enormously enhance the information management efficiency, also is enterprise's scientific and standardization management connecting with the world the important condition.Key words:Restaurant Management System;Sql2000;vs2008目 录1 概述11.1 .NET技术的发展11.2 C#语言的介绍11.3 课题的提出41.3.1 项目背景41.3.2 系统目的41.3.3 系统功能82 系统设计的关键技术52.1 系统的开发环境52.2 数据库技术83 餐饮管理系统的实现与代码分析93.1 系统的设计思路93.2 系统制作步骤93.3 代码细节分析104 餐饮管理系统的测试294.1 系统测试目的294.2 系统测试环境304.3 系统质量特性315 餐饮管理系统运行示例316 总结37参考文献38致 谢39III1 概述1.1 .NET技术的发展.NET框架是一种新的计算平台,它简化了在高度分布式Internet环境中的应用程序开发。.NET框架旨在实现下列目标:提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在Internet上分布,或者是在远程执行的。提供一个将软件部署和版本控制冲突最小化的代码执行环境。提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。按照工业标准生成所有通讯,以确保基于.NET框架的代码可与任何其他代码集成。.NET框架具有两个主要组件:公共语言运行库和.NET框架类库。公共语言运行库是.NET框架的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发包含从传统的命令行或图形用户界面(GUI)应用程序到基于ASP.NET所提供的最新创新的应用程序(如Web窗体和XML Web services)在内的应用程序。.NET框架可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET框架不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。1.2C#语言的介绍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接口这些功能都是内置的类似的,#可以调用现有的COM对象,无论它是由什么语言编写的。 C#包含了一个特殊的功能,使程序可以调用任何纯API。在一段特别标记的代码中,开发者可以使用指针和传统C/C+特性,如手工的内存管理和指针运算。这是其相对于其它环境的极大优势。这意味着C#程序员可以在原有的C/C+代码的基础上编写程序,而不是彻底放弃那些代码。 无论是支持COM还是纯API的调用,都是为了使开发者在C#环境中直接拥有必要的强大功能。1.3 课题的提出1.3.1 项目背景当今世界已进入了在计算机信息管理领域中激烈竞争的时代,应用计算机已经变得十分普遍了,如同我们离不开的自行车、汽车一样。我们应该承认,谁掌握的知识多,信息量大,信息处理速度快,批量大,谁的效率就高,谁就能够在各种竞争中立于不败之地。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。越来越多的管理人员意识到信息管理的重要性。1.3.2 系统目的餐馆菜单管理系统主要是用来方便客户进行网上点菜,现在的人们生活节作快了,整天都忙于工作,有时候连做饭吃饭都没有时间。餐馆菜单应有系统可以让那些没有时间做饭吃饭的人在网上进行点菜,客户不仅可以了解每一种菜得做法,还可以看到菜的价格和菜的药用性,做到吃出健康,吃的省钱。传统餐饮企业的日常运作还是靠人工管理,从客人点单,再到结账基本上由人工完成记录,这样做不仅耗费人力资源而且容易导致记录丢失或重复等错误,造成管理水平低下。所以餐饮行业的管理效率不高。由于缺乏科学的管理和现代化的管理工具,该餐饮行业在管理上和业务的安排上都存在着不足。餐饮管理系统就是专门为餐饮业量身定制的软件。适用于各种规模的餐饮娱乐企业,如:餐厅、酒楼、咖啡屋、快餐店、酒吧、桑拿、夜总会、歌舞厅等。操作界面简洁、直观,非常容易上手;支持纯键盘和纯鼠标两种操作方式,点菜、结账、收银可在最短时间内飞速完成。1.3.3 系统功能1.餐饮娱乐管理系统可以实现餐饮娱乐业工作流程(点菜、结账、收银、等)的微机自动化管理,为经营者提供及时、准确的统计数据。2.用户可以快速查找自己点的菜名和饮料。2.管理员可以对菜的类别进行管理:新增菜的类别,删除菜的类别,修改类别,查询类别。3.管理员可以对菜的信息管理:对各种菜的信息进行查询和删除。4.系统采用了严格地分级授权查询模式,严格划分界线并有操作日志,完善的保密、安全机制。5.具有超强的适用性、安全性、灵活性及弹性,适应企业发展的需要, 为广大餐饮企业创造更大的利润和价值。2 系统设计的关键技术2.1 系统的开发环境Visual Studio 2008是用于开发和维护托管的、本机的和混合模式的应用程序的集成开发环境。它提供了用于创建不同类别应用程序的多种项目模板,这些模板包括Microsoft Windows窗体、控制台、ASP.NET网站、ASP.NET Web服务、SmartPhone 2003、Windows CE 5.0以及其他类型的应用程序。此外,它还提供了针对特定设备(如移动设备)的模板。而且,开发人员还可以根据需要选择不同的编程语言,包括C# 、Microsoft Visual Basic .NET和托管的C+等。Visual Studio 2008 IDE 具有很多应用程序的快速开发工具。Visual Studio代码编辑器、Microsoft IntelliSense、解决方案资源管理器、类视图、对象浏览器和类关系图都是用户界面的核心部分,有助于提高开发人员的精确性和工作效率、精确性和效率。下面将具体讲解如何配置 Visual Studio 的开发环境。第1步 第一次启动 Visual Studio 2008时,显示出来的是 Visual Studio 2008的【选择默认环境设置】对话框,从中选择一种开发环境,在此选择"Visual C# 开发设置"选项,如图1.1所示。设置完成后单击【启动 Visual Studio】按钮。 图1.1 【选择默认环境设置】对话框第2步 Microsoft Visual Studio 2008开始为第一次使用设置环境,如图1.1所示。 图1.2 设置环境信息第3步 稍后会出现 Microsoft Visual Studio 2008的开发主界面,如图1. 2所示。 图1.3 Visual Studio 2008的开发主界面其中,Microsoft Visual Studio 2008开发主界面各工具栏及选项的功能说明如下:菜单栏和工具栏-菜单栏包括文件、编辑、视图、工具、调试、窗口和帮助等选项;工具栏提供了不同功能菜单项的快捷方式,根据当前窗体的不同类型,工具栏会动态改变,工具栏包括标准工具栏、生成工具栏、调试工具栏、文本编辑工具栏、打开文件列表等选项。工具箱区-工具箱以选项卡的形式来分组显示常用组件,包括标准、数据、验证等工具的集合。这些组件通过鼠标拖放到设计窗体,就可以把相应的功能增加到项目中。工作区-用于具体项目开发的主要区域,如设计界面各控件的整体布局,事件代码的编写等。项目区和属性区-项目区显示所建项目的所有文件和文件夹及其相应的配置文件;属性区显示设计界面中所选控件的各种设置信息。输出区-显示调试输出的信息,如果调试错误,该输出区会显示出错的行数、列数及出错的原因。2.2 数据库技术SQL Server 2000 在 Microsoft 的数据平台上发布,帮助您的组织随时随地管理任何数据。它可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。SQL Server 2000提供一系列丰富的集成服务,可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最大的服务器一直到桌面计算机和移动设备,您可以控制数据而不用管数据存储在哪里。SQL Server 2000允许您在使用 Microsoft .NET 和 Visual Studio 开发的自定义应用程序中使用数据,在面向服务的架构(SOA)和通过 Microsoft BizTalk Server 进行的业务流程中使用数据。信息工作人员可以通过他们日常使用的工具直接访问数据。SQL Server 2008 提供一个可信的、高效率智能数据平台,可以满足您的所有数据需求。 图2.1 Food 图2.2 MenuSeries 图2.3 MenuType 图2.4 OrderList3 餐饮管理系统的实现与代码分析3.1 系统的设计思路采用C#语言在开发工具Microsoft Visual Studio 2008和数据库SQL Server 2000上开发此系统。系统分前台管理和后台管理,前台用户可以浏览各类菜肴,查看各种菜的详细说明和价格,还可以快速查找自己想要点的菜。结算时,显示用户点的所有菜,还可以打折扣。后台管理,管理员可以对菜的类别进行管理:新增菜的类别,删除菜的类别,修改类别,查询类别。管理员可以对菜的信息管理:对各种菜的信息进行查询和删除,查看点菜记录。3.2 系统制作步骤1. 准备页面内容文字,收集素材;2. 在脑海或草稿纸上构思页面的风格与布局;3. 查询相关资料,了解本系统的研究意义。可以上网搜索或者是去图书馆查阅相关资料;4. 通过查询资料了解该系统要如何做,及要做哪些东西;5. 设计出大体上的功能模块,画出模块图;6. 通过进一步的了解,对每个功能模块进行细化,将每一步都想清楚。制定出每一步的做法和注意的地方;7. 对设计好的程序进行调试,通过调试发现存在的问题并解决,从而达到完善系统的目的;3.3 代码细节分析1.Account.aspx.csnamespace CYGLXT.page public partial class Account : System.Web.UI.Page private Food fd = new Food(); private OrderList ol = new OrderList(); protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) List<string> idList = FileUtil.GetNodeTextFromXml(Server.MapPath("./App_Data/Order.xml"); DataSet ds = fd.GetFood(idList); if (ds != null) /获取数量 txtCount.Text = ds.Tables0.Rows.Count.ToString(); int money = 0; foreach (DataRow row in ds.Tables0.Rows) /计算总价 money += Convert.ToInt32(row"Price"); txtIdList.Text += row"ID".ToString() + "|" /点餐食品的ID集合 txtNameList.Text += row"Name".ToString() + "|" /点餐食品的名称集合 txtMoney.Text = string.Format("0:C", money); /在列表中绑定显示 DataList1.DataSource = ds; DataList1.DataBind(); if (DataList1.Items.Count > 0) txtCode.Text = "X" + DateTime.Now.ToString("yyMMddHHMMss"); /设置控件只读 txtCode.Attributes.Add("readonly", "true"); txtMoney.Attributes.Add("readonly", "true"); txtCount.Attributes.Add("readonly", "true"); protected void btnAccount_Click(object sender, EventArgs e) if (DataList1.Items.Count = 0) Jscript.Alert(this,"还没有选购任何的美食,不能结算!"); return; try ol.InsertOrderList(txtCode.Text, txtCount.Text, txtMoney.Text.Substring(1, txtMoney.Text.IndexOf(".") - 1), txtDiscount.Text = "" ? "0" : txtDiscount.Text, txtIdList.Text, txtNameList.Text); catch (Exception ex) FileUtil.WriteFile(Server.MapPath("./App_Data/ErrorLog.txt"), string.Format("rn用户0新增点餐结算信息失败!rn错误信息:1", User.Identity.Name, ex.Message); Jscript.Alert(this, "新增点餐结算信息失败,详细信息请参见异常日志!"); return; /移除点餐记录中的所有记录节点 FileUtil.RemoveAllNode(Server.MapPath("./App_Data/Order.xml"); if (txtDiscount.Text != "") float money = int.Parse(txtMoney.Text.Substring(1, txtMoney.Text.IndexOf(".") - 1) * float.Parse(txtDiscount.Text); Jscript.ExecuteBlock(this, string.Format("saveSuccess('0:C');", money); else Jscript.ExecuteBlock(this, string.Format("saveSuccess('0');", txtMoney.Text); 2.Food_Info.aspx.csnamespace CYGLXT.page public partial class Food_Info : System.Web.UI.Page private Food fd = new Food(); protected void Page_Load(object sender, EventArgs e) if (!Page.IsPostBack) if (!string.IsNullOrEmpty(Request.QueryString"pId") DataSet ds = fd.GetFoodInfoById(Request.QueryString"pId"); if (ds.Tables0.Rows.Count = 0) Jscript.Alert(this, "该条记录已被删除,请刷新后重新操作!"); return; foodlistBlock.InnerHtml = string.Format("0->1->2", ds.Tables0.Rows0"Series".ToString(), ds.Tables0.Rows0"Type".ToString(), ds.Tables0.Rows0"Name".ToString(); lblName.Text = ds.Tables0.Rows0"Name".ToString(); lblType.Text = ds.Tables0.Rows0"Series".ToString() + "->" + ds.Tables0.Rows0"Type".ToString(); lblPrice.Text = string.Format("0:C", ds.Tables0.Rows0"Price"); imgBtnPath.ImageUrl = "./upfile/thumbnailImage/" + ds.Tables0.Rows0"Picture".ToString(); lblRemark.Text = ds.Tables0.Rows0"Remark".ToString(); txtImageName.Text = ds.Tables0.Rows0"Picture".ToString(); protected void imgBtnPath_Click(object sender, ImageClickEventArgs e) /原尺寸水印图片存储路径 string strImagePath = Server.MapPath("./upfile/sourceImage/") + txtImageName.Text; /将图片装载成Bitmap对象以获取该图片的高和宽 System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(strImagePath); int width = bmp.Width + 20; int height = bmp.Height + 20; if (width < 400) width = 420; else if (width > 900) width = 920; if (height < 200) height = 220;