- 浏览: 998175 次
文章分类
最新评论
-
ITOYO1234567890:
[flash=200,200][url][img][/img] ...
《在线音乐网站系统》开发全程回忆 -
sanrenxing_1:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
tornado websocket
《网上订餐系统》开发全程回忆
一、需求分析
随着信息经济的发展,许多上班族因工作繁忙导致就餐时间紧凑,而没法享受各种美味。传统的订餐方式过于乏味。而不能满足当今社会快速的生活节凑。然而,把餐饮与互联网结合起来正好解决了这一问题。网上订餐系统对广大顾客提供网上订餐服务,既方便了上班族、游客这些特定群体就餐,又帮助餐饮企业提高服务质量、扩大营业范围,增加知名度等。同时也有利于餐饮企业的管理和售后服务。
网上订餐研究的内容主要是提供饮食信息、优惠信息的浏览和产品的订购、订单确认及付款、产品配送等。顾客可以通过订餐系统实现店铺浏览、饮食资讯浏览、网上预定和付款、送餐服务等;商家(网站管理员)可以实现店铺展示,顾客需求信息管理,发放广告以及对相关信息进行添加、删除、修改和导出等。要使网上订餐系统能够从架构变成能使用。网上订餐系统需要解决的关键问题是实现以下的功能模块,其中包括:
(1)菜单管理:访客登录网上订餐系统进行菜单浏览,对的菜单进行添加、删除和修改。
(2)用户管理:访客注册为会员,会员、系统管理员可以对自己的个人账号信息进行设置、更改。
(3)饭盒管理:(类似购物车)会员可以管理自己的饭盒,如增 、删、改、查。
(4)评论管理:会员可以对菜单进行评价、系统管理员对评论进行管理。
(5)订单管理:系统管理员对订单进行管理,确定订单的生成 。
(6)销售统计管理:日销售统计、月销售统计、导出销售统计数据。
(7)角色管理:超级管理员(软件服务商)管理系统管理员、会员。
本研究课题主要包括了七大模块:菜单管理、用户管理、菜单管理、饭盒管理、评论管理,销售统计管理管理、销售统计管理、角色管理。这七个模块相互独立又存在着一定的联系二、系统模块设计
三、 数据字典
数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。利用mysql建立“网上订餐系统”数据库,其基本表清单及表结构描述如下:
数据库中用到的表:
1、软件服务商(超级管理员admin)
字段 |
类型 |
约束 |
说明 |
admin_id |
varchar(64) |
not null |
ID |
|
varchar(64) |
not null |
超级管理员帐号 |
password |
varchar(64) |
not null |
密码 |
Key |
Varchar(64) |
not null |
验证键 |
2、餐厅设置数据表(RefectorySetting)
字段 |
类型 |
约束 |
说明 |
Refectory_id |
varchar(64) |
not null |
餐馆ID |
subdomain |
varchar(64) |
not null |
餐馆的二级域名 |
|
varchar(64) |
not null |
管理员帐号 |
password |
varchar(64) |
not null |
密码 |
Refectory _name |
varchar(64) |
not null |
餐馆名称 |
Refectory_logo |
varchar(64) |
not null |
餐馆Logo |
Login_IP |
varchar(64) |
null |
登录ip |
iPhone |
varchar(64) |
not null |
联系电话 |
Begin_time |
datetime |
not null |
帐号开通时间 |
Active_time |
varchar(64) |
not null |
帐号有效期 |
Status |
varchar(64) |
null |
帐号状态(冻结、删除、) |
datetime |
null |
上次修改的时间 |
3、会员数据表(user)
字段 |
类型 |
约束 |
说明 |
user_id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
|
varchar(64) |
not null |
会员帐号 |
password |
varchar(64) |
not null |
密码 |
nickname |
varchar(64) |
not null |
昵称 |
iPhone |
varchar(64) |
not null |
联系方式 |
Register_time |
datetime |
not null |
注册时间 |
Active_key |
varchar(64) |
not null |
激活码 |
Active_status |
Integer |
not null |
激活状态 |
Ip |
varchar(64) |
not null |
登录ip |
Login_time |
datetime |
not null |
上一次登录时间 |
4、地址数据表(address)
字段 |
类型 |
约束 |
说明 |
address _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
userid |
varchar(64) |
not null |
userid(外键) |
address |
varchar(64) |
not null |
送餐地址 |
Tel |
varchar(64) |
not null |
联系方式 |
status |
varchar(64) |
not null |
是否为默认地址 |
remarks |
varchar(64) |
not null |
备注 |
5、菜单数据表(menu)
字段 |
类型 |
约束 |
说明 |
menu _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
name |
varchar(64) |
not null |
名称 |
image |
varchar(64) |
not null |
图片 |
introduce |
varchar(64) |
not null |
菜单介绍 |
price |
varchar(64) |
not null |
价格 |
User_price |
varchar(64) |
not null |
会员价格 |
classification |
varchar(64) |
not null |
所属类别 |
Add_time |
datetime |
not null |
添加时间 |
Status |
Int |
not null |
是否为推荐菜色 |
PopularNum |
int |
not null |
受欢迎程度 |
appraise |
varchar(64) |
not null |
好评程度(五星) |
6、菜色类别(classification)
字段 |
类型 |
约束 |
说明 |
classification _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
name |
varchar(64) |
not null |
类别名称 |
7、订单数据表(order)
字段 |
类型 |
约束 |
说明 |
order _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
userid |
varchar(64) |
not null |
联系人(外键) |
menu _id |
varchar(64) |
not null |
菜单id(外键) |
num |
Int |
not null |
购买数量 |
Price |
Float |
not null |
总价格 |
payment |
Float |
not null |
支付方式 |
order _Status |
int |
not null |
订单状态 |
Add_time |
datatime |
not null |
订单下订时间 |
Send_Status |
Int |
not null |
送餐状态 |
remarks |
varchar(64) |
not null |
备注 |
8、评论管理数据表(commentary)
字段 |
类型 |
约束 |
说明 |
commentary _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
userid |
varchar(64) |
not null |
联系人(外键) |
menu _id |
varchar(64) |
not null |
菜单id(外键) |
Content |
text |
not null |
评论内容 |
Ip |
varchar(64) |
not null |
评论IP |
Auditing _Status |
int |
not null |
审核状态 |
time |
datetime |
not null |
评论时间 |
9、销售统计数据表(sold record)
字段 |
类型 |
约束 |
说明 |
sold _id |
varchar(64) |
not null |
ID |
Refectory_id |
varchar(64) |
not null |
餐馆ID (外键) |
menu _id |
varchar(64) |
not null |
菜单id(外键) |
num |
int |
not null |
销售数量 |
price |
Float |
not null |
单价 |
Sum |
Float |
not null |
金额 |
time |
datetime |
not null |
时间 |
四、部分关键代码:
1、导航分类部分代码:
/** * @param request * @param response * @return * 导航分类 */ @RequestMapping(value="{classificationId}/classifyPage",method={RequestMethod.GET,RequestMethod.POST}) public ModelAndView classifyPage(@PathVariable String classificationId,HttpServletRequest request,HttpServletResponse response){ ModelAndView mav=new ModelAndView(); String refectoryId="refectory"; HttpSession session=request.getSession(); String userId=(String) session.getAttribute("userId"); System.out.println("welcome uid:"+userId); User user=userService.getUserById(userId); mav.addObject("user", user); // 分类导航 ClassificationeExample example4 = new ClassificationeExample(); example4.createCriteria().andRefectoryIdEqualTo(refectoryId);//查询条件 example4.setOrderByClause(" classification_id DESC limit 6 "); List<Classificatione> classificationes = classificationService.getClassificationList(example4); mav.addObject("classificationes", classificationes); int page = ServletRequestUtils.getIntParameter(request, "page", 1); // 第几页 // 分类菜谱 MenuExample menuExample = new MenuExample(); menuExample.createCriteria().andRefectoryIdEqualTo(refectoryId).andClassificationIdEqualTo(classificationId);//查询条件 Pageable pageable = new PageRequest(page, PAGE_SIZE); Paginator<Menu> paginator = menuService.getClassMenu(menuExample, pageable); String queryString = ""; mav.addObject("paginator", paginator); mav.addObject("paginationHtml", paginator.toPaginationHtml(queryString)); mav.setViewName("classifyPage"); return mav; }
3、菜谱详情:
/** * @param request * @param response * @return * 菜谱详情 */ @RequestMapping(value="{menuId}/detailedPage",method={RequestMethod.GET,RequestMethod.POST}) public ModelAndView detailedPage(@PathVariable String menuId, HttpServletRequest request,HttpServletResponse response){ ModelAndView mav=new ModelAndView(); HttpSession session=request.getSession(); String userId=(String) session.getAttribute("userId"); System.out.println("welcome uid:"+userId); String refectoryId="refectory"; User user=userService.getUserById(userId); mav.addObject("user", user); Menu menu=menuService.getMenu(menuId); mav.addObject("menu", menu); int page = ServletRequestUtils.getIntParameter(request, "page", 1); // 第几页 CommentaryExample example = new CommentaryExample(); example.createCriteria().andMenuIdEqualTo(menuId).andRefectoryIdEqualTo(refectoryId); // 分页查询 Pageable pageable = new PageRequest(page, PAGE_SIZE); Paginator<Commentary> paginator = commentaryService.getAllCommentary(example, pageable); String queryString = ""; mav.addObject("paginator", paginator); mav.addObject("paginationHtml", paginator.toPaginationHtml(queryString)); // 分类导航 ClassificationeExample example4 = new ClassificationeExample(); example4.createCriteria().andRefectoryIdEqualTo(refectoryId);//查询条件 example4.setOrderByClause(" classification_id DESC limit 6 "); List<Classificatione> classificationes = classificationService.getClassificationList(example4); mav.addObject("classificationes", classificationes); mav.setViewName("detailedPage"); return mav; }2、登录代码:
@RequestMapping(value="/login",method=RequestMethod.POST) public ModelAndView loginPost(HttpServletRequest request){ String email=ServletRequestUtils.getStringParameter(request, "email",""); String password=ServletRequestUtils.getStringParameter(request, "password",""); ModelAndView mav=new ModelAndView(); RefectorysettingExample example=new RefectorysettingExample(); example.createCriteria().andEmailEqualTo(email); List<Refectorysetting> list=refectorysettingService.getRefectorySetting(example); Refectorysetting refectorysetting=new Refectorysetting(); if(list.size()>0){ //存在有该账号 refectorysetting=list.get(0); if(password.equals(refectorysetting.getPassword())){ //密码正确 if(refectorysetting.getStatus()==1){ //该账号状态可用 Date currentTime = new Date();//当前时间 if(currentTime.before(refectorysetting.getActiveTime())){ refectorysetting.setLoginip("112.113.45.67"); refectorysettingService.updataRefectory(refectorysetting); mav.setView(new RedirectView("home")); HttpSession session = request.getSession();//创建session session.setAttribute("refectoryId", refectorysetting.getRefectoryId());//存值 return mav; }else{ //账号已过期,开始进行冻结 refectorysetting.setStatus(0); refectorysetting.setLoginip("112.113.45.67"); refectorysettingService.updataRefectory(refectorysetting); mav.addObject("result", "账号已到期"); mav.setViewName("manager/loginFailed"); return mav; } }else{ System.out.println("该账号已被冻结"); mav.addObject("result", "该账号已被冻结"); mav.setViewName("manager/loginFailed"); return mav; } }else{ System.out.println("密码错误"); mav.addObject("result", "密码错误"); mav.setViewName("manager/loginFailed"); return mav; } }else{ System.out.println("没有该账号"); mav.addObject("result", "没有该账号"); mav.setViewName("manager/loginFailed"); return mav; } }
销售数据统计:
// 日期格式化 private static final DateFormat DF = new SimpleDateFormat("yyyy-MM-dd"); @RequestMapping(value="/home",method={RequestMethod.POST,RequestMethod.GET}) public ModelAndView managerhome(HttpServletRequest request){ ModelAndView mav=new ModelAndView(); HttpSession session=request.getSession(); String refectoryId=(String) session.getAttribute("refectoryId"); if(refectoryId==null){ refectoryId=""; } Refectorysetting refectorysetting=refectorysettingService.getOneRefectorySetting(refectoryId); mav.addObject("refectorysetting", refectorysetting); // 预定义日期区间 Date startDate = new Date(); Date endDate = new Date(); String dateRange = ServletRequestUtils.getStringParameter(request, "dateRange", "thisWeek"); if ("thisWeek".equals(dateRange)) { startDate = MenuDateUtil.getThisWeekStart(); endDate = MenuDateUtil.getThisWeekEnd(); } else if ("lastWeek".equals(dateRange)) { startDate = MenuDateUtil.getLastWeekStart(); endDate = MenuDateUtil.getLastWeekEnd(); } else if ("thisMonth".equals(dateRange)) { startDate = MenuDateUtil.getThisMonthStart(); endDate = MenuDateUtil.getThisMonthEnd(); } else if ("lastMonth".equals(dateRange)) { startDate = MenuDateUtil.getLastMonthStart(); endDate = MenuDateUtil.getLastMonthEnd(); }else if ("today".equals(dateRange)) { startDate = MenuDateUtil.getTodayStart(); endDate = MenuDateUtil.getTodayEnd(); }else if ("yesterday".equals(dateRange)) { startDate = MenuDateUtil.getYesterdayStart(); endDate = MenuDateUtil.getYesterdayEnd(); } OrderformExample example=new OrderformExample(); OrderformExample.Criteria criteria= example.createCriteria().andRefectoryIdEqualTo(refectoryId); criteria.andAddTimeGreaterThanOrEqualTo(startDate); criteria.andAddTimeLessThanOrEqualTo(endDate); List<Orderform> list=orderService.getOrderList(example); System.out.println("--------"+list.size()); Map<String,Integer> data=new HashMap<String, Integer>(); Map<String,String> categories=new HashMap<String, String>(); if(list.size()>0){ for (int i=0;i<list.size();i++) { Orderform order=list.get(i); String menuid=order.getMenuId(); if(data.containsKey(menuid)){ Integer value=data.get(menuid); Integer num=order.getNumber(); data.put(menuid, value+num); }else{ Integer num=order.getNumber(); data.put(menuid, num); } if(categories.containsKey(menuid)){ String name=order.getMenuname(); categories.put(menuid, name); }else{ String name=order.getMenuname(); categories.put(menuid, name); } } } List<Integer> data2=new ArrayList<Integer>(); List<String> categories2=new ArrayList<String>(); Iterator<Entry<String, Integer>> iter = data.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Integer> entry = iter.next(); data2.add(entry.getValue()); } Iterator<Entry<String, String>> iter2 = categories.entrySet().iterator(); while (iter2.hasNext()) { Map.Entry<String, String> entry = iter2.next(); categories2.add(entry.getValue()); } mav.addObject("data", JSONArray.fromObject(data2).toString()); mav.addObject("categories", JSONArray.fromObject(categories2).toString()); mav.addObject("dateRange", dateRange); mav.setViewName("manager/home"); System.out.println("manage"); return mav; }
四、 运行效果图
1、系统首页:
2、注册页面
3、个人主页页面
4、饭盒管理页面
5、后台首页
1、后台登录界面:
2、后台首页界面
3、评论管理界面
4、菜谱修改页面
相关推荐
基于web的网上订餐系统的设计与开发开题报告.docx基于web的网上订餐系统的设计与开发开题报告.docx基于web的网上订餐系统的设计与开发开题报告.docx基于web的网上订餐系统的设计与开发开题报告.docx基于web的网上...
网上订餐系统开发移动项目+数据库网上订网上订餐系统开发移动项目+数据库餐系统开发移动项目+数据库
基于系统开发的软件工程规范的需要,本人严格执行需求分析,概要设计,详细设计与编码以及系统设计等设计步骤来完成该系统,并且在系统开发过程中结合理论知识与开发技术,完成了网上订餐系统平台的构建,实现预期的...
外卖网上订餐系统的设计与实现项目可行性研究报告.pdf外卖网上订餐系统的设计与实现项目可行性研究报告.pdf外卖网上订餐系统的设计与实现项目可行性研究报告.pdf外卖网上订餐系统的设计与实现项目可行性研究报告.pdf...
网上订餐-网上订餐系统-网上订餐系统源码-网上订餐管理系统-网上订餐管理系统java代码-网上订餐系统设计与实现-基于springboot的网上订餐系统-基于Web的网上订餐系统设计与实现-网上订餐网站-网上订餐网站代码-网上...
基于系统开发的软件工程规范的需要,本人严格执行需求分析,概要设计,详细设计与编码以及系统设计等设计步骤来完成该系统,并且在系统开发过程中结合理论知识与开发技术,完成了网上订餐系统平台的构建,实现预期的...
网上订餐-网上订餐系统-网上订餐系统源码-网上订餐管理系统-网上订餐管理系统java代码-网上订餐系统设计与实现-基于springboot的网上订餐系统-基于Web的网上订餐系统设计与实现-网上订餐网站-网上订餐网站代码-网上...
基于BS的网上订餐系统开发 基于BS的网上订餐系统开发用例图
网上订餐系统实验报告.doc
asp+网上订餐系统 有送餐地址的过虑程序
网上订餐系统的报告总结.pdf
基于uml的网上订餐系统的开发文档 第1章 绪 论 - 4 - 1.1 系统开发的背景和意义 - 4 - 1.2 国内外研究发展现状 - 4 - 1.2.1 面向对象技术的发展与现状 - 4 - 1.2.2 UML的建模语言 - 5 - 1.2.3 UML的应用领域 - 6 - ...
基于SpringBoot的校园网上订餐系统源码+数据库+毕业设计。已获高分通过项目。 项目简介 本项目是一套基于SpringBoot的校园网上订餐系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。...
基于SpringBoot的校园网上订餐系统源码+数据库脚本(毕业设计) 、已获导师指导并通过的高分项目。 项目简介 本项目是一套基于SpringBoot的校园网上订餐系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战...
网上订餐系统需求分析
网上订餐系统,适合毕业设计,有详细代码,可自行扩展哦,欢迎使用,多提宝贵意见