第1章 绪论
1.1课题背景
随着近年来国家大力的扶持体育项目的发展,和体育文化相关的产业也成为了朝阳产业。据有关资料,近年来,无论是国外的体育运动产品还是国内自主研发的运动品牌,都呈现了销售额逐年递增的良性增长。基于互联网行业发展迅速,传统的线下实体店经营已经跟不上时代的发展,大部分的运动品牌都有属于自己的体育运动商城,进行线上销售。基于以上的行业背景,开发一款基于互联网技术的体育商城,是可以帮助商家减少线下的运营成本,同时拓展销售渠道,增长销售额。体育商城分为前后端两个系统,用户可以在前端系统进行浏览、购买等业务,管理员可以在后台进行商品相关的配置操作。
使用体育商城可以帮助消费者在线浏览、购买商品,同时也可以帮助品牌方拓展销售渠道,久而久之增加消费者用户群体,增加销售业绩。通过线上与线下两种渠道进行结合,从而更好的帮助商家进行售卖。
1.2发展现状
根据国家体育总局发布的《体育发展“十三五”规划》中提出的目标,“到2020年全国体育产业总规模超过3万亿元,进一步优化体育服务业、体育用品制造业及相关产业结构,实施体育服务业精品工程、体育用品制造业创新提升工程和体育产业融合发展工程”。另外,根据国务院发布的《关于加快发展体育产业促进体育消费的若干意见》中提出的目标,“到2025年体育产业总规模超过5万亿元,成为推动经济社会持续发展的重要力量。积极支持体育用品制造业创新发展,采用新工艺、新材料、新技术,提升传统体育用品的质量水平,提高产品科技含量”。
综合上述文件中提出的目标及对于体育用品业的相关叙述,前瞻预计到2025年,体育用品及相关产品制造业总产出将超过2万亿元,增加值将超过5500亿元。结合增长率进一步估算,2026年体育用品及相关产品制造业总产出将超过2.4万亿元,增加值将超过6000亿元。
1.3目的和意义
目前,随着体育运动越来越多地融入人们的生活,进入体育消费市场的体育爱好者越来越多,体育消费市场也出现了运营模式的不断嬗变。体育商城作为体育消费市场的重要组成部分,在人们的体育消费中担任着越来越重要的角色。 随着体育运动成为社会时尚,运动场上很快就聚集了大量参与体育运动的人群。体育用品消费在这种形势下也迅速升温,成为热门。但是,很多人都是“运动新手”,运动知识的缺乏让他们在购买体育用品的时候陷入了迷茫。因此,乐动体育商城及时发现体育用品消费的盲区,通过网上体育知识平台的形式来引导消费者掌握运动知识,让他们走出体育用品消费的盲区。乐动体育认为,正确引导体育消费不仅帮助消费者树立正确的体育用品消费方式,而且能够帮助体育企业突破消费壁垒,实现产业的升级。作为体育消费前哨的体育商城,更迫切地需要采用这种全新的发展模式,只有这样才能让体育消费潜力得到全面释放。
1.4系统设计理念
本系统设计前端系统和后台管理系统两个web端,将每一个模块进行独立设计,采用B\S架构,基于浏览器操作,利用服务器进行了数据的处理。使用了模块化的开发理念,将每一个业务功能点独立部署,为后续的功能扩展以及版本迭代提供了一定的便捷性。
第2章 关键技术介绍
2.1开发工具
本系统代码编写使用了IDEA进行编写。IDEA是由欧美开发人员研发的一款十分强大的代码编辑工具。使用其可以在一定程度上减少了代码开发人员的工作量,具体的表现如下:
(1)热部署:IDEA支持了代码自动编译功能,当程序员进行代码的调试工作时,修改代码后,IDEA会自动对修改的代码进行编译,无需重启代码测试,在一定程度上降低了开发人员的工作时间。
- 代码提示:IDEA具有半智能化的代码提示功能,开发人员只需要使用固定的快捷键即可完成部分代码开发工作。
- 整合其他插件:IDEA具有强大的插件整合能力,可以在IDEA中完成对数据库的操作,同时也可以进行redis以及mongdb等缓存区的操作。
代码开发完成后,系统使用了apache旗下的tomcat作为本系统的部署服务器。tomcat是一款轻量级、扩展性较强的开源服务器,配置简单,可扩展强、开源免费是其的最大优点。
2.2系统开发语言的选择
本系统使用了Java语言进行开发,利用了Java语言面向对象的思想,将相关的实体类抽象出Java对应的实体类。利用封装、抽象的思想进行封装,可以在一定程度降低系统的复杂程度。利用了Java的jdbcAPI对数据库进行操作,使用了orm映射对数据库和Java代码进行对应。
使用js技术对前端页面进行开发,利用了js可以对浏览器页面进行设计,同时使用Ajax等技术,可以进行局部数据的刷新,利用了easyui对数据进行处理,可以让网页的可观性得到提高。
2.3 系统数据库的选择
本系统使用了Apache旗下的MySQL作为数据库进行存储数据。利用MySQL中的Innodb作为存储引擎,根据业务需求,为每一张表结构创建合理的索引,增加了数据的查询效率,提升了系统的反应速度。
MySQL作为开源免费的数据库,可以搭建集群存储数据,同时也可以是使用mycat进行主从同步,做到真正意义上的读写分离。一旦系统的数据量骤增,可以使用sharing-jdbc进行数据库的分库分表操作,也可以在一定程度上减轻数据库的存储压力。
2.4计算机配置要求
硬件要求:
CPU:Inter5代及以上
内存: 4G以上
软件要求:
操作系统版本:Windows7及以上
开发工具:IDEA
后台服务器:Tomcat9.0
开发语言:Java
第3章 系统需求分析
3.1功能分析
本系统的开发目的旨在于利用线上营销的模式,通过线上的体育商城,进行线上的浏览商品以及购买商品。本系统分为前后端两个系统。前端系统主要功能有:用户注册、登录、商品查询、添加购物车、结算、个人中心、后端系统:个人中、用户管理、商品标签管理、商品管理、订单管理、系统管理。
通过实现以上的功能,可以实现管理员线上进行体育商品相关信息的管理。用户可以通过本系统进行商品信息的筛选、收藏以及付费操作,可以帮助用户进行线上消费。
3.2体育商城系统的需求分析
需求分析作为软件设计的重要一环,其意义在于合理的需求分析可以简化开发人员的工作。需求分析可以确定了软件的开发方向。以下是从技术、经济、操作、法律等方面对本系统进行需求分析。
本系统基于JAVA语言进行开发。JAVA具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。【8】与此同时,本系统使用Oracle旗下的MySQL进行后台的数据管理。MySQL 是开源的一种关系型数据库管理系统,其具体有积小、速度快等特点。特别是在网页设计方面,MySQL是最好的关系数据库管理系统应用软件之一。因此,本系统在技术上具有可行性。
3.2.2经济的可行性
作为一个主要进行后台数据处理的信息管理系统,本系统使用SSM框架进行开发,对客户端的要求相对较低,用户只需要使用常用的浏览器进入系统就可以进行日常的信息处理工作。同时,本系统在数据量相对较小的情况下,无需对服务器进行版本上的过高要求,对目前高校所使用的电脑和配备的服务器不会造成负担,无需花费额外的服务器搭建费用。因此,本系统在经济上具有可行性。
本系统具有简洁大方的操作页面,对应的功能在操作时会有友好的提示。并且可以通过短时间内培训对本系统的各项业务操作进行掌握,同时对于后期一些简单维护工作也可以做到得心应手因此,本系统在操作上具有可行性。
本系统是自行研发并且采用的软件全部都是开源免费的,因此不具备任何的法律问题。
3.3系统功能用例分析
本系统的用户分为游客、用户、管理员三类。下面针对了三种不同用户,分别进行功能用例图的分析。
- 游客
游客可以查看在线查看商品的咨询以及相关商品等信息,但是不能收藏购买。如果想收藏购买可能必须要进行登录操作。游客的主要功能用例图如图3-1所示。

