【计算机软件毕业设计】酒店餐饮管理的设计与实现_第1页
【计算机软件毕业设计】酒店餐饮管理的设计与实现_第2页
【计算机软件毕业设计】酒店餐饮管理的设计与实现_第3页
【计算机软件毕业设计】酒店餐饮管理的设计与实现_第4页
【计算机软件毕业设计】酒店餐饮管理的设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论近年来,随着改革开放步伐的加快和中西方文化的交流与发展,我国人民生活水平显著提高,全社会对餐饮业的需求量也越来越大,伴随着消费的持续增长,酒店餐饮行业已经成为现代社会中发展最快的行业之一。要想在激烈的市场竞争中生存,就必须在经营管理、餐饮服务等方面提高管理意识。而对酒店的经营状况起决定作用的是对酒店日常营业的管理。如何用先进的管理手段,提高酒店餐饮的管理水平,是每一家酒店的经营者所面临的重要课题。所以应势而出的酒店管理系统有着很好的可行应用性。它具有有检索迅速、查找方便、可靠性高、存储量大、保密性好、成本低等优点。这些优点能够极大地提高酒店餐饮管理的效率,也是酒店在同行业竞争中处于不败地位的重要条件。系统以mysql作为后台数据库,MyEclipse为开发工具,tomcat为服务器,java为编程语言,技术支持采用spring+struts+hibernate(SSH)框架,运用自顶向下逐层分解的模块化结构设计思想、面向对象的设计方法,实现了酒店餐饮管理系统的各个模块。1.1研究背景及意义1.1.1背景随着计算机网络的飞速发展,在酒店行业中计算机的应用越来越重要,采用适当的计算机网络和管理系统,将成为提高酒店管理效率,升级服务级别的重要手段之一。目前国内主流酒店餐饮管理系统为触摸屏点菜系统,一些小型酒店也配备了类似系统,但大多没有很好地整合网络资源,缺少网上预定功能,因此,对该系统的研究也在不断完善中。1.1.2意义本项目研究的酒店管理系统有几个鲜明的特点:一是灵活性好,随着经济发展全球化,国际旅游更加频繁,客户的要求更加多样化,客户可以在任何地方通过网络查看酒店的信息,了解酒店的情况,提出自己的要求,酒店可以通过留言板知道其客户对酒店的意见或建议,随时能够掌握来自客户方面的需求或要求。二是服务质量高,客户可以通过系统对已用过的菜品进行评价,酒店便可以提高那些评价较低菜品的质量或口味,以适应更多消费者的需求。三是管理效率高,管理员可以通过此系统管理员工信息,知道酒店的运营状况,以及时做出调整。通过对本项目的研究希望开发出成本较低,功能完善,以帮助酒店的管理人员实现酒店餐饮的科学管理的酒店餐饮管理系统,客户可以在网上注册成为该酒店会员以享受更优质、便捷的服务,可以浏览酒店包桌及菜酒品的种类、价格等,同时这套系统还可以为客户提供网上预订及在线支付的功能。该管理系统还可以为管理员提供财务统计功能,以及对工作人员的管理等功能。希望此酒店餐饮管理系统的成功开发能够方便管理人员对酒店餐饮的管理,提高服务质量和工作效率,使管理者全面了解营业情况,完善酒店的管理体制。1.2国内外发展情况

随着信息化技术的日益普及,餐饮这样的传统行业也越来越多的采用信息技术来管理业务,市场上餐饮管理软件正处于百花齐放、百家争鸣的阶段。目前市场上大多数餐饮软件是基于WINDOWS操作系统的,也有部分餐饮软件考虑到版权的问题,采用LINUX操作系统;又比如,系统数据库,有ACCESS、SYBASE、MYSQL、SQLSERVER、ORACLE等,对于餐饮系统来说,采用什么数据库与餐厅的规模比较相关,较小的餐厅可以采用比较简单的数据库如ACCESS,这样使用维护都可以做的比较简单,而规模大的餐厅就应该用SQLSERVER或ORACLE这样的数据库,可以保障数据比较安全、系统比较稳定,但同时也要求有专门的系统管理员来维护。还有,数据的录入通常有三种方式,一是基于普通电脑,二是基于触摸屏,三是采用无线点菜系统,而无线技术又有基于红外技术和无线网络的技术。从目前的发展趋势看,餐饮系统越来越多的采用触摸屏,而无线技术正在逐步成熟起来。

在国内,餐饮软件的发展也正处于蓬勃发展的时期,如龙腾环宇科技,它是一家以软件开发、销售为主营方向的技术开发型企业。龙腾软件立足于餐饮及酒店客房管理市场,致力于为客户提供一流的产品及服务,企业下设市场拓展部、产品研发部、公关策划部、客户服务部等主要职能部门。在国外对餐饮软件的研究和发展也相当全面,但就目前国内餐饮行业的情况来看,国外软件的优势并不明显,相反,国内这些餐饮软件企业在餐饮行业蒸蒸日上的同时也是蓬勃发展。

