摘 要
互联网给我们的生活带来了很大的改变。社会的发展越来越快,人们的生活也是越来越忙。在线管理系统技术的成熟,要求我们建立基于Internet的校园外卖点餐系统,以支持学生更快、更好、更安全的用餐。享受健康生活,提高学习效率。
本系统使用Java语言开发的一个校园外卖点餐系统,通过MySql数据库来存储相关数据,方便内容和信息的更新,并根据实际需要把本系统分为:管理员模块,食堂商家模块,学生用户模块三大部分。本系统采用基于B/S的三层结构,并在多层结构的基础上对系统各模块进行设计和开发,保证了系统的可扩展性和可维护性。在基于Internet的校园外卖点餐系统的设计与实现过程中,由于涉及到在线管理系统技术、数据库技术、ssm框架技术等领域,论文对这些方面也进行了探讨和阐述。
校园外卖点餐系统作为一个典型的在线管理系统,方便学生点餐用餐,能够为学生用户提供良好的用餐体验,同时也大大节约了用餐时间。
关 键 词:校园外卖;ssm框架;点餐;B/S模式
ABSTRACT
The Internet has brought great changes to our life.The development of society is faster and faster, people's life is busier and busier.The maturity of online management system technology requires us to establish an Internet-based selling point outside the campus meal system, in order to support students faster, better, more safe meal.Enjoy a healthy life and improve study efficiency.
This system uses Java language to develop a selling point outside the campus food system, through the MySQL database to store relevant data, convenient content and information update, and according to the actual needs of the system is divided into: administrator module, canteen business module, student user module three parts.The system is based on B/S three layer structure, and based on the multi-layer structure of the system module design and development, to ensure the expansibility and maintainability of the system.In the design and implementation of the Internet-based campus selling point food system, because it involves online management system technology, database technology, SSM framework technology and other fields, the paper also discusses and expounds these aspects.
As a typical online management system, the off-campus selling point meal system is convenient for students to order meals, which can provide students with a good dining experience and greatly save dining time.
KEYWORDS: Campus takeout;ssm framework; Order; B/S mode
目 录
1 绪 论
本系统应用了Browser/Server模式开发。本章主要包括:校园外卖点餐系统的设计与实现概况、课题背景与主要工作、研究内容与论文主要内容。
1.1校园外卖点餐系统概况
1.1.1在线管理系统概况
在线管理系统采用b/s架构开发,所谓b/s即指浏览器/服务器模式。随着科技的进步,系统从以前的科学管理也转变成了软件技术的范畴。帮助人们更好地解决生活中所遇到难题。
1.1.2 外卖点餐系统国内外研究现状
我国互联网的发展已经深入每个家庭,网上订餐这个课题早已经提出,为了给人们的生活带来便利,让人们通过手机就可以完成在生活之中必要的订餐事宜。尤其是美团、饿了吗两大外卖电商平台也已经是咱们老百姓们生活当中所不能欠缺的了。网上点餐在我国已经深入人心。
国外的在线点餐网站技术与我国相比较开发的时间比较早。早在上世纪末,美国就出现了大量的在线点餐网站,当时这些站点和餐饮店家都是单独的,他们依赖发布广告和店家的分成来盈利。这说明,基于INTERNET的网上订餐软件应用已经深入到我们的生活。
1.2课题背景及主要工作
1.2.1课题背景
这些年,我国的主要矛盾已经从人民日益增长的物质文化需要同落后的社会生产之间的矛盾转变成人民日益增长的美好生活需要同不平衡不充分的发展之间的矛盾。人们的生活变好了,吃的也要更好了。网上的点餐也就跟着来了。网上订餐为我们的生活带来极大的便利,这种点餐方式也同样被大学生们所喜欢,丰富了部分大学生的业余生活。
1.2.2 主要工作
本课题的主要工作是需要对学生客户的点餐流程有详细的了解,食堂商家从出餐,送餐员的配送过程,都需要进行很好的分析,然后设计出良好的数据库,选择合适的开发框架进行编码,完成学生用户所需要的功能。最后对编码系统进行测试。
1.3研究的内容
本论文是我在设计和开发校园外卖点餐系统的设计与实现的过程中研究工作的总结,在老师和同学的帮助下,我能够熟练地使用Java语言去开发我的毕业设计项目,完成校园外卖点餐系统的设计与实现,未来将本系统投入到市场中使用是我的目标[1]。主要的研究内容有:
(1)研究本系统所需的技术和工具。
(2)分析系统实现的需求与设计。
(3)利用Idea、Navicat和Postman等工具,并以MySQL、Java和JSP为技术支持[2],实现一个基于浏览器校园外卖点餐系统。
1.4论文的主要内容
全文共分七章,系统地论述了开发过程中的详细实现步骤和实现的相关技术。以下是每个部分的内容的简要介绍:
第一章阐述了本系统的研究背景及意义。
第二章介绍校园外卖点餐系统的总体分析与设计和相关技术。
第三章描述了 ssm框架的介绍及开发环境的搭建。
第四章详细阐述管理员功能模块的设计与实现。
第五章阐述了用户模块的设计与实现。
第六章介绍了食堂商家模块功能的设计与实现。
第七章是对我整个研究工作的总结和对今后工作的展望。
2 系统总体分析与设计
2.1引言
校园外卖管理系统的设计与实现是为了解决学生下课吃饭难的问题的软件,本章主要介绍了系统相关技术。
2.2系统设计相关技术
1、BootStrap 框架技术
Bootstrap是用于快速开发 Web 应用程序和网站的前端框架。它是基于 HTML、JAVASCRIPT、CSS等的框架技术[3]。
2、Tomcat
Tomcat是一个开源的、免费的、体积小、使用方便的发布项目的软件[4]。
- MySql相关技术
Mysql是一种开源的、免费的、体积小的关系型数据库管理系统[5]。
2.3校园外卖管理系统的设计与实现需求分析
2.3.1系统实现总体目标
通过研究一个校园外卖管理系统的设计与实现,学生可以方便地点餐,不用在下课期间最拥挤的时候进食堂,避免了人员的聚集。同时通过此系统可以为部分同学解决兼职问题,也为其他同学同时省下大量的时间,可以投入到学习当中。
2.3.2系统功能需求
系统由root模块、食堂商家模块、学生用户模块三大功能模块组成。简述各模块功能[4]:
1、root模块:系统设置,模块管理,权限管理。
2、食堂商家模块:具有菜单设置、查看订单。
3、学生用户模块:账户管理,查看菜单,订餐,退餐,结算,评价,查看历史订单等功能。
以下是校园外卖管理系统的设计与实现的系统功能结构图,系统各模块的功能如图2-1系统功能结构图所示。