图3-1游客的功能用例图
- 用户
用户访问前端系统,可以进行商品咨询的查询以及查看商品详情并购买的操作,并且可以修改查看个人信息以及查询订单。用户的主要功能用例图如图3-2所示。

图3-2用户的功能用例图
- 管理员
管理员登录后端系统,可以对本系统的相关信息进行管理。其具备的功能包括了个人中心、用户管理、商品标签管理、商品管理、订单中心管理、订单中心管理等。管理员的功能用例图如图3-3所示。

图3-3管理员的功能用例图
4.1 主体框架
体育商城系统使用了spring中的SSM进行开发。Spring的核心思想是通过使用bean标签的配置进行实体引入。通过使用spring配置可以进行相关第三方工具的引入。本系统通过mybatis进行数据库的jdbc操作,通过在db.properties进行相关配置即可。
4.2 系统功能结构设计
本系统设计了前端系统与后端管理系统两个系统。分别对应着用户和管理员两种用户,当用户登录前端系统后,可以进行的操作有:首页、商品列表、商品详情、商品咨询、个人中心、在线客服等功能。当系统管理员登陆后端系统后,可以对前台系统进行配置以及管理体育商城网站的基础信息,功能包括:个人中心、用户管理、商品标签管理、商品管理、订单中心管理、系统管理等功能。本系统的功能模块图如图4-3所示。