2系统需求分析 2.1角色设置本系统角色分为游客,会员和管理员,游客和会员只在前台网站部分有权限,管理员对系统后台部分有权限。2.2前台功能前台主要针对两类用户:游客和会员。其中游客只能对酒店菜酒品等信息进行浏览以及注册成为酒店会员。而系统为成功注册并激活的会员提供以下这些功能:会员登录与退出、个人信息修改、菜酒品信息查看、餐饮预订、订单信息查询与删除、菜酒品评论及查看、留言板、积分、近期活动及精彩小游戏等。2.3后台功能只有管理员才有权限登录到后台,后台主要包含以下功能模块:管理员密码修改:登陆后管理员可以对密码进行修改。会员管理:对会员信息添加、删除、修改和查询,评论信息删除、修改、查询以及留言信息的删除、修改和查询。订单管理:对订单信息的分类删除、修改和查询,对等待就餐订单的开台处理,菜单报表的生成与打印,对正在就餐订单的结账处理以及订单详情的查询。财务管理:收支记录以及对酒店盈利情况按日、月或年进行统计。餐饮管理:对菜酒品信息进行分类添加、删除、修改和查询,对菜酒品分类信息的添加、删除、修改以及对菜酒品图片信息的添加和修改。系统管理:对系统信息的修改,对广告信息的修改以及对前台相应位置图片信息的修改。员工管理:对员工信息按类别进行添加、删除、修改和查询以及对员工考勤记录的添加、删除、修改和查询。友情链接:包含管理员可能经常访问的网址链接,其中之一就是酒店的前台网址。2.4系统用例图系统用例如图2-1、图2-2所示会员注册会员注册会员登录基本信息管理餐饮预订与支付订单管理菜品评论留言会员图2-1用例图1管理员登录管理员登录会员管理订单管理财务管理餐饮管理系统设置员工管理管理员图2-2用例图22.5技术可行性分析技术可行性分析是根据新系统的目标来衡量是否具有所需要的技术,包括系统开发人员水平和数量,软件方面,硬件方面及其它应用技术。从各个基于Java的网站系统及许多局域网的建设中可以看到,目前基于JavaWeb的系统开发技术已经十分成熟,相信随着Internet/Intranet技术的进一步发展,基于JavaWeb的信息系统开发将有更为明朗的前景。2.6经济可行性分析经济可行性分析主要是对开发新系统所投入的资金与系统投入使用后所带来的经济效益进行比较,确认新系统是否会给企业带来一定的经济效益。开发此酒店餐饮管理系统,不仅能提高酒店的管理水平给管理者提供一个酒店运作的信息平台还能提升酒店的形象及增强竞争力。使用酒店餐饮管理系统能将餐饮企业业务管理和人员管理信息化,使顾客消费及员工信息都由计算机管理并记录,并为那些时间比较珍贵的顾客提供网上预订功能,管理员可随时掌握酒店里包桌的使用状况,客人点单,挂账等情况,并能尽可能的降低使用者的劳动强度,同时提高工作质量和效率。用最少的成本获得最好的经济效益,增强了餐饮企业的市场竞争力,可见,回报明显多于投入。2.7安全可行性在系统运行后,就用户方而言,由于用户使用本系统时不会也不必关心系统内部的结构及实现方法,即对用户来说是透明的,所以本系统对用户而言是定位在界面友好、操作方便、功能齐全的原则上的,用户只需简单的用鼠标点击各页面上的链接或按钮就能执行相应的功能。订单支付采用易宝支付的接口,方便安全,打消顾客对网上预订资金安全的顾虑。就管理者而言,关心的是如何处理用户信息,只要把用户的信息放入服务器端的数据库或专门的数据库服务器,管理者就可运行相应的后台程序进行处理。2.8操作可行性目前资源的利用情况和可操作性,只需根据相关需要对数据库中的相应表数据直接操作就可以实现系统的完整、稳定的运行,不会造成系统的巨大压力,可以保证系统的正常运行。综上所述,通过技术可行性,经济可行性,安全可行性,操作可行性分析,本系统的开发是可行的。

