




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库课程设计报告(餐饮管理系统)系 别电子信息系专业名称计算机科学与技术班级学号*学生姓名*指导教师*成 绩 2011年 7 月 1 日 电子信息系数据库课程设计(报告) 第 1 页1 概述随着人民生活水平的提高,越来越多的人到餐馆里就餐,使得餐饮业有了更多的发展机会,但同时餐饮业的竞争也在不断的加剧。要想在竞争激烈的市场上立于不败之地,好的管理是必不可少的。加强管理不能只重视人为因素,技术因素也是非常重要的,好的管理方法如果引入了先进的技术手段,即引入计算机技术会使管理走上一个新的台阶。目前,餐饮业发展迅速,各类管理系统应用而生。有针对大饭店、大酒店的酒店管理系统,这类系统的开发已经非常成熟。然而,为数众多的小餐饮企业却没有一个合适的管理系统,因此开发此类管理系统是十分必要的。1.1 设计题目及实现目标设计题目:基于c#语言windows窗体界面的餐饮管理系统;实现目标: (1)系统采用人机交互的方式,界面美观友好,信息查询方便,数据存储安全; (2)实现对餐饮顾客开台、点菜、账目查询和结账等操作; (3)对数据输入的数据进行数据检验,尽可能的避免人为错误; (4)对消费账目进行自动结算; (5)实现对消费的历史记录进行查询; (6)系统应最大限度的实现以维护性和易操作性。1.2 开发环境简介开发ide:microsoft visual studio 2010;开发语言:c#.net;数据库:sql server 2008;开发环境:windows 7;开发周期:10天;开发人数:4人。2 需求分析2.1 系统功能描述从顾客角度来看,能实现即时点菜、结账、取消开台等功能;从管理员角度可实现即时营业情况,记录员工信息、桌台信息、菜单信息并实现增删改等基本信息功能;不同的用户有不同的权限,系统管理员有所有的功能权限,经理拥有除系统维护功能以外的所有功能权限,一般用户只能对查看餐馆运行情况,客户点菜结账等基本功能,但不可以看菜单基本信息和人员基本信息等。2.2 系统功能结构描述餐饮管理系统属于c/s模式的系统,其功能结构图如图1所示:图1 餐饮管理系统功能结构图系统功能介绍:(1)在进入系统时,根据用户输入的内容判断用户的合法身份。合法用户分为普通用户,经理和系统管理员,其中系统用户拥有所有的权限,经理拥有系统维护以外的所有权限,普通用户拥有辅助工具、系统设置、退出、开台、点菜、结账等权限;(2)桌台信息管理可以进行桌台的增加、删除、修改和查询;(3)职员信息管理可以进行职员的增加、删除、修改和查询;(4)菜品信息管理可以进行菜品的增加、删除、修改和查询;(5)辅助工具可对记事本、日历、计算器进行调用,方便快捷;(6)系统维护是系统管理员所拥有的功能,可以对其它用户的权限进行赋值,并可进行系统维护和系统备份;(7)系统设置下的密码修改可以方便用户对自己密码的重置,系统锁定可以对当前的系统进行锁定,使系统不能进行其它操作;(8)点击桌面上的图标,可以对桌台进行开台、点菜、取消开台、消费查询、结账等操作,采用图形化界面,方便、直观;(9)界面友好,并实时给予用户操作提示。3 数据库逻辑结构设计本餐饮管理系统涉及到的表有:系统用户表,用于保存所有用户信息;职员表,用于保存所有职员信息;菜品表,用于保存餐馆所有菜品的信息;桌台表,用于保存餐馆中所有桌台的信息;顾客消费信息表,用于保存顾客消费的信息以便于消费查询和结账。总共有5张表,根据业务和用户需求各个系统用例的不同,表格各不相同,下面是本系统数据库的详细设计。3.1数据库e-r图 图2 用于登录信息表e-r图 图3 菜谱信息表e-r图图4 服务员信息表e-r图图5 桌台信息表e-r图、图6 消费信息表e-r图图7 数据库cmdb关系图3.2 数据库逻辑设计根据设计好的e-r图在数据库中创建各表,系统数据库中各个表的结构如下:表1 用户登录信息表(users)字段名数据类型长度主键是否可以为空说明user_idvarchar50是否用户名user_pwdvarchar50否否用户登录密码user_powerchar10否否用户权限表2 菜谱信息表(foods)字段名数据类型长度主键是否可以为空说明food_idvarchar50是否菜品编号food_namevarchar50否是菜品名称food_pricedecimal9否是食品价格food_typechar10否是食品类别表3 服务员信息表(waiters)字段名数据类型长度主键是否可以为空说明waiter_idvarchar50是否服务员编号waiter_namevarchar50否是服务员姓名waiter_sexchar10否是服务员性别waiter_agechar10否是服务员年龄waiter_cardvarchar50否是身份证号waiter_telvarchar50否是服务员电话waiter_salarydecimal9否是服务员薪水表4 桌台信息表(tables)字段名数据类型长度主键是否可以为空说明table_idvarchar50是否桌台编号table_namevarchar50否是桌台名称table_roomchar10否是桌台位置table_statuschar10否是桌台状态table_typechar10否是桌台类型table_bjfdecimal9否是包间费table_personint10否是顾客人数table_startvarchar50否是开餐时间table_remarkvarchar50否是桌台备注表5 顾客消费信息表(consume)字段名数据类型长度主键是否可以为空说明idint4是否消费流水号food_idvarchar50否是食品编号food_numchar10否是消费数量food_allpricedecimal9否是食品价格table_idvarchar50否是消费桌台waiter_idvarchar50否是服务员号datevarchar50否是消费日期remarkvarchar50否是备注其中,前4张表是系统中的实体表,表5是消费表,其id为消费流水号,由系统自动生成,用作表的主键,这样可以避免不同顾客的消费号重复。表2,3,4的主键分别分别用作表5消费表的外键,用于关联与顾客消费相关的信息。4 程序核心代码及控件描述由于餐饮管理系统对数据库的访问比较频繁,为此,设计一个公共类databaselink.cs,用于建立对数据的连接,当其它模块需要对数据库访问时,调用此模块,这样可以减小程序的代码量,使程序的可移植性更加良好。代码如下: class databaselink public static sqlconnection dataconn() string str = server=localhost;uid=sa;pwd=0000;database=cmdb; sqlconnection sqlconn = new sqlconnection(str); return sqlconn; 4.1用户登录模块设计为了使系统的安全性得到保障,登录模块是必不可少的,只有系统的合法用户才能登录系统。并且在用户登录时其身份和权限也被验证和。本系统的登录模块只需输入用户名和密码,单击【登录】按钮即可进行验证。主要用到textbox和button控件,分别用于用户名和密码输入,登录和取消选择。核心代码: if (textboxpwd.text = ) messagebox.show(请输入密码, 警告, messageboxbuttons.ok, messageboxicon.warning); else /数据库连接 sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(select count(*) from users where user_id= + textboxusername.text + and user_pwd= + textboxpwd.text + ,conn); int i = convert.toint32(cmd.executescalar(); if (i 0) /用户身份验证,并验证权限 cmd = new sqlcommand(select * from users where user_id= + textboxusername.text + , conn); sqldatareader sdr = cmd.executereader(); sdr.read(); string userpower = sdruser_power.tostring().trim(); conn.close(); formmain main = new formmain(); main.power = userpower; main.names = this.textboxusername.text; main.times = datetime.now.toshortdatestring(); main.show(); this.hide(); else messagebox.show(用户名或密码错误!); 运行结果显示:图8 用户登录界面4.2基础信息模块设计餐饮管理的基础信息模块,包括桌台信息、职员信息和菜品信息,各个小模块用到的知识点都是一样的,主要功能是实现桌台、职员和菜品的增删改查功能。下面以职员信息的设计为例介绍此模块的功能设计。此模块主要用到button、textbox、combobox和datagridview控件。分别用于功能选择,信息写入显示、信息选择和总体信息显示等功能。职员信息模块核心代码如下:(1) datagridview控件显示核心代码 private void binddata() /数据库连接并读取数据 sqlconnection conn = publicclass.databaselink.dataconn(); sqldataadapter sda = new sqldataadapter(select waiter_id,waiter_name,waiter_sex,waiter_age,waiter_card,waiter_tel,waiter_salary from waiters order by waiter_id desc,conn); dataset ds = new dataset(); sda.fill(ds); datagridview1.datasource = ds.tables0; (2)执行保存功能的核心代码 private void button3_click(object sender, eventargs e) int32 salary; /判断工资输入的合法性 if (int32.tryparse(textboxsalary.text, system.globalization.numberstyles.integer, system.globalization.numberformatinfo.currentinfo, out salary) sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(select count(*) from waiters where waiter_id= + textboxid.text + , conn); int i = convert.toint32(cmd.executescalar(); /如果数据库中已存在此waiter_id的记录,则修改 if (i 0) cmd = new sqlcommand(update waiters set waiter_id= + textboxid.text + ,waiter_name= + textboxname.text + ,waiter_sex= + comboboxsex.selecteditem.tostring() + ,waiter_age= + textboxage.text + ,waiter_card= + textboxcard.text + ,waiter_tel= + textboxtel.text + ,waiter_salary= + salary + where waiter_id= + textboxid.text + , conn); cmd.executenonquery(); conn.close(); binddata(); else if (textboxid.text = ) messagebox.show(没有填入数据!); else /如果无此记录,则删除 cmd = new sqlcommand(insert into waiters(waiter_id,waiter_name,waiter_sex,waiter_age,waiter_card,waiter_tel,waiter_salary) values( + textboxid.text + , + textboxname.text + , + comboboxsex.selecteditem.tostring() + , + textboxage.text + , + textboxcard.text + , + textboxtel.text + , + textboxsalary.text + ), conn); cmd.executenonquery(); conn.close(); binddata(); else messagebox.show(工资必须为数字); (3)执行删除功能的核心代码 private void button6_click(object sender, eventargs e) /数据库连接 sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); /删除数据 sqlcommand cmd = new sqlcommand(delete from waiters where waiter_id=+datagridview1.selectedcells0.value.tostring()+,conn); cmd.executenonquery(); conn.close(); /删除后列表显示 binddata(); 运行结果显示: 图9 职员信息管理运行界面 图10 桌台管理运行界面图11 菜品管理运行界面4.3辅助工具模块设计辅助工具栏目中日历主要用到monthcalendar控件,用于日历的显示。记事本和计算器则直接调用系统的这些功能。本部分没有用到数据库的知识,但在餐饮管理系统中起到了工具的作用,为操作者带来了方便。核心代码如下: private void 日历toolstripmenuitem_click(object sender, eventargs e) formcalender calender = new formcalender(); calender.showdialog(); private void 记事本toolstripmenuitem_click(object sender, eventargs e) system.diagnostics.process.start(notepad.exe); private void 计算器toolstripmenuitem_click(object sender, eventargs e) system.diagnostics.process.start(calc.exe); 运行结果显示: 图12 记事本和计算器显示结果图13 查看日历运行界面4.4系统维护模块设计系统维护模块主要是系统管理能运用的功能,包括权限管理,系统备份和系统还原三个部分。对于权限管理模块主要用到的控件是combobox其主要功能是对用户选择和对权限设置级别。对于系统备份和还原模块用到的主要控件是textbox,并且设置为只读属性,其主要功能是数据库名和备份还原路径显示。并且三个界面都用了button控件,用于控制选择。其主要代码如下:(1)系统权限管理主要代码: string userpower = ; switch(combobox2.selecteditem.tostring() case 超级管理员: userpower = 0; break; case 经理: userpower = 1; break; case 一般用户: userpower = 2; break; sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(update users set user_power=+userpower+where user_id=+combobox1.selecteditem.tostring()+,conn); cmd.executenonquery(); if(messagebox.show(权限修改成功,提示,messageboxbuttons.ok,messageboxicon.exclamation)=dialogresult.ok) this.close(); 界面显示:图14 权限管理运行界面(2)系统备份主要代码: private void button1_click(object sender, eventargs e) try /备份路径设置 string strg = application.startuppath.tostring(); strg = strg.substring(0, strg.lastindexof(); strg = strg.substring(0, strg.lastindexof(); strg += data; string sqltext = backup database cmdb to disk=+strg+textboxpath.text.trim()+.bak+ with init; /数据库连接并写入 sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(sqltext, conn); cmd.executenonquery(); conn.close(); if (messagebox.show(备份成功,提示,messageboxbuttons.ok,messageboxicon.exclamation) = dialogresult.ok) this.close(); catch (exception ex) messagebox.show(ex.message.tostring(); 运行结果显示:图15 数据库备份运行界面(3)系统还原模块核心代码: private void button1_click(object sender, eventargs e) try string str = use master restore database cmdb from disk= + textbox1.text.trim() + with replace; sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(str,conn); cmd.executenonquery(); if (messagebox.show(恢复成功,提示,messageboxbuttons.ok,messageboxicon.exclamation) = dialogresult.ok) this.close(); catch (exception ex) messagebox.show(ex.message.tostring(); 运行结果显示:图16 数据库恢复模块运行结果显示4.5系统设置模块设计餐饮管理系统的系统设置模块主要功能是用户可以对自己的密码进行重置,并可以对自己正在使用的系统进行锁定,当锁定系统时,用户不可以进行其它任何操作。从而增加了系统的安全性。其主要用到的控件有button和textbox,功能分别是事件确定和密码输入。其中对于系统锁定窗口的formborderstyle属性应设置为none,目的是不显示窗体的边框。密码重置的核心代码如下: private void button1_click(object sender, eventargs e) if (textboxpwd1.text = ) messagebox.show(请输入密码); textboxpwd1.focus(); else if (textboxpwd2.text != textboxpwd1.text) messagebox.show(两次密码不一致); textboxpwd2.focus(); else sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(update users set user_pwd=+textboxpwd1.text+ where user_id=+names+,conn); cmd.executenonquery(); if (messagebox.show(密码修改成功,提示,messageboxbuttons.ok,messageboxicon.asterisk) = dialogresult.ok) this.close(); 结果显示:图17 密码修改页面显示系统锁定解锁的核心代码:private void buttonunlock_click(object sender, eventargs e) sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(select count(*) from users where user_pwd=+textbox1.text.trim()+ and user_id=+owner+,conn); int i = convert.toint32(cmd.executescalar(); if (i 0) this.close(); else if (messagebox.show(密码错误,警告,messageboxbuttons.okcancel,messageboxicon.warning) = dialogresult.ok) textbox1.text = ; textbox1.focus(); 运行结果显示:图18 系统锁定运行效果4.6开台模块设计当顾客要进行消费时,首先要看一下是否有可用的桌台,这在主窗体的图形化界面可以很容易的看出来。如果有空闲的桌台,那么就可以为顾客开台,只有在开台后才能为顾客点菜、查询和结账,所以开台模块在整个系统中非常重要。在某个桌台上选择其右键中的【开台】命令。根据提示,输入相应的开台信息,如顾客人数和服务员等,然后【保存】,则开台便完成了。其用到的主要控件有button、textbox、combobox和datetimepicker,分别用于功能选择,信息录入和服务员及选择日期显示等功能。其核心代码如下: /窗口页面加载 private void formopen_load(object sender, eventargs e) conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(select * from tables where table_name=+name+,conn); sqldatareader sdr = cmd.executereader(); while (sdr.read() textboxname.text = sdrtable_name.tostring().trim(); sdr.close(); cmd = new sqlcommand(select * from waiters,conn); sdr = cmd.executereader(); while (sdr.read() comboboxwn.items.add(sdrwaiter_name.tostring().trim(); comboboxwn.selectedindex = 0; sdr.close(); private void buttonsave_click(object sender, eventargs e) if (textboxperson.text = | convert.toint32(textboxperson.text) = 0) messagebox.show(请输入用餐人数!); else /消费信息写入 string roomname = textboxname.tostring(); sqlcommand cmd1 = new sqlcommand(update tables set table_guest=+textboxguest.text+,table_start=+datetimepicker1.value.tostring()+,table_person=+convert.toint32(textboxperson.text)+,table_status=使用 where table_name=+name+,conn); cmd1.executenonquery(); this.close(); 运行结果显示:图19 开台模块运行显示4.7点菜模块设计当顾客选定好桌台后,会根据顾客的需要点菜和点酒水饮料等食物。在点菜窗口中,会根据菜品的不同类别显示餐厅里可以提供的食物,用户可以对不同的食物进行选择。系统的点菜模块主要利用了treeview控件显示所有的菜系,利用datagridview控件显示顾客消费的所有信息,当单击某个菜品时,右侧将出现次食品的所有信息,选择菜品后单击“添加”按钮完成添加食品的操作。6个textbox控件分别用于显示餐厅所有菜品,显示某个菜品的编号、名称、单价、数量、点菜后的总价格和备注等信息。combox控件用于选择服务员。三个button按钮功能分别为保存、删除和退出。模块运行结果显示:图20 点菜模块运行显示程序核心代码:点菜界面加载核心代码: /界面加载,显示所有可以点的菜品 private void formdc_load(object sender, eventargs e) /采用树形图分类显示,增加了点菜界面的直观性 this.text = rname + 点/加菜; /根节点 treenode newnode1 = treeviewfood.nodes.add(锅底); treenode newnode2 = treeviewfood.nodes.add(凉菜); treenode newnode3 = treeviewfood.nodes.add(热菜); treenode newnode4 = treeviewfood.nodes.add(酒水); treenode newnode5 = treeviewfood.nodes.add(主食); sqlconnection conn = publicclass.databaselink.dataconn(); conn.open(); sqlcommand cmd = new sqlcommand(select * from foods where food_type=1,conn); sqldatareader sdr = cmd.executereader(); while (sdr.read() newnode1.nodes.add(sdr1.tostring().trim(); sdr.close(); cmd = new sqlcommand(select * from foods where food_type=2, conn); sdr =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论