图4-3 后台功能结构图
4.3系统工作流程设计
本系统的流程较为复杂,分为了多个用户进行操作,以下对本系统的整体的系统流程图。

图4-4 系统工作流程图
4.4数据库设计
一个系统的设计好坏很大程度是由数据库的相应速度进行决定的。一个数据库设计的表结构是否合理,将很大程度影响了一个系统的相应速度以及可扩展性。在研发初期,通常会将业务逻辑中所涉及到的实体模型通过orm映射的关系与数据库表进行逐一对应。对于经常使用的业务数据,可以利用索引模型进行设计,方便日后的查询操作。对于表结构过大的情况,可以使用分库分表操作进行处理。实体与数据库表通常是用E-R图进行设计的,E-R图的基本元素为:实体、属性、关系。






图4-5 E-R模型图
4.4.1概念模型设计
根据数据库设计的基本思想,对本系统进行合理的分析后,确定了与本系统有关的E-R实体信息。主要包括了用户、商品、商品分类、支付、订单等实体信息。具体详情如下。

图4-6用户信息E-R图

图4-7商品信息E-R图

图4-8商品分类E-R图

图4-9支付E-R图

图4-10订单信息E-R图
4.4.2数据库逻辑模型设计
根据对实体E-R图的分析,对于数据库的创建,应满足以下几个条件。
(1)每一个实体要转换成一个关系;
(2)所有的主键必须定义非空(NOT NULL);
(3)对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键。
[8]本系统应用到的数据表较多,用户信息主要是记录了用户的基本信息。表结构如表4-1所示。
表4-1 用户信息表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| Id | int | 3 | 是 |
| Name | varchar | 15 | 是 |
| Sex | varchar | 5 | 是 |
| Password | varchar | 255 | 是 |
| Ismember | bigint | 255 | 是 |
| Createdate | varchar | 255 | 是 |
在表4-2中描述了咨询的基本信息。
表4-2 咨询表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| id | int | 10 | 是 |
| Classname | varchar | 255 | shi |
| Date | varchar | 255 | 否 |
| Jieshu | datetime | 否 | |
| Uid | datetime | 否 | |
| Createdate | int | 255 | 否 |
系统中设计了商品信息表,如表4-3所示。
表4-3 商品表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| Id | bigint | 255 | 是 |
| Titel | varchar | 255 | 否 |
| Content | varchar | 255 | 否 |
| Pubuser | varchar | 255 | 否 |
| Pubdate | varchar | 255 | 否 |
| Createdate | varchar | 255 | 否 |
分类信息表主要记录了分类信息的相关信息,如表4-4所示。
表4-4 分类信息表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| Id | int | 8 | 是 |
| Level | datetime | 否 | |
| Name | int | 8 | 否 |
| Daoqi | int | 4 | 否 |
| Cid | int | 8 | 否 |
| Createdate | int | 8 | 否 |
[9]支付表主要是支付信息,表结构如图4-5所示。
表4-5 支付信息表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| Id | int | 10 | 是 |
| Type | varchar | 10 | 否 |
| Mid | double | 10 | 否 |
| Time | varchar | 10 | 否 |
| Issue | varchar | 10 | 否 |
| Createdate | varchar | 10 | 否 |
订单表主要记录的是订单信息,表结构如图4-6所示。
表4-6 订单信息表
| 字段名称 | 数据类型 | 字段大小 | 必填字段 |
| Id | int | 8 | 是 |
| Paytype | varchar | 255 | 否 |
| Orderno | varchar | 255 | 否 |
| Rcid | varchar | 255 | 否 |
| Uid | varchar | 244 | 否 |
| Createdate | varchar | 23 | 否 |
第5章 系统实现
经历过需求分析以及确定了本系统的数据库设计后,至此,开发前的准备工作已初步完成。接下来要将系统中的需求进行代码开发。本章介绍了系统实现的过程。
5.1 用户模块
5.1.1首页
用户登录系统后,可以展示全部的商品信息以及咨询信息,系统展示首页如下:

图5-1 前端系统首页
实现首页的关键代码如下:
<div class="col-md-6 bann-info-grid indexnews">
<h4>
音乐<span class="ban-info-clr"> 公告 </span>
</h4>
<ul>
<c:forEach items="${newsGonggao}" var="gonggao">
<li><c:forEach items="${newskinds}" var="kind">
<c:if test="${kind.nkid == gonggao.nkId}">
<a
href="<%=request.getContextPath()%>/newsinfo.html?nid=${gonggao.nid}">[${kind.nkname}]${gonggao.ntitle}</a>
</c:if>
</c:forEach></li>
</c:forEach>
</ul>
</div>
5.1.2 查看商品信息
用户登录前端系统可以查看商品的相关信息,点击商品分类,系统会展示全部的商品信息。用户可以通过商品名称、商品分类类型以及价格来搜索。点击具体的商品信息可以跳转到商品详情页面。具体详情如图5-2所示。

图5-2 商品信息
实现商品信息的关键代码如下:
@RequestMapping("/news.html")
public String newsPage(Model model,String page){
List<Newskinds> newskinds = newsKindsService.selectByExample(new NewskindsExample());
model.addAttribute("newskinds", newskinds);
int _page;
if(page==null){
_page = 1;
}else {
_page = Integer.parseInt(page);
}
NewsExample newsExample = new NewsExample();
newsExample.setOrderByClause("ncreatetime DESC");
PageHelper.startPage( _page,10);
List<News> news = newsService.selectByExampleWithBLOBs(newsExample);
PageInfo<News> newsPageInfo = new PageInfo<News>(news);
int totalPages = newsPageInfo.getPages();
model.addAttribute("totalPages",totalPages);
model.addAttribute("currentPage",_page);
model.addAttribute("news",news);
return "news";
}
5.1.3 查看商品详情
用户登录前端系统可以查看商品详情页面,用户可以点击商品名称或者商品图片,跳转到商品详情页面。系统会展示相关商品的详情信息,登录成功的用户可以点击添加购物车进行商品预购操作。具体详情如图5-3所示。