3系统分析与设计3.1系统业务流程分析本系统角色分为游客,会员和管理员,游客和会员只在前台网站有权限,管理员对系统后台有权限。是否加入食谱?是否加入食谱?N确认并支付订单退出前台Y多件预订单件预订N进入前台Y是否登录?N是否注册?是否已注册?Y激活登录菜品选择NYY注册信息浏览是否已激活?N图3-1系统前台业务流程图NN后台登录是否成功?Y员工信息管理系统信息管理餐饮信息管理会员信息管理财务信息管理订单信息管理退出后台密码修改友情链接图3-2系统后台业务流程图3.2数据字典数据字典是系统中各类数据描述的集合,是进行详细的数据的收集和数据分析所获得的主要成果。数据字典在数据库设计中占有很重要的地位。数据字典部分如下:表3.1菜酒品信息表caijiu字段名数据类型(精度范围)字段含义其他idint(11)菜酒品编号PKnamevarchar(128)菜酒品名称nullphotovarchar(128)菜酒品图片名称nullpricedouble菜酒品单价nullstatethinint(1)菜酒品状态nulldescrivarchar(256)菜酒品描述nullnumint(11)菜酒品销量nulltypethinint(1)菜酒品类型null表3.2食谱信息表myrecipe字段名数据类型(精度范围)字段含义其他idint(11)食谱编号PKcookieinfovarchar(3996)食谱cookie信息null表3.3订单详情信息表orderitem字段名数据类型(精度范围)字段含义其他idint(11)订单详情编号PKorder_idvarchar(20)订单名称FKcaijiu_idint(11)菜酒品编号FKcaijiunumint(11)菜酒品数量notnullcategory_idint(11)菜酒品分类编号FK表3.4员工考勤记录信息表(部分)attence字段名数据类型(精度范围)字段含义其他idint(11)考勤记录编号PKempidint(11)员工编号notnullreasonvarchar(50)原因描述nulldeadlinevarchar(10)持续时间nulldatedatetime开始时间null表3.5员工信息表(部分)employee字段名数据类型(精度范围)字段含义其他idint(11)员工编号PKnamevarchar(20)员工姓名nullageint(11)员工年龄nulljobvarchar(20)员工职位nulladdressvarchar(50)员工住址nulltelvarchar(20)联系方式nullsalarydouble薪水nullidCardvarchar(18)身份证号null表3.6订单信息表orders字段名数据类型(精度范围)字段含义其他idvarchar(20)订单编号PKsubdatedatetime订单生成时间nulleatdatedatetime就餐时间nulltotaldouble菜酒品总额nullstatethinint(1)订单状态nulluser_idvarchar(256)会员编号FKtable_idint(11)桌位号FK表3.7会员信息表(部分)user字段名数据类型(精度范围)字段含义其他idint(11)会员编号PKemailvarchar(128)登录邮箱notnullusernamevarchar(128)用户名nullpasswordvarchar(128)密码notnullphotovarchar(128)头像名称nulltelvarchar(20)联系方式nullintergralint(16)积分nullconsumeddouble消费总额null表3.8评论信息表(部分)comment字段名数据类型(精度范围)字段含义其他idint(11)评论编号PKcaijiuidint(11)菜酒品编号FKuseridint(11)会员编号FKtimedatetime评论时间nullcontentvarchar(256)评论内容null3.3系统概要设计概要设计是一种面向对象的数据模型,是按照用户的观点来对数据和信息建模。它描述了从用户角度看到的数据,它反映了用户的实现环境,这种方法用ER图描述现实世界中的实体,而不涉及这些实体在系统中的方法。概要设计中最著名的方法就是实体联系方法(ER方法),建立ER模型,用ER图表示概念结构,得到数据库的概念模型。ER模型中包含“实体”,“联系”和“属性”。本系统的关键实体有菜酒品,会员,食谱,订单,订单详情,评论,收支等。部分实体ER图如图3-3、图3-4、图3-5、图3-6、图3-7、图3-8及图3-9所示。(1)菜酒品实体菜酒品实体包括菜酒品编号、菜酒品名称、图片名称、单价、状态、描述、销量、类型等属性。其中菜酒品编号为菜酒品实体的主键。菜酒品菜酒品编号单价菜酒品菜酒品编号单价菜酒品名称图片名称销量状态描述类型图3-3菜酒品实体E-R图(2)会员实体 会员实体包括会员编号、登录邮箱、用户名、密码、头像名称、性别、联系方式、级别、锁定状态、积分、积分更新时间、消费总额、随机码等属性。其中会员编号为会员实体的主键。会员会员编号密码会员会员编号密码登录邮箱用户名积分性别级别随机码头像名称联系方式锁定状态消费总额积分更新时间图3-4会员实体E-R图(3)食谱实体 食谱实体包含食谱编号、cookie信息等实体。其中食谱编号为食谱实体的主键,食谱实体与会员实体主键共享,为一对一关系,cookie信息属性指的是会员食谱(相当于购物车)字符串信息,该信息是由会员添加菜酒品编号、分类和数量拼接组成。会员编号Cookie信息食谱会员编号Cookie信息食谱图3-5食谱实体E-R图(4)订单实体订单实体包含订单编号、提交时间、就餐时间、状态、总额、用户编号、桌位号等属性,其中订单编号为订单实体的主键,是由订单生成时间与用户编号组合生成,用户编号和桌位号分别为订单实体的外键。订单订单订单编号状态总额桌位号就餐时间提交时间用户编号图3-6订单实体E-R图(5)订单详情实体订单详情实体包括订单详情编号、订单编号、菜酒品编号、菜酒品数量、菜酒品分类编号等属性,其中订单详情编号为订单详情实体的主键,订单编号、用户编号和桌位号分别为其外键,订单实体与订单详情实体为一对多关系。订单详情编号菜酒品编号订单编号用户编号订单详情菜酒品分类菜酒品数量订单详情编号菜酒品编号订单编号用户编号订单详情菜酒品分类菜酒品数量图3-7订单详情实体E-R图(5)评论实体评论实体包括评论编号、会员编号、菜酒品编号、评论内容、评论时间等属性,其中评论编号为评论实体的主键,会员编号和菜酒品编号分别为评论实体的外键,会员实体与评论实体为多对多关系,菜酒品实体与评论实体为一对多关系。评论编号评论编号评论会员编号菜酒品编号图3-8收支实体E-R图(6)收支实体收支实体包括记录编号、日期、类型、总额、描述等属性,其中记录编号为收支实体的主键,类型属性用于标识是收入还是支出。收支记录编号日期类型描述总额收支记录编号日期类型描述总额图3-9评论实体E-R图3.4系统物理设计图3-10物理模型图3.5详细设计如图3-11所示,以“.java”结尾的文件为系统开发涉及到用于业务逻辑处理的类文件,它们均在com.jdcy.web.action这个包下。其中RegisterAction.java主要用于用户注册与激活,LoginAction.java主要用于用户登录、退出与密码修改,MloginAction.java用于管理员登录、登出与密码修改,PreparedAction.java用于前台网站信息(酒店名字、电话、广告等)的显示,ProfileAction.java用于个人信息的显示与修改,CanyinAction.java用于前台菜酒品信息显示、搜索与单件详情查询显示,OrderAction.java提供预订功能、支付功能、评论功能,后台管理员管理主要通过ManageAction.java与Manage1Action.java来完成。图3-11类文件

