基于Java+MySQL实现的(Web)花卉后台管理系统【100010568】
花卉后台管理系统
1.实习目的
1.1 使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。
1.2 学习掌握 html+css+js 前端开发的设计和编码。
1.3 使学生掌握 JSP 及 Servlet 基本的 JavaEE 编程技术,能够综合运用 MySQL 数据库及 MyEclipse 开发环境进行小型项目的开发。
1.4 重点培养学生的团队精神和协作意识,提高其口头和书面的沟通能力。
1.5 使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力
1.6 重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。
2.实习过程
2.1 技术准备
1.bootstrap-3.3.6:CSS 前端框架
2.jquery-2.2.1:js 框架
3.Maven3.3.3:项目构建工具
4.SpringMVC+Spring+Mybatis:项目后台架构设计
5.三层架构:项目分层次模块划分
6.MVC:按照 MVC 规范设计
7.RESTful 风格:超链接网址,请求地址按照 RESTFul 风格设计
8.DTO:MVC 中使用数据传输对象传递数据,按照面向对象的设计方式设计
9.数据校验:用户提交表单数据校验
10.哈希文件打散:用户上传文件按照文件名哈希码在服务端文件夹中打散
11.filter:浏览器缓存控制、中文编码处理、登陆拦截、数据压缩
12.代码重用、可维护性:使用大量配置文件配置项目模块,后期维护方便
13.单元测试、集成测试:三层架构开发过程中分层次单元测试并系统集成测试
14.MD5 加密:用户密码 MD5 加密
15.ajax 网页异步刷新:网页异步刷新,减少全网页刷新导致的性能开销
16.多条件搜索:未填写的条件选项自动忽略,都未填写的查询全表)
17.开发环境:开发环境 IntelliJIDEA15.0.2+JDK1.8+mysql50611+Tomcat8
2.2 项目实施
2.2.1 功能需求
2.2.1.1 需求分析
根据需求,要求系统具有以下功能:
由于该系统针对对象较少,是针对后台管理的操作,具有权限、订购、管理、维护功能。
在相应的权限下,具有删除或修改数据。
方便的全方位的数据查询。
2.2.1.2 可行性分析
随着科技的发展,竞争也越发激烈、残酷,商家传统的经营方式对于现今社会的竞争已明显感觉到力不从心。顾客作为市场的最大资源,已成为网络电子商务的核心,谁在管理上争先,谁就取的了最大的成功,对管理的把握将最终决定商家的命运。
网上订花管理系统正是在这种需求下经过深入的市场调研和网络系统化的指导应运而生。系统具有完善的商品查询和管理功能,基本能够中小型网店的需要。
2.2.1.3 各功能模块详细功能
分析网上花店后台管理系统是一个非常有特点的管理系统,系统由系统管理、商品管理、客户关系、订单管理、基本设置和退出系统 6 功能模块组成,规划系统功能模块如下:
系统管理:系统管理主要包括数据库备份和数据库还原。
商品管理:商品管理主要包括新到商品添加、商品查询、商品修改、商品删除,商品查看和分页。
客户关系:客户关系主要显示客户关系图和订花时间,以及查询和维护客户关系。
订单管理:订单管理模块主要包括订单添加、订单修改、订单删除、订单多条件查询、分页功能。
基本设置:基本设置主要是管理员列表设置和员工列表增删改查。
退出系统:退出系统管理员的登录 session 清空,防止停留的网页被不法分子利用。
2.2.2 总体设计
2.2.2.1 设计目标
本系统是根据中小网店的实际需求而开发的,完全能够实现商家对网店的管理,通过本系统可以达到以下目标:
系统运行稳定,安全可靠。
界面设计美观,人机交互界面友好。
信息查询灵活、方便、快捷、准确,数据存储安全可靠。
采用多种方式查询数据。
管理员随时可以修改自己的登录。
对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。
数据保密性强。
2.2.2.2 开发及运行环境
系统开发平台:IntelliJIDEA15.0.2+JDK1.8+Tomcat8+mysql5.06.11
运行平台:JDK1.8+Tomcat8+mysql5.06.11 分辨率:最佳效果 1366*768 浏览器:Chrome、Firefox
CPU:i32.4GHz;内存:512MB 以上
2.2.2.3 数据库设计
本系统采用 MySQL 数据库,系统数据库名为 flower,数据库中包括 5 个数据表。下面分别给出数据库概要说明和数据表的结构。
1.数据库概要说明
如图 2 所示的即为本系统中数据库中的数据表的树形结构图,该数据表树型结构图包含系统所有数据表。可以清晰地反应数据库信息。
图 2 数据库概要说明
2.数据表结构
由于篇幅所限,关于数据库中的数据表请参见附录二 2.2.2.4.系统总界面如图:
2.2.2.5 系统结构图:
2.2.2.6 代码总系统结构:
严格按照三层架构和 MVC 的设计思想进行设计,主要模块如下:Dao+Service+Model+WebController+JSP 整个系统采用面向接口编程,方便后期系统维护,其中 Dao 只定义了接口,实现由 MyBatis 自动完成,Service 和 WebController 交由 SpringIoC 容器管理,实现依赖注入、控制反转,各个模块实例初始化由 Spring 自动维护,提高系统整体性。
2.2.3 详细设计与编码
由于篇幅原因,并且严格遵循三层架构设计,因此只贴出核心的数据库操纵
的 MyBatis 配置文件。
2.2.3.1 商品管理模块设计
(1)商品添加:商品管理模块采用手动录入,在本模块中的主要功能是,首先添加花种,这是系统的入口点,添加花种主要有:花的名称、花的价格、备注、图片这四个字段,单用户点击添加花种会出现表单输入页面,在输入中会有字段的验证,包括字符和价格的验证,如果输入的不是数字,系统会进行提示,并拒绝提交。
(2)图片上传和服务器图片处理:添加图片会弹出图片文件选择框进行选择,添加到数据库中的是图片的地址,而不是二进制数据,这样方便减轻系统的压力,保证系统的运行速度,真正的图片文件以普通文件上传的形式使用 commons-fileupload 组件上传到服务器进行保存,并且在服务器中用 UUID 算法为图片生成唯一文件名,并按照该文件名进行哈希打散,将图片文件分散到 256 个不同的文件夹中,在一定程度上避免了服务器文件夹中文件数量过多导致的效率问题。
(3)商品查询:在商品管理的上方会有按商品查询的输入框,当输入产品名称时,点击查询会在下面显示商品的具体信息,并支持模糊查询。
(4)商品修改和删除:在显示页面会有修改和删除的操作,当用户点击修改时,会弹出修改页面,同样的包括名称、价格、备注和图片四个选项,然后点击提交信息,会更新到数据库中,但点击删除的,系统会进行逻辑删除数据库的数据,同时在显示页面会有分页的功能,每页会显示 10 中商品,在下方会用相应的提示。
商品管理 SQL 核心代码部分:
<mapper namespace="cn.coselding.flowerms.dao.FlowerDao">
<!-- 目的:为 dao 接口方法提供配置 -->
<insert id="insert" parameterType="Flower">
insert into flowers(flowerName,price,images,remarks,number)
VALUES (#{flowerName},#{price},#{images},#{remarks},#{number});
</insert>
<delete id="delete">
delete from flowers where flowerID=#{flowerID};
</delete>
<update id="update" parameterType="FLower">
update
flowers
set
flowerName = #{flowerName},
price=#{price},
images=#{images},
remarks=#{remarks},
number=#{number}
where flowerID=#{flowerID};
</update>
<select id="queryById" resultType="Flower" parameterType="int">
select *
from flowers
where flowerID=#{flowerID};
</select>
<select id="queryAll" resultType="Flower">
select * from flowers;
</select>
<select id="queryCount" resultType="int">
select count(*) from flowers;
</select>
<select id="queryPage" resultType="Flower">
select * from flowers limit #{startindex},#{pagesize};
</select>
<select id="queryCountByName" resultType="int">
select count(*) from flowers where flowerName LIKE '%${flowerName}%';
</select>
<select id="queryPageByName" resultType="Flower">
select * from flowers where flowerName LIKE '%${flowerName}%' limit #{startindex},#{pagesize};
</select>
</mapper>
2.2.3.2 客户关系设计模块
客户关系管理模块是相对于系统中比较简单切相对比较好理解的模块,他的主要功能就是协助管理员进行用户的分析,进行对不同客户信息的收集和展示,对潜在的客户进行挖掘。客户查询:同样的在显示页面中有客户名称查询,当输入客户名称时,会在显示页面进行客户项目信息的显示,显示的是客户名称、订货时间、备注、删除链接。
客户来源:通过订单进行显示的,提取订单表中的所有不同用户形成一个列表供管理员查看。
客户删除:当进行对客户关系进行删除时,订单中的信息同样的会一同删除,删除同样的是进行逻辑删除。
客户关系 SQL 核心代码:
<select id="queryCustomerCountByName" resultType="int">
select count(*) from `orders` where sendName LIKE '%${customerName}%' group by sendName;
</select>
<select id="queryCustomerPageByName" resultType="Order">
select * from `orders` where sendName LIKE '%${customerName}%' group by sendName limit #{startindex},#{pagesize};
</select>
<select id="queryCustomerCount" resultType="int">
select count(*) from `orders` group by sendName;
</select>
<select id="queryCustomerPage" resultType="Order">
select * from `orders` group by sendName limit
# {startindex},#{pagesize};
</select>
<select id="queryCustomerAll" resultType="Order">
select * from `orders` group by sendName;
</select>
<delete id="deleteCustomer">
delete from `orders` where sendName=#{sendName};
</delete>
2.2.3.3 订单管理设计模块
订单管理设计模块是系统中最具核心的功能模块,所有的功能都是围绕订单管理进行展开的,首先他具体的功能是:按订单号查询、订单日期查询、定花人查询、业务员查询这四大查询条件,在对使用日期进行查询的同时,使用了 HTML5 最新的日期控件。
在显示页面中订单的显示非常灵活和丰富,显示的字段主要包括:订单号、订单日期、发送时间、送花人和收花人信息、订单状态、业务员等等,并支持多搜索条件同时作用或部分条件搜索,随用户选择。
订单添加:当用户点击添加订单会弹出添加表单页面,花名和业务员都是从数据库中进行读取的供用户选择的,付款状态是分为两种:未付款、已付款,订单状态有三种:正在进行中、已取消、已完成,发送状态有两种:已发送、未发送,当用户点击生成订单的时候,会进行对数据库的插入。
同样的在显示页面中有修改和删除功能,修改的功能如果添加订单的实现页面大同小异,页面显示同样实现分页。
订单管理 SQL 核心代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.coselding.flowerms.dao.OrderDao">
<!-- 目的:为 dao 接口方法提供配置 -->
<insert id="insert" parameterType="Order">
insert into
`orders`(orderDate,sendTime,receiveName,receiveTel,receiveAdd,payStat e,salesman,sendState,remarks,status,flowerID,quantity,sendName)
VALUES
(#{orderDate},#{sendTime},#{receiveName},#{receiveTel},#{receiveAdd},
# {payState},#{salesman},#{sendState},#{remarks},#{status},#{flowerID}
,#{quantity},#{sendName});
</insert>
<delete id="delete">
delete from `orders` where orderID=#{orderID};
</delete>
<update id="update" parameterType="Order">
update `orders`
SET
orderDate=#{orderDate},
sendTime=#{sendTime},
receiveName=#{receiveName},
receiveTel=#{receiveTel},
receiveAdd=#{receiveAdd},
payState=#{payState},
salesman=#{salesman},
sendState=#{sendState},
remarks=#{remarks},
status=#{status},
flowerID=#{flowerID},
quantity=#{quantity},
sendName=#{sendName}
where orderID=#{orderID};
</update>
<select id="queryById" resultType="Order">
select * from `orders` where orderID=#{orderID};
</select>
<select id="queryCount" resultType="int">
select count(*) from `orders`;
</select>
<select id="queryPage" resultType="Order">
select * from `orders` o,`worker` w where o.salesman=w.workerID limit #{startindex},#{pagesize};
</select>
<select id="searchOrdersCount" resultType="int">
select
count(*)
from
`orders`
where
(#{orderID}=-1 or orderID=#{orderID})
and (#{sendMan}='' or sendName LIKE '%${sendMan}%')
and (#{saleman}=-1 or salesman=#{saleman})
and (orderDate > #{startTime})
and (orderDate <![CDATA[<]]> #{endTime});
</select>
<select id="searchOrdersPage" resultType="Order">
select
*
from
`orders`
where
(#{orderID}=-1 or orderID=#{orderID})
and (#{sendMan}='' or sendName LIKE '%${sendMan}%')
and (#{saleman}=-1 or salesman=#{saleman})
and (orderDate > #{startTime})
and (orderDate <![CDATA[<]]> #{endTime})
limit #{startindex},#{pagesize};
</select>
</mapper>
2.2.3.4 基本设置模块设计
基本设置模块分为管理员管理和职工管理,因为本系统是针对用户后台管理员进行开发的,所以在设置模块中管理是具有最高权限的,他可以添加删除修改员工的信息,但是管理员是不能删除的。
在管理员中有添加管理员功能,进行添加,用户点击添加管理员的时候会弹出添加页面进行显示,然后提交信息。
职工管理功能:当用户点击员工管理的时候会弹出员工的界面,会有按职工编号和职工姓名进行查询,同样的在显示页面会有删除和修改的链接,都是进行对员工管理进行操作,在下面会有添加员工的按钮,进行对员工的添加。
MD5 加密:对管理员密码使用 MD5 加密进行存储的,在本系统中使用的登录是 admin,密码是 123456,在数据库中存储的密码是“e10adc3949ba59abbe56e057f20f883e”这样是为了方便对管理密码的管理并减少密码泄露的风险。
管理员账号管理核心 SQL 代码:
<mapper namespace="cn.coselding.flowerms.dao.UserDao">
<!-- 目的:为 dao 接口方法提供配置 -->
<insert id="addUser" parameterType="User">
<!-- 具体的 sql -->
insert into `user`
(username,password,name,cardID,tel,address,email)
VALUES
(#{username},#{password},#{name},#{cardID},#{tel},#{address},#{email}
);
</insert>
<select id="query4Login" resultType="User">
select *
from `user`
where username = #{username} and password=#{password};
</select>
<select id="queryAdmins" resultType="User">
select * from `user`;
</select>
<select id="queryById" resultType="User">
select * from `user` where userID=#{userID};
</select>
</mapper>
职工信息管理核心 SQL 代码:
<mapper namespace="cn.coselding.flowerms.dao.WorkerDao">
<insert id="insert" parameterType="Worker">
insert into worker(workername,status)
VALUES (#{workername},#{status});
</insert>
<update id="update" parameterType="Worker">
update worker
set
workername=#{workername},
status=#{status}
where workerID=#{workerID};
</update>
<delete id="delete">
delete from worker where workerID=#{workerID};
</delete>
<select id="queryAll" resultType="Worker">
select * from worker;
</select>
<select id="searchWorker" resultType="Worker">
select
*
from worker
where (#{workerID}=-1 or workerID=#{workerID}) and (#{workername}='' or workername like '%${workername}%');
</select>
<select id="queryById" resultType="Worker">
select * from worker where workerID=#{workerID};
</select>
</mapper>
2.2.3.5 退出系统模块
当用户点击退出管理系统的时候,系统会删除服务器 session,并退回到登录页面,防止登录的页面 session 被不法分子利用,从而泄露用户信息。
退出系统的 SpringMVCController 核心代码:
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session,
Model model) {
if (session != null && session.getAttribute("user") != null) {
session.removeAttribute("user");
}
if (session != null) {
session.invalidate();
}
return "redirect:/login.jsp";
}
2.2.4 测试
2.2.4.1 主页:
2.2.4.2 系统管理:
2.2.4.3 商品管理:
2.2.4.4 商品查看
2.2.4.5 添加花种
2.2.4.6 订单管理
2.2.47 订单添加
2.2.48 基本设置
2.2.4.9 管理员资料管理
2.2.4.10 职工资料管理
2.2.4.11 添加职工
2.2.4.12 退出系统后登录页面
3.实习体会
通过这次的实习,我主要通过完成一个完整的项目,把之前学习的 SpringMVC+Spring+Mybatis 框架在实际项目中得到使用和练习,并使用 Maven 构建项目和维护项目依赖,把学习到的理论知识在实践当中得以使用,对这些框架的使用变得娴熟,也在开发过程中遇到了一些问题,不过也都在参考书和网上博客的参考中使问题得到了解决。
对于我的薄弱部分——前端,也在这次的项目开发中,学会了 bootstrap、jQuery、AJAX 网页异步刷新的入门使用,并通过这些前端框架作出了还算好看的页面,也消除了我对前端设计的恐惧心理,这算是这次开发中收获最大的东西了,而网址的设计,也遵循了 RESTFul 风格,让网址的显示显得更加有意义,这次的作品简单来说算是比较合格的一个作品,通过这次的作品,我对整个 JavaWeb 的项目开发过程和整项目使用技术有了一个较为深入的理解和认识,对我之后的就业帮助很大。
4.总结与建议
在两个星期的实训过程中,大体了解了整个实训的内容和课程安排,体会较深的一点是,同学们之间的水平差异较大,安排的课程对学过的人来说太过简单,但是对于没学过的同学来说,一次性在两星期内教了 html+css+js、Servlet、JSP、Filter、JDBC、MySQL、MVC 模式,学习压力较大,根据很多同学的反映就是短时间内消化不了这么多知识点,导致在做最后作品的过程中不知所措,遇到 bug 不会解决的问题,希望以后要是还有这类的实训,可以根据同学们的不同水平安排相应的培训,这样有利于同学们更好地学习,也不会抹杀基础不好的同学们的学习编程的兴趣。
注:该系统作品已部署到外网服务器中,地址为:http://www.coselding.cn/FlowerMS/,测试帐号 admin,密码 123456,域名为本人所有,整个作品除数据表建表为老师提供外,均为本人独立完成,本人未同意任何人参考代码,作品如有雷同,纯属他人未经本人许可盗用,特此声明!
附录一 参考文献
(1)菜 鸟 教 程 Bootstrap 教 程 文 档 :http://www.runoob.com/bootstrap/bootstrap-tutorial.html
(2)菜 鸟 教 程 jQuery 教 程 文 档 :http://www.runoob.com/jquery/jquery-tutorial.html
(3)Spring 官方文档:https://spring.io/docs
(4)菜 鸟 教 程 AJAX 教 程 :http://www.runoob.com/ajax/ajax-tutorial.html
(5)JQuery-Ajax 教 程 :http://www.runoob.com/jquery/jquery-ajax-intro.html
(6)MyBatis 官方文档:http://www.mybatis.org/mybatis-3/zh/
(7)SpringMVC 官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
附录二 数据表
(1)admins(管理员表)管理员信息:
表 B.1 管理员表表(admins)
字段名 | 数据类型 | 长度 | 主键 | 描述 |
---|---|---|---|---|
adminId | int | 11 | 是 | id |
admin | varchar | 20 | 用户名 | |
status | tinyint | 4 | 逻辑删除状态 | |
password | varchar | 80 | 密码(MD5) | |
varchar | 40 | 找回密码邮箱 |
(2)flowers(商品信息表)
表 B.2 商品信息表(flowers)
字段名 | 数据类型 | 长度 | 描述 |
---|---|---|---|
flowerID | int | 11 | 主键 |
flowerName | varchar | 50 | 花名 |
price | decimal | 12 | 价格 |
images | varchar | 100 | 图片地址 |
remarks | text | 2 | 备注 |
number | int | 11 | 商品库存量 |
(3)orders(订单信息主表)订单信息主表结构如表 B.3 所示
表 B.3 订单信息主表表(orders)
字段名 | 数据类型 | 主键 | 描述 |
---|---|---|---|
orderID | int | 是 | 商品订单编号 |
orderDate | Datatime | 订单日期 | |
sendTime | Datatime | 发货日期 | |
reciveName | Varchar(40) | 接收人姓名 | |
reciveTel | varchar(40) | 接收人电话 |
reciveAdd | varchar(100) | 接收人地址 | |
---|---|---|---|
payState | tinyint | 付款状态 | |
sendState | tunyint | 发送状态 | |
salesman | int | 业务员 id | |
remarks | text | 备注信息 | |
status | tinyint | 订单状态 | |
sendName | Varchar(40) | 送花人姓名 | |
flowerID | Int | 花种 id | |
quantity | Int | 订单花的数量 |
(4)user(user 细表)订单明细表结构如表 B.4 所示。
表 B.4 用户明细表(user)
字段名 | 数据类型 | 主键 | 描述 |
---|---|---|---|
userID | int | 是 | 用户 id |
username | Varchar(40) | 用户名 | |
password | Varchar(40) | 密码 MD5 | |
name | Varchar(40) | 用户姓名 | |
Varchar(50) | 用户 email | ||
cardID | Varchar(20) | 证件号 | |
tel | Varchar(20) | 电话 | |
address | Varchar(100) | 地址 |
(5)worker 表(worker)
表 B.5 员工(worker)
字段名 | 数据类型 | 主键 | 描述 |
---|---|---|---|
workerID | int | 是 | 职工 id |
workername | Varchar(40) | 职工姓名 | |
status | tinyint | 职工状态 |
♻️ 资源
大小: 26.5MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87404239
相关文章
- Mysql加锁过程详解(2)-关于mysql 幻读理解
- Failed to write to mysql.slow_log
- CentOS 7 上编译安装MySQL 5.6.23
- Java: mysql-connector-java
- Mysql 操作命令 详解
- Mac OS 下安装mysql环境
- 【MySQL】如何向mysql数据库插入当前时间
- Java中toArray的用法探究(java数组与list转换)
- Tomcat 奔溃:java.lang.OutOfMemoryError: Java heap space
- 基于Java+MySQL实现移动新闻客户端【100010643】
- 基于Java+MySQL实现(界面)某高校科研管理系统【100010633】
- 基于 Java(SpringBoot+SSM)+MySQL 实现的(Web)高校成绩分析与管理系统【100010579】
- 基于Java+MySQL实现的(Web)网上书城【100010566】
- 基于Java+MySQL实现(Web)医院门诊信息管理系统【100010554】
- 基于Java+MySQL实现(Web)半自动标注系统【100010422】
- 基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统【100010230】
- Mysql Order By 字符串排序,mysql 字符串order by
- 使用navicat连接mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'
- MySQL 基于存储过程 实现数据统计按日、周、月份统计模板
- java.lang.OutOfMemoryError: Java heap space解决方法
- mysql 实战 or、in与union all 的查询效率
- Java .class 反编译 Luyten,导出 .java文件,查看jar 包目录,超级简单,实用
- mysql-计算排名
- Mysql_mysql 性能分析及explain用法
- mysql 得到指定时间段的日期
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
- mysql如何通过主库查看从库信息?
- 【MySQL】实验四 多表查询
- 【数据库学习】——【汇总】MySQL数据库下载与安装(Msi文件安装和免安装版本)、Navicat下载与安装
- 【JAVA】浅谈java枚举类
- 解决Java使用response下载文件报错,并总结可能出错的原因: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
- Mysql 1290 - The MySQL server is running with the --secure-file-priv option