图5-3商品详情
实现商品详情的关键代码如下:
@RequestMapping("/courseinfo.html")
public String coursePage(Model model,String cid){
Course course = courseService.selectByPrimaryKey(Integer.parseInt(cid));
model.addAttribute("course",course);
ClassExample classExample = new ClassExample();
ClassExample.Criteria criteria = classExample.createCriteria();
criteria.andCourseIdEqualTo(Integer.parseInt(cid));
List<Class> classes = classService.selectByExample(classExample);
for (Class aClass : classes) {
TblOrderExample tblOrderExample = new TblOrderExample();
TblOrderExample.Criteria criteria1 = tblOrderExample.createCriteria();
criteria1.andClassIdEqualTo(aClass.getClassid());
long haveOrder = orderService.countByExample(tblOrderExample);
aClass.setHaveOrder(new Long(haveOrder).intValue());
}
model.addAttribute("classes",classes);
EmployeeExample employeeExample = new EmployeeExample();
EmployeeExample.Criteria criteria2 = employeeExample.createCriteria();
criteria2.andEpostIdEqualTo(1);
List<Employee> trainers = employeeService.selectByExample(employeeExample);
model.addAttribute("trainers",trainers);
return "courseinfo";
}
5.1.4 购物车
用户登录后,可以点击购物车来查看用户添加的商品信息,可以在本功能中进行加减数量的操作。详情如图5-4所示。

图5-4 购物车
5.1.5 个人中心
用户可以点击个人中心,查看自己的个人信息。通过本功能可以修改自己的个人信息以及查询个人信息。具体的详情如图5-5所示。

图5-5 个人中心
5.2 管理员模块
5.2.1管理员登录
管理员访问本系统的后台管理系统,可以进行登录操作,为了提升系统的安全性,本系统采用了双重加密设计。对用户输入的密码进行隐藏处理,后端接口中对密码进行了双重加密,在md5加密的基础上,再次使用salt值进行多重加密,保障了系统的安全性。用户输入用户名和密码后,系统会进行双重校验,登录成功后,系统会对不用角色的用户进行权限划分,不同用户拥有的权限是不同的,放置了用户随意修改数据。图5-6是后台系统的登录页面。

图5-6 管理员登录
实现登录的关键代码如下:
@RequestMapping("/login.html")
public String loginPage(HttpServletRequest request,Model model) throws IOException {
Cookie[] cookies = request.getCookies();
String username = "";
String pwd = "";
if(cookies != null){
for (Cookie cookie : cookies) {
if(cookie.getName().equals("user")){
username = URLDecoder.decode(cookie.getValue().split("#")[0],"UTF-8");
pwd = cookie.getValue().split("#")[1];
break;
}
}
model.addAttribute("mname",username);
model.addAttribute("mpassword",pwd);
}
return "login";
}
管理员登录后点击用户管理,可以查看全部用户信息。点击添加按钮,系统会显示出新增用户页面,根据系统的友好提示,可以完成用户的新增。对于已经存在的用户信息,根据实际情况,可以使用编辑或删除按钮对数据进行处理。具体的详情如图5-7所示。

图5-7 用户管理
实现用户管理的关键代码如下:
@RequestMapping("/admin/employeelist.html")
@ResponseBody
public Map<String,Object> employeelistPage(String page, String limit, Model model, String ename){
Map<String,Object> employeeMap = new HashMap<String,Object>();
List<Post> posts = postService.selectByExample(new PostExample());
model.addAttribute("posts",posts);
EmployeeExample employeeExample = new EmployeeExample();
EmployeeExample.Criteria criteria = employeeExample.createCriteria();
if(ename != null&& !ename.equals("")){
criteria.andEnameLike("%"+ename+"%");
}
PageHelper.startPage(Integer.parseInt(page),Integer.parseInt(limit));
List<Employee> employees = employeeService.selectByExample(employeeExample);
PageInfo<Employee> employeePageInfo = new PageInfo<Employee>(employees);
employeeMap.put("code",0);
employeeMap.put("msg","");
employeeMap.put("count",employeePageInfo.getTotal());
employeeMap.put("data",employeePageInfo.getList());
return employeeMap;
}
管理员登录成功后,点击商品分类管理,系统会显示全部的商品分类信息。管理员可以点击添加按钮,按照系统的友好提示进行数据的添加操做。若是有下架或者删除的商品分类,可以通过编辑或者删除按钮对已经存在的商品分类信息进行处理。具体的详情如图5-8所示。