4系统功能与实现4.1系统开发环境开发工具:MyEclipse、服务器:Tomcat、数据库:MySql4.2系统开发环境的配置首先应把java运行环境jdk装到用于开发的电脑上,并为其配置好环境变量,其次再安装服务器tomcat(注意:安装tomcat时,不应有中文路径),再次是安装开发工具MyEclipse,并为其配置好相应的属性参数。同时还要确保此电脑上装有尽可能多的不同内核的浏览器(用于测试网页兼容性)。4.3系统运行环境4.3.1硬件环境服务端服务器端的最低配置是由建立站点所需的软件来决定的,在最低配置的情况下,服务器的往往不尽如人意,现在的硬件性能已经相当出色,而且价格也很便宜,因此通常应给服务器端配置高性能的硬件。处理器:InterCore22.10GHz或更高内存:2GB硬盘空间:160GB显卡:SVAG显示适配器。用户端因为客户端主要用于浏览和操作数据,所以对客房端的硬件要求不高,不过现在的电脑很高的性价比,因此需要的配置应该高于下面的配置:处理器:InterPentium4.0GHz或更高内存:512MB硬盘空间:80GB显卡:SVAG显示适配器。4.3.2软件环境服务器端操作系统:Windows2003Server或者更高版本网络协议:TCP/IPWeb服务器:Tomcat5.X及以上版本数据库:MySQL浏览器:InternetExplorer6.0以上用户端操作系统:Windows98/2000/XP/win7/win8网络协议:TCP/IP浏览器:InternetExplorer6.0以上4.4会员注册顾客若想拥有更多权限,享受更优质的服务需注册成为会员,注册会员需要用自己的真实邮箱,为了防止有人恶意注册,本系统采用邮箱激活的方式来激活会员,没有激活的会员不能登录。会员注册界面如图4-1所示。图4-1会员注册界面4.5会员登录没有登录的会员只能够浏览前台网站的信息,若要预订或操作个人信息则需登录系统,登录需要输入正确的邮箱及密码,成功登录后,用户信息便被放入session中,以便其他模块获得该用户基本信息。会员登录界面分为首页直接登录板块,如图4-2所示,和弹出层登录板块,如图4-3所示。图4-2会员登录界面1图4-3会员登录界面24.6前台菜酒品信息显示系统采用图文的方式分类显示菜酒品信息,使顾客能更直观、方便了解菜酒品,同时设有搜索栏,能实现模糊搜索,使顾客能够快速查找到自己想预订的菜酒品。当单击某件菜酒品的预订按钮,就会跳到该菜酒品详情页面,即单件预订页面。还可以全选或多选集体加入我的食谱(购物车),以便多件菜酒品集体预订。菜酒品信息显示界面如图4-4所示。图4-4菜酒品信息显示界面4.4会员个人中心个人中心模块主要为用户提供餐豆(积分)免费领取、订单提醒以及小游戏等功能,当本日首次点击领取餐豆按钮时,系统就会给此用户添加相应数量的餐豆,当再次点击或刷新页面时,就不再为其添加,同时提示用户“今日已领”等信息。个人中心界面如图4-5所示。图4-5个人中心界面4.5会员信息修改信息修改主要用于用户密码、头像等信息的修改。信息修改界面如图4-6所示。图4-6会员信息修改界面4.6预订预订功能包括单件预订、多件预订与支付,单件预订直接预订即可,多件预订需要先将菜酒品信息添加到我的食谱后再预订,预订成功后进入支付页面,选择银行进行支付,此过程采用易宝支付接口。相应界面如图4-7、图4-8所示。图4-7单件预订界面图4-8订单支付界面4.7后台登录管理员对系统进行管理首先需要登录系统,为了增加系统的安全系数,本系统的管理员密码采用字母与数字组合,至少八位,并且采用MD5加密处理。后台登录界面如图4-9所示。图4-9后台登录界面4.8会员管理管理员可以对会员信息进行添加、删除、修改与查询等处理,会员管理界面如图4-10所示。图4-10会员信息管理界面4.9订单管理管理员可以对不同状态的订单进行管理,包括开台、报表打印、结账及订单详情查询等处理,订单管理部分界面如图4-11所示。 图4-11订单管理界面 4.10财务管理管理员可以对收支信息进行记录以及统计管理,可以分别按日、月、年进行统计。财务管理界面如图4-12所示。图4-12财务管理界面4.11菜酒品管理管理员可以对菜酒品信息进行添加、删除、修改与查询等操作,菜酒品管理界面如图4-13所示。图4-13菜酒品管理界面4.12系统设置管理员可以对系统信息(如酒店名称、电话、服务协议内容、地址、广告信息等)进行设置,界面一如图4-14所示。图4-14系统信息设置界面4.13员工管理管理员可以对员工基本信息进行添加、删除、修改与查询等进行操作,还可以对员工考勤进行记录。考勤记录界面如图4-15所示。图4-15员工考勤界面

