《网上订餐系统》开发全程回忆
来源:互联网 发布:战舰世界舰船数据 编辑:程序博客网 时间:2024/04/28 02:33
一、需求分析
随着信息经济的发展,许多上班族因工作繁忙导致就餐时间紧凑,而没法享受各种美味。传统的订餐方式过于乏味。而不能满足当今社会快速的生活节凑。然而,把餐饮与互联网结合起来正好解决了这一问题。网上订餐系统对广大顾客提供网上订餐服务,既方便了上班族、游客这些特定群体就餐,又帮助餐饮企业提高服务质量、扩大营业范围,增加知名度等。同时也有利于餐饮企业的管理和售后服务。
网上订餐研究的内容主要是提供饮食信息、优惠信息的浏览和产品的订购、订单确认及付款、产品配送等。顾客可以通过订餐系统实现店铺浏览、饮食资讯浏览、网上预定和付款、送餐服务等;商家(网站管理员)可以实现店铺展示,顾客需求信息管理,发放广告以及对相关信息进行添加、删除、修改和导出等。要使网上订餐系统能够从架构变成能使用。网上订餐系统需要解决的关键问题是实现以下的功能模块,其中包括:
(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
帐号状态(冻结、删除、)
last_modified
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;}
导出exel表
@RequestMapping(value="manager/import/soldtable",method=RequestMethod.GET)public String importtable(HttpServletRequest request,HttpServletResponse response) throws Exception, WriteException{OutputStream os = response.getOutputStream(); String refectoryId="refectory"; String fileName="menusold"; response.setContentType("application/vnd.ms-excel"); response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".xls" + "\""); SoldExample example=new SoldExample();example.createCriteria().andRefectoryIdEqualTo(refectoryId);List<Sold> list=soldService.getSoldlist(example); if(list.size()>0){ System.out.println("=====kaisi"); WritableWorkbook book = Workbook.createWorkbook(os); WritableSheet ws= book.createSheet(fileName, 0); //新建一个sheet WritableCellFormat wcf = null; WritableFont wf = new WritableFont(WritableFont.TIMES,12, WritableFont.BOLD,false);//最后一个为是否italic wf.setColour(Colour.BLACK); wcf = new WritableCellFormat(wf); wcf.setAlignment(Alignment.CENTRE); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setBorder(Border.ALL,BorderLineStyle.THIN); for(int i=0;i<list.size();i++){ Sold soldmenu=list.get(i); Label label11=new Label(0, 0, "菜谱名称",wcf); ws.setColumnView(0,20); ws.addCell(label11); Label label1=new Label(0, i+1, soldmenu.getMenuname()); ws.addCell(label1); Label label12=new Label(1, 0, "单价/元",wcf); ws.setColumnView(1,30); ws.addCell(label12); Label label2=new Label(1, i+1, soldmenu.getPrice().toString()); ws.addCell(label2); Label label13=new Label(2, 0, "销售量/份",wcf); ws.setColumnView(2,50); ws.addCell(label13); Label label3=new Label(2, i+1, soldmenu.getNumber().toString()); ws.addCell(label3); Label label14=new Label(3, 0, "总额/元",wcf); ws.setColumnView(3,20); ws.addCell(label14); Label label4=new Label(3, i+1, soldmenu.getSum().toString()); ws.addCell(label4); } book.write(); book.close(); os.close(); response.flushBuffer(); } return null; }
四、 运行效果图
1、系统首页:
2、注册页面
3、个人主页页面
4、饭盒管理页面
5、后台首页
1、后台登录界面:
2、后台首页界面
3、评论管理界面
4、菜谱修改页面
- 《网上订餐系统》开发全程回忆
- 网上订餐系统1
- 《在线音乐网站系统》开发全程回忆
- 网上订餐系统产品特点
- 网上订餐系统项目实战
- 基于ASP.NET的网上订餐系统的开发与实现
- 求网上订餐系统 java写的
- 网上订餐系统源码SSH+bootstrap+mysql
- 网上订餐系统饿了么、百度、美团外卖,订餐网站外卖
- 网上外卖订餐运营
- 简易版网上订餐
- 订餐系统之地图订餐
- 订餐系统之地图订餐
- 订餐系统
- 订餐系统
- 关于订餐系统
- 自助订餐系统
- 订餐系统处理
- 一、javascript简介
- opencv中cvFindContours函数两个测试程序
- tq210 内存配置
- Android 菜单(OptionMenu)大全 建立你自己的菜单
- 2014资料整理--NSArray用法(三)
- 《网上订餐系统》开发全程回忆
- C#导出Excel的示例
- Oracle directory
- unity3d中dllimport方法的使用,以接入腾讯平台为例
- magento facebook 账号登陆
- Android: Service中创建窗口Dialog
- oracle 利用batch批处理数据
- 根据Java基础编写小程序
- LeetCode - Linked List Cycle II