您现在的位置是:首页 >其他 >基于SSH的网络订餐系统设计与实现网站首页其他
基于SSH的网络订餐系统设计与实现
源码和说明文档:基于SSH的网络订餐系统设计与实现
文章目录
1 需求分析
所涉及的系统已部署在网络服务器中,网址是:XXX,用户名/密码1/1。 (管理员端XXX/admin,用户名/密码sa/123)
众所周知,随着社会的发展,科技的发达,人民生活水平的提高,互联网的应用已普与千家万户,有时大家忙碌不想浪费太多的时间出去买饭,吃饭等,这就为网络订餐提供了良好的发展空间。
而餐饮业在网络领域中还处于形成的初期;传统的饮食业中,大都是以实际门面的形式来进行宣传与交流的。作为网络普遍化的社会,这还缺少了一些更为现代化的元素。餐饮业是一种个性化、多样化的服务产业,而网络商务领域则是最能体现个性化,多样化服务的商务方式。而且现在大部分网络商务都体现为像大企业服务,结合餐饮这个特殊的行业,终将还发展为向小区域小店铺服务的模式。以最贴切的方式,最灵便的服务进入各个网络社区,进入人们的生活。
网上订餐服务的直观、有效、便捷等优点是传统的订餐业务无法比拟的,将会带给广大繁忙的工作人群诸多的方便,节约他们大量的时间。网上订餐中多功能性的服务还可以让消费者从容的网上浏览餐馆的菜单,或进行价格上的比价,来选择所需要的美食佳肴。目前,通过上网提供外卖和送餐服务的餐厅多于独立经营者,外卖与送餐服务占餐饮生意额的一半以上。美国餐饮消费者越来越趋向于使用网上订餐的形式来购买外卖,特别是年轻的消费者。显而易见,网上订餐将成为餐饮业扩大生意的金矿源,订餐系统的重要性也将越显其强大的作用。
网络订餐系统主要包含用户订餐和后台管理等。
用户订餐具体内容:注册登录,查看菜单,将餐品加入餐车,提交订单,查看订单,更改用户信息,注销退出。
后台管理具体内容:查看、修改、添加和删除菜品、菜品类别、公告,查询、确认订单,更改管理员信息。
2 设计方案
本系统设计其实从开课之初提出大作业结课方式就已经开始准备,通过对网上订餐业务逻辑的了解,抽象出具体的需求分析,我们可以把网上订餐系统分为以下两个小系统:用户订餐和后台管理。
用户订餐系统主要包括:注册、登录、浏览菜单、餐车、订单、注销退出。
后台管理系统主要包括:登录、菜单管理、菜单类别管理、公告管理、订单管理、管理员管理、注销退出。
菜单管理模块提供增加菜品功能,可在菜单信息列表界面通过查询数据库显示所有菜品的名称、类别、原料、价格等,并且提供对菜品进行删除和编辑和查询功能。
菜单类别管理模块显示当前所有菜单类别,可添加、编辑、删除菜单类别。
公告管理模块显示当前所有公告,并且提供添加、编辑、删除公告等功能。
进货管理模块包括供应商列表和供应商类别。供应商列表界面提供显示,查询和添加供应商功能;供应商类别界面用来显示供应商类型。
订单管理模块包括订单列表、订单查询、销售额统计等功能。订单列表可显示所有订单;订单查询可根据用户ID、菜品名称、销售日期等查询相关订单;本日销售额统计显示本日卖出的所有菜品信息,包括菜品名称、数量、单价、单菜品销售合计和本日销售总额。
我们都知道,开发的技术选择有很多种,选择其中适合自己开发的一种或者多种相关技术,可以让自己更好更快地进行项目的开发。通过分析该网站的具体功能和详细的设计,在网上查阅参考大量的相关文献,决定采用MVC模式实现我们的网站。即数据存储(mysql),界面显示(jsp)和逻辑处理(servlet)分隔开来实现,把网站实现划分模块,不同模块之间提供相应的接口,不仅便于实现,而且便于日后管理和维护。
最终我选择用SSM (Spring、SpringMVC、Mybatis)框架和MySQL进行项目的整合开发。JSP虽是后端技术,但在本次系统设计中,JSP页面主要是向用户展示前台视图的一个界面,在SpringMVC中相当于一个View层的形式存在。
3 数据库设计
在任何有关于电子商务的系统开发中,用统一的一个数据库代替人工来管理大量的数据已经成为大型系统开发的主要趋势,并且已经开发出许多数据库,如MySQL、Oracle、Nosql等,由于MySQL对比于其他大型数据库具有以下优势: 1. 安全可靠; 2.较快的存储速度; 3.高度的兼容性; 4.操作简单易用。基于这些本系统采用MYSQL作为系统数据库。
3.1 概念设计
数据库的概念设计的主要数据名称如表3.1所示。
表3.1 主要的数据名称表
表名 说明
admin 管理员表
menus 菜单表
notices 公告表
orders 订单表
types 菜品分类表
users 用户表
3.2 E-R图
E-R图是一种描述数据的概念模型,目的是为了给系统设计人员提供方便,同时也是设计人员与用户之间的主要沟通方式。这一概念模型具有的特点是:较强的语言表达能力,方便直接,易于用户理解。
用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来。
总体E-R图如图3.1所示。
图3.1 总体E-R图
3.3 逻辑结构设计
设计一个缜密的数据库逻辑结构,重要的步骤就是数据库的设计,而数据库的主要逻辑结构设计主要是将E-R图完全转化为数据库支持的数据模型,使得逻辑结构也和数据库相符。
3.3.1 管理员信息表ADMIN
管理员的主要信息如表3.2所示。
表3.2 管理员信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 管理员用户id |
name | varchar | × | 管理员用户姓名 | |
pwd | varchar | √ | null | 管理员用户密码 |
authority | varchar | √ | null | 管理员用户权限 |
3.3.2 菜单表MENUS
菜单的主要信息如表3.3所示。
表3.3菜单信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 菜品id |
name | varchar | × | 菜品名称 | |
typeid | int | √ | null | 菜品类别id |
burden | varchar | √ | null | 主要材料 |
brief | varchar | √ | null | 菜品介绍 |
price | float | √ | null | 菜品市场价格 |
sums | int | √ | 0 | 菜品数量 |
price1 | float | √ | null | 菜品会员价格 |
sums1 | int | √ | 0 | 菜品数量 |
imgpath | varchar | √ | null | 菜品图片 |
3.3.3 公告表NOTICE
公告的主要信息如表3.4所示。
表3.4公告信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 公告id |
name | varchar | × | 公告标题 | |
content | varchar | √ | null | 公告内容 |
times | varchar | √ | null | 公告时间 |
3.3.4 订单表ORDERS
订单的主要信息如表3.5所示。
表3.5订单信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 订单id |
userid | int | √ | null | 用户id |
menuid | int | √ | null | 菜品id |
menusum | int | √ | null | 菜品数量 |
times | varchar | √ | null | 订单时间 |
delivery | int | √ | null | 是否配送 |
3.3.2 菜品分类表TYPES
菜品分类的主要信息如表3.6所示。
表3.6菜品分类信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 分类id |
name | varchar | × | 菜品分类名称 |
3.3.2 用户表USERS
用户的主要信息如表3.7所示。
表3.7用户信息表
Name | Type | Nullable | Default | Comments |
---|---|---|---|---|
id | int | × | AUTO_INCREMENT | 用户id |
name | varchar | × | 用户名称 | |
pwd | varchar | √ | null | 用户密码 |
realname | varchar | √ | null | 用户真实姓名 |
sex | varchar | √ | null | 用户性别 |
age | int | √ | null | 用户年龄 |
card | varchar | √ | null | 用户身份证 |
address | varchar | √ | null | 用户地址 |
phone | varchar | √ | null | 用户电话 |
varchar | √ | null | 用户邮箱 | |
code | varchar | √ | null | 地区邮编 |
type | int | √ | 0 | 用户类型 |
4 主要功能模块实现
4.1 前台用户订餐模块实现
用户订餐模块主要功能有:注册登录,查看菜单,将餐品加入餐车,提交订单,查看订单,更改用户信息,注销退出。
4.1.1 用户注册
游客状态下只拥有查看菜单、餐车、公告等界面的访问权,想访问其它界面的话需要进行用户登录,在登录之前如果没有账号则需要进行注册操作。注册界面如下,需要输入用户名、密码、收货地址、手机号等信息才能注册成功。
用户注册页面如图4.1所示。
图4.1 用户注册页面
4.1.2 用户登录
用户登录只需要输入用户名和密码即可进行登录。登陆页面login.jsp的表单数据格式的验证使用了javascript,验证过程中,只要出现有一项不符合验证规则的数据,表单则提交失效。
用户登录页面如图4.2所示。
图4.2 用户登录页面
4.1.3 订购菜品
进入菜单详情界面(index.jsp),可以看到菜品的详细介绍,包括菜品信息,菜品价格,菜品食材等信息,选择加入餐车。左侧还有餐厅公告、餐车、销售排行榜等信息,如图4.3所示。
图4.3 菜单详情页面
可以直接在菜单详情界面查看餐车中的菜品,进行提交;也可以选择“我的餐车”界面(shoppingcar.jsp)进行上述操作。如图4.4所示。
图4.4 我的餐车页面
4.1.4 订单详情
用户下单成功之后,点击“我的订单”,可以在订单详情界面通过菜品名、日期等关键词和订单状态查询自己的订单。
订单详情页面(order.jsp)如图4.5所示。
图4.5 订单详情页面
4.1.5 用户中心
用户中心页面(center.jsp)主要展示和修改用户的信息。
用户中心页面如图4.6所示。
图4.6 用户中心页面
4.1.6 配送说明
配送说明界面(carry.jsp)中展示了餐厅的订餐配送方式和营业信息,如图4.7所示。
图4.7 配送说明页面
4.1.7 注销退出
用户注销退出后会回到菜单详情界面,无法提交订单和查看用户信息。
4.2 后台管理模块
该模块主要包含登录、菜单管理、菜单类别管理、公告管理、销售订单管理、系统用户管理、注销退出等功能。
4.2.1 登录
初始管理员直接在数据库中添加,管理员登录界面(main.jsp)如图4.8所示。
图4.8 管理员登录页面
4.2.2 菜单管理
添加菜品界面(menus_add.jsp) 可将对话框中的菜品信息添加至数据库中,此界面有文件上传功能:上传菜品的图片,界面如图4.9所示。
图4.9 添加菜品页面
菜品列表界面(menus.jsp)通过查询数据库显示当前系统中商品具体详细信息,还可以通过主键菜品ID修改(menus_update.jsp)或删除菜品,如图4.10所示。
图4.10 商品列表页面
4.2.3 菜单类别管理
添加菜品类别界面(type_add.jsp) 可将对话框中的菜品类别信息添加至数据库中,界面如图4.11所示。
图4.11 添加菜品类别页面
菜品类别列表界面(type.jsp)通过查询数据库显示当前系统中菜品类别具体详细信息,如图4.12所示。
图4.12 菜品类别页面
4.2.4 公告信息管理
添加公告界面(notice_add.jsp) 可将对话框中的公告信息添加至数据库中,界面如图4.13所示。
图4.13 添加管理员页面
公告信息列表界面(notice.jsp) 通过查询数据库显示当前系统中公告具体详细信息,如图4.14所示。
图4.14 公告信息列表页面
4.2.5 销售订单管理
销售订单信息列表界面(order.jsp) 通过查询数据库显示当前系统中销售订单具体详细信息,采用了分页查看,订单5个为1页,如图4.15所示。
图4.15 销售订单信息列表页面
销售订单查询界面(order_search.jsp) 可通过查询数据库按指定条件显示当前系统中相应订单的具体详细信息,如图4.16所示。
图4.16 销售订单查询页面
Mysql主要的查询sql语句是(其他模块类似):
代码清单4.1 sql查询语句
select orders.id,orders.userid,orders.menusum,orders.times,orders.delivery, users.name,users.phone,users.address,menus.name as menuname,menus.price1 from orders,users,menus where orders.userid=users.id and orders.menuid=menus.id and orders.id=#{id}
select orders.id,orders.userid,orders.menusum,orders.times,orders.delivery, users.name,users.phone,users.address,menus.name as menuname,menus.price1 from orders,users,menus where orders.userid=users.id and orders.menuid=menus.id and orders.times > #{0} and #{1} > orders.times
select orders.id,orders.userid,orders.menusum,orders.times,orders.delivery, users.name,users.phone,users.address,menus.name as menuname,menus.price1 from orders,users,menus where orders.userid=users.id and orders.menuid=menus.id and menus.name=#{name}
select orders.id,orders.userid,orders.menusum,orders.times,orders.delivery, users.name,users.phone,users.address,menus.name as menuname,menus.price1 from orders,users,menus where orders.userid=users.id and orders.menuid=menus.id and orders.delivery=#{0}
本日销售额统计界面(order_statistic.jsp)通过查询数据库得到本日的订单,将各订单的菜品汇总得到本日各菜品卖出的份数和金额,进而将订单中的金额加起来可得本日销售额,如图4.17所示。
图4.17 本日销售额统计页面
4.2.6 系统用户管理
系统用户管理界面(admin_update.jsp)通过对话框中的信息修改数据库中admin表中的管理员信息,如图4.18所示。
图4.18 系统用户管理页面
4.2.7 注销退出
注销退出后回到管理员登陆界面。
5 软件测试
为了高效、高质量的完成一个软件项目,测试要求必须完善且适度,否则,如果将系统软件投入到运行中会让使用者承担很大的危险,付出很大的代价。系统开发中的测试不仅仅是为了要找出错误,而且要分析错误产生的原因和错误的分布特征,发现当前采用软件过程的缺陷以改良。测试只能够向开发者证明错误的存在,但是不是能够表明隐藏的错误是否会造成很大的影响。即使没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
5.1 数据库测试
测试数据库时我考虑到以下及个方面:
1.数据的正确性测试:数据有无乱码、页面的增删改查,数据库和页面是否成功的显示相应的数据。
2.数据库构造:数据库配置文件修改不能否访问数据库、构造异常的数据不能否在页面显示。
3.数据同步测试:构造重复的数据看数据库是否能去重、是否有对异常数据的容错处理机制、是否有历史数据处理机制;敏感字段的值是否按照要求进行了安全的加密处理。
根据考虑到的方面,主要有以下几个测试点:
1.关闭数据库,前端页面是否能打开;
2.页面的增删改查,数据库是否成功的显示相应的数据;
3.测数据库配置文件修改是否能访问数据库;
4.测数据库是否显示有报异常的日志;
5.页面填写非空字段为空,数据库是否能显示。
5.2 功能测试
在功能测试的部分主要是对系统的实际操作进行测试,主要作用是对各个功能的使用情况的完善性和可操作性进行检查。
功能测试主要分为两部分:单元测试和集成测试。我主要进行了单元测试。
单元测试方面,主要是正常登录、登录时用户名或密码错误、菜品添加到餐车、从餐车提交订单、订单查询结果与订单内容是否匹配、管理员添加修改删除操作、表单数据格式或内容非法的条件下提交等情况进行测试,确保系统的每一个单元模块都能正常运行。
5.3 测试过程中遇到的问题及解决方法
(1) 找不到页面文件
错误描述:文件[XXX.jsp]未找到。
问题分析与解决:在发现系统存在这样的问题初期,首先检查了目录里是否有该文件,发现有后在代码文件中查找“XXX.jsp”,定位该文件调用的位置,查看引用地址是否正确,发现错误,改正。
(2)图片无法显示
错误描述:图片无法显示。
问题分析与解决:查看相应目录是否有该图片,然后查看代码中引用地址是否正确,发现错误改正,描述路径时,使用${request.pageContext.contextPath}的效果更好,因为从根目录出发文件结构较清晰,不易出错;也有可能是静态资源请求被拦截,需在web.xml文件中配置。
(3)连接无法正确跳转
错误描述:请求资源XXX不空闲。
问题分析与解决:查询代码发现是controller中设置的请求资源,首先对代码编写进行检查,无误,认为很有可能是路径出错,在tomcat服务器server.xml文件中添加访问路径配置后正常。
5.4 系统尚存在的不足
首先,网站的一些功能还不完善,如展示菜品的详细信息的页面还未添加进系统里。
然后,关于用户的体验感方面还需要加强,比如对页面进行美化设计、所需加载的资源需要优化。
其次,在信息安全方面,用户密码未使用加密存储,容易产生泄露数据危险。
最后,未联合使用cookie和session,每次会员和管理员登陆都没有历史记录和缓存。
6 结论与心得体会
在系统开发之前,必须了解该系统的特点、适用范围以与使用者需要一个什么样的系统,以此作为基础为开发系统准确定位,然后对使用者所需实现的功能进行分析总结,根据使用者的实际要求来给系统设计一个初步方案。系统的开发不仅是要实现对数据处理的与时与正确,而且要考虑系统是否具有控制功能,与时将数据反馈给操作者,以进行监测和协调,保证系统的正常运行;也要考虑是否具有预测功能,运用一定的数学方法利用历史的数据对未来进行预测的工作。
其实这个系统在刚开课不久就着手准备了,因为老师早就说了结课方式为大作业。在设计的过程中,我掌握了很多JSP的编程知识,并对这种成熟并广泛应用的技术进行了深入的学习。设计的过程也是一个再学习的过程,在遇到问题的时候我尽量自己想办法解决,这在很大程度上激发了我们的自学能力。
在我的程序设计过程中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个管理信息系统的设计,不可能一步到位,还需要不断的完善和补充。同时,系统中还存在许多问题,有待在日后的使用中发现和解决。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我做了多的准备工作,但在真正的写程序时仍然发现许多问.题,有些问题是分析时的疏漏,有些则是如果不做无论如何也想不到的。有句话叫熟能生巧是不错的,不去尝试不去实践不去行动,哪怕知道的再多也是白费。
经过本次大作业的制作,我认识到了自己知识的不足,在面对解决不了的问题时显得很苍白无力。所以我决定在以后的日子里一定认真丰富这方面的知识,去运用这方面的知识,争取不再在这个领域里丢人。知识就是力量,知识就是财富,得到了就是自己的,得不到,一切皆成空!以前的我没有这种觉悟,以后的我,必定会改变!努力的完善自己!
附录:部分程序清单
1.MainController.java
public class MainController {
@RequestMapping("admin")
public String admin(Model model)
{return "redirect:/admin/login";}
@RequestMapping("qiantai")
public String qianTai(Model model)
{ return "redirect:/menus/qiantai/allMenus";}
}
- FileController.java
@Controller//后面程序代码清单均省略此句
public class FileController {
@Autowired
@Qualifier("menusService")
private MenusService menusService;
@RequestMapping("upload")
public String fileUpload(CommonsMultipartFile file, Menus menus, HttpServletRequest request)throws IOException {
menusService.insert(menus);
//获取文件名
String uploadFilename = file.getOriginalFilename();
//如果文件名为空,直接返回
if("".equals(uploadFilename)){
return "redirect: menus_add.jsp";
}
System.out.println("上传文件名:"+uploadFilename);
String path=request.getServletContext().getRealPath("/public/img");//上传保存路径
//如果路径不存在,新建一个
File realPath= new File(path);
if (!realPath.exists()){
realPath.mkdirs();
}
System.out.println("上传文件保存地址:"+realPath);
InputStream is =file.getInputStream();//文件输入流
OutputStream os =new FileOutputStream(new File(realPath, uploadFilename)); //文件输出流
//读取写出
int len=0;
byte[] buffer = new byte[1024];
while ((len=is.read(buffer))!=-1) {
os.write(buffer,0,len);
os.flush();
}
os.close();
is.close();
return "/admin/main";
}
}
- MenusController.java
@RequestMapping("menus")
public class MenusController {
@Autowired
@Qualifier("menusService")
private MenusService menusService;
@Autowired
@Qualifier("typesService")
private TypesService typesService;
@Autowired
@Qualifier("noticeService")
private NoticeService noticeService;
//跳转至新增页面
@RequestMapping("/toAddPage")
public ModelAndView toAddPage(){
ModelAndView modelAndView = new ModelAndView("/admin/menus_add");
List<Types> typesList=typesService.queryAll();
modelAndView.addObject("typesList",typesList);
return modelAndView;
}
//跳转至修改页面
@RequestMapping("/toUpdatePage")
public String toUpdatePage(Integer id,Model model){
Menus menus = menusService.queryById(id);
model.addAttribute("menu",menus);
List<Types> typesList=typesService.queryAll();
model.addAttribute("typesList",typesList);
return "/admin/menus_update";
}
//查询全部菜单,前台用
@RequestMapping("/qiantai/allMenus")
public String menusList(Model model ){
List<Menus> list = menusService.queryAll();
model.addAttribute("menusList",list);
List<Types> typesList=typesService.queryAll();
model.addAttribute("typesList",typesList);
List<Notice> notices=noticeService.queryAll();
model.addAttribute("notices",notices);
return "/qiantai/index";
}
// 查询全部菜单,并且返回到菜单信息页面
@RequestMapping("/allMenus")
public String list(Model model ){
(前面与menusList方法一致)return "/admin/menus";
}
// 插入一个菜单信息到数据库
@RequestMapping("/insert")
public String insert(Menus menus, @RequestPart("img")MultipartFile multipartFile, HttpSession session) throws IOException {
String realPath = session.getServletContext().getRealPath("");
if (!multipartFile.isEmpty()) {
String originalFilename = multipartFile.getOriginalFilename();
System.out.println("===========================================");
System.out.println(realPath);
multipartFile.transferTo(new File(realPath + "public\img\" + originalFilename));
menus.setImgpath("img//" + originalFilename);
}
menus.setSums(0);
menus.setSums1(0);
menusService.insert(menus);
return "/admin/menus_add";
}
//菜单信息修改
@RequestMapping("/update")
public void update(Menus menus,HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
menusService.update(menus);
request.getRequestDispatcher("../menus/allMenus").forward(request,response);
}
//菜单信息删除
@RequestMapping("/delete")
public void delete(Integer id,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
menusService.deleteById(id);
request.getRequestDispatcher("../menus/allMenus").forward(request,response);
}
//通过主键查询单条数据
@GetMapping("selectOne")
public Menus selectOne(Object id) {return this.menusService.queryById(id); }
}
- OrdersController.java(TypeController、NoticeController与OrderController类似)
@RequestMapping("orders")
public class OrdersController {
//服务对象
@Autowired
@Qualifier("ordersService")
private OrdersService ordersService;
@Autowired
@Qualifier("menusService")
private MenusService menusService;
@Autowired
@Qualifier("usersService")
private UsersService usersService;
//获取全部订单信息
@RequestMapping("ordergetall")
public String ordergetall( HttpServletRequest request) {
Pages page1=null; //传给前端
Integer totalCount=null; //总页面
String currentpages="1"; //当前页面
String s="";//获取上一页还是下一页标识
String pagess="1";//数据库操作页面
Integer allpage=null; //前端页面总数
if(request.getParameter("currentpage")!=null){ //如果不为空则获取currentpage
currentpages=request.getParameter("currentpage");
totalCount= ordersService.pageCount();
allpage=totalCount/5;
if(totalCount%5!=0){allpage++;}
if(Integer.parseInt(currentpages)<=0){ currentpages="1";}
if(Integer.parseInt(currentpages)>allpage){ currentpages=""+allpage; }
//设置pagess的值
if(request.getParameter("s")!=null){
s=request.getParameter("s");
if(s.equals("up")){
pagess=""+(Integer.parseInt(currentpages)-4);
}else if(s.equals("down")){
pagess=""+((Integer.parseInt(currentpages)-1)*5-1);
}else if (s.equals("first")){
pagess="0";
}else if(s.equals("last")){
pagess=""+(totalCount-(totalCount%5)-1);
}else {System.out.println("错误");}
}
page1=new Pages(currentpages,allpage);
request.setAttribute("pages",page1);
}else{
totalCount= ordersService.pageCount();
allpage=totalCount/5;
if(ordersService.pageCount()%5!=0){ allpage++;}
page1=new Pages("1", allpage);
request.setAttribute("pages",page1);
}
//判断操作数据库页面是否突破限制
if(Integer.parseInt(pagess)<=0){ pagess="0";}
if(Integer.parseInt(pagess)>totalCount){
pagess=""+(totalCount-(totalCount%5)-1);
}
List<Orders> list= ordersService.pageList(Integer.parseInt(pagess),5);
request.setAttribute("list",list);
System.out.println("pagess="+pagess);
System.out.println("currentpages="+currentpages);
return "/admin/order";
}
//确认订单 确认则将deliverys设置为一否则删除
@RequestMapping("OrderComfirm")
public String OrderComfirm( HttpServletRequest request){
int id=Integer.parseInt(request.getParameter("id"));
String reqtype=request.getParameter("reqtype");
if(reqtype.equals("delivery")){
ordersService.updatedeliveryById(id);
}else if(reqtype.equals("del")){
ordersService.deleteById(id);
}else{System.out.println("错误");}
return "redirect:/orders/ordergetall";
}
@RequestMapping("order_search")
public String order_search( HttpServletRequest request) {
return "/admin/order_search";
}
@RequestMapping("ordergetallbydelivery")
Public String ordergetallbydelivery(HttpServletRequest request){
String delivery=request.getParameter("delivery");
Integer d=Integer.parseInt(delivery);
String userid=request.getParameter("userid");
Integer u=Integer.parseInt(userid);
List<Orders> list=ordersService.pageListByDelivery(d,u);
HttpSession session=request.getSession();
session.setAttribute("ordersearch", list);
return "/qiantai/order";
}
@RequestMapping("ordergetallbyID")
public String ordergetallbyID(HttpServletRequest request){
(将ordergetallbydelivery方法中delivery换成userid)
}
@RequestMapping(value="order_qiantai",method = RequestMethod.POST)
public String order_qiantai( HttpServletRequest request) throws UnsupportedEncodingException {
List<Orders> list=null;
HttpSession session=request.getSession();
request.setCharacterEncoding("utf-8");
Integer id=null;
String menuname=null;
String day1=null;
if(request.getParameter("menuname")!=null&&
(!request.getParameter("menuname").equals(""))){
menuname=request.getParameter("menuname");
list=ordersService.pageListByMenue(menuname);
}else if(request.getParameter("date")!=null&&(!request.getParameter("date").equals(""))){
day1=request.getParameter("date");
Integer a=Integer.parseInt(day1.substring(9,10));
String aa=""+(a+1);
StringBuilder day=new StringBuilder(day1);
day.replace(9,10,aa);
String day2=day.toString();
list=ordersService.pageListByDate(day1,day2);
}else {System.out.println("未提交");}
session.setAttribute("ordersearch", list);
System.out.println(id);
System.out.println(menuname);
System.out.println(day1);
return "/qiantai/order";
}
@RequestMapping(value="order_searchs",method = RequestMethod.POST)
public String order_searchs( HttpServletRequest request) throws UnsupportedEncodingException {
List<Orders> list=null;
HttpSession session=request.getSession();
request.setCharacterEncoding("utf-8");
Integer id=null;
String menuname=null;
String day1=null;
if(request.getParameter("userid")!=null&&
(!request.getParameter("userid").equals(""))){
id=Integer.parseInt(request.getParameter("userid"));
list=ordersService.pageListByID(id);
}else if(request.getParameter("menuname")!=null&&(!request.getParameter("menuname").equals(""))){
menuname=request.getParameter("menuname");
list=ordersService.pageListByMenue(menuname);
}else if(request.getParameter("date")!=null&&(!request.getParameter("date").equals(""))){
day1=request.getParameter("date");
Integer a=Integer.parseInt(day1.substring(9,10));
String aa=""+(a+1);
StringBuilder day=new StringBuilder(day1);
day.replace(9,10,aa);
String day2=day.toString();
list=ordersService.pageListByDate(day1,day2);
}else {System.out.println("未提交");}
session.setAttribute("ordersearch", list);
System.out.println(id);
System.out.println(menuname);
System.out.println(day1);
return "/admin/order_search";
}
//跳转到statistic页面
@RequestMapping("order_statistic")
public String order_statistic( HttpServletRequest request) throws UnsupportedEncodingException {
List<Orders> list=null;
HttpSession session=request.getSession();
request.setCharacterEncoding("utf-8");
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(System.currentTimeMillis());
String day1=formatter.format(date);
Integer a=Integer.parseInt(day1.substring(9,10));
String aa=""+(a+1);
StringBuilder day=new StringBuilder(day1);
day.replace(9,10,aa);
String day2=day.toString();
System.out.println(a);
System.out.println(day1);
System.out.println(day2);
list=ordersService.pageListByDate(day1,day2);
session.setAttribute("orderstatistic", list);
return "/admin/order_statistic";
}
@RequestMapping("orderqiantai")
public String orderqiantai( HttpServletRequest request){
return "/qiantai/order";
}
//放入购物车
@RequestMapping("order_addshoppingcar")
public String order_addshoppingcar(HttpServletRequest request){
HttpSession session=request.getSession();
String menuId = request.getParameter("menuId");
Integer id=Integer.parseInt(menuId);
Integer sum=(Integer) session.getAttribute("sum");
if(sum==null){
sum=1;
session.setAttribute("sum",sum);
}
Menus menus = menusService.queryById(id);
String name=menus.getName();
float price=menus.getPrice1();
ShoppingCart shoppingCart1=new ShoppingCart(id,name,price,sum);
List<ShoppingCart> shoppingCarts=new ArrayList();
if(session.getAttribute("shoppingcar")!=null){
shoppingCarts=(List<ShoppingCart>)session.getAttribute("shoppingcar");
for (ShoppingCart shoppingCart:shoppingCarts) {
if(name.equals(shoppingCart.getName())){
sum=shoppingCart.getSums()+1;
shoppingCarts.remove(shoppingCart);
break;
}
}
shoppingCart1=new ShoppingCart(id,name,price,sum);
shoppingCarts.add(shoppingCart1);
session.setAttribute("shoppingcar",shoppingCarts);
}else{
shoppingCart1=new ShoppingCart(id,name,price,sum);
shoppingCarts.add(shoppingCart1);
session.setAttribute("shoppingcar",shoppingCarts);
}
return "redirect:/menus/qiantai/allMenus";
}
//购物车单个取消
@RequestMapping("order_shoppingcardel")
public String order_shoppingcardel(HttpServletRequest request){
HttpSession session=request.getSession();
List<ShoppingCart> shoppingCarts=(List<ShoppingCart>)session.getAttribute("shoppingcar");
Integer id=Integer.parseInt(request.getParameter("del"));
Integer i=0;
for (ShoppingCart shoppingCart:shoppingCarts) {
if(i.equals(id)){
shoppingCarts.remove(shoppingCart);
break;
}
i++;
}
return "redirect:/menus/qiantai/allMenus";
}
@RequestMapping("order_addshoppingcartoOrder")
//提交或取消订单
public String order_addshoppingcartoOrder(HttpServletRequest request) {
HttpSession session=request.getSession();
List<ShoppingCart> shoppingCarts=(List<ShoppingCart>)session.getAttribute("shoppingcar");
if(session.getAttribute("user_session")!=null) {
Users user = (Users) session.getAttribute("user_session");
Integer userid = usersService.queryByname(user.getName());
Integer delivery = 0;
String remove = request.getParameter("remove");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String day = formatter.format(date);
Integer id = null;
if (shoppingCarts != null) {
for (ShoppingCart shoppingCart : shoppingCarts) {
Integer sums = shoppingCart.getSums();
Integer menuid = shoppingCart.getId();
Orders orders = new Orders(id, userid, menuid, sums, day, delivery);
ordersService.insert(orders);
}
session.removeAttribute("shoppingcar");
}
if(remove!=null) {
if (remove.equals("1")) {
session.removeAttribute("shoppingcar");
}
}
}else{return "redirect:../public/qiantai/login.jsp";}
return "redirect:/menus/qiantai/allMenus";
}
}
- UsersController.java(AdminController与UserController类似)
@RequestMapping("users")
@Scope("prototype")
public class UsersController {
//服务对象
@Autowired
@Qualifier("usersService")
private UsersService usersService;
//通过主键查询单条数据
@RequestMapping ("queryById")
public Users queryById(Integer id) {
return this.usersService.queryById(id);
}
//登录方法
@RequestMapping("login")
public String login(Users user, HttpServletRequest request){
boolean loginType=usersService.login(user.getName(), user.getPwd());
HttpSession session=request.getSession();
if(loginType){
session.setAttribute("user_session",usersService.queryById(usersService.queryByname(user.getName())));
return "redirect:/menus/qiantai/allMenus";
}else{
session.setAttribute("message","用户名密码错误");
return "qiantai/userLoginFail";
}
}
//登出,地址/users/logout
@RequestMapping("logout")
public String logout(HttpSession session){
//清除session
session.removeAttribute("user_session");
//重定向到登录页面的跳转方法
return "redirect:/menus/qiantai/allMenus";
}
@RequestMapping("insert")
public String insert(@Param("name") String name,@Param("pwd") String pwd,@Param("realname") String realname,@Param("sex") String sex,@Param("age") Integer age,@Param("card") String card,@Param("address") String address,@Param("Phone") String phone,@Param("email")String email,@Param("code")String code,@Param("type")Integer type){
Users user=new Users(name,pwd,realname,sex,age,card,address, phone,email,code,type);
usersService.insert(user);
return "redirect:../public/qiantai/login.jsp";
}
@RequestMapping("update")
public String update(HttpSession session,@Param("id")Integer id,@Param("name") String name,@Param("pwd") String pwd,@Param("realname") String realname,@Param("sex") String sex,@Param("age") Integer age,@Param("card") String card,@Param("address") String address,@Param("Phone") String phone,@Param("email")String email,@Param("code")String code,@Param("type")Integer type){
Users user=new Users(id,name,pwd,realname,sex,age,card,address, phone,email,code,type);
usersService.update(user);
session.removeAttribute("user_session");
return "redirect:/users/login";
}
}