5系统测试 5.1测试的作用和意义系统测试是系统开发周期中的一个非常重要环节。尽管在系统开发周期的各个阶段均采取了严格的技术审查,但依然难免会留下错误,如果系统的一些漏洞或错误在投入运行之前的系统检测阶段没有发现并纠正,这些问题在运行阶段是迟早会暴露出来的,到那时要纠正错误将会付出更大的代价。系统测试占用的时间、花费的人力和成本占软件开发的很大比例。统计表明,开发较大规模的系统,系统测试的工作量大约占整个软件开发工作量的40%-50%。而对于一些特别重要的大系统,测试的工作量和成本更大,甚至超过系统开发其他各阶段的总和的若干倍。5.2测试方法5.2.1单元测试对于小系统,在编码过程中,最常用的是单元测试。单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。5.2.2功能测试系统功能测试最常见的两种方法是黑盒测试和白盒测试,黑盒测试也称功能测试,将软件看作黑盒子,在完全不考虑程序的内部结构和特性的情况下,研究软件的外部特性。根据软件的需求规格说明书测试用例,从程序的输入和输出特性上测试是否满足设定的功能。白盒测试也称结构测试,将软件看作一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查与测试是否相符。5.3系统测试下面对本餐饮管理系统进行黑盒测试,以检查系统能否正确完成各种操作,是否能够实现预期具有的功能。5.3.1管理员登录测试要进入后台管理必须先登录,当输入用户名、密码或者验证码任意一项有误或者为空时都会提示登录失败,如图5-2所示。图5-1管理员登录界面图5-2登录失败5.3.2删除操作测试不论是管理员还是普通会员对一些数据进行删除操作时,系统会提示是否真的要删除此项或多项,若点取消则不进行删除操作,这样的设计有利于避免管理员或会员的误操作。如图7-3所示。图5-3删除操作5.3.3添加/更新操作测试当会员或者管理员对相应信息进行添加/修改时,若添加/修改成功则提示添加/修改成功,若添加/修改失败则也有相应的提示,这样便使会员或管理员了解当前添加/修改操作是否成功,用户体验更加友好。如图7-4所示。图5-4更新操作5.3.4数据校验测试不论前台界面还是后台界面,当有信息输入并且该输入项不能为空或者数据格式有要求时,系统都对其进行数据校验并作相应提示。如图5-5、图5-6所示。图5-5会员登录校验图5-6后台数据校验5.3.5测试结果测试目标已完成,测试通过。

6总结经过这段时间的精心设计,系统已基本完成,实现了餐饮管理系统的基本功能,包括餐饮信息的管理、餐饮预订、订单信息管理、会员信息管理、员工信息管理等主要功能,界面友好,操作简单方便。但酒店餐饮管理系统是一个庞大的工程,要使网络交互功能的实现,脚本的设计,网页的构架,网页的美工,文字的编辑,非一朝一夕可尽善尽美的,这需要一个长期的摸索与完善过程,同时还要对在实践中发现与操作者使用要求不相符合的地方进行修改。系统功能虽已基本实现,但仍有诸多地方需要优化完善。譬如,会员注册模块,发送电子邮件激活账户的功能还不完善,暂时不能完成激活,需要管理员从数据库修改locked字段完成激活。还有就是后台管理系统目前只实现了信息查询与现实功能,由于时间仓促还为实现删除删、改功能。在一些模块设计中,有的设计思路没有考虑进去,在以后的时间里还要加以补充,还有些细节的地方也需要进一步修改和完善。

