




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论引言目前是信息化的时代,信息化的资源在人们的生活中扮演着一个非常重要的角色。实体店的菜品丰富,网络订餐更加方便快捷,二者各有优缺点,共同组成了订餐的整体资源。现在我们云南工商学院的订餐系统将实体店和网络数据资源无缝对接,二者结合,互相促进,更便捷的为用户服务。研究背景社会的不断发展,科学技术不断进步,网络科技也在逐渐完善,大数据时代的到来,人们的生活已经开始发生重要的变革,效率已经成为各个企业生存的第一要素,更好更快的使用和了解相关的信息,以及处理更多更繁琐的事物便是我们设计安卓订餐系统的初衷。由于互联网发展已深入各个方面,安卓订餐系统这个课题已经提出,云南工商学院的人流量越来越大,为了使学校食堂能够在饭点短时间内满足全校师生的的三餐需求,提高师生们的生活效率,使云南工商学院的师生通过手机就可以完成生活中必要的事情--饮食。价值与意义更高的效率和更高的准确率传统的点餐方式是使用纸质点餐,服务员手工记录,服务员需要在前台和厨房之间往返走动,通过手写口传的方式将顾客的需求传递给餐厅中负责不同职能的人员。这样不仅是对于餐厅来说无形之中增加了服务难度,对于顾客来说需要长时间的等待。不仅过多的消耗彼此的时间,而且还会造成不好的用餐体验。采用信息化点餐,顾客登录APP进行浏览菜单,搜索菜品,根据自己的喜好进行点单,备注好需要的或者不需要的口味。服务员在厨房就能实时了解客户的需求,而且信息在传输过程中几乎不会发生错误,厨师看到的菜单也一目了然,具体准确,以便于做出更符合顾客口味的菜品。节约了商家和顾客双方的时间,效率和准确度也得到了提升,顾客拥有更好的用户体验。运营成本降低,更加方便环保信息化点餐方式提高了餐厅的服务效率,减少了服务员的工作量。同时,从另外一个角度看,同样的任务,餐厅可以雇更少的服务员去完成工作量,这就降低了餐厅的工资支出,从而降低了运营成本。便于餐厅的运营和日常管理采取信息化的点餐方式,便于更方便快捷的收集数据,它可以直观地为餐厅运营者生成各种统计信息的报表,运营者可以掌握餐厅每天的营业状况,分析顾客的喜好,口味,同时对于餐厅内各类员工的工作业绩也可以更加具体、直观的看到,管理起来更加方便。可行性分析可行性分析是通过对项目的主要内容和配套条件,如市场需求、资源供应、为项目决策提供依据的一种综合性的系统分析方法。操作可行性分析操作可行性是指项目能否在现实情况下进行操作,是否具有可实现的可能。最终的判别是项目能否实施。经济可行性分析经济可行性主要是对系统开发、维护所需的成本与系统运营后所产生的收益是否呈正比,经济可行性分析对于系统的开发意义重大。此系统由本人开发为了方便广大的师生用户不需要考虑开发的成本。此系统运行在学校的局域网中,通过学校引入,并不用考虑服务器等资源问题。使用的用户只要有一台联网的智能设备即可操作本系统。技术可行性分析技术可行性分析主要针对系统可能会用到的技术,然后根据现有的技术可不可以开发出系统,技术可行性分析对于制作一套系统极为关键。通过分析总结出以下系统中会用到的技术体系:(1)Struts是一个页面的控制器通过定义Struts.xml文件,控制页面的跳转,它采用了MVC模式,使代码的结构与层次更加清晰。(2)Spring通过xml管理业务逻辑操作,提高了应用程序的可维护性。(3)SQLLite是一款小型轻型的数据库,用来提供数据的存储。(4)Tomcat服务器应用于中小系统,通过Tomcat可以将网站部署到上面,用户通过网络就可以访问。登录Tomcat服务器我们便可以掌握系统的运行状况,通过更改配置文件就可以更改系统的端口号、最大请求处理的线程数、文件夹的虚拟路径等,使我们的开发更加便利快捷。法律可行性分析法律可行性主要针对系统是否有漏洞涉及到信息安全以及开发本系统是否与现有的法律有冲突,通过法律可行性分析有效避免了违法的可能性。本系统应用在学校局域网中,管理人员通过双方协议操作本系统,极大的避免了这些问题,所以在法律上是可行的。
需求分析系统需求系统需求是我们做系统的第一步,我们需要知道用户需要哪些功能,这些功能都用来做什么,为什么做,要怎么做以及我们要明确的知道系统的主要功能是什么。功能需求分析商家可以在自家商铺添加、修改、删除菜品的信息;用户可选择菜品类型,查看菜品价格,浏览菜品评价的信息;用户可将菜品添加或移出购物车,并查看当前购物车的状态信息;用户可以点击支付购买购物车里面的商品;用户可以查看历史点餐记录,了解自己最近的点餐情况;用户可以修改自己的个人信息。实现原理商家在自家商铺添加好菜品类别,菜品名称,菜品价格,菜品图片等信息之后会显示在首页页面上,用户浏览首页选择性价比高,适合自己的菜品往购物车里添加,添加完毕后进行结账购买,获取食物。主要功能商家可以在自家商铺添加、修改、删除菜品的信息;用户可选择菜品类型,查看菜品价格,浏览菜品评价的信息;用户可将菜品添加或移出购物车,并查看当前购物车的状态信息;用户可以点击支付购买购物车里面的商品;功能需求分析系统的功能需求分析主要包含了系统用列图、系统的模块、业务流程图、实体关系图等系统的功能以及系统用户操作流程方面的分析。学校校园餐厅的点餐过程一般是顾客自己在纸质的菜单上点餐或者是服务员手工记录,遇到人流量大的午餐和晚餐时间,数据较多,手写单据容易出错,使得工作效率低,时间成本和劳动成本过高等许多问题。因此为校园餐厅传统餐饮业设计一套准确高效的校园餐厅信息化管理的解决方案,以此来解决校园餐厅的服务效率与质量,降低运营成本,节约人力资源,方便经营者对餐厅的日常管理,同时减少学生三餐所花费的时间,使得双方更加方便快捷是非常必要的。此次毕业设计基于Android平台开发云南工商学院校园定餐系统。在Android平台上运用Java面向对象语言,同时使用SQLLite这个轻型数据库。系统用例分析系统用例分析在系统之外看系统的功能,不用描述功能的具体实现。将系统的功能整合,然后根据分析的功能进一步的分析,保持系统功能的完整性。如图2-1。图2-1系统流程图系统模块分析此套系统主要分为管理员、店面工作人员和顾客用户,普通用户主要对店面的选择、厨师的选择、菜式的选择、进行订餐及评价。店面工作人员主要是进行菜式管理,厨师管理,空位管理和订单评价。管理员主要是店面管理和奖券管理。如图2-2。图2-2系统模块业务流程分析在这套系统中存在着三种用户,第一种是店面工作用户有菜式管理,厨师管理,空位管理及订单评价的操作。第二种用户属于管理员用户,管理员用户主要是进行店面管理,奖券管理等操作。第三种用户属于顾客,顾客主要是进行用户注册,用户登录,店面列表,菜式列表,厨师列表,预定,我的订单,评分功能模块。后台管理系统:用户登录,先判断用户能否登录,登录之后再判断用户角色类型,若用户类型为管理员,则可以操作店面管理,奖券管理两个模块,若用户类型为店面用户,则可以操作菜式管理、厨师管理、空位管理、订单评价等模块。如图2-3。图2-3系统流程移动APP管理系统用户登录,先判断用户是否登录,若登录成功,则可以查看店面列表选择哪个商户,菜式列表选择哪道菜品,还可以查看是哪个厨师,预定模块可以提前订餐,我的订单模块可以查看历史订单记录和当前订单,评价模块可以对商户菜品进行评价。如图2-4。图2-4系统流程数据库实体关系分析数据库的实体联系通过矩形框(表示实体)、菱形框(表示联系)、椭圆形框(表示实体的属性)、连线(一对多、多对一、多对多等几种常见数据关系),根据实体之间的联系将数据库的实体联系构建出来。通过了解实体联系图,我们可以更加直观的了解到系统每张表之间的关系,为我们设计数据库奠定了基础。如图2-5。图2-5系统ER图非功能需求分析非功能需求分析的主要是系统功能之外的东西,比如系统的性能是否达到要求,是否具有可靠性,是否具有易用性,安全性能否得到基本保障,以及约束等方面。在软件开发中不可或缺,这关系到开发系统是否健壮,是否符合人性化,是否安全。性能分析性能分析是指系统响应速度。本系统的登录,页面跳转,模糊查询,精确查询,业务处理的响应时间均小于1秒。可靠性分析系统的所有输入采用的jquery的输入验证,控制用户的输入,防止用户非法或者不正确的输入。易用性分析系统易用性主要考量系统是否能简单易操作,此系统一个功能的实现所涉及的页面不超过3个,使页面的布局更加美观更加直接,通过用户手册用户可以简单明了的了解系统的运行流程。安全性分析系统用户密码采用MD5非对称加密,通过MD5加密,非法的用户在极短的时间内不易破解,提高了系统的安全性。MD5的实现原理:以四个常数ABCD与每组512位进行函数运算,最后输出的结果就是4组32位的常数。运行环境分析运行环境分析主要分析系统可以在哪些环境上面运行。考虑到各环境的兼容性,差异性。系统设计项目架构设计架构设计MVC是model+view+control,即模型、视图、控制,他们各自处理自己的任务。M--模型,持有所有的数据,状态和程序逻辑,存在于Javabean中;V--视图,用来呈现模型,数据展示,JSP技术;C--控制器,负责接收用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。典型的三层架构的分层结构,体现出了MVC的思想,可以让开发减轻因为要解决复杂问题从而搭建新方案的负担和精力,为开发提供便利的条件,减少了大量的开发系统的时间成本。良好的可扩展性,让很多使用的用户提高对它的支持,也就是有很多人来维护整个框架,这样就避免大部分因为技术原因而找不到相应的对策从而不能实现的功能也可以相应的找到差不多的东西来实现一样的功能。降低更改需求所带来的风险。良好的可维护性,三层构架因为逻辑层和展现层的合理分离是的互相虽然有一定的依赖性,但是并不是绑定死在一起的。优秀的解耦性,软件产品的需求从来都不可能会是一个完全固定的需求。客户对软件的需求也是五花八门各不相同这样就增加了开发的难度,随着软件的开发过程的深入,需求也不断的清晰了。所以经常会有软件开发至中途或者是即将开发完成,客户更改软件需求的情况也会经常的发生,使得软件不得不随着更改,这样的情况下,关系紧密的开发模式巨很难更改。架包设计项目的每个包都有不同的功能和类,我们把功能类似的类集中在相应的包结构中,方便于类的调用和维护。Action为控制层,service为服务层,model是实体类,dao是和数据库交互的持久层。页面访问时jsp传参数给action并带入或者带出一些数据,action通过调用service里面的方法和逻辑,同时service调用dao里面的方法和逻辑以此来进行数据交互,并返回结果。Spring则进行类的注入并且但仍系统管理员的色。Hibernate对数据库进行操作就像是系统数据的搬运工给系统提供有效的数据或者反馈,最后到action中进行页面跳转。如图3-1。图3-1项目包名(1)com.dingcan.action处理网页回传的数据。(2)com.dingcan.bean是管理(3)com.dingcan..dao主要是接口,用来存放抽象的方法(未实现),通过定义这些方法,规定了每个类应该有什么方法,但是不具体实现。(4)com.dingcan.dao.impl主要用于存放实现了persistemt.dao类中的方法,这个包中的类通过implement关键词实现方法。(5)com.dingcan.enums是枚举(6)com.dingcan.impl实现了com.dingcan.service类中的方法,三层架构的BLL层。(7)com.dingcan.listener监听器(8)com.dingcan.model主要用于存放与数据库对应的实体类,以及自己定义的实体类,通过这些实体类我们可以更加清楚数据库的表字段与各张表之间的联系。(9)com.dingcan.service即服务,是每个网页应实现的方法,接口interface。(10)com.dingcan.servlet主要用于存储通用的一些servlet,如图片的上传,验证码的存储。(11)com.dingcan.util主要用于存放系统中常用到的类,它相当于一个工具包,程序员将一些经常要判断要获取的东西写成方法放在对应的类放在里面,方便在编写代码时调用。模型设计实体模型设计通过看实体模型图,清晰理解各实体的关系与具体联系。如图3-2。图3-2实体关系模型图数据库设计本套系统采用Sqllite数据库。数据库的名称为(dingcan),数据库的每张表都以“t_”开头。数据库设计系统,它主要包含了数据库表,数据库表的字段,每张表之间的关系,数据库的设计是否满足三个范式。数据库表及表的字段如下所示:(1)管理员信息表t_admin管理员信息表主要记录管理员的基本信息,这张表主要包含了自动编号的主键id,管理员用户名和管理员密码。如表3-1。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC1管理员信息表t_admin序号字段名数据类型主键非空描述1idint是是管理员信息id自动编号为主键2usernameVARCHAR否否管理员用户名3passwordVARCHAR否否管理员密码(2)顾客信息表t_user顾客信息表主要用于存储顾客信息,这张表主要包含了自动编号的主键id,顾客用户名,顾客密码,顾客性别,顾客所在城市,昵称,年龄,出生日期,注册时间,头像,头像地址等这些个人信息。如表3-2。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC2顾客信息表t_user序号字段名数据类型主键非空描述1idINT(10)是是自动编号id为主键2usernameVARCHAR(45)否否用户名3passwordVARCHAR(45)否否密码4sexVARCHAR(45)否否性别5cityVARCHAR(45)否否城市6nicknameVARCHAR(45)否否昵称7signatureVARCHAR(100)否否年龄8birthdayVARCHAR(45)否否出生时间9regdateDATETIME否否注册时间10headphotoVARCHAR(100)否否头像11capabilityFLOAT否否12levelINT(10)否否水平13expINT(10)否否14isadminINT(10)否否15image_urlVARCHAR(255)否否头像地址(3)评价信息表t_comments评价信息表主要用于记录顾客对菜品的评价情况,这张表主要包含了自动编号的主键id,评价时间,评价内容,评价顾客,评价顾客id,评价菜品。如表3-3。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC3评价信息表t_comments序号字段名数据类型主键非空描述1idINT(10)是是自动编号的主键id2commitdateVARCHAR(45)否否评价时间3contentVARCHAR(45)否否评论内容4usernameVARCHAR(45)否否评价用户5bioidINT(10)否否评价菜品6useridINT(10)否否评价用户id(4)菜品信息表t_goods菜品信息表用来存储菜品的详细信息,这张表包含了自动编号的id,菜品价格,菜品备注,菜品名称,菜品图片,菜品销售数量,菜品评论数量,菜品好评,菜品分类,菜品标签,好评图片,菜品描述,菜品类别。如表3-4。表3-4菜品表t_goods序号字段名数据类型主键非空描述1goods_idINT(10)是是菜品表自动编号id为主键2goods_priceFLOAT否否菜品价格3goods_marketpriceFLOAT否否菜品打折价4goods_nameVARCHAR(45)否否菜品名称5goods_imageVARCHAR(45)否否菜品图片6goods_sale_numINT(10)否否销售量7evaluation_good_starINT(10)否否评星等级8evaluation_countVARCHAR(45)否否评论数9group_flagTINYINT(3)否否菜品分组10xianshi_flagTINYINT(3)否否限时11goods_image_urlVARCHAR(45)否否图片地址12goods_desriptionVARCHAR(255)否否菜品描述13typeVARCHAR(255)否否菜品类型(5)订单信息表t_order订单信息表主要存储订单信息,自动生成的主键id,购物车id,顾客id,订单时间,顾客用户名,价格,菜品名称,菜品图片,地址,状态,菜品id,支付时间,支付方式,联系电话。如表3-5。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC4订单信息表t_order序号字段名数据类型主键非空描述1idINT(10)是是订单主键id2cart_idINT(10)否否购物车id3user_idINT(10)否否顾客id4orderdateVARCHAR(45)否否订单时间5usernameVARCHAR(45)否否顾客用户名6priceFLOAT否否价格7goods_nameVARCHAR(45)否否菜品名称8goods_imageVARCHAR(45)否否菜品图片9addressVARCHAR(45)否否地址10statusINT(10)否否状态11good_idINT(10)否否菜品id12paytimeVARCHAR(255)否否支付时间13paywayVARCHAR(255)否否支付方式14phoneVARCHAR(255)否否联系电话(6)购物车信息表t_shopcart购物车信息表主要用于购物车的基本信息,这张表主要包含了自动编号的主键id,菜品id,顾客id,菜品数量,状态。如表3-6。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC5购物车表T_t_shopcart序号字段名数据类型主键非空描述1idINT(10)是是购物车自动编号id为主键2goods_idINT(10)否否菜品id3user_idINT(10)否否顾客id4goods_numINT(10)否否菜品数量5statusINT(10)否否状态(7)资讯信息表t_zixun资讯信息表用来存储导航栏的基本信息,主要包含了id,标题,内容,更新时间,图片地址等信息。如表3-7。表3-SEQ图书信息表T_Bookinfo_4-\*ARABIC6资讯表t_zixun序号字段名数据类型主键非空描述1idINT(11)是是表自动编号id2titleVARCHAR(255)否否标题3contentVARCHAR(255)否否内容4updatetimeDATETIME否否更新时间5image_urlVARCHAR(255)否否图片地址
功能设计UI的实现APP页面前端使用XML布局文件控制UI界面,后端管理框架使用JSP,Javascript,html,css等布局管理UI界面,使用了这两个框架使系统更加美观,用户操作更加便捷,开发起来便捷高效。功能模块图此套系统主要分为管理员、店面工作人员和顾客用户,普通用户主要对店面的选择、厨师的选择、菜式的选择、进行订餐及评价。店面工作人员主要是进行菜式管理,厨师管理,空位管理及订单评价。管理员主要是店面管理和奖券管理。如图3-1。图3-1系统模块核心功能设计注册登录的实现主要功能:注册用户,验证用户是否登录流程:用户在APP上注册,注册参数数据传入数据库,然后进行登录验证判断。如图3-2。图3-2登录流程图商家菜品增删的实现主要功能:商户登录增删菜品流程:商户登录成功后可以添加菜品、删除菜品、修改菜品信息。如图3-3。图3-3商户操作流程图用户商品加进购物车实现主要功能:用户菜品添加进购物车流程:用户登录后浏览菜品,可添加至购物车。如图3-4。图3-4添加购物车操作流程图UI设计UI(UserInterface)是用户操作的界面,它设计的好坏关系到了用户是否对系统有没有兴趣,可不可以简单的操作某一个功能,开发者是否容易实现其中的功能等,所以在UI设计的同时要考虑到用户是否可以接受功能的操作流程,开发者开发此功能是否简单。APP端页面设计登录界面:用户输入用户名、密码进行验证登录。首页显示界面:显示食物类别。餐品列表页面:用户通过点击首页食物类别进入到这个页面,这个页面可以看到菜品的名称,点击菜品名称可进入另一个页面看到餐品的详细信息。如餐品的名称,菜品价格,菜品原价,是否加入购物车,添加份数和菜品评价等信息。个人信息界面:这个界面主要显示用户的个人信息,用户在这个页面可以编辑个人信息,返回主界面,查看我的订单,查看购物车,查看消费记录。营养资讯界面:这个界面主要提供给用户管理自己的营养资讯信息。订单支付页面:用户添加到购物车里面的食物进行结账支付。后端管理页面设计菜品管理界面:用来添加菜品(1)登录界面实现登录界面页面部分主要使用jquery进行用户输入的验证,防止用户非法输入,后端接收到前端传过来的值再次进行判断,判断为真,则登录成功否则页面跳转Error页面显示登录错误。(2)管理菜单页面实现根据登录的用户判断登录用户是店面工作人员还是管理员,如若是店面工作人员拥有菜单管理,资讯管理,订单管理,用户管理的权限。(3)菜单管理这个页面分为两个部分实现,一个页面是添加菜品,包括菜品名称,优惠价格,原价,菜品描述,选择分类,菜品图片,另一个是菜品维护,包括查询菜品,删除菜品,添加菜品等功能。(4)资讯管理这个页面分为两个部分实现,第一个页面是添加资讯,第二个是资讯维护,包括查询资讯,删除资讯,添加资讯等功能。(5)订单管理订单管理主要包含订单编号,菜单名称,菜品价格,订餐人联系电话,支付方式,就餐时间,图片,订单处理等基本信息。(6)用户管理用户管理主要包含用户id,用户账号,用户姓名,用户头像,用户地址,用户签名,用户注册日期,操作界面里有删除和修改两个功能。
系统实现UI实现UI的实现APP页面前端使用XML布局文件控制UI界面,后端管理框架使用JSP,Javascript,html,css等布局管理UI界面,使用了这两个框架使系统更加美观,用户操作更加便捷,开发起来便捷高效。APP页面实现(1)注册登录界面实现登录界面页面部分主要jquery进行用户输入的验证,防止用户非法输入,后端接收到前端传过来的值再次进行判断,登录成功跳转到主页,否则页面跳转Error页面显示登录错误。如图4-1。图4-SEQ报表页面图4-\*ARABIC1注册登录界面(2)首页页面实现用户浏览该页面挑选自己想要的食品类别。可以选择系统录入的炒菜类、包子类、汤类、快餐类、其他等,更多类别的菜品,快速查询搜索到自己想吃的菜品。如图4-2。图4-SEQ报表页面图4-\*ARABIC2首页页面(3)餐品列表从主页查询到类别里面挑选具体的菜品。可以看菜品的图片,菜名是什么,价格是多少,菜品评价这些关于菜品的基本信息。如图4-3。图4-SEQ报表页面图4-\*ARABIC3餐品列表(4)个人信息的实现用户登录后可以编辑自己的基本信息。返回主界面就是返回首页,我的订单可以查看自己的订单记录,购物车可以查看购物车里已有菜品,菜单搜索可以搜索菜品,历史消费记录可以查看自己以前的点餐记录,更改头像可以修改自己头像图片。如图4-4。图4-SEQ报表页面图4-\*ARABIC4我的管理信息界面(5)营养咨询实现根据用户的id查询出这个用户历史所有的营养咨询,也就是以前点过的菜品,随时随地关注自己的营养餐品。如图4-5。图4-SEQ报表页面图4-\*ARABIC5营养咨询列表(6)购物车的实现用户登录后可以将食物添加至购物车。添加到购物车可以显示店铺名称,菜品图片,菜品名称,菜品单价和菜品数量,如果购物车里面没有任何菜品,会提示“您还没有订餐”。如图4-6。图4-6购物车信息界面订单页面实现根据要求填写基本信息,联系电话,就餐时间,支付方式。点击确认下单后会跳出支付页面,支付成功就可以获取食物了,若没有支付成功则跳到预定界面,等待付款。如图4-7。图4-7订单信息界面后端管理页面实现(1)登录界面实现登录界面页面部分主要使用jquery进行用户输入的验证,防止用户非法输入,后端接收到前端传过来的值再次进行判断,判断为真,则登录成功否则页面跳转Error页面显示登录错误。如图4-8。图4-8登录界面(2)管理菜单页面实现根据登录的用户判断登录用户是店面工作人员还是管理员,如若是店面工作人员拥有菜单管理,资讯管理,订单管理,用户管理的权限。如图4-9。图4-9后台菜单(3)菜品管理的实现这个页面分为两个部分实现,一个页面是添加菜品,包括菜品名称,优惠价格,原价,菜品描述,选择分类,菜品图片,另一个是菜品维护,包括查询菜品,删除菜品,添加菜品等功能。如图4-10和4-11。图4-10添加菜品图4-11菜品维护资讯管理的实现这个页面分为两个部分实现,一个页面是添加资讯,包括标题,内容,图片上传三个项目,另一个是资讯维护,包括查询资讯,删除资讯,添加资讯等功能。如图4-12和4-13。图4-12添加资讯图4-13资讯维护(5)订单管理的实现订单管理主要包含订单编号,菜单名称,菜品价格,订餐人联系电话,支付方式,就餐时间,图片,订单处理等基本信息。如图4-15。图4-15订单管理列表(6)用户管理用户管理主要包含用户编号,用户账号,用户姓名,用户头像,用户地址,用户签名,用户注册日期,操作界面里有删除和修改两个功能。如图4-16。图4-16用户管理核心功能的代码与实现功能性代码实现配置Hibernate和Spring的集成框架<?xmlversion="1.0"encoding="GBK"?><beans <!--****************************************数据源***************************************************************--> <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--指定连接数据库的驱动--> <propertyname="driverClass"value="com.mysql.jdbc.Driver"/> <!--指定连接数据库的URL--> <!--&zeroDateTimeBehavior=convertToNull是为了避免因数据库中为date类型的数据为0000-00-00, 若为此值hibernate会报错‘Cannotconvertvalue'0000-00-0000:00:00'fromcolumn1toTIMESTAMP’ --> <propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/dingcan?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"/> <!--指定连接数据库的用户名--> <propertyname="user"value="root"/> <!--指定连接数据库的密码--> <propertyname="password"value="123"/> <!--指定连接数据库连接池的最大连接数--> <propertyname="maxPoolSize"value="40"/> <!--指定连接数据库连接池的最小连接数--> <propertyname="minPoolSize"value="10"/> <!--指定连接数据库连接池的初始化连接数--> <propertyname="initialPoolSize"value="10"/> <!--指定连接数据库连接池的连接的最大空闲时间--> <propertyname="maxIdleTime"value="20"/> <propertyname="idleConnectionTestPeriod"value="18000"/> </bean> <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"> <refbean="dataSource"/> </property> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop><!-- <propkey="hibernate.query.factory_class"> org.hibernate.hql.classic.ClassicQueryTranslatorFactory </prop> --><propkey="hibernate.show_sql">true</prop> <propkey="hibernate.format_sql">false</prop> <propkey="hibernate.hbm2ddl.auto">update</prop> </props> </property> <propertyname="mappingResources"> <list> <value>com/dingcan/model/Goods.hbm.xml</value> <value>com/dingcan/model/Admin.hbm.xml</value> <value>com/dingcan/model/User.hbm.xml</value> <value>com/dingcan/model/ShopCart.hbm.xml</value> <value>com/dingcan/model/Order.hbm.xml</value> <value>com/dingcan/model/Comments.hbm.xml</value> <value>com/dingcan/model/Zixun.hbm.xml</value> </list> </property> </bean> <!--配置事务begin--> <beanid="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <tx:adviceid="txAdvice"transaction-manager="txManager"> <tx:attributes> <tx:methodname="*"read-only="false"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcutid="bussinessService" expression="execution(public*com.dingcan.service.*.*(..))"/> <aop:advisorpointcut-ref="bussinessService" advice-ref="txAdvice"/> </aop:config> <!--配置事务end--> <!--引入其它文件--> <importresource="applicationContext-dao.xml"/> <importresource="applicationContext-service.xml"/> <importresource="applicationContext-action.xml"/></beans>用户登录功能代码的实现用户登录功能代码:packagecom.dingcan.dao.impl;importjava.util.List;importnet.sf.json.JSONObject;importcom.dingcan.dao.UserDAO;importcom.dingcan.model.User;publicclassUserDAOImplextendsBaseDAOimplementsUserDAO{ /** *用户登录 */ publicUserlogin(Stringusername,Stringpassword){ StringBuffersb=newStringBuffer("FROMUserWHEREusername='") .append(username) .append("'andpassword='") .append(password) .append("'"); List<User>users=findByHQL(sb.toString()); if(users.size()>0){ returnusers.get(0); }else{ returnnull; } } /** *添加用户 */ publicStringsaveUser(Useruser){ booleanflag=saveOrUpdate(user); if(flag){ returnJSONObject.fromObject(user).toString(); }else{ returnnull; } } publicUserfindUserById(intid){ StringBuffersb=newStringBuffer("FROMUserWHEREid="); sb.append(id); List<User>users=findByHQL(sb.toString()); if(users.size()>0){ returnusers.get(0); }else{ returnnull; } } publicUserupdateUserStatus(Useruser){ intexp=user.getExp()+1; user.setExp(exp);// user.setExp(level); saveOrUpdate(user); returnuser; } publicList<User>list(){ StringBuffersb=newStringBuffer("FROMUser"); List<User>users=findByHQL(sb.toString()); returnusers; } /** *删除用户 */ publicvoiddel(Useruser){ //TODOAuto-generatedmethodstub this.delete(user); } publicvoidupdateUserLevel(Useruser){ //TODOAuto-generatedmethodstub intlevel=user.getLevel()+1; user.setLevel(level); saveOrUpdate(user); }}商户增删改查菜品功能代码的实现商户通过后台添加、删除,修改菜品信息。商户增删改代码:packagecom.dingcan.dao.impl;importjava.util.List;importcom.dingcan.dao.GoodsDAO;importcom.dingcan.model.Goods;importcom.dingcan.model.Wish;publicclassGoodsDaoImplextendsBaseDAOimplementsGoodsDAO{ publicGoodsload(intid){ StringBuffersb=newStringBuffer("FROMGoodsWHEREgoods_id=") .append(id); List<Goods>lst=findByHQL(sb.toString()); if(lst.size()>0){ returnlst.get(0); }else{ returnnull; } } /** *菜品列表 */ publicList<Goods>list(Stringname){ //TODOAuto-generatedmethodstub StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'"); }else{ sb=newStringBuffer("FROMGoods"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; } publicbooleansave(Goodsgoods){ //TODOAuto-generatedmethodstub returnsaveOrUpdate(goods); } publicbooleanupdate(Goodsgoods){ //TODOAuto-generatedmethodstub returnsaveOrUpdate(goods); } publicbooleandel(Goodsgoods){ //TODOAuto-generatedmethodstub this.delete(goods); returntrue; } publicList<Goods>list0(Stringname){ StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'andtype='炒菜类'"); }else{ sb=newStringBuffer("FROMGoodsWHEREtype='炒菜类'"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; } publicList<Goods>list1(Stringname){ StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'andtype='包子类'"); }else{ sb=newStringBuffer("FROMGoodsWHEREtype='包子类'"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; } publicList<Goods>list2(Stringname){ StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'andtype='汤类'"); }else{ sb=newStringBuffer("FROMGoodsWHEREtype='汤类'"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; } publicList<Goods>list3(Stringname){ StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'andtype='鱼类'"); }else{ sb=newStringBuffer("FROMGoodsWHEREtype='鱼类'"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; } publicList<Goods>list4(Stringname){ StringBuffersb; if(name!=null&&!name.equals("")){ sb=newStringBuffer("FROMGoodsWHEREgoods_namelike'%") .append(name).append("%'andtype='快餐类'"); }else{ sb=newStringBuffer("FROMGoodsWHEREtype='快餐类'"); } List<Goods>lst=findByHQL(sb.toString()); returnlst; }用户购物车功能代码的实现用户浏览菜品,选中菜品添加至购物车进行购买。添加至购物车代码:packagecom.dingcan.dao.impl;importjava.util.List;importcom.dingcan.dao.ShopCartDAO;importcom.dingcan.model.Goods;importcom.dingcan.model.ShopCart;publicclassShopCartDaoImplextendsBaseDAOimplementsShopCartDAO{ publicbooleansave(ShopCartcart){ //TODOAuto-generatedmethodstub returnsaveOrUpdate(cart); } publicList<ShopCart>list(intuserid){ StringBuffersb=null; if(userid>0){ sb=newStringBuffer("FROMShopCartWHEREuser_id=") .append(userid); } List<ShopCart>lst=findByHQL(sb.toString()); returnlst; } publicbooleandel(ShopCartcart){ //TODOAuto-generatedmethodstub this.delete(cart); returntrue; } publicShopCartload(intcartid){ StringBuffersb=newStringBuffer("FROMShopCartWHEREid=") .append(cartid); List<ShopCart>lst=findByHQL(sb.toString()); if(lst.size()>0){ returnlst.get(0); }else{ returnnull; } }}订单生成功能代码的实现用户在移动端订餐形成订单,商户根据订单准备菜品。订单生成功能代码:packagecom.dingcan.dao.impl;importjava.util.List;importcom.dingcan.dao.OrderDAO;importcom.dingcan.model.Goods;importcom.dingcan.model.Order;publicclassOrderCartDaoImplextendsBaseDAOimplementsOrderDAO{ publicbooleansave(Orderorder){ //TODOAuto-generatedmethodstub returnthis.saveOrUpdate(order); } publicList<Order>list(intuser_id){ StringBuffersb; sb=newStringBuffer("FROMOrderWHEREuser_id=") .append(user_id).append("andstatus<=2"); List<Order>lst=findByHQL(sb.toString()); returnlst; } publicList<Order>list(){ StringBuffersb; sb=newStringBuffer("FROMOrder") .append("orderbyiddesc"); List<Order>lst=findByHQL(sb.toString()); returnlst; } publicOrderload(intid){ StringBuffersb; sb=newStringBuffer("FROMOrderWHEREid=") .append(id); List<Order>lst=findByHQL(sb.toString()); returnlst.get(0); } publicList<Order>list1(intuser_id){ StringBuffersb; sb=newStringBuffer("FROMOrderWHEREuser_id=") .append(user_id).append("andstatus=3"); List<Order>lst=findByHQL(sb.toString()); returnlst; }}
系统测试与部署系统测试概述系统的测试是要求系统设计师对整个系统的测试,把系统的所有部分看成是一个整体,以此来检查他是否和设计之初有什么不想符合的地方,这样的测试可以发现和分析系统中存在的问题,而一个软件系统,要测试的则是健壮性和防渗透性测试以及压力测试。软件系统的测试主要就是为了验证系统是否可以正常运行,以及可能潜在的问题,主要内容有:功能测试健壮性测试压力测试安全测试通过测试我们可以得到系统的功能是否完整以及系统内部的业务逻辑是否合理,及时的发现问题。具体测试用例(1)登录测试测试与登录相关的用户操作,成功,失败,输入错误等条件下用户的客户端所反馈的信息。如表5-1。表5-SEQ图书信息显示测试5-\*ARABIC1登录测试用例用例名称用户登录测试功能描述用户登录管
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深化对育婴师考试各科目的理解与应用试题及答案
- 心理咨询师考试创新服务模式的试题及答案
- 2024-2025学年黑龙江省青冈县一中高三5月模拟物理试题
- 心理咨询师考试心理咨询技术提升试题及答案
- 深入研究药师考试试题及答案
- 2025-2030中国电动智能玻璃窗行业市场现状供需分析及投资评估规划分析研究报告
- 浙江省镇海中学2024-2025学年高三下学期一模考试物理试题含解析
- 物理试题卷及答案
- 2025-2030中国生物治疗药物行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国生物制品行业市场现状供需分析及投资评估规划分析研究报告
- 医疗器械经营公司-年度培训计划表
- 校园青年志愿者培训(服务礼仪讲解)
- 【泉州南音传承与发展研究(论文7200字)】
- 教练员教学质量信誉考核表
- 《马克思主义发展史》第五章 马克思列宁主义在苏联的发展及曲折
- 现代汉语词汇学精选课件
- 酒店工程部维修工作单
- 军考哲学知识点
- 2023版北京协和医院重症医学科诊疗常规
- 化学实验熔点测定
- DB62∕T 3159-2019 高延性混凝土应用技术标准
评论
0/150
提交评论