编号
郑州师范学院
毕 业 论 文(设 计)
论文题目 餐饮管理系统的设计与实现
系 别 软件学院
专 业 信息管理专业
班 级 09信管二班
姓 名 申艳敏
学 号 [1**********]6
指导教师 杨臻
职 称 讲师
2011年5月
摘 要
随着经济的发展社会的进步,去饭店过节聚会成为了一种新的时尚。因此每逢过年过节,饭店都会迎来大量的顾客,随之而来的就是大量的预定和结算信息将会使得饭店的工作人员不堪重负,并且不可避免的会出现这样或那样的错误。餐饮信息管理软件的诞生可以为他们提供便捷的管理服务。并且几乎为零的错误率也使得餐馆可以更好的为顾客服务。它不仅可以为餐馆降低人力资源的付出,节省了成本,而且也可以提升自身的形象,使餐厅迎来更多的食客。
本系统使用了VB.NET 技术并采用了C/S架构,饭店服务人员使用它可以快速准确地为客户服务,人性化的系统界面设计使得软件便于使用者的快速掌握,计算机几乎为零的错误率和高效的处理能力使得原本繁琐的餐饮管理变得更加科学、快捷以及人性化。
使用本系统,员工将可以快速地编辑顾客资料信息,并且为客户提供订餐打折和充值服务。管理员使用本系统,既可以完成员工的所有工作,又可以更好地管理员工,精准地了解员工账面的资金情况。除了这些,管理员还可以设定餐厅的菜单信息和折扣程度,从而使得管理员对餐厅的运营情况可以全面掌控。
关 键 字:餐饮管理;VB.NET ;C/S架构
Abstract With economic development and social progress, to the hotel festive gathering into a new fashion. Therefore, during festive seasons, the hotel will welcome a large number of customers, followed by a large number of reservations and billing information will make the hotel the staff overwhelmed, and the inevitable will occur or that such errors. Food information management software can provide them with the birth of convenient management services. And almost zero error rate makes the restaurant better for customers. It not only can reduce the human resources for restaurants to pay, cost savings, but also can enhance their image, so that more diners usher restaurant itself. The system uses VB.NET technology and uses C / S architecture, the hotel staff to use it to quickly and accurately to customer service, human system interface design allows the software to facilitate the users to grasp, the computer is almost zero error rate and efficient processing power makes the restaurant management had become more complicated scientific, efficient and humane. With this system, employees will be able to quickly edit the customer data and information, and provide customers with discounts and top-ordering. Administrators use the system, not only to complete all the work of employees, but also better management of staff, accurate book about employees of funds. In addition to these, the administrator can also set the restaurant's menu of information and discount levels, making the operations of the restaurant managers to fully control.
Keywords : Food and Beverage Management; VB.NET; C / S architecture
目 录
第一章 餐饮信息管理系统的开发背景 ............................ 1
1.1 开发背景 . ............................................. 1
1.2 开发工具和相关技术简介 ................................ 1
第二章 系统定义与系统需求 .................................... 4
2.1 系统定义 . ............................................. 4
2.2 系统需求分析 . ......................................... 4
第三章 系统总体设计 . ......................................... 6
3.1 系统功能模块的划分 . ................................... 6
3.2 管理员权限模块划分 . ................................... 8
3.3 员工权限模块划分 . ..................................... 8
3.4 系统流程分析 . ......................................... 8
3.5 数据库设计 . ........................................... 9
3.5.1 数据库规划 . ...................................... 9
3.5.2 E-R图 .......................................... 10
3.5.3 数据表的设计 . ................................... 11
第四章 系统详细设计 . ........................................ 14
4.1 数据库 . .............................................. 14
4.1.1 数据库的链接 . ................................... 14
4.1.2 Is_SQL_Cmd方法 ................................. 14
4.1.3 SQL_Ada方法 .................................... 15
4.1.4 ExecCmd过程 .................................... 15
4.2 系统的登录与注销 . .................................... 15
4.2.1 用户登陆模块的实现 .............................. 15
4.2.2 用户注销模块的实现 .............................. 17
4.3 客户信息管理 . ........................................ 18
4.3.1 客户信息的添加 . ................................. 18
4.3.2 图像的处理 . ..................................... 19
4.3.3 客户信息的修改 . ................................. 20
4.3.4 客户信息的删除 . ................................. 22
4.3.5 客户信息的查询 . ................................. 23
4.4 添加预定信息 . ........................................ 25
4.4.1 日期时间桌号的核对 .............................. 25
4.4.2 打折信息处理 . ................................... 26
4.4.3 取消预定信息 . ................................... 27
4.4.4 预定信息查询 . ................................... 27
4.5充值与结算 ........................................... 30
4.5.1 客户充值 . ....................................... 30
4.5.2 客户结算 . ....................................... 32
4.6 折扣设定 . ............................................ 32
4.7 用户管理 . ............................................ 32
4.7.1 用户的添加 . ..................................... 32
4.7.2 用户的删除 . ..................................... 33
总 结 . .................................................... 36
谢 辞 . .................................................... 37
参考文献 . ................................................... 38
第一章 餐饮信息管理系统的开发背景
1.1 开发背景
传统的餐饮管理现在已经很难应对当今社会对餐饮业的管理要求,它与现在的基于计算机技术发展起来的餐饮信息管理系统对比,有以下几大不同:
便捷性方面:传统的人工对餐饮信息进行管理,如:顾客信息管理,菜单信息管理和订餐信息的管理,都是很繁琐的过程,其中的任何一步过程都要浪费大量的时间,而随着计算机技术的发展,这些原本繁琐的问题都会变得轻而易举。
安全性方面:传统的纸质记录方式查询起来很麻烦,而且保密性很差,并且容易磨损丢失,对于会员余额的管理是非常不利的。但如果采用的是电子文档的方式进行数据的保存,这一切都变得非常简便,你可以方便的对数据信息进行备份查询,并且数据的安全性可以得到最大程度的保证。
准确性方面:传统的人工记账容易出错,如果采用这种方式来处理现在的含有打折信息的消费结算会使得工作量很大,如果计算出错将严重影响自己的声誉。而如果使用软件系统,这些问题都将不会出现,计算机的错误率几乎为零。
鉴于以上传统的人工管理方式的种种缺陷,我设计了方便中小级别餐饮企业使用的应用程序,通过它,管理者可以基本解决以上所遇到的种种问题,并且更加科学的对老客户进行打折,而且添加了主顾权限的不同设计使得它更加方便雇主对雇员的管理与监督。
1.2 开发工具和相关技术简介
开发工具:硬件:ThinkPad 笔记本
软件:Windows XP
Microsoft Visual Studio 2008
Microsoft SQL Server 2005
本系统是采用 VB.NET技术结合SQL Server 数据库设计并实现的。VB.NET 的开发工具为Microsoft Visual Studio 2008,数据库使用的是SQL Server 2005 Express Edition
VB.NET
Visual Basic.NET 是从 Visual Basic 语言演变而来的,是一种为高效地生成类型安全和面向对象的应用程序而设计的语言。Visual Basic 允许开发人员开发面向 Windows、Web 和
移动设备的程序。与所有面向 Microsoft .NET Framework 的语言一样,使用 Visual Basic 编写的程序都具有安全性和语言互操作性方面的优点。这一代 Visual Basic 延续了为您提供一种简单快捷的方法来创建基于 .NET Framework 的应用程序的传统。
Microsoft Visual Studio 2008
Microsoft Visual Studio 2008 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用 Visual Studio 2008 快速创建能够利用 Windows Vista和 2007 Office system 的更安全、更易于管理并且更可靠的应用程序。
Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web 应用程序。
开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP.NET 应用程序服务和 Microsoft 平台。
SQL Server 2005 Express Edition(仅适用于 32 位)
SQL Server Express 是一个免费、易用且便于管理的数据库。SQL Server Express 与 Microsoft Visual Studio 2005 集成在一起,可以轻松开发功能丰富、存储安全、可快速部署的数据驱动应用程序。SQL Server Express 是免费的,可以再分发(受制于协议),还可以起到客户端数据库以及基本服务器数据库的作用。SQL Server Express 是低端 ISV、低端服务器用户、创建 Web 应用程序的非专业开发人员以及创建客户端应用程序的编程爱好者的理想选择。
C/S结构
C/S(Client/Server或客户/服务器模式):Client 和Server 常常分别处在相距很远的两台计算机上,Client 程序的任务是将用户的要求提交给Server 程序,再将Server 程序返回的结果以特定的形式显示给用户;Server 程序的任务是接收客户程序提出的服务请求,进
行相应的处理,再将结果返回给客户程序。
C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client 端和Server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web 应用发展,Web 和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。
第二章 系统定义与系统需求
2.1 系统定义
计算机技术产生以后,迅速在管理领域得到了广泛的应用。20世纪60年代,美国经营管理协会及其事业部第一次提出了建立管理信息系统的设想,即建立一个有效的信息系统,使得各级管理部门都能了解本单位的一切有关经营活动,为各级决策人员提供所需要的信息。
对于信息管理系统的定义,目前还没有一个统一的认识。由于餐饮管理系统是基于C/S模式,本文更倾向于采纳下述定义:餐饮信息管理系统是通过对整个餐饮服务流程的管理,实现业务的整体优化,提高企业运行控制和外部交易过程的效率的管理工具。
2.2 系统需求分析
现在的管理系统不仅要有漂亮的用户界面,更要有严谨的规划,注重每一个细小的环节。这样才能使得在电子交易时避免不必要错误发生。本系统的设计与实施迎合了二十一世纪经济高速发展、人们的生活节奏日益加快以及现代餐饮业越来越发达和便捷这一现状。它将极大地方便食客的就餐,同时也有利于我们的管理和服务。同时,我们的餐饮信息管理系统还能帮助餐厅降低错误率,扩大营业范围,增加知名度等。
为了使系统更加人性化,便于管理员管理,此系统的用户将分为两种类型,一个是针对员工的餐饮管理系统,另一个是针对管理员(店主)的餐饮管理系统。
员工使用本餐饮信息管理系统应可以实现以下功能:
1. 添加修改查询客户会员信息(修改客户信息需客户确认)
2. 查询菜单
3. 添加查询预定信息,为老顾客打折
4. 客户可以在自己的会员账户里充值
5. 顾客可以用现金买单也可以从会员账户里扣取
管理员使用本餐饮信息管理系统应可以实现以下功能:
1. 添加修改查询客户会员信息(修改客户信息需客户确认)
2. 添加修改查询菜单信息,最好能看到菜品图片
3. 添加查询预定信息,为老顾客打折
4. 客户可以在自己的会员账户里充值
5. 顾客可以用现金买单也可以从会员账户里扣取
6. 设定具体的打折方法
7. 添加职员信息,权限也可以定为管理员。
8. 可以查询使用者的现金收款金额
除了实现以上功能外,本系统还需要方便用户地使用,使得用户可以很快地熟练掌握,从而可以让用户快速的投入工作。并且要避免逻辑错误的出现。
第三章 系统总体设计
3.1 系统功能模块的划分
根据以上需求,餐饮信息管理系统功能被划分为以下模块,如图3.1所示:
图3.1 餐饮信息管理系统功能模块图
系统登录退出模块:本模块是被用于用户登录,注销和退出。模块根据用户的不同类型赋予用户不同的管理权限。低等级的用户不可访问高等级用户的个别功能,而高等级用户可以使用低等级用户的所有系统功能。
客户信息管理模块:本模块将餐饮企业松散的客户资源加以整合,通过标准化的管理操作,将客户资料加以收集。用户使用本模块可以方便的查询客户的所有资料和客户消费信息。并且特意添加了图像模块,使得用户的图像信息加以保留,方便使用者的查询和记忆,当客户再次光临时,服务人员可以直接认出客户,这将使得客户感到无微不至的关怀,提升餐厅的品牌形象。客户的资料变更需经客户的确认,以避免出现因失误操作导致的客户信息流失。
菜单信息管理模块:本模块将餐厅的菜品信息通过标准化的管理操作加以整合,使得菜品的价格、配料、功效和图片可以完全呈现在客户面前,使得客户可以方便地选择自己想要的食物。本模块的分权限设计将限制普通员工对菜单信息加以修改,以防止菜单价格被恶意修改,以此保证餐厅正常可靠的运营。
订餐信息管理模块:通过订餐模块使得传统餐饮订餐过程变得轻松方便,订餐信息管理模块会在客户订餐的同时核对客户所预定的餐桌的使用情况,避免传统订餐易出现的预定重合问题。并且本模块在客户订餐的同时会给出已预定的菜品价格,帮助客户开心合理地消费。模块中包含的打折服务是本模块的一大特色。它将参考客户以往的消费情况和管理员设定的折扣程度对客户进行打折服务。而不是传统餐饮打折中的没有规律和凭据以询。后台的厨房通过本系统可以清楚地知道客户预定的菜品,这样就节省了大量用于菜品核对的时间,提高了厨房的效率,缩短了厨房上菜的时间。减少了不必要的人力物力财力资源的消耗,降低餐厅的运营成本,使餐厅以更好性价比服务于消费者,消费者可以得到更好的消费体验。
充值结算管理模块:通过此模块,用户可以方便的为客户提供充值结算服务,充值收取的现金将会计入用户的收款现金中,便于管理员结算时核对收款金额。结算方式分为两种,一种是现金结算,一种是账户余额结算,现金结算的收款金额会计入用户的收款现金,而账户余额结算的金额会从客户的账户里扣除。
折扣信息管理模块:本模块只限于管理员使用,通过它可以设定为客户打折时用到的折扣程度
员工信息管理模块:本模块只限于管理员使用,管理员使用它,可以添加删除用户。用户类型分为店长(管理员)和职员。管理员删除用户时,如果要删除的是普通职员,系统将直接执行命令,如果要删除的是管理员账户,系统会先查看剩下的管理员账户数量,最少保留一个管理员账户,以便下次的登录。如果删除的用户是管理员本人,则在删除账户后,系统将会要求使用者重新登录。
3.2 管理员权限模块划分
管理员权限划分如图3.2所示:
图3.2 店长权限模块图
管理员使用本系统将能使用系统的所有功能。
3.3 员工权限模块划分
员工权限划分如图3.3所示:
图3.3 雇员权限模块图
员工使用本系统可以使用除了菜单信息编辑、折扣信息管理模块和员工信息管理模块之外的所有功能。
3.4 系统流程分析
系统流程分析如图3.4所示:
流程图简介:员工登录系统后为客户添加基本信息,客户可以根据需要在开通的账户里充值(增加用户的收款金额)。客户通过餐饮信息管理系统进行订餐(老用户在此环节中可能会享受打折服务)。客户用完餐后来到服务台买单,用户可以选择使用现金或者从用户余额里扣除,支付成功会增加客户的已消费金额。若余额不足,系统将会提示,那么客户只能使用现金支付。使用现金支付的话会增加用户的收款金额。管理员登录的话可以使用员工的所有功能,而且可以设定为客户打折的折扣程度和添加菜单,以及管理员工账户。
3.5 数据库设计
3.5.1 数据库规划
根据以上模块划分图分析,针对餐饮信息管理系统,分别对用户、客户、食谱、预定、折扣这几个实体进行详细的调研和分析。数据库的设计采用一库多表式设计。即设计了一个数据库。把每个使用到的独立的对象设计为独立的应用实体。
图3.4 系统流程分析
3.5.2 E-R图
图3.5 用户E-R 图
主要存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息。
图3.6 客户E-R 图
主要存储一些客户信息,如客户的账号、密码、联系方式和消费情况等等,主要用于客户订餐、充值和结算,使用于添加预定。
图3.7 食谱E-R 图
主要存储一些食谱信息,如食谱的名称、价格和照片等等,主要用于客户订餐,使用于添加预定。
图3.8 预定E-R 图
主要存储一些预定信息,如客户的账号、预定的时间、桌号和菜单等等,主要用于记录客户的预定信息,会使用到用户、客户、菜单和折扣信息。
图3.9 折扣E-R 图
存储管理员(店主)设定的打折信息,用来计算打折后的应付金额,使用在添加预定时打折。
3.5.3 数据表的设计 1、 user (用户表)
表3.1 user
用户表主要用于存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息来记录经手的用户,字段money 用于记录用户的收款金额,便于结算时对收款现金的核对。 2、 customer (客户表)
表3.2 customer
主要用于客户订餐、充值和结算,字段money 用于储存账户余额,在使用充值和账户余额支付时会使用到它。字段usedmoney 用于记录客户的消费情况,为客户打折时会使用到它。 3、 food (食谱表)
表3.3 food
食谱表主要用于存储一些食谱信息,如食谱的名称、价格和照片等等,主要用于客户订餐,使用于添加预定。字段Price 记录的是食物的价格。当客户预定餐点时,系统使用它来算费用。
4、 YuDing (预定表)
表3.4 YuDing
要用于记录客户的预定信息,会使用到用户、客户、菜单和折扣信息。当系统预定餐点时,会从其他各表中调出需要的信息,经过计算和处理后,将最终信息储存到YuDing 表,该表和其它各表都有紧密的联系。
5、 discount (折扣表)
表3.5 discount
添加预定时打折。当客户预定餐点时,打折服务的折扣程度就是参照该表。
第四章 系统详细设计
4.1 数据库
4.1.1 数据库的链接
为了便于用户使用和维护,我们将与数据库的连接,单独写出来并进行编译,这样系统在新的环境使用时,只需改动一处数据库连接代码,即可立即使用,连接关键代码如下:
Public Shared constr As String = "Data Source=WWW-3C702F2C1C8\SQLEXPRESS;Initial Catalog=dcdatebase;Integrated Security=True" 其中Public Shared constr As String = "Data
Source=WWW-3C702F2C1C8\SQLEXPRESS;Initial Catalog=dcdatebase;Integrated Security=True"是数据库连接语句,WWW-3C702F2C1C8是计算机名。
4.1.2 Is_SQL_Cmd方法
方法Is_SQL_Cmd是判断数据是否存在,当系统登录和添加客户需要验证数据库中是否存在提交的数据时会用到它。其主要代码如下:
Public Function Is_SQL_Cmd(ByVal cmdstr As String) As Boolean SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlCmd = New SqlCommand(cmdstr, SqlConn) Try
SqlDr = SqlCmd.ExecuteReader() If SqlDr.HasRows Then Return True Else
Return False End If
Catch ex As Exception Return False Finally
SqlConn.Close() End Try
End Function 4.1.3 SQL_Ada方法
方法SQL_Ada是为了查询数据库,并将查询到的结果存放在内存中的datatable 表中,餐饮信息管理系统中使用到的组件DataGridView 再从datatable 表中得到数据。
Public Function SQL_Ada(ByVal adastr As String) As DataTable SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlAda = New SqlDataAdapter(adastr, SqlConn) ds = New DataSet Try
SqlAda.Fill(ds) Return ds.Tables(0) Catch ex As Exception Return New DataTable Finally
SqlConn.Close() End Try End Function 4.1.4 ExecCmd过程
ExecCmd 是为系统中的添加、删除、修改服务,系统里的客户、菜单、折扣和员工的添加、删除和修改都用到了该过程。
Public Sub ExecCmd(ByVal cmdstr As String) SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlCmd = New SqlCommand(cmdstr, SqlConn) SqlCmd.ExecuteNonQuery() End Sub
4.2 系统的登录与注销
4.2.1 用户登陆模块的实现
图4.1 用户登录
用户登陆模块是防止非法用户登陆的第一道防线,通过它可以保护后台数据库的安全性,当用户要进行系统操作时,首先要进入的就是身份验证界面,只有在密码正确的情况下才能进行以后的操作,如果输入的密码不正确,则不能进行登录对系统进行操作。如果用户以职员的身份进入系统,则只能进行顾客信息管理、菜单信息查询、预定信息管理和充值结算管理,而菜单信息管理、折扣设定、员工管理这些功能将被屏蔽,如果用户以管理员(店长)身份登录,系统的所有功能都将可以使用。以下是“登录”按钮的代码:
cmdstr = "select * from [user] where [user_id] ='" + TextBox1.Text + "' and [pwd]= '" + TextBox2.Text + "' and [style]= '" + ComboBox1.Text + "'"
Try
If sqlobject.Is_SQL_Cmd(cmdstr) Then
main.m_Login = True
...... //类似部分省略
Me.Close()
Else
MsgBox("请填写正确的用户名、密码和用户类型!")
End If
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
系统先进行数据库操作,判断是否存在用户名、用户密码和用户类型完全符合要求的数据,如果存在,则说明用户可以登录,同时把登录的用户类型和用户名告诉需要用到用户类型和用户名数据的模块如系统主界面、充值模块和买单模块等等。
4.2.2 用户注销模块的实现
用户注销模块的代码如下:
Private Sub 注销ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 注销ToolStripMenuItem.Click
Me.m_style = ""
Me.m_Login = False
For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()
Next
main_Load(sender, e)
Login.Show()
Me.ToolStripStatusLabel1.Text = "登录"
End Sub
用户通过本模块可以注销系统,系统恢复到登录前画面,这样就可以防止在用户离开后,系统数据被人恶意修改。
4.3 客户信息管理
4.3.1 客户信息的添加
图4.2 客户的添加
当用户点击添加按钮时,系统执行以下代码:
CmdStr = "SELECT id FROM [customer] where id='" + TextBox2.Text + "'"
If TextBox2.Text = "" Then //身份证不为空
MsgBox("请输入身份证号")
TextBox2.Focus()
ElseIf sqlobject.Is_SQL_Cmd(CmdStr) Then //检查是否已注册
MsgBox("该客户已经存在")
TextBox2.Focus()
...... //中间还有很多类似的验证
Else
CmdStr = "insert into customer
(name,id,address,birthday,pwd,addtime,money,usedmoney,tel,mobilephone,userid)VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + DateTimePicker1.Value.ToString + "','" + TextBox6.Text + "','" + Now + "','" + "0" + "','" + "0" + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + user + "')"
Try
sqlobject.ExecCmd(CmdStr) //添加客户
MsgBox("添加成功") // 添加成功提示
FileUrl = "" //复位空格
......
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End Sub
在添加用户前,系统进行了详细的表单验证,包括验证要提交的客户是否已经存在,用户两次输入的密码是否一样,以及联系方式不为空等等。使用insert 语句将通过验证的表格中的数据提交到数据库。菜单信息添加模块与本模块的原理类似,以下不再阐述。
4.3.2 图像的处理
如果用户在上面添加客户信息时,添加了图像信息,那么系统就会执行以下命令: If FileUrl "" Then //图像存在的话,添加图像
Dim imgstreem As New FileStream(FileUrl, FileMode.Open, FileAccess.Read) Dim imgbyte(imgstreem.Length) As Byte
imgstreem.Read(imgbyte, 0, imgstreem.Length)
imgstreem.Close()
Dim sqlcmd As New System.Data.SqlClient.SqlCommand
Dim sqlconn As New
System.Data.SqlClient.SqlConnection(SQL_Conn.constr)
CmdStr = "update customer set photo=@image where id='" + TextBox2.Text + "'" sqlcmd.Parameters.Add("@image", SqlDbType.Image)
sqlcmd.Parameters("@image").Value = imgbyte
sqlcmd.Connection = sqlconn
sqlcmd.CommandText = CmdStr
Try
sqlconn.Open()
sqlcmd.ExecuteNonQuery()
sqlconn.Close()
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
如果用户提交了客户的相片,相片将会被转化为二进制数据提交到数据库中,这样就可以方便用户日后对客户资料进行维护,也有助于服务人员记住客户,当客户再次光临时,一口报出客户的名字将会使客户对餐厅的好感大增。
4.3.3 客户信息的修改
图4.3 客户信息的修改
当客户资料因实际情况发生变更时,可以修改系统中的资料数据,用户需提供注册时所使用的客户密码。使用密码可以防止客户的资料被恶意修改。充分保护客户权益,即使是管理员也不能在不经过客户同意的情况下修改客户数据。以下是修改按钮的代码。
CmdStr = "select pwd from customer where pwd='" + TextBox12.Text + "' and id ='" + TextBox8.Text + "'" //确定客户身份代码
...... //省略验证信息
If sqlobject.Is_SQL_Cmd(CmdStr) Then //如果客户同意修改的话继续
CmdStr = "update customer set address='" + TextBox9.Text + "'" + ",tel='"
+ TextBox10.Text + "'" + ",mobilephone='" + TextBox11.Text + "'" + ",pwd='" + TextBox13.Text + "'" + " where id='" + TextBox8.Text + "'"
Try
sqlobject.ExecCmd(CmdStr) //执行更新
MsgBox("修改成功")
TextBox8.Text = ""
......
PictureBox2.Image = Nothing
Call TabControl1_SelectedIndexChanged(sender, e)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else
MsgBox("密码错误")
End If
使用方法Is_SQL_Cmd验证客户密码的正确性,如果原始密码正确,用户在输入新密码后可以进行对联系方式等基本资料进行修改。使用update 语句将空格中的数据更新到服务器。如果更新成功,系统会弹出“修改成功的提示”。 菜单信息修改模块与本模块的原理类似,以下不再阐述。
4.3.4 客户信息的删除
客户信息可以在得到客户确认的情况下删除,因设计到账户余额问题所以在进行此操作时万分谨慎。客户资料来之不易,建议不要轻易删除客户资料。以下是删除模块的程序代码:
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
If TextBox12.Text = "" Then
MsgBox("请输入用户密码")
TextBox12.Focus()
Else
CmdStr = "select pwd from customer where pwd='" + TextBox12.Text + "' and id ='" + TextBox8.Text + "'" //用户密码确认
If sqlobject.Is_SQL_Cmd(CmdStr) Then
CmdStr = "delete from customer where id='" + TextBox8.Text + "'" Try
sqlobject.ExecCmd(CmdStr) //执行删除命令
MsgBox("删除成功")
PictureBox2.Image = Nothing
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else
MsgBox("密码错误")
End If
End If
Call TabControl1_SelectedIndexChanged(sender, e)
End Sub
系统先对客户密码进行了核对,密码正确的话,使用delete 语句,根据客户的身份证号对数据库中的客户数据进行删除。因添加客户数据时要求身份证号是唯一的,所以不用担心误删的问题。菜单信息删除模块与本模块的原理类似,以下不再阐述。
4.3.5 客户信息的查询
图4.4 客户信息的查询
1、客户查询模块载入
Private Sub kehuchaxun_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',id as '身份证',address as '家庭地址',tel as ' 电话号码',mobilephone as ' 手机号码' ,money as '账户余额' ,usedmoney as '已消费额'FROM customer"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
使用SQL_Ada方法,查询customer 表中的个别数据,将数据库中的数据提取出来保存在内存中的datatable 表中,客户信息查询中的DataGridView 组件将内存中的datatable 数据
表里的数据提取出来显示给用户查看。
2、当点击DataGridView 组建中的任意一客户资料时,在组件左边的PictureBox 中将显示客户照片。
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles
DataGridView1.CellClick
If row e.RowIndex And e.RowIndex >= 0 Then
row = e.RowIndex
Label1.Text = Me.DataGridView1.Item(0, row).Value.ToString.Trim()
If Label1.Text "" Then
CmdStr = "select photo from customer where name='" + Label1.Text + "'"
DisplayImg(CmdStr)
Else : PictureBox1.Image = Nothing
End If
End If
End Sub
其中If row e.RowIndex And e.RowIndex >= 0 中e.RowIndex 指的是点击的行数,第一行为0。Label1.Text = Me.DataGridView1.Item(0, row).Value.ToString.Trim()是为了取所选行数的第一列值,即客户姓名。If Label1.Text "" Then是指如果label1不为空, CmdStr = "select photo from customer where name='" + Label1.Text + "'"是SQL 语句查询图片数据。DisplayImg(CmdStr)是在DisplayImg 方法中执行SQL 语句。Else : PictureBox1.Image = Nothing指不满足条件时,清空图像。
3、DisplayImg 方法
Private Sub DisplayImg(ByVal str As String)
sqlobject.SQL_Ada(str)
If sqlobject.SQL_Ada(str).Rows(0).Item(0) Is DBNull.Value Then
PictureBox1.Image = Nothing
Else
Dim imgbyte() As Byte = sqlobject.SQL_Ada(str).Rows(0).Item(0) Dim imgmemory As New MemoryStream(imgbyte)
PictureBox1.Image = Image.FromStream(imgmemory)
End If
End Sub
DisplayImg 方法的作用是读出数据库中保存的二进制图像。
菜单信息查询模块与本模块的原理类似,以下不在阐述。
4.4 添加预定信息
图4.5 添加预定信息
系统在窗口载入时,先查询了客户和菜单两张表,将数据显示在窗体左边,供用户选择时使用,其代码和客户查询类似这里不再叙述。本节介绍其他功能的实现。
4.4.1 日期时间桌号的核对
为了防止客户预定的餐桌出现重合的情况,添加预定的餐桌时系统执行以下代码:
Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
sqlobject = New SQL_Conn
CmdStr = "select tableid from YuDing where tableid='" + ComboBox1.Text + "'and date='" + DateTimePicker1.Value.ToString + "'and time='" + ComboBox2.Text + "'" If sqlobject.Is_SQL_Cmd(CmdStr) Then
MsgBox("在此时刻此桌已有预定")
End If
End Sub
当桌号、时间或者日期中任何一条改动时,程序都会使用方法Is_SQL_Cmd执行查找一次数据库,看在此时刻此桌是否已有预定信息的记录,如果已有相同记录,系统就会提示“在此时刻此桌已有预定”。
4.4.2 打折信息处理
当用户向系统添加预定的菜品时,系统会执行以下代码:
If Label6.Text = "" Then //选择客户
MsgBox("请选择客户")
ElseIf Label12.Text = "" Then //选择菜单
MsgBox("请选择菜单")
Else
Label14.Text = Label14.Text + Label10.Text + " " //所点菜单
price = Label12.Text
totle += price //总消费金额
Label16.Text = totle
Label18.Text = totle
CmdStr = "select usedmoney from discount" //查询设定的消费金额
Cmd = "select discount from discount" //查询设定的打折程度
Cm = "SELECT usedmoney FROM [customer] where id='" + Label6.Text + "'" //客户已消费金额
f = (sqlobject.SQL_Ada(Cm).Rows(0).Item(0)) //f为客户已消费金额
Try
For i = 0 To sqlobject.SQL_Ada(CmdStr).Rows.Count – 1 //打折表行数
j = (sqlobject.SQL_Ada(CmdStr).Rows(i).Item(0)) //打折表行消费金额
d = (sqlobject.SQL_Ada(Cmd).Rows(i).Item(0)) //打折表行折扣率
If (f >= j) Then
Label18.Text = totle * d / 10
End If
Next i
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End Sub
首先选择客户和预定的餐点,客户信息用于判断打折程度,餐点用于结算消费金额。用累加的方法计算出总消费金额,系统先在数据表中查询客户信息中的客户已消费金额,再用查出的金额与数据库对比,判断打折程度。具体方法是系统先查看折扣数据表中共有的数据行数,然后从第0行开始依次向下扫描,由于添加打折信息时是按照消费额度递增方式添加的,所以系统查到的数据会越来越大,越来越接近客户已消费金额,当已消费金额刚好超过设定的金额时系统停止继续向下查找新的设定金额,同时查找设定金额对应的打折程度,再用此打折程度计算打折后的实付金额。
4.4.3 取消预定信息
系统根据用户选择的预定信息,执行删除命令,其关键代码如下:
CmdStr = "delete from YuDing where name='" + Label25.Text + "'and date='" + Label27.Text + "'and time='" + Label28.Text + "'and tableid='" + Label30.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
4.4.4 预定信息查询
图4.6 预定查询
当预定查询模块载入时,系统执行以下语句:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',customerid as '身份证',date as '预定日期',time as '预定时间',tableid as '餐桌号',money as '结算价格',food as '预定菜单',userid as '服务员编号' FROM YuDing"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
当预定查询模块载入时读取数据库中的预定信息并且显示在DataGridView 组件中显示给用户查看,餐厅的厨房就是使用这一模块来获取需要准备的餐点。
当用户知道想要查找的预定信息中的某些确切内容时,可以将知道的内容输入空格中,系统将会自动在数据库中查找这些内容。关键代码如下:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox2.Text = ""
TextBox3.Text = ""
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',customerid as '身份证',date as '预定日期',time as '预定时间',tableid as '餐桌号',money as '结算价格',food as '预定菜单',userid as ' 服务员编号' FROM YuDing where name='" + TextBox1.Text + "'" Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
当根据姓名查找、根据日期查找和根据餐桌号查找的文本框中的数据被改动时,系统根据改动后的数据,使用CmdStr 所代表的SQL 语句查找数据库中的信息。并将新的信息显示在DataGridView 组件中。
4.5充值与结算
4.5.1 客户充值
图4.7 客户充值
用户充值会模块会调取数据库中的customer 表里的money 数据,当用户选择要充值的客户后,系统会提取对应客户的客户余额,当用户确定添加后,系统会用客户余额加上客户充值的金额,然后把得到的结果更新到数据库中客户的账户余额中同时系统也会以同样的方法更新数据库user 表中的收款金额money 数据。 然后再刷新DataGridView 组件中的数据信息。当用户点击充值按钮时,系统执行以下代码:
If Label6.Text "" Then
a = Label6.Text
If TextBox1.Text "" Then
b = TextBox1.Text
money = a + b
CmdStr = "update customer set money ='" + money.ToString + "' where name='" + Label4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr) //更新充值后的客户数据库
Cmd = "SELECT money FROM [user] where user_id='" + userid + "'"
money = (sqlobject.SQL_Ada(Cmd).Rows(0).Item(0))
a = money + b
CmdStr = "update [user] set money ='" + a.ToString + "' where user_id='" + userid + "'"
sqlobject.ExecCmd(CmdStr) //更新充值后的用户数据库
MsgBox("充值成功")
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',id as '身份证',money as '余额' FROM customer"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
Label4.Text = ""
Label5.Text = ""
Label6.Text = ""
TextBox1.Text = ""
Else : MsgBox("请输入金额")
End If
Else : MsgBox("请选择客户")
End If
用户充值其实是更新数据库中两张表的内容,系统先把客户的账户余额和用户的实收金额从数据库中调出来,加上用户的充值金额后,再把更新后的金额填入数据库。再用同样的方法对用户收款金额进行更新。两张数据表的作用不同,客户表中的数据指客户的账户余额,用户表中的数据指用户收款金额,方便店长查询员工的收款金额。
4.5.2 客户结算
图4.8 客户买单
买单分为现金支付和余额支付
现金支付:客户使用现金支付的话会增加用户的收款金额,方法和上面的用户充值类似 余额支付:用户若选择余额支付的话需要使用客户密码验证客户身份,然后系统会从数据库中调出客户余额情况,若客户余额不足,系统会给出提示。若余额足够支付客户的消费金额,系统会在客户余额中扣除消费金额。
余额支付和现金支付的最大区别就是余额支付扣客户账户金额,现金支付增加用户实收金额
4.6 折扣设定
折扣设定其实就是往数据库discount 表中添加以消费金额与其对应的折扣程度,在操作中要切记折扣金额从小到大依次添加因为系统在为客户打折时是从折扣表的第0行开始向后依次类推为客户查询对应的折扣程度,所以若表中数据顺序打乱的话,系统得到的折扣程度会变高。
4.7 用户管理
4.7.1 用户的添加
图4.9 用户添加
系统先对填入的数据进行核对,确认没有和数据库中的已有数据重复且符合要求后系统会将其添加到user 表中。
4.7.2 用户的删除
用户删除模块的设计要考虑几个问题:1、删除的是管理员(店长)还是普通职员。2、如果删除的是管理员,那么数据库里还有没有其他管理员权限的账号以便下次使用。3、如果删除的账号就是管理员现在所使用的账号怎么办。
用户删除模块的主要代码如下:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i As Integer
Dim j As String
j = "店长"
If TextBox4.Text = "" Then
MsgBox("请选择要删除的员工")
Else
If ComboBox1.Text = "店长" Then
CmdStr = "select Style from [user] where Style='" + j + "'"
i = sqlobject.SQL_Ada(CmdStr).Rows.Count //店长级别员工数量
If i > 1 Then
CmdStr = "delete from [user] where id='" + TextBox4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
If TextBox1.Text = userid Then //删除的账号是正在登陆的账号
MsgBox("删除成功, 请重新登录")
main.m_style = ""
main.m_Login = False
For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()
Next
main.main_Load(sender, e)
Login.Show()
main.ToolStripStatusLabel1.Text = "登录"
Me.Close()
Else
MsgBox("删除成功")
End If
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else : MsgBox("至少保留一个店长用户")
End If
Else
CmdStr = "delete from [user] where id='" + TextBox4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
MsgBox("删除成功")
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End If
Call zhiyuanguanli_Load(sender, e)
TextBox1.Text = ""
......
End Sub
删除用户时,如果删除的是职员账户,那么可以直接删除。如果删除的是店主账户,那么系统先判断店主账户有几个,如果只有一个,系统会拒绝删除请求,以防止下次没有店主账户的情况导致无法进入用户管理。如果系统有不止一个店主账户,系统会判断删除的账户是不是现在登陆的账户,如果是的话删除完成后需重新登录。
总 结 当初之所以选择餐饮信息管理系统,不仅仅是因为其具有挑战性,更是因为它更加符合中国广大的中小餐饮企业的发展需要,大家都知道,中国的餐饮服务行业最多的是个体经营模式,他们根本不会花费过多的费用架设网络服务器,大多数店主都希望有一款产品可以满足餐饮管理的需要而且花费的价格也相对低廉,甚至一次投资终身受益。而餐饮信息管理系统的出现就完全可以满足他们的愿望。餐饮信息管理系统的诞生可以为他们提供便捷的管理服务。并且几乎为零的错误率也使得餐厅可以更好的为顾客服务。它不仅可以为餐厅降低人力资源的付出,节省了成本,而且也可以提升自身的形象,使餐厅迎来更多的食客。
经过这么长时间的努力,餐饮信息管理系统终于得以实现其功能了,在这里我对.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](美)依夫杰 . VB2005&.NET3.0高级编程 . 清华大学出版社 . 2008-2-1 [8]百度百科 . http://baike.baidu.com/
编号
郑州师范学院
毕 业 论 文(设 计)
论文题目 餐饮管理系统的设计与实现
系 别 软件学院
专 业 信息管理专业
班 级 09信管二班
姓 名 申艳敏
学 号 [1**********]6
指导教师 杨臻
职 称 讲师
2011年5月
摘 要
随着经济的发展社会的进步,去饭店过节聚会成为了一种新的时尚。因此每逢过年过节,饭店都会迎来大量的顾客,随之而来的就是大量的预定和结算信息将会使得饭店的工作人员不堪重负,并且不可避免的会出现这样或那样的错误。餐饮信息管理软件的诞生可以为他们提供便捷的管理服务。并且几乎为零的错误率也使得餐馆可以更好的为顾客服务。它不仅可以为餐馆降低人力资源的付出,节省了成本,而且也可以提升自身的形象,使餐厅迎来更多的食客。
本系统使用了VB.NET 技术并采用了C/S架构,饭店服务人员使用它可以快速准确地为客户服务,人性化的系统界面设计使得软件便于使用者的快速掌握,计算机几乎为零的错误率和高效的处理能力使得原本繁琐的餐饮管理变得更加科学、快捷以及人性化。
使用本系统,员工将可以快速地编辑顾客资料信息,并且为客户提供订餐打折和充值服务。管理员使用本系统,既可以完成员工的所有工作,又可以更好地管理员工,精准地了解员工账面的资金情况。除了这些,管理员还可以设定餐厅的菜单信息和折扣程度,从而使得管理员对餐厅的运营情况可以全面掌控。
关 键 字:餐饮管理;VB.NET ;C/S架构
Abstract With economic development and social progress, to the hotel festive gathering into a new fashion. Therefore, during festive seasons, the hotel will welcome a large number of customers, followed by a large number of reservations and billing information will make the hotel the staff overwhelmed, and the inevitable will occur or that such errors. Food information management software can provide them with the birth of convenient management services. And almost zero error rate makes the restaurant better for customers. It not only can reduce the human resources for restaurants to pay, cost savings, but also can enhance their image, so that more diners usher restaurant itself. The system uses VB.NET technology and uses C / S architecture, the hotel staff to use it to quickly and accurately to customer service, human system interface design allows the software to facilitate the users to grasp, the computer is almost zero error rate and efficient processing power makes the restaurant management had become more complicated scientific, efficient and humane. With this system, employees will be able to quickly edit the customer data and information, and provide customers with discounts and top-ordering. Administrators use the system, not only to complete all the work of employees, but also better management of staff, accurate book about employees of funds. In addition to these, the administrator can also set the restaurant's menu of information and discount levels, making the operations of the restaurant managers to fully control.
Keywords : Food and Beverage Management; VB.NET; C / S architecture
目 录
第一章 餐饮信息管理系统的开发背景 ............................ 1
1.1 开发背景 . ............................................. 1
1.2 开发工具和相关技术简介 ................................ 1
第二章 系统定义与系统需求 .................................... 4
2.1 系统定义 . ............................................. 4
2.2 系统需求分析 . ......................................... 4
第三章 系统总体设计 . ......................................... 6
3.1 系统功能模块的划分 . ................................... 6
3.2 管理员权限模块划分 . ................................... 8
3.3 员工权限模块划分 . ..................................... 8
3.4 系统流程分析 . ......................................... 8
3.5 数据库设计 . ........................................... 9
3.5.1 数据库规划 . ...................................... 9
3.5.2 E-R图 .......................................... 10
3.5.3 数据表的设计 . ................................... 11
第四章 系统详细设计 . ........................................ 14
4.1 数据库 . .............................................. 14
4.1.1 数据库的链接 . ................................... 14
4.1.2 Is_SQL_Cmd方法 ................................. 14
4.1.3 SQL_Ada方法 .................................... 15
4.1.4 ExecCmd过程 .................................... 15
4.2 系统的登录与注销 . .................................... 15
4.2.1 用户登陆模块的实现 .............................. 15
4.2.2 用户注销模块的实现 .............................. 17
4.3 客户信息管理 . ........................................ 18
4.3.1 客户信息的添加 . ................................. 18
4.3.2 图像的处理 . ..................................... 19
4.3.3 客户信息的修改 . ................................. 20
4.3.4 客户信息的删除 . ................................. 22
4.3.5 客户信息的查询 . ................................. 23
4.4 添加预定信息 . ........................................ 25
4.4.1 日期时间桌号的核对 .............................. 25
4.4.2 打折信息处理 . ................................... 26
4.4.3 取消预定信息 . ................................... 27
4.4.4 预定信息查询 . ................................... 27
4.5充值与结算 ........................................... 30
4.5.1 客户充值 . ....................................... 30
4.5.2 客户结算 . ....................................... 32
4.6 折扣设定 . ............................................ 32
4.7 用户管理 . ............................................ 32
4.7.1 用户的添加 . ..................................... 32
4.7.2 用户的删除 . ..................................... 33
总 结 . .................................................... 36
谢 辞 . .................................................... 37
参考文献 . ................................................... 38
第一章 餐饮信息管理系统的开发背景
1.1 开发背景
传统的餐饮管理现在已经很难应对当今社会对餐饮业的管理要求,它与现在的基于计算机技术发展起来的餐饮信息管理系统对比,有以下几大不同:
便捷性方面:传统的人工对餐饮信息进行管理,如:顾客信息管理,菜单信息管理和订餐信息的管理,都是很繁琐的过程,其中的任何一步过程都要浪费大量的时间,而随着计算机技术的发展,这些原本繁琐的问题都会变得轻而易举。
安全性方面:传统的纸质记录方式查询起来很麻烦,而且保密性很差,并且容易磨损丢失,对于会员余额的管理是非常不利的。但如果采用的是电子文档的方式进行数据的保存,这一切都变得非常简便,你可以方便的对数据信息进行备份查询,并且数据的安全性可以得到最大程度的保证。
准确性方面:传统的人工记账容易出错,如果采用这种方式来处理现在的含有打折信息的消费结算会使得工作量很大,如果计算出错将严重影响自己的声誉。而如果使用软件系统,这些问题都将不会出现,计算机的错误率几乎为零。
鉴于以上传统的人工管理方式的种种缺陷,我设计了方便中小级别餐饮企业使用的应用程序,通过它,管理者可以基本解决以上所遇到的种种问题,并且更加科学的对老客户进行打折,而且添加了主顾权限的不同设计使得它更加方便雇主对雇员的管理与监督。
1.2 开发工具和相关技术简介
开发工具:硬件:ThinkPad 笔记本
软件:Windows XP
Microsoft Visual Studio 2008
Microsoft SQL Server 2005
本系统是采用 VB.NET技术结合SQL Server 数据库设计并实现的。VB.NET 的开发工具为Microsoft Visual Studio 2008,数据库使用的是SQL Server 2005 Express Edition
VB.NET
Visual Basic.NET 是从 Visual Basic 语言演变而来的,是一种为高效地生成类型安全和面向对象的应用程序而设计的语言。Visual Basic 允许开发人员开发面向 Windows、Web 和
移动设备的程序。与所有面向 Microsoft .NET Framework 的语言一样,使用 Visual Basic 编写的程序都具有安全性和语言互操作性方面的优点。这一代 Visual Basic 延续了为您提供一种简单快捷的方法来创建基于 .NET Framework 的应用程序的传统。
Microsoft Visual Studio 2008
Microsoft Visual Studio 2008 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用 Visual Studio 2008 快速创建能够利用 Windows Vista和 2007 Office system 的更安全、更易于管理并且更可靠的应用程序。
Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web 应用程序。
开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP.NET 应用程序服务和 Microsoft 平台。
SQL Server 2005 Express Edition(仅适用于 32 位)
SQL Server Express 是一个免费、易用且便于管理的数据库。SQL Server Express 与 Microsoft Visual Studio 2005 集成在一起,可以轻松开发功能丰富、存储安全、可快速部署的数据驱动应用程序。SQL Server Express 是免费的,可以再分发(受制于协议),还可以起到客户端数据库以及基本服务器数据库的作用。SQL Server Express 是低端 ISV、低端服务器用户、创建 Web 应用程序的非专业开发人员以及创建客户端应用程序的编程爱好者的理想选择。
C/S结构
C/S(Client/Server或客户/服务器模式):Client 和Server 常常分别处在相距很远的两台计算机上,Client 程序的任务是将用户的要求提交给Server 程序,再将Server 程序返回的结果以特定的形式显示给用户;Server 程序的任务是接收客户程序提出的服务请求,进
行相应的处理,再将结果返回给客户程序。
C/S(Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client 端和Server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web 应用发展,Web 和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。
第二章 系统定义与系统需求
2.1 系统定义
计算机技术产生以后,迅速在管理领域得到了广泛的应用。20世纪60年代,美国经营管理协会及其事业部第一次提出了建立管理信息系统的设想,即建立一个有效的信息系统,使得各级管理部门都能了解本单位的一切有关经营活动,为各级决策人员提供所需要的信息。
对于信息管理系统的定义,目前还没有一个统一的认识。由于餐饮管理系统是基于C/S模式,本文更倾向于采纳下述定义:餐饮信息管理系统是通过对整个餐饮服务流程的管理,实现业务的整体优化,提高企业运行控制和外部交易过程的效率的管理工具。
2.2 系统需求分析
现在的管理系统不仅要有漂亮的用户界面,更要有严谨的规划,注重每一个细小的环节。这样才能使得在电子交易时避免不必要错误发生。本系统的设计与实施迎合了二十一世纪经济高速发展、人们的生活节奏日益加快以及现代餐饮业越来越发达和便捷这一现状。它将极大地方便食客的就餐,同时也有利于我们的管理和服务。同时,我们的餐饮信息管理系统还能帮助餐厅降低错误率,扩大营业范围,增加知名度等。
为了使系统更加人性化,便于管理员管理,此系统的用户将分为两种类型,一个是针对员工的餐饮管理系统,另一个是针对管理员(店主)的餐饮管理系统。
员工使用本餐饮信息管理系统应可以实现以下功能:
1. 添加修改查询客户会员信息(修改客户信息需客户确认)
2. 查询菜单
3. 添加查询预定信息,为老顾客打折
4. 客户可以在自己的会员账户里充值
5. 顾客可以用现金买单也可以从会员账户里扣取
管理员使用本餐饮信息管理系统应可以实现以下功能:
1. 添加修改查询客户会员信息(修改客户信息需客户确认)
2. 添加修改查询菜单信息,最好能看到菜品图片
3. 添加查询预定信息,为老顾客打折
4. 客户可以在自己的会员账户里充值
5. 顾客可以用现金买单也可以从会员账户里扣取
6. 设定具体的打折方法
7. 添加职员信息,权限也可以定为管理员。
8. 可以查询使用者的现金收款金额
除了实现以上功能外,本系统还需要方便用户地使用,使得用户可以很快地熟练掌握,从而可以让用户快速的投入工作。并且要避免逻辑错误的出现。
第三章 系统总体设计
3.1 系统功能模块的划分
根据以上需求,餐饮信息管理系统功能被划分为以下模块,如图3.1所示:
图3.1 餐饮信息管理系统功能模块图
系统登录退出模块:本模块是被用于用户登录,注销和退出。模块根据用户的不同类型赋予用户不同的管理权限。低等级的用户不可访问高等级用户的个别功能,而高等级用户可以使用低等级用户的所有系统功能。
客户信息管理模块:本模块将餐饮企业松散的客户资源加以整合,通过标准化的管理操作,将客户资料加以收集。用户使用本模块可以方便的查询客户的所有资料和客户消费信息。并且特意添加了图像模块,使得用户的图像信息加以保留,方便使用者的查询和记忆,当客户再次光临时,服务人员可以直接认出客户,这将使得客户感到无微不至的关怀,提升餐厅的品牌形象。客户的资料变更需经客户的确认,以避免出现因失误操作导致的客户信息流失。
菜单信息管理模块:本模块将餐厅的菜品信息通过标准化的管理操作加以整合,使得菜品的价格、配料、功效和图片可以完全呈现在客户面前,使得客户可以方便地选择自己想要的食物。本模块的分权限设计将限制普通员工对菜单信息加以修改,以防止菜单价格被恶意修改,以此保证餐厅正常可靠的运营。
订餐信息管理模块:通过订餐模块使得传统餐饮订餐过程变得轻松方便,订餐信息管理模块会在客户订餐的同时核对客户所预定的餐桌的使用情况,避免传统订餐易出现的预定重合问题。并且本模块在客户订餐的同时会给出已预定的菜品价格,帮助客户开心合理地消费。模块中包含的打折服务是本模块的一大特色。它将参考客户以往的消费情况和管理员设定的折扣程度对客户进行打折服务。而不是传统餐饮打折中的没有规律和凭据以询。后台的厨房通过本系统可以清楚地知道客户预定的菜品,这样就节省了大量用于菜品核对的时间,提高了厨房的效率,缩短了厨房上菜的时间。减少了不必要的人力物力财力资源的消耗,降低餐厅的运营成本,使餐厅以更好性价比服务于消费者,消费者可以得到更好的消费体验。
充值结算管理模块:通过此模块,用户可以方便的为客户提供充值结算服务,充值收取的现金将会计入用户的收款现金中,便于管理员结算时核对收款金额。结算方式分为两种,一种是现金结算,一种是账户余额结算,现金结算的收款金额会计入用户的收款现金,而账户余额结算的金额会从客户的账户里扣除。
折扣信息管理模块:本模块只限于管理员使用,通过它可以设定为客户打折时用到的折扣程度
员工信息管理模块:本模块只限于管理员使用,管理员使用它,可以添加删除用户。用户类型分为店长(管理员)和职员。管理员删除用户时,如果要删除的是普通职员,系统将直接执行命令,如果要删除的是管理员账户,系统会先查看剩下的管理员账户数量,最少保留一个管理员账户,以便下次的登录。如果删除的用户是管理员本人,则在删除账户后,系统将会要求使用者重新登录。
3.2 管理员权限模块划分
管理员权限划分如图3.2所示:
图3.2 店长权限模块图
管理员使用本系统将能使用系统的所有功能。
3.3 员工权限模块划分
员工权限划分如图3.3所示:
图3.3 雇员权限模块图
员工使用本系统可以使用除了菜单信息编辑、折扣信息管理模块和员工信息管理模块之外的所有功能。
3.4 系统流程分析
系统流程分析如图3.4所示:
流程图简介:员工登录系统后为客户添加基本信息,客户可以根据需要在开通的账户里充值(增加用户的收款金额)。客户通过餐饮信息管理系统进行订餐(老用户在此环节中可能会享受打折服务)。客户用完餐后来到服务台买单,用户可以选择使用现金或者从用户余额里扣除,支付成功会增加客户的已消费金额。若余额不足,系统将会提示,那么客户只能使用现金支付。使用现金支付的话会增加用户的收款金额。管理员登录的话可以使用员工的所有功能,而且可以设定为客户打折的折扣程度和添加菜单,以及管理员工账户。
3.5 数据库设计
3.5.1 数据库规划
根据以上模块划分图分析,针对餐饮信息管理系统,分别对用户、客户、食谱、预定、折扣这几个实体进行详细的调研和分析。数据库的设计采用一库多表式设计。即设计了一个数据库。把每个使用到的独立的对象设计为独立的应用实体。
图3.4 系统流程分析
3.5.2 E-R图
图3.5 用户E-R 图
主要存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息。
图3.6 客户E-R 图
主要存储一些客户信息,如客户的账号、密码、联系方式和消费情况等等,主要用于客户订餐、充值和结算,使用于添加预定。
图3.7 食谱E-R 图
主要存储一些食谱信息,如食谱的名称、价格和照片等等,主要用于客户订餐,使用于添加预定。
图3.8 预定E-R 图
主要存储一些预定信息,如客户的账号、预定的时间、桌号和菜单等等,主要用于记录客户的预定信息,会使用到用户、客户、菜单和折扣信息。
图3.9 折扣E-R 图
存储管理员(店主)设定的打折信息,用来计算打折后的应付金额,使用在添加预定时打折。
3.5.3 数据表的设计 1、 user (用户表)
表3.1 user
用户表主要用于存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息来记录经手的用户,字段money 用于记录用户的收款金额,便于结算时对收款现金的核对。 2、 customer (客户表)
表3.2 customer
主要用于客户订餐、充值和结算,字段money 用于储存账户余额,在使用充值和账户余额支付时会使用到它。字段usedmoney 用于记录客户的消费情况,为客户打折时会使用到它。 3、 food (食谱表)
表3.3 food
食谱表主要用于存储一些食谱信息,如食谱的名称、价格和照片等等,主要用于客户订餐,使用于添加预定。字段Price 记录的是食物的价格。当客户预定餐点时,系统使用它来算费用。
4、 YuDing (预定表)
表3.4 YuDing
要用于记录客户的预定信息,会使用到用户、客户、菜单和折扣信息。当系统预定餐点时,会从其他各表中调出需要的信息,经过计算和处理后,将最终信息储存到YuDing 表,该表和其它各表都有紧密的联系。
5、 discount (折扣表)
表3.5 discount
添加预定时打折。当客户预定餐点时,打折服务的折扣程度就是参照该表。
第四章 系统详细设计
4.1 数据库
4.1.1 数据库的链接
为了便于用户使用和维护,我们将与数据库的连接,单独写出来并进行编译,这样系统在新的环境使用时,只需改动一处数据库连接代码,即可立即使用,连接关键代码如下:
Public Shared constr As String = "Data Source=WWW-3C702F2C1C8\SQLEXPRESS;Initial Catalog=dcdatebase;Integrated Security=True" 其中Public Shared constr As String = "Data
Source=WWW-3C702F2C1C8\SQLEXPRESS;Initial Catalog=dcdatebase;Integrated Security=True"是数据库连接语句,WWW-3C702F2C1C8是计算机名。
4.1.2 Is_SQL_Cmd方法
方法Is_SQL_Cmd是判断数据是否存在,当系统登录和添加客户需要验证数据库中是否存在提交的数据时会用到它。其主要代码如下:
Public Function Is_SQL_Cmd(ByVal cmdstr As String) As Boolean SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlCmd = New SqlCommand(cmdstr, SqlConn) Try
SqlDr = SqlCmd.ExecuteReader() If SqlDr.HasRows Then Return True Else
Return False End If
Catch ex As Exception Return False Finally
SqlConn.Close() End Try
End Function 4.1.3 SQL_Ada方法
方法SQL_Ada是为了查询数据库,并将查询到的结果存放在内存中的datatable 表中,餐饮信息管理系统中使用到的组件DataGridView 再从datatable 表中得到数据。
Public Function SQL_Ada(ByVal adastr As String) As DataTable SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlAda = New SqlDataAdapter(adastr, SqlConn) ds = New DataSet Try
SqlAda.Fill(ds) Return ds.Tables(0) Catch ex As Exception Return New DataTable Finally
SqlConn.Close() End Try End Function 4.1.4 ExecCmd过程
ExecCmd 是为系统中的添加、删除、修改服务,系统里的客户、菜单、折扣和员工的添加、删除和修改都用到了该过程。
Public Sub ExecCmd(ByVal cmdstr As String) SqlConn = New SqlConnection(constr) SqlConn.Open()
SqlCmd = New SqlCommand(cmdstr, SqlConn) SqlCmd.ExecuteNonQuery() End Sub
4.2 系统的登录与注销
4.2.1 用户登陆模块的实现
图4.1 用户登录
用户登陆模块是防止非法用户登陆的第一道防线,通过它可以保护后台数据库的安全性,当用户要进行系统操作时,首先要进入的就是身份验证界面,只有在密码正确的情况下才能进行以后的操作,如果输入的密码不正确,则不能进行登录对系统进行操作。如果用户以职员的身份进入系统,则只能进行顾客信息管理、菜单信息查询、预定信息管理和充值结算管理,而菜单信息管理、折扣设定、员工管理这些功能将被屏蔽,如果用户以管理员(店长)身份登录,系统的所有功能都将可以使用。以下是“登录”按钮的代码:
cmdstr = "select * from [user] where [user_id] ='" + TextBox1.Text + "' and [pwd]= '" + TextBox2.Text + "' and [style]= '" + ComboBox1.Text + "'"
Try
If sqlobject.Is_SQL_Cmd(cmdstr) Then
main.m_Login = True
...... //类似部分省略
Me.Close()
Else
MsgBox("请填写正确的用户名、密码和用户类型!")
End If
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
系统先进行数据库操作,判断是否存在用户名、用户密码和用户类型完全符合要求的数据,如果存在,则说明用户可以登录,同时把登录的用户类型和用户名告诉需要用到用户类型和用户名数据的模块如系统主界面、充值模块和买单模块等等。
4.2.2 用户注销模块的实现
用户注销模块的代码如下:
Private Sub 注销ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 注销ToolStripMenuItem.Click
Me.m_style = ""
Me.m_Login = False
For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()
Next
main_Load(sender, e)
Login.Show()
Me.ToolStripStatusLabel1.Text = "登录"
End Sub
用户通过本模块可以注销系统,系统恢复到登录前画面,这样就可以防止在用户离开后,系统数据被人恶意修改。
4.3 客户信息管理
4.3.1 客户信息的添加
图4.2 客户的添加
当用户点击添加按钮时,系统执行以下代码:
CmdStr = "SELECT id FROM [customer] where id='" + TextBox2.Text + "'"
If TextBox2.Text = "" Then //身份证不为空
MsgBox("请输入身份证号")
TextBox2.Focus()
ElseIf sqlobject.Is_SQL_Cmd(CmdStr) Then //检查是否已注册
MsgBox("该客户已经存在")
TextBox2.Focus()
...... //中间还有很多类似的验证
Else
CmdStr = "insert into customer
(name,id,address,birthday,pwd,addtime,money,usedmoney,tel,mobilephone,userid)VALUES('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + DateTimePicker1.Value.ToString + "','" + TextBox6.Text + "','" + Now + "','" + "0" + "','" + "0" + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + user + "')"
Try
sqlobject.ExecCmd(CmdStr) //添加客户
MsgBox("添加成功") // 添加成功提示
FileUrl = "" //复位空格
......
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End Sub
在添加用户前,系统进行了详细的表单验证,包括验证要提交的客户是否已经存在,用户两次输入的密码是否一样,以及联系方式不为空等等。使用insert 语句将通过验证的表格中的数据提交到数据库。菜单信息添加模块与本模块的原理类似,以下不再阐述。
4.3.2 图像的处理
如果用户在上面添加客户信息时,添加了图像信息,那么系统就会执行以下命令: If FileUrl "" Then //图像存在的话,添加图像
Dim imgstreem As New FileStream(FileUrl, FileMode.Open, FileAccess.Read) Dim imgbyte(imgstreem.Length) As Byte
imgstreem.Read(imgbyte, 0, imgstreem.Length)
imgstreem.Close()
Dim sqlcmd As New System.Data.SqlClient.SqlCommand
Dim sqlconn As New
System.Data.SqlClient.SqlConnection(SQL_Conn.constr)
CmdStr = "update customer set photo=@image where id='" + TextBox2.Text + "'" sqlcmd.Parameters.Add("@image", SqlDbType.Image)
sqlcmd.Parameters("@image").Value = imgbyte
sqlcmd.Connection = sqlconn
sqlcmd.CommandText = CmdStr
Try
sqlconn.Open()
sqlcmd.ExecuteNonQuery()
sqlconn.Close()
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
如果用户提交了客户的相片,相片将会被转化为二进制数据提交到数据库中,这样就可以方便用户日后对客户资料进行维护,也有助于服务人员记住客户,当客户再次光临时,一口报出客户的名字将会使客户对餐厅的好感大增。
4.3.3 客户信息的修改
图4.3 客户信息的修改
当客户资料因实际情况发生变更时,可以修改系统中的资料数据,用户需提供注册时所使用的客户密码。使用密码可以防止客户的资料被恶意修改。充分保护客户权益,即使是管理员也不能在不经过客户同意的情况下修改客户数据。以下是修改按钮的代码。
CmdStr = "select pwd from customer where pwd='" + TextBox12.Text + "' and id ='" + TextBox8.Text + "'" //确定客户身份代码
...... //省略验证信息
If sqlobject.Is_SQL_Cmd(CmdStr) Then //如果客户同意修改的话继续
CmdStr = "update customer set address='" + TextBox9.Text + "'" + ",tel='"
+ TextBox10.Text + "'" + ",mobilephone='" + TextBox11.Text + "'" + ",pwd='" + TextBox13.Text + "'" + " where id='" + TextBox8.Text + "'"
Try
sqlobject.ExecCmd(CmdStr) //执行更新
MsgBox("修改成功")
TextBox8.Text = ""
......
PictureBox2.Image = Nothing
Call TabControl1_SelectedIndexChanged(sender, e)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else
MsgBox("密码错误")
End If
使用方法Is_SQL_Cmd验证客户密码的正确性,如果原始密码正确,用户在输入新密码后可以进行对联系方式等基本资料进行修改。使用update 语句将空格中的数据更新到服务器。如果更新成功,系统会弹出“修改成功的提示”。 菜单信息修改模块与本模块的原理类似,以下不再阐述。
4.3.4 客户信息的删除
客户信息可以在得到客户确认的情况下删除,因设计到账户余额问题所以在进行此操作时万分谨慎。客户资料来之不易,建议不要轻易删除客户资料。以下是删除模块的程序代码:
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
If TextBox12.Text = "" Then
MsgBox("请输入用户密码")
TextBox12.Focus()
Else
CmdStr = "select pwd from customer where pwd='" + TextBox12.Text + "' and id ='" + TextBox8.Text + "'" //用户密码确认
If sqlobject.Is_SQL_Cmd(CmdStr) Then
CmdStr = "delete from customer where id='" + TextBox8.Text + "'" Try
sqlobject.ExecCmd(CmdStr) //执行删除命令
MsgBox("删除成功")
PictureBox2.Image = Nothing
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else
MsgBox("密码错误")
End If
End If
Call TabControl1_SelectedIndexChanged(sender, e)
End Sub
系统先对客户密码进行了核对,密码正确的话,使用delete 语句,根据客户的身份证号对数据库中的客户数据进行删除。因添加客户数据时要求身份证号是唯一的,所以不用担心误删的问题。菜单信息删除模块与本模块的原理类似,以下不再阐述。
4.3.5 客户信息的查询
图4.4 客户信息的查询
1、客户查询模块载入
Private Sub kehuchaxun_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',id as '身份证',address as '家庭地址',tel as ' 电话号码',mobilephone as ' 手机号码' ,money as '账户余额' ,usedmoney as '已消费额'FROM customer"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
使用SQL_Ada方法,查询customer 表中的个别数据,将数据库中的数据提取出来保存在内存中的datatable 表中,客户信息查询中的DataGridView 组件将内存中的datatable 数据
表里的数据提取出来显示给用户查看。
2、当点击DataGridView 组建中的任意一客户资料时,在组件左边的PictureBox 中将显示客户照片。
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles
DataGridView1.CellClick
If row e.RowIndex And e.RowIndex >= 0 Then
row = e.RowIndex
Label1.Text = Me.DataGridView1.Item(0, row).Value.ToString.Trim()
If Label1.Text "" Then
CmdStr = "select photo from customer where name='" + Label1.Text + "'"
DisplayImg(CmdStr)
Else : PictureBox1.Image = Nothing
End If
End If
End Sub
其中If row e.RowIndex And e.RowIndex >= 0 中e.RowIndex 指的是点击的行数,第一行为0。Label1.Text = Me.DataGridView1.Item(0, row).Value.ToString.Trim()是为了取所选行数的第一列值,即客户姓名。If Label1.Text "" Then是指如果label1不为空, CmdStr = "select photo from customer where name='" + Label1.Text + "'"是SQL 语句查询图片数据。DisplayImg(CmdStr)是在DisplayImg 方法中执行SQL 语句。Else : PictureBox1.Image = Nothing指不满足条件时,清空图像。
3、DisplayImg 方法
Private Sub DisplayImg(ByVal str As String)
sqlobject.SQL_Ada(str)
If sqlobject.SQL_Ada(str).Rows(0).Item(0) Is DBNull.Value Then
PictureBox1.Image = Nothing
Else
Dim imgbyte() As Byte = sqlobject.SQL_Ada(str).Rows(0).Item(0) Dim imgmemory As New MemoryStream(imgbyte)
PictureBox1.Image = Image.FromStream(imgmemory)
End If
End Sub
DisplayImg 方法的作用是读出数据库中保存的二进制图像。
菜单信息查询模块与本模块的原理类似,以下不在阐述。
4.4 添加预定信息
图4.5 添加预定信息
系统在窗口载入时,先查询了客户和菜单两张表,将数据显示在窗体左边,供用户选择时使用,其代码和客户查询类似这里不再叙述。本节介绍其他功能的实现。
4.4.1 日期时间桌号的核对
为了防止客户预定的餐桌出现重合的情况,添加预定的餐桌时系统执行以下代码:
Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
sqlobject = New SQL_Conn
CmdStr = "select tableid from YuDing where tableid='" + ComboBox1.Text + "'and date='" + DateTimePicker1.Value.ToString + "'and time='" + ComboBox2.Text + "'" If sqlobject.Is_SQL_Cmd(CmdStr) Then
MsgBox("在此时刻此桌已有预定")
End If
End Sub
当桌号、时间或者日期中任何一条改动时,程序都会使用方法Is_SQL_Cmd执行查找一次数据库,看在此时刻此桌是否已有预定信息的记录,如果已有相同记录,系统就会提示“在此时刻此桌已有预定”。
4.4.2 打折信息处理
当用户向系统添加预定的菜品时,系统会执行以下代码:
If Label6.Text = "" Then //选择客户
MsgBox("请选择客户")
ElseIf Label12.Text = "" Then //选择菜单
MsgBox("请选择菜单")
Else
Label14.Text = Label14.Text + Label10.Text + " " //所点菜单
price = Label12.Text
totle += price //总消费金额
Label16.Text = totle
Label18.Text = totle
CmdStr = "select usedmoney from discount" //查询设定的消费金额
Cmd = "select discount from discount" //查询设定的打折程度
Cm = "SELECT usedmoney FROM [customer] where id='" + Label6.Text + "'" //客户已消费金额
f = (sqlobject.SQL_Ada(Cm).Rows(0).Item(0)) //f为客户已消费金额
Try
For i = 0 To sqlobject.SQL_Ada(CmdStr).Rows.Count – 1 //打折表行数
j = (sqlobject.SQL_Ada(CmdStr).Rows(i).Item(0)) //打折表行消费金额
d = (sqlobject.SQL_Ada(Cmd).Rows(i).Item(0)) //打折表行折扣率
If (f >= j) Then
Label18.Text = totle * d / 10
End If
Next i
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End Sub
首先选择客户和预定的餐点,客户信息用于判断打折程度,餐点用于结算消费金额。用累加的方法计算出总消费金额,系统先在数据表中查询客户信息中的客户已消费金额,再用查出的金额与数据库对比,判断打折程度。具体方法是系统先查看折扣数据表中共有的数据行数,然后从第0行开始依次向下扫描,由于添加打折信息时是按照消费额度递增方式添加的,所以系统查到的数据会越来越大,越来越接近客户已消费金额,当已消费金额刚好超过设定的金额时系统停止继续向下查找新的设定金额,同时查找设定金额对应的打折程度,再用此打折程度计算打折后的实付金额。
4.4.3 取消预定信息
系统根据用户选择的预定信息,执行删除命令,其关键代码如下:
CmdStr = "delete from YuDing where name='" + Label25.Text + "'and date='" + Label27.Text + "'and time='" + Label28.Text + "'and tableid='" + Label30.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
4.4.4 预定信息查询
图4.6 预定查询
当预定查询模块载入时,系统执行以下语句:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',customerid as '身份证',date as '预定日期',time as '预定时间',tableid as '餐桌号',money as '结算价格',food as '预定菜单',userid as '服务员编号' FROM YuDing"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
当预定查询模块载入时读取数据库中的预定信息并且显示在DataGridView 组件中显示给用户查看,餐厅的厨房就是使用这一模块来获取需要准备的餐点。
当用户知道想要查找的预定信息中的某些确切内容时,可以将知道的内容输入空格中,系统将会自动在数据库中查找这些内容。关键代码如下:
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
TextBox2.Text = ""
TextBox3.Text = ""
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',customerid as '身份证',date as '预定日期',time as '预定时间',tableid as '餐桌号',money as '结算价格',food as '预定菜单',userid as ' 服务员编号' FROM YuDing where name='" + TextBox1.Text + "'" Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
End Sub
当根据姓名查找、根据日期查找和根据餐桌号查找的文本框中的数据被改动时,系统根据改动后的数据,使用CmdStr 所代表的SQL 语句查找数据库中的信息。并将新的信息显示在DataGridView 组件中。
4.5充值与结算
4.5.1 客户充值
图4.7 客户充值
用户充值会模块会调取数据库中的customer 表里的money 数据,当用户选择要充值的客户后,系统会提取对应客户的客户余额,当用户确定添加后,系统会用客户余额加上客户充值的金额,然后把得到的结果更新到数据库中客户的账户余额中同时系统也会以同样的方法更新数据库user 表中的收款金额money 数据。 然后再刷新DataGridView 组件中的数据信息。当用户点击充值按钮时,系统执行以下代码:
If Label6.Text "" Then
a = Label6.Text
If TextBox1.Text "" Then
b = TextBox1.Text
money = a + b
CmdStr = "update customer set money ='" + money.ToString + "' where name='" + Label4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr) //更新充值后的客户数据库
Cmd = "SELECT money FROM [user] where user_id='" + userid + "'"
money = (sqlobject.SQL_Ada(Cmd).Rows(0).Item(0))
a = money + b
CmdStr = "update [user] set money ='" + a.ToString + "' where user_id='" + userid + "'"
sqlobject.ExecCmd(CmdStr) //更新充值后的用户数据库
MsgBox("充值成功")
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
sqlobject = New SQL_Conn
CmdStr = "SELECT name as '客户姓名',id as '身份证',money as '余额' FROM customer"
Try
Me.DataGridView1.DataSource = sqlobject.SQL_Ada(CmdStr)
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Me.DataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.DisplayedCells
Label4.Text = ""
Label5.Text = ""
Label6.Text = ""
TextBox1.Text = ""
Else : MsgBox("请输入金额")
End If
Else : MsgBox("请选择客户")
End If
用户充值其实是更新数据库中两张表的内容,系统先把客户的账户余额和用户的实收金额从数据库中调出来,加上用户的充值金额后,再把更新后的金额填入数据库。再用同样的方法对用户收款金额进行更新。两张数据表的作用不同,客户表中的数据指客户的账户余额,用户表中的数据指用户收款金额,方便店长查询员工的收款金额。
4.5.2 客户结算
图4.8 客户买单
买单分为现金支付和余额支付
现金支付:客户使用现金支付的话会增加用户的收款金额,方法和上面的用户充值类似 余额支付:用户若选择余额支付的话需要使用客户密码验证客户身份,然后系统会从数据库中调出客户余额情况,若客户余额不足,系统会给出提示。若余额足够支付客户的消费金额,系统会在客户余额中扣除消费金额。
余额支付和现金支付的最大区别就是余额支付扣客户账户金额,现金支付增加用户实收金额
4.6 折扣设定
折扣设定其实就是往数据库discount 表中添加以消费金额与其对应的折扣程度,在操作中要切记折扣金额从小到大依次添加因为系统在为客户打折时是从折扣表的第0行开始向后依次类推为客户查询对应的折扣程度,所以若表中数据顺序打乱的话,系统得到的折扣程度会变高。
4.7 用户管理
4.7.1 用户的添加
图4.9 用户添加
系统先对填入的数据进行核对,确认没有和数据库中的已有数据重复且符合要求后系统会将其添加到user 表中。
4.7.2 用户的删除
用户删除模块的设计要考虑几个问题:1、删除的是管理员(店长)还是普通职员。2、如果删除的是管理员,那么数据库里还有没有其他管理员权限的账号以便下次使用。3、如果删除的账号就是管理员现在所使用的账号怎么办。
用户删除模块的主要代码如下:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim i As Integer
Dim j As String
j = "店长"
If TextBox4.Text = "" Then
MsgBox("请选择要删除的员工")
Else
If ComboBox1.Text = "店长" Then
CmdStr = "select Style from [user] where Style='" + j + "'"
i = sqlobject.SQL_Ada(CmdStr).Rows.Count //店长级别员工数量
If i > 1 Then
CmdStr = "delete from [user] where id='" + TextBox4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
If TextBox1.Text = userid Then //删除的账号是正在登陆的账号
MsgBox("删除成功, 请重新登录")
main.m_style = ""
main.m_Login = False
For Each ChildForm As Form In Me.MdiChildren
ChildForm.Close()
Next
main.main_Load(sender, e)
Login.Show()
main.ToolStripStatusLabel1.Text = "登录"
Me.Close()
Else
MsgBox("删除成功")
End If
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
Else : MsgBox("至少保留一个店长用户")
End If
Else
CmdStr = "delete from [user] where id='" + TextBox4.Text + "'"
Try
sqlobject.ExecCmd(CmdStr)
MsgBox("删除成功")
Catch ex As Exception
main.OPErr.WriteErr(ex)
End Try
End If
End If
Call zhiyuanguanli_Load(sender, e)
TextBox1.Text = ""
......
End Sub
删除用户时,如果删除的是职员账户,那么可以直接删除。如果删除的是店主账户,那么系统先判断店主账户有几个,如果只有一个,系统会拒绝删除请求,以防止下次没有店主账户的情况导致无法进入用户管理。如果系统有不止一个店主账户,系统会判断删除的账户是不是现在登陆的账户,如果是的话删除完成后需重新登录。
总 结 当初之所以选择餐饮信息管理系统,不仅仅是因为其具有挑战性,更是因为它更加符合中国广大的中小餐饮企业的发展需要,大家都知道,中国的餐饮服务行业最多的是个体经营模式,他们根本不会花费过多的费用架设网络服务器,大多数店主都希望有一款产品可以满足餐饮管理的需要而且花费的价格也相对低廉,甚至一次投资终身受益。而餐饮信息管理系统的出现就完全可以满足他们的愿望。餐饮信息管理系统的诞生可以为他们提供便捷的管理服务。并且几乎为零的错误率也使得餐厅可以更好的为顾客服务。它不仅可以为餐厅降低人力资源的付出,节省了成本,而且也可以提升自身的形象,使餐厅迎来更多的食客。
经过这么长时间的努力,餐饮信息管理系统终于得以实现其功能了,在这里我对.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](美)依夫杰 . VB2005&.NET3.0高级编程 . 清华大学出版社 . 2008-2-1 [8]百度百科 . http://baike.baidu.com/