参考文献[1]吴敏.saas餐饮管理系统的分析与开发[J].太原:太原理工大学,2008[2]彭伟民.基于需求的酒店管理系统的建模与实现[J].微机发展,2005年10期[3]杜艳增.酒店信息管理系统的WebService化[J].济宁学院学报,2008年06期[4]刘敬.Delphi住宿餐饮管理系统开发实例导航[M].北京:人民邮电出版社,2003[5]侯炳辉.信息管理系统[M].北京:中央广播电视大学出版社,2001[6](美)BruceEckel.Java编程思想.陈昊鹏译[M].北京:机械工业出版社,2007[7]萨师煊.数据库系统概论(第三版)[M].北京:高等教育出版社,2004[8](美)BruceA.Tate.PersistenceinSpring[M].北京:清华大学出版社,2006[9]施伯乐,丁宝康,汪卫.数据库系统教程[M].北京:高等教育出版社,2003[10]杨羡莲.餐饮业营销[J].广州市财贸管理干部学院学报,1991(4)[11]张孝祥,张红梅.JavaScript网页开发[M].北京:清华大学出版社,2007

致谢河北农业大学的两年的生活即将画上一个圆满的句号,此刻的我思绪万千。无论此刻是什么心情我首先要感谢我的各科老师对我这两年的培养与关心,我不是您们最出色的学生,但您们却是我最尊敬的老师。感谢您们在学术上给我的谆谆教诲,在我成长的道路上给予我的无私引导。其次,我要感谢我的导师张老师,感谢她对我论文撰写的指导和帮助。附录用户注册代码:publicActionForwardregUser(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ //从该action对应的表单中取出数据 UserFormuserForm=(UserForm)form; //查询数据库,验证有无当前提交的email,若有则不能注册 Listlist=userService.getResult("fromUserwhereemail=?", newObject[]{userForm.getEmail()}); //防止重复提交 HttpSessionsession=request.getSession(); Stringtoken=request .getParameter("org.apache.struts.taglib.html.TOKEN"); Stringtoken2=(String)session .getAttribute(org.apache.struts.Globals.TRANSACTION_TOKEN_KEY); session.removeAttribute(Globals.TRANSACTION_TOKEN_KEY); //判断是否重复提交或者是所填邮箱是否已被注册 if(!token.equals(token2)||list.size()!=0){ request.setAttribute("message","您已注册成功或该邮箱已被注册,请登录!"); returnmapping.findForward("backUI"); } StringcheckCode=request.getParameter("checkcode"); StringranCode=(String)session.getAttribute("random"); if(checkCode.equalsIgnoreCase(ranCode)){ MD5md5=newMD5(); //取出的目的是把用户保存到数据库 Useruser=newUser(); user.setEmail(userForm.getEmail()); user.setUsername(userForm.getUsername()); user.setPassword((md5.getMD5ofStr(userForm.getPassword()))); //user.setPhoto(userForm.getPhoto()); user.setTel(userForm.getTel()); user.setSex(userForm.getSex()); //为用户生成一个随机码,用户激活验证 user.setRandomCode(UUID.randomUUID().toString()); //保存用户 Transactionts=null; Sessionhsession=null; try{ hsession=sessionFactory.openSession(); ts=hsession.beginTransaction(); hsession.save(user); //初始化我的食谱购物车 Myreciperecipe=newMyrecipe(); recipe.setId(user.getId()); hsession.save(recipe); //注册成功后,发送账户激活链接 SendMailsendmail=newSendMail(); sendmail.setHost("SMTP."); sendmail.setUserName("1095856572@"); sendmail.setPassWord("fengbaocnr"); sendmail.setTo(user.getEmail()); sendmail.setFrom("1095856572@"); sendmail.setSubject("账户激活"); sendmail .setContent("http://localhost:8080/Jdcy/register.do?flag=activateUser&id=" +user.getId() +"&" +"checkCode=" +UserActivate.generateCheckcode(user)); sendmail.sendMail(); request.getSession().setAttribute("loginuser",user); Stringmsg="恭喜您!注册成功!请查看您的邮箱已激活账户!"; request.setAttribute("msg",msg); }catch(Exceptione){ Stringmsg="对不起,激活邮件发送失败,请检查您的邮箱是否正确填写!"; request.setAttribute("msg",msg); returnmapping.findForward("toActivateLink"); } mit(); hsession.close(); returnmapping.findForward("toActivateLink"); }else{ Stringcheckmsg="验证码输入有误!"; request.setAttribute("checkmsg",checkmsg); returnmapping.findForward("regUI"); }}用户登录代码:publicActionForwardlogin(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ MD5md5=newMD5(); UserFormuserForm=(UserForm)form; Useruser=newUser(); Stringemail=userForm.getEmail(); Stringpassword=userForm.getPassword(); if(email!=null&&password!=null){ user.setEmail(email); user.setPassword(md5.getMD5ofStr(password)); user=userService.check(user);//将创建的对象传给check方法,之后此对象已经没有用了,故可以重复利用这个对象接收check返回的Users对象,不用再去new一个!!! if(user!=null){ //用户合法,把用户bean放到session域对象中去 request.getSession().setAttribute("loginuser",user); //防止重复提交,创建token this.saveToken(request); //若用户已经激活 if(user.getLocked()==1){ //为显示菜酒品信息准备数据 Listcaipin=canyinService.getResult("fromCaijiuwheretype=?",newObject[]{Short.valueOf(1+"")}); intcurPage=1; inttotalPage=0; intprePage=cur1; intnextPage=curPage+1; Mapmap=PageUtils.Page(curPage,prePage,nextPage,totalPage,6,1,caipin,"canyin","homeCyUI"); //通过工具类设置导航条 Stringstr=map.get("sb").toString(); //设置每次取几个 Listsubcaipin=(List)map.get("sub"); //得到总页数 inttPage=(Integer)map.get("totalpage"); intsize=caipin.size(); //向页面传递参数 if(subcaipin!=null){ request.setAttribute("subcaipin",subcaipin); request.setAttribute("size",size); } intzeng=(cur1)*6; request.setAttribute("totalPage",tPage); request.setAttribute("curPage",curPage); request.setAttribute("str",str); returnmapping.findForward("loginOK"); }else{ returnmapping.findForward("toActivateLink"); } } //用户不合法 returnmapping.findForward("loginNO"); } returnmapping.findForward("loginNO");}餐饮预订代码:publicActionForwardorderMany(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ //TODOAuto-generatedmethodstub OrderFormorderForm=(OrderForm)form; //生成订单号 SimpleDateFormatsdf=newSimpleDateFormat("yyyyMMddHHmmss"); Datedate=newDate(); Useruser=(User)request.getSession().getAttribute("loginuser"); intuserid=user.getId(); Stringorderid=sdf.format(date)+userid; //System.out.println(orderid); //订单生成时间 Datesubdate=newDate(); //就餐时间 SimpleDateFormatsdf1=newSimpleDateFormat("yyyy-MM-ddHH:mm"); Stringorderdate=orderForm.getOrderdate(); Stringordertime=orderForm.getOrdertime(); Dateeatdate=null; try{ eatdate=sdf1.parse(orderdate+""+ordertime); }catch(ParseExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } Stringcaijiuidstr=orderForm.getCaijiuid(); Stringcategorystr=orderForm.getCategoryid(); Stringcaijiunumstr=orderForm.getCaijiunum(); Stringcaijiupricestr=orderForm.getCaijiuprice(); String[]cidarr=caijiuidstr.split("!"); String[]catearr=categorystr.split("!"); String[]cnumarr=caijiunumstr.split("!"); String[]cpricearr=caijiupricestr.split("!"); Transactionts=null; Sessionsession=null; response.setCharacterEncoding("utf-8"); PrintWriterpw=null; try{ pw=response.getWriter(); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } doubletotal=0; try{ session=sessionFactory.openSession(); ts=session.beginTransaction(); for(inti=1;i<cidarr.length;i++){ intcaijiuid=Integer.parseInt(cidarr[i]); intcategoryid=Integer.parseInt(catearr[i]); intcaijiunum=Integer.parseInt(cnumarr[i]); doublecaijiuprice=Double.parseDouble(cpricearr[i]); //将数据封装成orderitem Orderitemorderitem=newOrderitem(); orderitem.setOrderId(orderid); orderitem.setCaijiuId(caijiuid); orderitem.setCaijiunum(caijiunum); orderitem.setCategoryId(categoryid); session.save(orderitem); total=DoubleUtils.add(total,DoubleUtils.mul(caijiuprice,caijiunum)); } //System.out.println(total); //将数据封装成orders Ordersorder=newOrders(); order.setSubdate(subdate); order.setEatdate(eatdate); order.setState(Short.parseShort("0")); order.setTotal(total); order.setUserId(userid); order.setId(orderid); session.save(order); }catch(Exceptione){ System.out.println("生成单件订单发生异常!"); pw.write("error"); pw.flush(); pw.close(); returnnull; } mit(); session.close(); pw.write(orderid); returnnull;}餐饮管理代码://餐饮管理部分 @SuppressWarnings("unchecked") publicActionForwardcpLoad(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ response.setCharacterEncoding("utf-8"); Stringtype=request.getParameter("type"); Listcaipin=canyinService.getResult("fromCaijiuwheretype=?",newObject[]{Short.valueOf(type)}); JSONObjectjsonObj=newJSONObject(); Mapmap=newHashMap(); Listlist=newArrayList(); for(inti=0;i<caipin.size();i++){ Caijiucj=(Caijiu)caipin.get(i); Mapm=newHashMap(); m.put("id",cj.getId()); m.put("name",cj.getName()); m.put("price",cj.getPrice()); m.put("descri",cj.getDescri()); m.put("num",cj.getNum()); m.put("type",cj.getType()); m.put("state",cj.getState()); list.add(m); } map.put("total",caipin.size()); map.put("rows",list); try{ PrintWriterout=response.getWriter(); out.write(jsonObj.fromObject(map).toString()); out.flush(); out.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnnull; } //给修改图片的form加载数据 @SuppressWarnings("unchecked") publicActionForwardtoUpdPhoto(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ response.setCharacterEncoding("utf-8"); Listcaipin=canyinService.getResult("fromCaijiu",null); request.setAttribute("caipin",caipin); returnmapping.findForward("toUpdPhotoUI"); } //修改餐饮信息图片 @SuppressWarnings("unchecked") publicActionForwardUpdPhoto(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ response.setCharacterEncoding("utf-8"); ManagerFormmngForm=(ManagerForm)form; FormFilephoto=mngForm.getImgfile(); Stringid=request.getParameter("caipinid"); StringnewImage=MyUtils.uploadcjPhoto(request,photo,id); Caijiucaijiu=(Caijiu)canyinService.findById(Caijiu.class,Integer.parseInt(id)); caijiu.setPhoto(newImage); canyinService.update(caijiu); Stringmsg=""; if(newImage==null||"".equals(newImage)){ msg="图片添加失败!"; }else{ msg="图片添加成功!"; } try{ PrintWriterpw=response.getWriter(); pw.write(msg); pw.flush(); pw.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnnull; } //添加菜品信息 publicActionForwardcpInsert(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ Stringinserted=request.getParameter("inserted"); //updated格式:[{"id":2,"num":9,"price":"1666.0","descri":"","name":"木须肉66"},{"id":3,"num":12,"price":"1566.0","descri":"","name":"红烧肉66"}] JSONArrayjsonarr=JSONArray.fromObject(inserted); intflag=0; try{ for(inti=0;i<jsonarr.size();i++){ Mapmap=(Map)jsonarr.get(i); //Integerid=(Integer)map.get("id"); Stringname=(String)map.get("name"); Doubleprice=Double.parseDouble(String.valueOf(map.get("price"))); Stringdescri=(String)map.get("descri"); Integernum=Integer.parseInt(String.valueOf(map.get("num"))); Shorttype=Short.parseShort(String.valueOf(map.get("type"))); Shortstate=Short.parseShort(String.valueOf(map.get("state"))); Caijiucaijiu=newCaijiu(); //caijiu.setId(id); caijiu.setName(name); caijiu.setPrice(price); caijiu.setDescri(descri); caijiu.setNum(num); caijiu.setType(type); caijiu.setState(state); canyinService.save(caijiu); flag++; } }catch(Exceptione){ System.out.println("添加数据出现异常!"); } if(flag!=0){ try{ PrintWriterrpw=response.getWriter(); rpw.write(flag+""); rpw.flush(); rpw.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returnnull; } //删除菜品信息 publicActionForwardcpDelete(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ Stringdeleted=request.getParameter("deleted"); JSONArrayjsonarr=JSONArray.fromObject(deleted); intflag=0; try{ for(inti=0;i<jsonarr.size();i++){ Mapmap=(Map)jsonarr.get(i); Integerid=(Integer)map.get("id"); Caijiucaijiu=(Caijiu)canyinService.findById(Caijiu.class,id); if(caijiu!=null){ userService.delete(caijiu); flag++; } } }catch(Exceptione){ System.out.println("删除数据出现异常!"); } if(flag!=0){ try{ PrintWriterrpw=response.getWriter(); rpw.write(flag+""); rpw.flush(); rpw.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returnnull; } //更新菜品信息 publicActionForwardcpUpdate(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ Stringupdated=request.getParameter("updated"); JSONArrayjsonarr=JSONArray.fromObject(updated); intflag=0; try{ for(inti=0;i<jsonarr.size();i++){ Mapmap=(Map)jsonarr.get(i); Integerid=(Integer)map.get("id"); Stringname=(String)map.get("name"); Doubleprice=Double.parseDouble(String.valueOf(map.get("price"))); Stringdescri=(String)map.get("descri"); Integernum=Integer.parseInt(String.valueOf(map.get("num"))); Shorttype=Short.parseShort(String.valueOf(map.get("type"))); Shortstate=Short.parseShort(String.valueOf(map.get("state"))); Caijiucaijiu=newCaijiu(); caijiu.setId(id); caijiu.setName(name); caijiu.setPrice(price); caijiu.setDescri(descri); caijiu.setNum(num); caijiu.setType(type); caijiu.setState(state); canyinService.update(caijiu); flag++; } }catch(Exceptione){ System.out.println("更新数据出现异常!"); } if(flag!=0){ try{ PrintWriterrpw=response.getWriter(); rpw.write(flag+""); rpw.flush(); rpw.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returnnull;}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论