图5-8商品分类管理
管理员登录成功后,点击订单管理,系统会显示全部的订单信息。管理员可以根据订单的商品名进行条件搜索,可以进行订单状态的查询。如果有问题订单,管理员可以使用删除按钮对相应的订单信息进行删除操作。具体的详情如图5-9所示。

图5-9 订单管理
管理员登录成功后,点击商品管理。系统展示出全部商品信息。管理员可以根据商品名称进行模糊匹配查询。管理员可以删除商品信息以及新增编辑商品信息。具体的详情如图5-11所示。

图5-11商品管理
第6章 系统测试
6.1 系统测试的目的及意义
系统测试就是将系统运行过程中所用到的硬件、软件以及系统的操作人员看作是一个完整的个体,通过一些具体的测试用例来测试系统是否健壮,是否存在某些设计上或实现上的不足。
6.2 系统功能测试用例与分析
为了进一步验证家庭财务管理系统的实施能否到达之前的功能需求的预期效果,功能测试对于系统测试来说是十分必要的,在进行功能测试的时候要将验证该系统各个菜单下属的各个功能按钮能否正常运行,进行操作后能否形成正确的结果,管理员的登录,添加信息的按钮,角色选择登录等在什么情况下无法进行等等。[10]下面将采用数据表的形式展示测试用例与测试结果。
当管理员未输入用户名、输入错误的密码或验证码时,系统会弹出相应的错误提示。测试结果如表6-1所示。
表6-1 管理员登录的测试用例和测试结果表
| 管理员登录模块功能测试描述 | ||
| 步骤 | 预期 | 测试结果 |
| 1、输入用户名为admin,密码为admin | 跳转至系统首页 | 与期望吻合 |
| 2、输入用户名为A,密码为admin | 提示:“用户名不存在” | 系统错误提示与实际相吻合, |
| 3、输入用户名admin,密码为1111, | 提示:“密码错误” | 系统错误提示与实际相吻合, |
| 4、用户名输入为空 | 提示:“请输入用户名!” | 系统错误提示与实际相吻合, |
第7章 结论
7.1 全文总结
历时了两个多月的努力,运动会管理系统设计已经基本完成。本系统功能基本符合用户需求,能够实现学校运动会信息管理的需求。在整个设计执行的过程中,出现了很多的难题和困难,庆幸的是都在不断探究和落实过程中基本顺利解决了,从而有了今天的运动会财务管理系统,在这次论文编写以及执行的过程中我深刻的体会理解到:做设计并且让其实现是一个需要我进行不断学习、不断调研、不断将代码变成程序的过程,在本次毕业设计的编撰过程中,我学到了很多,这些有一部分是书本上没有的,让我进一步的充实了自己,提升了能力,开阔了视野,也锻炼了面对挫折困难要时刻执行着“雄关漫道真如铁,而今迈步从头越”的积极心态。
7.2 展望
通过此次的经验积累,我相信在今后的工作和学习中,无论我遇到了什么样的问题或者说遇到类似的情况,都能以此次毕业设计作为未来的工作的基础,无论是面对此次毕业设计的运动会管理系统还是在今后的工作中其他的系统,我相信一事通,百事通,都会越来越顺利的。
316

被折叠的 条评论
为什么被折叠?



