版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
引言近年来,随着人们日常工作、生活脚步的加快,越来越多的人们都会选择网上订餐,因此网上订餐已经越来越受人们的欢迎。通过网上订餐的方式,人们不仅可以通过电脑、手机等选择自己喜欢的食物,而且可以节约大量的时间,极大地方便的人们的日常生活。就目前而言,像“美团”、“饿了么”等这些网上订餐的平台,已经得到了很多人的青睐。因此,本次毕业设计决定开发这款“网上订餐系统”,该系统的开发顺应时代发展的潮流,能够满足人们日常的需求。2系统设计当系统分析完成之后,所需要做的就是对系统的详细设计。本章节的目的就是从逻辑和物理层面考虑搭建出可以实现的系统框架,方便后期的实现。2.1系统架构设计我们采用了B/S,采用B/S模式不仅可以避免用户必须安装专业软件才能开发系统或者访问系统的局限性,而且更加便利。2.2系统总体设计系统总体功能结构图如图2-1所示。图2-1系统功能结构图2.3数据库设计简而言之,数据库设计就是根据业务系统和您选择的DBMS的需求设计最佳的数据存储模型。2.3.1概念模型设计数据库在程序的设计中扮演了重要的角色,它将系统涉及的数据全部容纳其中,在数据库设计时,为了能够明确思路,一般都是先构建实体E-R图,在构建实体E-R图时采取先确定好实体,再规划实体属性的方法[1]。实体:实体就是指可以摸到的存在的具有区分其他事物的特性或属性并与其他实体有联系的实体。属性可以理解为实体的特征,以下为本购物网站的相关实体介绍。(1)管理员实体包括ID、用户名、密码,管理员实体E-R图如图2-2所示。图2-2管理员实体图(2)商品分类实体包括ID、商品分类名,商品分类实体E-R图如图2-3所示。图2-3商品分实体图(3)订单实体包括ID、金额、地址、电话号码、订单时间,订单实体E-R图如图2-4所示。图2-4订单实体图(4)商品实体包括ID、商品名、优惠价格、商店标价、商品图路径、详情、上架时间,商品实体E-R图如图2-5所示。图2-5商品实体图(5)用户实体包括ID、用户昵称、密码、姓名、邮箱、电话、地址,用户实体E-R图如图2-6所示。图2-6用户实体图2.3.2数据库表设计以下为系统中使用的数据库表信息。(1)管理员表:用来存放管理员的基本信息,包括管理员ID、用户名、密码等信息[2]。客户表如表2-1所示。表2-1管理员表列名数据类型长度备注uidint11IDusernamevarchar255用户名passwordint255密码(2)商品分类表:用于存放商品分类的基本信息,包括ID、商品分类名等基本信息。商品分类表如表2-2所示。表2-2商品分类表序号列名数据类型长度备注1idint11ID2c-namevarchar255商品分类名(3)订单表:用于存放订单的基本信息,包括ID、金额、地址、电话号码、订单时间等基本信息。订单表如表2-3所示。表2-3订单表序号列名数据类型长度备注1oidint11ID2moneyvarchar255金额3receiveinfovarchar255地址4phoNumvarchar255电话5Order_timevarchar255时间(4)商品表:用于存放商品的基本信息,包括商品ID、商品名、优惠价格、商店标价、商品图路径、商品详情、上架时间等相关信息。商品表如表2-4所示。表2-4商品表序号列名数据类型长度备注1pidint11ID2pnamevarchar255商品名3Market_pricevarchar255优惠价格4Shop_pricevarchar255商店标价5imagevarchar255商品图路径6pdescevarchar255商品详情7pdatevarchar255上架时间(5)用户表:用于用户的基本信息,包括ID、用户昵称、密码、姓名、邮箱、电话、地址等相关信息。用户表如表2-5所示。表2-5用户表序号列名数据类型长度备注1uidint11ID2usernamevarchar255用户昵称3passwordvarchar255密码4namevarchar255用户姓名5emailvarchar255邮箱6phoneint255电话7addrvarchar255地址
3系统实现为了将本系统的实现更详细的进行介绍,本章节对各个功能模块进行详细的展示和介绍。该网上订餐系统各模块的具体功能实现如下。3.1用户注册游客可以在此页面进行账号注册,便于系统管理员更好的管理系统,游客注册之后具有标识性,用户注册页面如图3-1所示。图3-1用户注册图用户注册核心代码:@RequestMapping("/userRegist") publicStringuserRegist(Modelmodel,HttpServletRequestrequest, @ValidatedUseruser,BindingResultbindingResult, @RequestParamStringcheckImg)throwsException{ if(bindingResult.hasErrors()){ List<ObjectError>errors=bindingResult.getAllErrors(); List<String>list=newArrayList<>(); for(ObjectErrorobjectError:errors){ Stringstr=newString(objectError.getDefaultMessage() .getBytes("ISO-8859-1"),"gbk"); list.add(str); } model.addAttribute("errors",list); return"regist"; } //查看验证码 StringsessionCode=(String)request.getSession().getAttribute( "checkcode");// System.out.println("adadadad"+sessionCode); if(!sessionCode.equalsIgnoreCase(checkImg)){// model.addAttribute("message","验证码错误请重新注册"); thrownewzdyException("验证码错误请重新注册"); } //开始写入数据库 userService.saveUser(user); //model.addAttribute("message","注册成功请去邮箱激活"); model.addAttribute("message","注册成功请登录"); return"ms3.2用户登录如图3-2所示。图3-2用户登录界面用户登录关键代码://用户登录 @RequestMapping("/userLogin") publicStringuserLogin(HttpServletRequestrequest, @RequestParamStringcheckImg,Useruser,Modelmodel) throwszdyException,Exception{ StringsessionCode=(String)request.getSession().getAttribute( "checkcode"); if(!sessionCode.equalsIgnoreCase(checkImg)){ //model.addAttribute("message","验证码输入错误请重新注册"); //thrownewzdyException("验证码输入错误请重新注册"); request.getSession().setAttribute("message","验证码输入错误请重新注册"); return"redirect:login.action"; } UserloginUser=userService.loginFindByUnameAndPwd(user.getUsername(), user.getPassword()); if(loginUser==null){ //model.addAttribute("message","密码输入错误请重新登陆"); request.getSession().setAttribute("message","密码输入错误请重新登陆"); //thrownewzdyException("密码输入错误请重新登陆"); return"redirect:login.action"; } request.getSession().setAttribute("loginUser",loginUser); request.getSession().removeAttribute("message"); return"redirect:index.action";
}3.3菜品展示用户登录成功后,可以在网站首页看到各种各样的菜品,其具体功能如图3-3所示。图3-3菜品展示页面菜品展示关键代码:@RequestMapping("/index") publicStringindex(Modelmodel,HttpServletRequestrequest)throwsException{ //查询一级分类 List<Category>cList=categoryService.findCategory(); request.getSession().getServletContext().setAttribute("cList",cList);// model.addAttribute("cList",cList); //查询热门商品 List<Product>hList=productService.findHotProduct(); model.addAttribute("hList",hList); //查询最新商品 List<Product>nList=productService.findNewProduct(); model.addAttribute("nList",nList); //滚动图片专用,最多显示3个商品 List<Product>sList; if(hList.size()>3) { sList=newArrayList<Product>(); sList.add(hList.get(0)); sList.add(hList.get(1)); sList.add(hList.get(2)); model.addAttribute("sList",sList); } else { model.addAttribute("sList",hList); } return"index"; }3.4菜品搜索用户在系统搜索框中可以直接对菜品进行准确搜索,可以有效的减少用户的选品时间,其界面图如图3-4所示。3-4搜索界面搜索功能关键代码:@RequestMapping("/searchProduct") publicStringsearchProduct(@RequestParamStringcondition,Modelmodel,HttpServletRequestrequest)throwsException{ //查询一级分类 List<Category>cList=categoryService.findCategory(); request.getSession().getServletContext().setAttribute("cList",cList); //查询商品 List<Product>hList=productService.findHotProduct(); model.addAttribute("hList",hList); //搜索商品 List<Product>srList=productService.searchProduct(condition); model.addAttribute("srList",srList); //滚动图片专用,最多显示3个商品 List<Product>sList; if(hList.size()>3) { sList=newArrayList<Product>(); sList.add(hList.get(0)); sList.add(hList.get(1)); sList.add(hList.get(2)); model.addAttribute("sList",sList); } else { model.addAttribute("sList",hList); } return"searchProdu
3.5菜品详情展示用户点击商品可以进入菜品的详情页,查看菜品的具体信息,其界面展示如图3-5所示。3-5菜品展示界面菜品展示关键代码:@RequestMapping("/productFindByPid") publicStringproductFindByPid(@RequestParamintpid,Modelmodel)throwsException{ Productproduct=prodcutSductFindByPid(pid); model.addAttribute("product",product); return"product"; }3.6生成订单在这个页面上,我们可以实现以下功能:用户点击购买之后,系统自动生成订单并展现在用户的页面中[4]。其效果图如图3-6所示。3-6订单生成界面订单生成关键代码:@RequestMapping("/toOrder") publicStringtoOrder(HttpServletRequestrequest,Modelmodel)throwsException{ Ordersorders=newOrders(); Cartcart=(Cart)request.getSession().getAttribute("cart"); UserloginUser=(User)request.getSession().getAttribute("loginUser"); if(loginUser==null){ model.addAttribute("message","对不起您还没有登录"); return"msg"; }// 0表示没有付款、1表示已付款即将发货2表示确认收货3表示交易成功 orders.setState(0); //orders.setOrderTime(newDate());java.text.SimpleDateFormatsdf=newjava.text.SimpleDateFormat("yyyy-MM-dd");Stringtoday=sdf.format(newDate());orders.setOrderTime(sdf.parse(today)); orders.setUid(loginUser.getUid()); orders.setMoney(cart.getTotale()); orderService.toOrder(orders); Map<Integer,CartItem>cartItems=cart.getCartItem(); for(Entry<Integer,CartItem>entry:cartItems.entrySet()){ CartItemcartItem=entry.getValue(); Orderitemorderitem=newOrderitem(); orderitem.setProduct(cartItem.getProduct()); orderitem.setCount(cartItem.getCount()); orderitem.setPid(cartItem.getProduct().getPid()); orderitem.setSubtotal(cartItem.getSubtotle()); orderitem.setOid(orders.getOid()); orders.getOiList().add(orderitem); orderService.toOrderItem(orderitem); } cart.clearCart(); request.getSession().setAttribute("orders",orders); return"order"; }3.7用户留言用户可以登录,并提出自己的意见反馈,有助于管理员更好的管理网站,其展示如图3-7所示。3-7留言界面留言模块关键代码:@RequestMapping("/saveMessage") publicStringsaveMessage(@RequestParamStringmessageinfo,HttpServletRequestrequest,Modelmodel)throwsException{ MessageMessage=newMessage(); UserloginUser=(User)request.getSession().getAttribute("loginUser"); if(loginUser==null){ model.addAttribute("message","对不起您还没有登录"); return"msg"; } java.text.SimpleDateFormatsdf=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Message.setMessage(messageinfo); Message.setUid(loginUser.getUid()); Message.setMessagedate(sdf.format(newDate())); messageService.insertMessage(Message); request.getSession().setAttribute("Message",Message); return"redirect:/messageList.action?page=1"; }}3.8管理员登录管理员输入正确账号密码进入系统,如果错误则会对错误信息进行提示,管理员登录如下图3-8所示。3-8管理员登录界面管理员登录关键代码://admin/adminUser_login.action//adminUser_login管理员登录 @RequestMapping("/admin/adminUser_login") publicStringadminUser_login(HttpServletRequestrequest,Modelmodel,@RequestParamStringusername,@RequestParamStringpassword)throwsException{ AdminuseradminuserLogin=userService.adminUser_login(username,password); System.out.println(username); System.out.println(password); if(adminuserLogin==null){ model.addAttribute("message","改用户未被授予管理员身份!"); return"admin/index"; } request.getSession().setAttribute("adminuserLogin",adminuserLogin);// model.addAttribute("adminuserLogin",adminuserLogin); return"admin/home"; }3.9用户管理管理员可以在系统中,对信息进行增删改查操作,如图3-9所示。3-9用户管理界面用户管理主要代码如下:@RequestMapping("/admin/admin_findAll") publicStringadmin_findAll(Modelmodel,HttpServletRequestrequest)throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } List<User>userList=userService.admin_findAll(); model.addAttribute("userList",userList); return"admin/user/list"; } @RequestMapping("/admin/adminCategory_findAll") publicStringadminCategory_findAll(Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } List<Category>categoryList=categoryService.adminbFindCategory(); /*for(Categorycategory:categoryList){ System.out.println(category.getCname()); }*/ model.addAttribute("categoryList",categoryList); return"admin/category/list"; }3.10分类管理管理员登陆系统之后,可以看到分类管理模块,管理员可以对菜品进行分类管理,并直接出现在用户的首页中[5]。具体如图3-10。3-10分类管理界面分类管理关键代码:@RequestMapping("/admin/adminCategory_findAll") publicStringadminCategory_findAll(Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } List<Category>categoryList=categoryService.adminbFindCategory(); /*for(Categorycategory:categoryList){ System.out.println(category.getCname()); }*/ model.addAttribute("categoryList",categoryList); return"admin/category/list"; }3.11商品管理 管理员进入后台管理系统之后,在商品管理模块,管理员可以对商品进行分详细的管理,可编辑商品的详情,也可增加商品和删除商品,管理员进行的操作直接出现在用户的首页中[6]。具体如图3-113-11商品管理界面商品管理核心代码://admin的商品管理 @RequestMapping("/admin/adminProduct_findAllByPage") publicStringadminProduct_findAllByPage(@RequestParamintpage,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } PageBean<Product>allProPageBean=productService.findAllProduct(page); model.addAttribute("allProPageBean",allProPageBean); return"admin/product/list"; } @RequestMapping("/admin/adminProduct_addPage") publicStringadminProduct_addPage(Modelmodel,HttpServletRequestrequest)throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } //查询出所有的二级分类 List<Categorysecond>cslist=categorySecondService.findAll(); /*for(Categorysecondcategorysecond:cslist){ System.out.println(categorysecond.getCsname()); }*/ model.addAttribute("cslist",cslist); return"admin/product/add"; }3.12订单管理在系统中的订单管理模块,管理员可以对订单进行相关操作,具体如图3-12[7]。3-12订单管理界面订单管理核心代码:/**订单管理模块**/ @RequestMapping("/admin/adminOrder_findAllByPage") publicStringadminOrder_findAllByPage(@RequestParamintpage,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } PageBean<Orders>allProPageBean=orderService.findAllOrderByStateAndPage(page); model.addAttribute("pageBean",allProPageBean); return"admin/order/list"; } //adminOrder_findByState @RequestMapping("/admin/adminOrder_findByState") publicStringadminOrder_findByState(@RequestParamintpage,@RequestParamintstate,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } PageBean<Orders>allProPageBean=orderService.findAllOrderByStateAndPage(state,page); model.addAttribute("pageBean",allProPageBean); return"admin/order/list"; } //订单详情 //adminOrder_findOrderItem @RequestMapping("/admin/adminOrder_findOrderItem") publicStringadminOrder_findOrderItem(@RequestParamintoid,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } OrdersorderItems=orderService.findOrderByOid(oid); model.addAttribute("orderItems",orderItems); return"admin/order/list"; }3.13留言管理在系统中的留言模块,管理员可以对用户的反馈进行查看回复操作[8]。具体如图3-13.3-13留言管理界面留言核心代码如下://后台留言管理 @RequestMapping("/admin/adminMessage_findAllByPage") publicStringadminMessage_findAllByPage(@RequestParamintpage,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } PageBean<Message>pageBean=messageService.findAllMessageByPage(page); model.addAttribute("pageBean",pageBean); return"admin/message/list"; } @RequestMapping("/admin/adminMessage_delete") publicStringadminOrder_updateState(@RequestParamintmessageid,Modelmodel,HttpServletRequestrequest) throwsException{ AdminuseradminuserLogin=(Adminuser)request.getSession().getAttribute("adminuserLogin"); if(adminuserLogin==null){ request.getSession().setAttribute("message","对不起您还没有登录"); return"admin/index"; } messageService.deleteMessage(messageid); return"redirect:/admin/adminMessage_findAllByPage.action?page=1"; }
4系统测试在此,要对开发的系统进行测试这部分的工作了,这也意味着程序即将完成,但测试艰巨度还是很大的,测试费时费力,还相当重要,通过测试是为了发现问题,检测程序。4.1系统测试(1)兼容性测试其测试的目的是保证其系统在浏览器中完成所有设计需求功能[9]。(2)下载时间和容量(3)系统的人机工程(4)检测链接(5)应用程序测试4.2系统维护系统的维护工作主要包括两方面内容:一则是系统的维护与升级;二则是系统的维护与更新[10]。4.3测试目的系统测试是系统的最后一部分,在系统开发过程中多多少少会出现错误,这些错误有可能会导致字段不现实或者系统启动不了,一个小的错误需要我们耗费大量时间去解决,所有在系统开发过程中一定要尽量不必要的错误产生[11]。(1)功能测试:功能必须完善,所有页面显示的功能都可以进行操作,如果功能方面有所欠缺需要尽快完善,找出系统的bug,防止不必要的麻烦的产生[12]。(2)性能测试:确保系统的稳定性,系统无论在什么环境、版本下都可以正常显示,并且3秒内可以进行数据输送和传达,展示页面信息[13]。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业人事管理系统框架
- 会议议程编排与执行模板
- 信息安全事故报告函(7篇)
- 产品质量检测流程标准化工具产品质量追溯系统
- IT技术支持服务台工作记录模板客户满意度跟进版
- 软件外包项目团队管理规范指南
- 安全生产与预防承诺书范文3篇
- 爱心助学活动加入承诺书(3篇)
- IT服务行业云服务平台建设与运营策略
- 农业科技人员精通作物栽培技术指导书
- 社交活动对老年人心理健康的促进作用
- 《农夫山泉公司企业绩效考核方法的案例分析(12000字论文)》
- 快递行业质控员岗位职责
- 换肤综合征讲解
- 机电安装工程现场管理措施
- 公司售后服务培训
- 保险消保内部培训课件
- 造纸助剂项目实施方案
- 《城市大气污染源排放清单编制技术指南》
- 学校食堂餐饮服务外包合同
- 小数乘除法竖式计算专项练习题大全(每日一练共23份)
评论
0/150
提交评论