图2-1 系统功能结构图
2.4数据库表结构
根据系统功能需求,数据库需要存储的信息如下:
1.学生用户表:用户编号,用户姓名,用户密码,性别,电话,邮箱,用户身份,是否有效。
2.菜品表:菜品编号,菜品名字,菜品描述,菜品图片,菜品价格,菜品库存,商品类型,是否有效。
3.菜品类型表:类型名字,菜品类型图片,是否有效。
4.订单表:订单编号,订单金额,订单时间,订单收件人,订单购买人,订单地址,收件人电话,是否有效。
5.订单详情表:订单详情编号,订单编号,菜品编号,菜品数量,是否有效。
6.地址表:地址编号,收件人,电话,地址,是否是默认地址,是否有效。
2.5数据库逻辑结构设计
根据设计的6个数据库表,设计了如图2-2 所示的数据库逻辑设计图,有6个实体。

2.6数据库详细设计
根据系统功能要求创建数据库,建立各表如下所述。
表2-1 用户表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | int | 11 | 用户编号 | 主键,自动排序 |
name | varchar | 20 | 用户姓名 | 不能为null |
password | varchar | 11 | 用户密码 | 不能为null |
sex | varchar | 4 | 性别 | |
phone | varchar | 20 | 手机号码 | |
| varchar | 30 | 电子邮箱 | |
is_admin | varchar | 4 | 是否是管理员 | |
IsValid | tinyint | 1 | 当前用户是否有效 | 0表示用户删除 1表示用户有效 |
2、菜品类别表,如表2-2所示。
表2-2 菜品类别表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | Int | 11 | 商品类别编号 | 主键,自动排序 |
gtype_name | varchar | 20 | 商品类别名称 | 不能为null |
gtype_parentid | int | 8 | 商品父类编号 | 不能为null |
gtype_pic | varchar | 100 | 图片 | |
IsValid | tinyint | 1 | 当前商品类别是否有效 | 0表示删除 1表示有效 |
3、菜品的信息表,如表2-3所示。
表2-3 菜品信息表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | Int | 11 | 商品编号 | 主键,自动排序 |
goods_name | varchar | 20 | 商品名称 | |
goods_description | varchar | 100 | 商品描述 | |
goods_pic | Varchar | 200 | 商品图片 | |
goods_price | double | 20 | 商品价格 | |
goods_stock | Int | 8 | 商品库存 | |
goods_price_off | double | 20 | 促销价 | |
goods_discount | double | 8 | 折扣 | |
goods_parentid | Int | 8 | 所属大类 | |
goods_fatherid | Int | 11 | 所属小类 | |
IsValid | tinyint | 1 | 当前商品是否有效 | 0表示删除 1表示有效 |
4、订单信息表,如表2-4所示。
表2-4 订单表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | Int | 11 | 订单编号 | 主键 |
o_sendtype | Varchar | 20 | 物流方式 | |
o_paytype | Varchar | 20 | 支付方式 | |
o_paycount | Double | 20 | 订单总金额 | |
o_orderdate | Date | 20 | 下单日期 | |
userid | Int | 11 | 下单用户 | 来自用户表 |
o_shperson | Varchar | 20 | 收货人 | |
o_shphone | Varchar | 20 | 收货电话 | |
o_shaddress | varchar | 200 | 收货地址 | |
IsValid | tinyint | 1 | 当前订单类别是否有效 | 0表示删除 1表示有效 |
5、订单详情表,如表2-5所示。
表2-5 订单详情表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | Int | 11 | 详情表编号 | 主键 |
o_orderid | Int | 11 | 所属订单 | 来自订单表编号 |
goodsid | Int | 11 | 商品编号 | |
goodsname | Varchar | 20 | 商品名称 | |
goodsprice | Double | 20 | 商品价格 | |
goods_description | Varchar | 200 | 商品描述 | |
goodsnum | Int | 11 | 商品数量 | |
goodspic | Varchar | 200 | 商品图片 | |
goods_total_price | Double | 11 | 商品小计 | |
goods_date | Date | 20 | 订单时间 | |
IsValid | tinyint | 1 | 当前订单是否有效 | 0表示删除 1表示有效 |
6.用户地址信息表,如表2-6所示。
表2-6 用户地址表
字段名 | 字段类型 | 字段长度 | 字段中文名 | 备注 |
id | Int | 11 | 地址编号 | |
shouhuoren | Varchar | 20 | 收货人 | |
phone | Varchar | 20 | 手机号码 | |
address | Varchar | 200 | 收货地址 | |
userid | Int | 11 | 用户编号 | 外键,与用户表关连 |
isdefault | Varchar | 5 | 是否默认地址 | |
IsValid | tinyint | 1 | 当前地址是否有效 | 0表示删除 1表示有效 |
2.7小结
数据库的创建在一个系统中非常重要,想要把一个项目做好,首先必须要根据需求设计好数据库。正所谓决胜于千里之外,运筹于帷幄之中,明确需求,才能更好地完成项目。
3 ssm框架的介绍及开发环境的搭建
3.1引言
ssm框架是目前java开发行业中一个比较流行的开发框架,本章主要介绍ssm框架及系统开发环境的搭建。
3.2 ssm框架的介绍
ssm框架是spring、SpringMVC和Mybatis三个框架的简称[6]。
1、Spring框架在整个系统中起到管理者的作用,传统的创建对象的方式都是需要程序员通过代码控制生成,spring只需要通过读取配置来过去,这样做的好处是减少了类与类之间的依赖,实现程序类之间的低耦合,Spring还有一个面向切面编程,可以在任务的前后添加任意任务,spring的使用方式可以使用xml配置,也可以使用java类进行配置,java类需要搭配注解进行配置[7]。
2、Mybatis框架
Mybatis是持久层的框架,方便程序员开发,只需要写一点点配置就可以使用,不需要自己写dao层的实现类,只需要写每个mapper接口的专属映射,在创建的时候mybatis会自动地帮你创建好对象并且注入,直接调用就可以[8]。
3、SpringMvc框架
SpringMvc是spring框架中的一个组件,它支持多种数据格式的返回,如转发重定向页面跳转,也支持返回json格式的数据。支持注解开发,定义的映射路径支持RESTful风格访问[9]。SpringMvc与spring完美适配,同时支持注解开发。
3.3开发环境的搭建
该项目是使用idea实现的,因此首先在idea里将项目的架构搭建好,创建一个maven项目,这样当我们使用jar包的时候,系统会帮我们管理好需要使用的所有jar包。整理好ssm的xml配置文件,这是ssm项目的核心。再创建好后端的servlet,service,和dao。这是处理后端逻辑与数据库的。最后创建好webapp,这里存放前端的页面内容[10]。用户看到的内容都在这里展示。创建动态WEB项目初始界面如图3-1所示。
图3-1 创建动态WEB项目初始界面
3.4小结
一个好的框架和一个完善的开发环境往往决定着开发效率的快慢及项目质量的好坏。因此,我选择了市场上最常用的也是最好用的ssm框架来开发我的项目,这也使得我在开发过程中省去极大的麻烦,不需要频繁地创建对象,不需要自己去写繁琐的sql语句,让我的开发如鱼得水。
4 管理员功能模块的设计与实现
4.1引言
管理员功能模块具有该系统最大的权限,进行系统的整体管理,包括权限管理,用户管理。
4.2管理员界面设计
管理员首页界面如图4-1所示,管理员模块主要有以下功能:
1、管理员登录。
2、用户管理:用户包括root用户,食堂商家,学生用户,在这里可以进行用户的添加、查看、修改、删除操作[5]。
3、设置用户权限。
4、退出系统:root用户操作完以后可以直接退出本系统。
图4-1 管理员首页界面
4.3 root用户登录功能的实现
管理员登录界面图4-2所示。
在root用户登录功能中,由于管理员的身份权限最高,因此要保证管理员的密码的安全性,因此我采用了64位的md5加密技术对管理员的密码进行保护[11]。
核心代码如下:
public String login(HttpServletRequest request,HttpServletResponse response){
User user = this.getRequestData(request,User.class);
user.setPassword(MD5Utils.md5(user.getPassword()));
UserService userService = new UserServiceImpl();
String checkCode = (String) request.getSession().getAttribute("checkCode");
if(user.getIs_admin()==1){//登录的是管理员
if(checkCode.equalsIgnoreCase(user.getCdCoad())){//验证码正确
try {
UserLoginDto userLoginDto = userService.selectUser(user);
if (userLoginDto!=null){
return ConstantUtils.FORWARD+"back/main.jsp";
}else{//账号或者密码有误
request.setAttribute(ConstantUtils.MESS,"用户名或者密码有误");
return ConstantUtils.FORWARD+"backLogin.jsp";}
} catch (SQLException e) { e.printStackTrace();}
图4-2 管理员登录界面
在root用户功能中,主要是对使用系统的所有用户进行统一管理。可以实现对用户的增加、删除,修改、查询等功能。
界面当中显示的就是MD5加密之后的用户密码,只有当事人本人能知道,就算是管理员也不能知道具体密码。但是管理员可以重置普通用户密码。
核心代码如下:
/**
* 分页查询所有用户
* @param request
* @param response
* @return
*/
public String fenYeFindUsers(HttpServletRequest request,HttpServletResponse response){
Paging p = new Paging();
try {
p.setCurrPage(Integer.valueOf(request.getParameter("curr")));
}catch (Exception e){
p.setCurrPage(1);
}
UserService userService = new UserServiceImpl();
List<UserLoginDto> userList = null;
try {
userList = userService.fenYeFindUsers(p);
} catch (SQLException e) {
e.printStackTrace();
}
request.setAttribute("p",p);
request.setAttribute("userList",userList);
return ConstantUtils.FORWARD+"back/user/userinfo.jsp";
}
4.4小结
Root用户是本项目的最高权限用户,可以对食堂商家和学生用户都进行管理,在食堂商家或者学生用户遇到一些权限问题时都可以找root用户解决,因为有着极大的权限,所以root用户的账户安全一定要保证,为此,我对root的密码采用了md5加密技术进行加密。
5 用户模块的设计与实现
5.1 引言
本章主要讲述用户功能的设计与实现。学生用户的登录、注册、点餐、支付等功能都是在本章中实现的。
5.2注册功能
这个功能是所有用户操作系统的前提,通过这个功能可以对用户的身份进行登记,设置自己的名字、密码和其他的一些个人信息,确定之后,系统会对这些请求的信息进行验证,只要成功,就可以使用名字、密码进入本系统进行操作。
核心代码如下:
public String register(HttpServletRequest request, HttpServletResponse response){
User user = this.getRequestData(request,User.class);
user.setPassword(MD5Utils.md5(user.getPassword()));
UserService userService = new UserServiceImpl();
int x = 0;
try {
x = userService.insertUser(user);
} catch (SQLException e) {
e.printStackTrace();
}
if(x==1){
return "forward:login.jsp";
}else{
return "forword:register.jsp";
}
}
用户注册界面图5-1所示。
5.3登录功能实现
登录功能主要是给用户提供登录所需的界面,用户在登录界面中填写正确的姓名和密码,就登录成功。同时也会对用户输入的用户密码进行验证,错误则会进行提示。用户登录界面如图5-2所示。
图5-2 用户登录界面
5.4菜品浏览界面
菜品浏览功能是顾客实现挑选商品的主界面。在这里学生用户可以将自己喜欢的菜品加入购物车,菜品展示界面如图5-3所示。
图5-3 菜品展示界面
核心代码如下:
<div id="nav" class="navfull">
<div class="area clearfix">
<div class="category-content" id="guide_2">
<c:forEach items="${gtList}" var="big">
<c:if test="${big.gtype_parentid eq '0'}">
<div class="category">
<ul class="category-list" id="js_climit_li">
<li class="appliance js_toggle relative first">
<div class="category-info">
<h3 class="category-name b-category-name"><i>
<img src="images/${big.gtype_pic}"></i>
<a class="ml-22" title="${big.gtype_name}">${big.gtype_name}</a></h3>
<em>></em></div>
<div class="menu-item menu-in top">
<div class="area-in">
<div class="area-bg">
<div class="menu-srot">
<div class="sort-side">
<c:forEach items="${gtList}" var="small">
<c:if test="${big.id eq small.gtype_parentid}">
<dl class="dl-sort">
<dt><span title="${small.gtype_name}">${small.gtype_name}</span></dt>
<c:forEach items="${giList}" var="info">
<c:if test="${small.id eq info.goods_fatherid}">
<dd><atitle="${info.goods_name}" href="GoodsServlet?method=selectOneGood&id=${info.id}"><span>${info.goods_name}</span></a></dd>
</c:if>
</c:forEach>
5.5订餐功能
在此功能下,学生用户可以查看刚才加入购物车中的所有菜品,然后选择所需要的菜品进行购买,当然也可以全部购买。订餐主界面如图5-4所示。
图5-4 订餐主界面
5.6支付功能
在此功能下,对顾客购买的菜品进行结算,这里顾客可以选择使用支付宝进行支付,订单支付的界面如图5-5所示,当用户通过手机扫码支付成功之后,就会生成系统响应的订单[12],购买的订单界面如图5-6所示。
图5-5 订单支付界面
5.7小结
本章主要是实现了学生用户的功能,也即是我们系统针对的主要用户之一,针对学生用户群体,我需要做到将其可视界面都尽量做的美观,这样才能吸引客户,留住客户。当然还有系统的响应速度也要快,要给学生用户一个良好的点餐体验。
6 食堂商家模块功能的设计与实现
6.1引言
食堂商家模块是由食堂商家进行操作的,如果菜品信息出现变化或者是有了新的菜品,就可以完成菜品的新增、修改这些操作。若食堂商家使用了此模块对菜品进行了更改,服务器将会立即产生响应,学生用户端就会出现相应的变化。
6.2菜品管理实现
在食堂商家的菜品管理的主界面,可以对菜品的价格、图片、库存、描述等信息进行修改,也可以添加菜品,删除不需要的菜品,菜品管理主界面如图6-1所示。
图6-1 菜品管理主界面
6.3菜品类型管理
菜品类型管理主要是可以对各种菜系进行分类,可以让顾客用户获得更好的用餐体验,菜品类型管理主界面如图6-2所示。
图6-2 菜品类型管理主界面
6.4订单管理主界面
订单管理实现对所有的用户订单进行管理,但是食堂商家只能查看和删除订单,不可以修改,也不能添加订单,订单管理界面如图6-3所示。
6.5小结
本章主要是针对食堂商家的模块,对于食堂商家而言实现对菜品的添加、修改、删除和查询操作是最基本的,当然也需要对订单进行管理,可以知道自己的盈利信息等。
7 总结与展望
7.1总结
本论文在获得老师和同学的帮助之下,我能够按照预期的目标完成论文。在完成本论文的过程当中,我成长了很多,让我对许多技术的运用与理解更上一层楼。
在完成项目的过程当中我也遇到了好多困难,就比如在做支付功能的时候,一开始找到并学习支付宝有关开发文档,然后就去操作,操作过程中发现,为什么什么都没干,就把一个接口导进项目,运行的时候就出错了呢;后来又去看文档,这才发现我下载错了插件,需要的是网上支付插件,我好像搞成了手机端的支付插件了。接口文档都不一样肯定会出错,但是最终找到原因并将问题解决。所以,在学习和工作中,一定要注意细心和效率。以为自己看了一下文档就可以解决问题,但是到了实际操作时候却要有无尽的耐心和细心,所以一定要多练习才能熟练地掌握一个技能。
正如朱熹先生讲的那样:“纸上得来终觉浅,绝知此事要躬行”,在学校里学了很多却做的很少,没有自己去实际操作,一切都可能只不过是纸上谈兵而已。只有自己去动手做了,才能在项目中发现自己的不足,才能更好的进步。
7.2展望
未来,希望在我的不断完善之下,我的系统能够给学生带来切实的帮助,给他们带来良好的用户体验。再拿支付功能来说,目前我的项目仅仅支持支付宝支付,但是在实际的生活当中,微信支付也是一个大头,还有银联支付,这都是还有待完善的功能。还有整体界面的美观程度,这需要我学习更多的知识,丰富我的开发经验,让我可以将更多的想法付诸实践,这样才能把我的项目做到尽善尽美,让学生们真正体验到我的软件给他们带来的便利,让学生们不再“吃饭难”。我将需要不断学习,用更多更好的技术去补充系统的功能,让系统做到更小、更强、更方便易用。