摘 要
随着信息技术的不断发展,电子商务网站的用户规模增长迅猛。与此同时许多地区依然存在着农产品销售难、农产品增产与农民收入增加不同步的矛盾,于是扩展农产品销售渠道就显得十分重要了。本文主要是采用Java语言、Springboot框架、Mysql数据库作为开发平台,系统采用B/S结构进行开发,完成一个农产品在线交易系统。目标是实现一个以销售农产品为中心的网站,构建用户信息与账号,账号与订单信息有机结合的业务系统。
关键词:农产品销售管理;Springboot;Mysql数据库
Springboot Agricultural Products Sales Website
ABSTRACT
With the continuous development of information technology, the user scale of e-commerce websites has grown rapidly. At the same time, there are still contradictions in many regions where it is difficult to sell agricultural products, and the increase in agricultural product production is not synchronized with the increase in farmers' income. Therefore, it is very important to expand agricultural product sales channels. This article mainly uses the Java language, Springboot framework, and MySQL database as the development platform. The system uses the B/S structure to develop and complete an agricultural product sales website. The goal is to achieve a website centered on selling agricultural products, and build a business system that organically combines user information and account information, as well as account and order information.
Key words:Agricultural product sales management; Springboot; MySQL database
目 录
1.1 农产品在线交易系统开发背景 1
1.2 农产品在线交易系统研究现状 1
1.2.1 国内研究现状 1
1.2.2 国外研究现状 2
1.3 农产品在线交易系统研究目的与意义 3
1.4 农产品在线交易系统内容安排 3
2.3.1J2EE技术 3
2.3.2MVC模式 3
2.3.3MySQL数据库 3
2.3.4 B/S结构 4
2.3.5Springboot框架 4
2.4 MyEclipse开发工具 4
2.5 本章小结 4
3.1 业务需求分析 9
3.2 功能需求分析 9
3.2.1系统用户功能 10
3.2.2 商品中心管理 10
3.2.3 评价管理 10
3.2.4 订单管理 11
3.3 本章小结 12
4.1 系统功能总体设计 13
4.2 系统功能详细设计 13
4.2.1 系统登录设计 14
4.2.2 商品浏览设计 14
4.2.3 订单管理设计 15
4.3 数据库设计 16
4.3.1 数据库概念设计 17
4.3.2 数据库表设计 19
4.4 本章小结 22
6.1 测试概述 35
6.2 测试配置 36
6.3 测试用例 36
6.4 测试结果分析 37
第1章 绪论
1.1农产品在线交易系统开发背景
随着我国信息化建设的推进,电子商务平台为农产品市场提供了更加广阔的销售渠道。越来越多的农民开始运用互联网来推广农副产品。网络本身在人们的生活和运用中也越来越广泛,农产品网上商城给人们工作生活带来了极大的方便。网上农产品在线交易系统有效的减少了市场销售环节,用户可以直接面对生产商。它有着经营成本低廉、不需要租赁实体仓库、用户收索所需商品方便的特点。
系统的目标是为农民服务,主要通过开通网上农产品销售系统提供数据的方便之路,使农民能够通过网络快速方便的与那些急需农产品却又找不到供货商的买家进行交流达成协议,进而形成供求关系长期下来是形成产业链未必不可能,形成物资的充分流动与吸收吸引,并且省去了民众许多的时间和金钱。
在很多城市、镇子里面、超市里的水果蔬菜之类的农产品都非常让人恐惧,而在农村很多农产品都烂在树上、烂在土地里、堆在家里都卖不出去,而你又需要某些东西却不知道到哪里去找,可能只能找人代购才能买到,不然的话就要花大价钱被小贩当肥羊仔宰,还不一定能找到所需要的,同时还有可能受不同时间地域的限制。设计农产品在线交易系统,能够极大地方便生产者--消费者之间的供求,使得农产品有渠道获得和售出,提高供求关系的合理发展。
1.2农产品在线交易系统研究现状
中国是世界上最大的农产品生产国,农产品加工企业无论在企业数量上还是在销售产量上都随着农产品产业的快速发展得到了较大幅度的提高。近年来的实践表明,农产品加工业的进一步发展是大幅度提高农产品附加值、解决农产品生产过剩、增加农民收入的一个有效途径。随着生产规模的不断扩大,必将产生一批规模巨大的农产品加工企业,这就对农产品加工企业的管理提出了挑战,特别是销售方面。与其他行业相比,农产品加工企业的具有自己的特点,如采用订单农业的采购模式,以社会资本为基础的营销模式,这些都给农产品加工企业的销售带来挑战。以往的农产品主要通过农产品批发市场或者农产品加工企业以及农产品大零售企业销售。传统模式的主要问题是进入门槛低以及经营成本高,难以形成标准化,政府机构监管不力等。在传统的农产品生鲜供应链(AFSC)中,地域分散的小农将产品单独运往市场销售。这就导致了较高的运输成本,这是造成农民盈利能力低下的首要原因。当前,我国生鲜农产品的销售渠道仍较为单一,而且持续性的突发事件下,使得农产品许多传统流通渠道出现严重中断,生鲜农产品的线下销售渠道如大型农贸市场、超市、餐馆等几乎全线关闭,导致供需严重背离、多地农产品销售受阻,人们产生了恐慌性购买和囤积行为,从而带来了食品供应链需求端的突然激增。
1.2.2国外研究现状:
日本在20世纪80年代建立了商用综合信息处理系统,它包括销售和库存管理系统。我国将计算机应用于经济管理方面起步较晚,很多企业的销售主要依赖于人工操作,投入的大量人力和物力,手工操作的情况下容易出现错误,销售人员和销售部门之间的货物和款项核对时易于产生账目不清的现象。由于企业墨守成规的滞后的销售理念,公司账目显得较为零乱,这一落后的理念直接影响着企业业务的进一步拓展和延伸。近年随着计算机的快速普及,销售工作在企业中的地位越来越重要,开始在销售领域进行管理信息系统的开发工作。
1.3农产品在线交易系统研究目的与意义
本系统充分考虑了国家的农产品生产和销售管理之间的相互关系,以及互联网络的现代化应用,在互联网络中,搭建一个类似网上商城一样的销售网站内,其中会用到 MyEclipse、MySQL、JSP等之类的网络工程技术。
本系统分为前台销售系统和后台管理系统,前台用户系统,为用户提供:注册登录、首页、公告信息、新闻资讯、模块管理(企业管理、商品中心、订单管理、反馈信息、市场数据、产品数据)等主要功能。后台管理系统,为管理员提供:后台首页管理、轮播图、公告信息管理、资源管理、系统用户管理、模块管理(企业管理、商品中心、订单管理、反馈信息、市场数据、产品数据)等优质服务。
本文具体内容包括:绪论、系统采用的关键技术、系统分析、系统设计、系统实现和系统测试。本文着重描述了系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,另外,重点剖析了部分环节的开发过程。本系统在一定的环境下对系统的重要模块进行了模拟测试,证实了系统的可用性、可靠性。
第2章 相关技术
2.1开发环境介绍
1.软件体系结构方案:采用B/S模式,B/S代表的是服务器端由web服务器发放,客户端由浏览器接收的系统,它的前台是html语言,由浏览器解释。B/S结构可以由web服务器能够解释的脚本语言如jsp、php、asp、JavaScript。
2.操作系统方案:Windows 7(旗舰版)操作系统,该系统可以兼容需要的软件,并且具有良好的运行速度,界面良好。
3.后台数据库:选用Mysql。Mysql旨在通过数据库加密、更加安全的默认设置、加强的密码政策和细化许可控制、及加强的安全模型等特性,为企业数据提供最高级别的安全性。
4.开发工具:选用Myeclipse10
5.开发语言:Java语言。
6.开发技术:JavaEE+html+css+js技术
统一建模语言(Unified Modeling Language ,UML)是一种可视化建模语言,通俗上讲就是系统开发者利用UML可以清楚地表达出自己对系统是如何设计,是一种设计思想的体现,然而UML就是作为辅助工具,就如汽车轴承的轮滑油。UML包括了一些可以相互组合图表的图形元素。由于UML是一种语言,所以UML具有组合这些元素的法规。UML提供了多种图来设计设计系统,如设计系统前期常用的用例图,行为图等,这些图需要用多个视图来展示一个系统,这组视图被称为一个模型(Model)。一个UML模型描述了一个系统需要做什么。同时,UML提供了组织和扩展这些图的方法。
2.3.1J2EE技术
人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便[1][2]。
2.3.2MVC模式
MVC模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。
视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVC 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理[3]。
模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVC 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架[4]。
控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户[5][6]。
2.3.3MySQL数据库
科技的进步,给日常带来许多便利:教室的投影器用到了虚拟成像技术,数码相机用到了光电检测技术,比如超市货物进出库的记录需要一个信息仓库。这个信息仓库就是数据库,而这次的物流信息管理系统也需要这项技术的支持[7]。
用MySQL这个软件,是因为它能接受多个使用者访问,而且里面存在Archive等。它会先把数据进行分类,然后分别保存在表里,这样的特别操作就会提高数据管理系统自身的速度,让数据库能被灵活运用。MySQL的代码是公开的,而且允许别人二次编译升级。这个特点能够降低使用者的成本,再搭配合适的软件后形成一个良好的网站系统。虽然它有缺点,但是综合各方面来说,它是使用者的主流运用的对象[8]。
2.3.4B/S结构
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题[9]。
2.3.5Springboot框架
Springboot即VUE+Springboot+Mybatis,这三个框架有各自最独有的优势,那么将它们组合在一起能够碰撞出很强的火花。设计者在不需消耗大量功夫,能做出Web应用程序,而且这个程序还具有层次清晰、升级更新操作不影响正常使用的、允许多次使用的特点。这个复合框架形成一个有着结构完整、功能强大和结构良好的体系:VUE使各板块分离,Springboot使开发更灵活方便,使用Mybatis让开发者直接对对象进行操纵,各层次分工明细,并实现各个层次间的解耦,让代码更加的灵活精简。这个框架使程序员能够规避在开发时期避免个别错误导致整体被破坏,也能在后期应对客户对产品提出的新需求[10] [11]。
MyEclipse是由Genuitec公司开发的,一款功能非常强大的JavaEE的集成开发环境,其中包括有:完备的编码、调试、测试和发布功能[10],完整支持JSP、Springboot、CSS、JavaScript、VUE、HTML、JSF、Mybatis、SQL等技术。在体系结构上,MyEclipse的特征可以被分为7类:JavaEE模型;Web开发工具、EJB开发工具、JavaEE项目部署服务、应用程序服务器的而连接器、数据库服务、MyEclipse整合帮助[11]。
对于以上每一种功能的类别,在MyEclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse在结构上的这种模块化,可以让它在不影响其他模块的情况下,对其中任意的一个模块进行单独的扩展和升级。强大的MyEclipse应用开发平台也不仅仅只是Eclipse的插件而已,同时更是一款功能强大的,用于JavaEE的集成开发环境[12]。
2.5 本章小结
本章主要描述了在农产品在线交易系统的构建过程中用到的技术路线。主要有系统采用的架构、系统用到的核心技术和在系统搭建过程中用的数据存储技术,对系统的后期搭建提供有力的技术支撑
第3章 系统需求分析
3.1业务需求分析
针对农产品销售渠道单一现存的问题和需要,通过系统需求的分析,特建立了数字化、信息化的农产品在线交易系统。
本系统主要包含了、登录模块的实现、用户管理模块、新闻资讯模块、商品信息模块、商品购买模块、订单管理模块等多个功能模块。下面分别简单阐述一下这几个功能模块需求。不同的权限对应相应的功能模块的需求,管理员权限的级别是最高的,所以所对应的需求是最多的,根据不同的权限分别简单阐述一下各个权限的需求。
主要业务流程:以用户的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用系统,进行商品搜索浏览、商品搜索以及商品购买等功能操作。
图3-1主要业务流程图
根据条件需要,系统结构主要由三大用户组成。一是买家用户,二是卖家用户,三是管理员。
1用户登录及身份要求
验证用户的信息
2本系统销售功能需求(面向用户)
允许用户在线咨询。
允许用户评论商品。
允许用户查询商品的信息以及商品搜索等。
允许用户对购买商品。
自动生成订单。
用户在线支付订单费用。
选择商品,进行购买,填写发货地址、联系电话等信息。
3本系统管理功能需求(面向管理员)
企业管理功能需求(面向卖家用户)
用户管理(对用户信息维护管理)
仓库管理(面向卖家,可对仓库进行添加、删除等操作)
商品中心管理(发布的商品信息等)
对订单列表的管理(对用户的商品购买订单进行管理)。
反馈信息(面向买家)
市场数据(面对卖家分析各个市场销售情况)
产品数据(面对卖家分析各个产品销售情况)
3.2.1系统用户功能
系统用户功能主要有用户可以进行系统的注册,进行系统登录,可以完成个人资料的修改以及登录密码的重置等几个基本的功能。具体功能用例如图3-2所示。
(1)系统用户用例图
图3-2系统用户用例图
(2)系统用户用例描述
用例描述如下表所示。
表3-1 用例描述
用例名称 | 系统用户 |
参与者 | 用户 |
描述 | 提供注册登录、更改密码、更改个人资料等功能 |
前置条件 |
|
后置条件 | 无 |
事件流 | (1)用户进行账户注册 (2)用户进行账户登录 (3)修改个人资料以及登录密码重置 |
补充说明 | (a)新添加的资料不符合要求时会添加失败 (b)修改的密码不符合要求时会修改失败 |
3.2.2商品中心功能
商品中心的功能主要有修改商品信息、添加商品信息、删除商品信息等几个基本的功能。具体功能用例如图3-3所示。
(1)商品中心用例图
图3-3商品中心用例图
(2)商品中心用例描述
商品用例描述如下表所示。
表3-2 商品用例描述
用例名称 | 商品管理 |
参与者 | 管理员 |
描述 | 管理员提供添加、修改、删除商品等功能 |
前置条件 |
|
后置条件 | 无 |
事件流 | (1)管理员查看修改商品 (2)管理员添加商品 (3)管理员删除商品 |
补充说明 | (a)新添加的商品不符合要求时会添加失败 (b)修改的商品不符合要求时会修改失败 |
3.2.3评价管理
评价管理的功能主要有评价发布、回复评价等几个基本的功能。具体功能用例如图3-4所示。
(1)评价管理用例图
图3-4评价管理用例图
(3)评价用例描述如下表所示。
表3-3 评价用例描述
用例名称 | 评价管理 |
参与者 | 管理员 |
描述 | 管理员提供回复、删除等功能 |
前置条件 |
|
后置条件 | 无 |
事件流 | (1)管理员查看评价 (2)管理员回复评价 |
补充说明 | (a)评价不符合要求时会显示查看失败 (b)回复的内容不符合要求时会显示回复失败 |
3.2.4订单管理
订单管理的功能主要有添加订单、修改订单、审核订单、查看订单等几个基本的功能。具体功能用例如图3-5所示。
(1)订单管理用例图
图3-5订单管理用例图
(4)订单管理用例描述如下表所示。
表3-4 订单管理用例描述
用例名称 | 订单管理 |
参与者 | 用户以及管理员 |
描述 | 用户可以进行订单添加以及修改,管理员可以进行订单查看以及审核等功能 |
|
|
后置条件 | 无 |
事件流 | (1)用户修改订单 (2)用户添加订单 (3)管理员审核订单 (4)管理员查看订单 |
补充说明 | (a)新添加的订单不符合要求时会添加失败 (b)审核的订单不符合要求时会审核失败 |
3.3 本章小结
本章通过对农产品在线交易系统的业务需求进行认真分析的基础上,画出了系统的主要业务流程图,然后对农产品在线交易系统的功能进行了需求分析并给出了各个功能构件的用例图和用例描述,为后期系统的设计与实现打下坚实基础。
第4章 系统功能与数据库设计
根据需求分析的结果,需要对系统进行功能结构设计。本章主要是在系统需求分析的基础上实现了农产品在线交易系统的功能性结构设计和后台数据库设计
4.1系统功能总体设计
本系统功能总体设计是基于Java技术+Mysql数据库+Tomcat服务器的方式设计,以Myeclipse10为开发工具,并运用Photoshop CS6技术美化网页,辅之以CSS技术。本系统使用的角色主要有系统管理员和普通用户,系统分为前台和后台,前台主要用于商品的展示和购买,后台用于商品信息和订单管理,首先以普通用户通过账号注册后登录系统前台,可以进行各种商品的信息浏览和搜索,用户可以将需要的商品进行下单购买,用户可以查询订单是否已经被管理员确认,订单生成后表示用户购买成功,前台系统除了可以进行商品的下单还可以对商品进行收藏,进行商品评论,用户同时可以修改个人的信息资料,查看个人的购买记录;以管理员的身份登录系统后台可以进行商品维护、订单维护。
系统功能结构图如下所示。
(1)用户管理模块:主要是对当前系统的使用账户进行管理。用户管理的功能主要有用户信息的审核、所有用户信息的查看、用户个人信息的修改以及对用户密码的修改等主要功能。在该功能中主要是为了保障系统使用的安全性而设置的一个重要功能。
(2)商品中心管理:本农产品在线交易系统中的商品中心管理,管理方式都是对信息的三种基本操作:一种是完成商品信息的添加,在这里会对商品信息的录入情况来判断;一种是对商品信息的修改,另一种就是对商品信息的删除。其后两种操作都是要建立在第一种操作而生成的商品列表的基础上完成的。
(3)订单管理:本农产品在线交易系统中的订单管理,管理方式都是对信息的三种基本操作:一种是完成订单信息的添加,在这里会对订单信息的录入情况来判断;一种是对订单信息的修改,另一种就是对订单信息的审核。其后两种操作都是要建立在第一种操作而生成的订单列表的基础上完成的。
(4)评价管理:本农产品在线交易系统中的评价管理,管理方式都是对信息的三种基本操作:一种是完成评价信息的发布,在这里会对评价信息的录入情况来判断;一种是对评价信息的回复,评价回复操作都是要建立在评价发布生成的列表基础上完成的。
根据系统的总体结构图对本系统的功能进行了详细设计,下面以一些典型的具体功能为例进行详细的描述。
4.2.1 系统登录设计
系统用户在使用系统的时候需要输入用户的账号和密码进行登录,当用户输入账号和密码以后点击登录,这时系统会自动的将用户所输入的信息和后台的数据库中存储的数据进行对比,如果用户输入的数据经过数据的验证是合法的,则用户可以登录系统。登录后的页面主要是由系统的主界面所构成,在这里用户可以对系统的各种功能根据自己的权限进行有效的操作。而对于自己权限不足的功能则不能够进行操作。如果用户输入的信息和后台的数据库对比后不一致,在该用户则无权对系统进行操作,系统会提示用户重新输入账号和密码,如果输入的次数达到一定时,系统则会自动退出。
如下图4-2所示为用户登录活动图。
图4-2用户登录活动图
4.2.2 商品浏览设计
用户登录系统前台可以进行商品浏览,用户可以查看商品的详细信息和选择相应的商品类别进行该类别下的商品查看,用户还可以通过商品名称的关键字进行搜索。
如下图4-3所示为商品浏览活动图。
图4-3商品浏览活动图
4.2.3 订单管理设计
用户购买商品后,填写收货地址、收货人、电话等信息,生成订单信息,管理员可以审核订单,删除、修改订单,对订单信息进行相应的商品发货。
如下图4-4所示为订单管理活动图。
。
图4-4订单管理活动图
4.3.1数据库概念设计
数据库是用来存放系统运行的数据信息的,本系统的数据库是通过对农产品在线交易系统的需求分析与功能流程分析的基础上,设计出本系统数据库的主要实体有:个人信息、用户管理、仓库信息等基本实体,他们彼此之间相互联系。其对应的实体分别为:
(1)仓库信息的实体图如下图所示。
图4-5仓库信息实体图
(2)用户信息实体图如下图所示。
图4-6用户信息实体图
(3)订单信息的实体图如下图所示。
图4-7订单信息实体图
4.3.2数据库表设计
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表article (文章:用于内容管理系统的文章)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
表article_type (文章分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表business_management (企业管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | business_management_id | int | 10 | 0 | N | Y | 企业管理ID | |
2 | seller_customers | int | 10 | 0 | Y | N | 0 | 卖家用户 |
3 | enterprise_name | varchar | 64 | 0 | Y | N | 企业名称 | |
4 | enterprise_type | varchar | 64 | 0 | Y | N | 企业类型 | |
5 | business_address | varchar | 64 | 0 | Y | N | 企业地址 | |
6 | enterprise_legal_person | varchar | 64 | 0 | Y | N | 企业法人 | |
7 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
8 | enterprise_details | text | 65535 | 0 | Y | N | 企业详情 | |
9 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表buyer_user (买家用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | buyer_user_id | int | 10 | 0 | N | Y | 买家用户ID | |
2 | buyer_name | varchar | 64 | 0 | Y | N | 买家姓名 | |
3 | buyer_gender | varchar | 64 | 0 | Y | N | 买家性别 | |
4 | buyers_age | varchar | 64 | 0 | Y | N | 买家年龄 | |
5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
6 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
4.4本章小结
本章在前述业务流程的基础上对系统的功能进行了详细设计,并给出了部分功能的活动图,同时根据系统数据存储的要求对系统的数据库进行了详细的逻辑设计和物理设计,为系统的具体实现打下坚实的基础
第5章 系统实现
5.1登录模块
本系统主要的用户有系统管理员、用户,一个系统最基本的功能就是登录功能,本系统可以进行系统登录的角色有用户、管理员,用户对应前台登录界面,管理员对应后台登录界面,首先进入登录页,输入用户名和密码,然后提交至服务端进行数据库数据验证,通过JavaEE逻辑代码判断数据库是否存在用户输入的这一个记录,如果存在,则判断用户身份,如果是用户,则进入用户前台,如果是管理员用户,则进入系统主页,并把用户对象存放在session中,如果不存在这样一条记录,则返回登录界面。
登录界面如下所示。
登录关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
5.2商品信息模块
系统为用户提供商品信息推荐,方便用户浏览商品。在shangpinlist.jsp实现商品列表的展示,用户点击浏览,通过推荐id传递值,找到数据表对应的商品信息。
如下图所示为商品信息界面。
商品信息关键代码如下:
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
系统提供新闻资讯功能,用户可以进行新闻资讯浏览内容的浏览查看等。
如下图所示为新闻资讯的部分界面。
图5-3新闻资讯界面
新闻资讯关键代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
用户在浏览商品后,登录系统前台,进行商品购买,将商品添加至购买车,在个人后台可以查看购买车里面的商品,确定商品之后可以生成订单,然后支付。
如下图所示为购买商品的部分界面。
购买商品关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
5.5系统用户管理模块
过去传统的手工登记管理系统人员信息很不方便,也很容易造成数据出错,所以本系统需要一个可以管理登记人员信息的功能,管理员登入系统,可以添加新的管理员用户,删除现有的管理员,可以对系统用户以及商家信息进行维护管理。
如下图所示为系统用户管理的部分界面。
系统用户管理关键代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
如下图所示为反馈信息界面。
图5-6反馈信息界面
5.6商品管理模块
管理人员可以对商品进行增删查改的操作,这些操作将在商品管理界面进行。
如下图所示为商品管理界面。
商品管理关键代码如下:
public Map<String, Object> error(Integer code, String message) {
Map<String, Object> map = new HashMap<>();
map.put("error", new HashMap<String, Object>(4) {{
put("code", code);
put("message", message);
}});
return map;
}
5.7订单管理模块
管理人员可以对订单进行增删查改的操作,这些操作将在订单管理界面进行。
如下图为订单管理界面。
订单管理关键代码如下:
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
在本章中主要对农产品在线交易系统的功能实现进行了效果展示,该系统的主要功能有用户管理、商品中心管理、反馈信息、仓库管理、企业管理、订单管理等基本功能。在功能展示的基础上并采用Springboot+VUE+mybaits+html技术对系统进行了实现,达到了设计的效果
第6章 系统测试
6.1测试概述
该系统能够完成商品选购,商品信息浏览、商品管理,评价管理,订单管理,用户管理等功能,做到所开发的系统操作简单,尽量使系统操作不受用户对电脑知识水平的限制,符合系统可维护性,由于系统涉及的信息比较广,数据库中的数据需定期修改,系统可利用的空间及性能也随之下降,为了使系统更好地运转,系统可以对系统数据及一些简单的功能进行独立的维护及调整;符合系统开放性要求,该系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接。
6.2测试配置
(1)测试环境
系统一旦开发完成以后就要对系统进行测试,在本测试过程中对系统的运行环境平台环境如表6-1所示.
表6-1 系统测试环境
环 境 | 配 置 | 备 注 |
Web服务器(硬件) | 联想 CPU:2.0*2 内存:8G 硬盘:300GB | 100/1000M局域网卡 |
数据库服务器(硬件) | 联想 CPU:2.0*2 内存:16G 硬盘:500GB | 100/1000M局域网卡 |
操作系统(软件) | Windows XP或Windows 7及以上操作系统 | |
Web服务器(软件) | JDK 7.0 Tomcat 8.0 | |
数据库服务器(软件) | SQL Server 2008 数据库 | |
客户机若干 | 联想家用电脑常规配置 | 满足基本的网络运行条件即可 |
(2)测试工具
在对本农产品在线交易系统进行功能测试时采用了当前流行的测试工具WinRunner;对系统进行性能测试时采用用户信息管理软件dRunner。这两款软件性能优越,操作简单,是进行测试的必备工具软件。
(3)测试流程
本系统在进行功能测试的时候采取黑盒测试的方法,在系统进行测试时根据第三章的系统需求分析进行测试,用以检验系统的功能是否能够满足用户的基本需求,测试流程如图6-1所示。
6.3 测试用例
(1)注册测试
表6-2注册测试用例
字段名称 | 描述 |
测试项 | 首页注册功能测试 |
输入数据 | 1、输入正确的邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮 2、输入错误的用户名或密码、邮箱、验证码等,单击“注册”按钮 3、不输入邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮 |
预计输出数据 | 1、用户能正确注册账号,成功插入数据库用户的账户资料,提示注册成功。 2、无法注册用户信息,注册失败。 3、无法注册用户信息,注册失败。 |
使用上述测试用例对前台首页注册界面进行测试,当在输入正确的邮箱、用户名、密码、确认密码、以及验证码之后,系统将弹出注册成功信息提示对话框。
使用上述测试用例对前台首页注册界面进行测试,当在输入错误的用户名或密码、邮箱、验证码之后,系统将提示错误。
使用上述测试用例对前台首页注册界面进行测试,当在不输入用户名、密码、邮箱、验证码之后,点击注册按钮。
(2)登录界面进行测试
表6-3登录测试用例
测试项 | 首页登录功能测试 |
输入数据 | 1、输入正确的用户名和密码,单击“登录”按钮 2、输入错误的用户名和密码,单击“登录”按钮 3、不输入用户名和密码,单击“登录”按钮 |
预计输出数据 | 1、数据库中存在的用户能正确登录,。结果弹出主界面。 2、错误的或者无效用户登录,登录系统失败。 3、输入用户名或密码信息为空,登录系统失败。 |
(3)商品管理进行测试
名称:用户管理测试 目的:测试商品管理界面
内容:口令的输入,合法性检查,合理性检查,界面的显示控制。
下表描述了商品表中目前所存在的记录。
商品名 | 商品类别 | 商品价格 | 商品状态 |
A | A | 389 | 上架 |
B | B | 249 | 上架 |
C | C | 322 | 下架 |
D | D | 168 | 上架 |
添加时应注意事项:
管理员添加商品时必须添加已存在的商品类别,若该商品不属于现有的所有类别,则应该先添加商品类别。
下表描述了添加商品进行测试的用例,主要是为了防止添加商品时出现异常和存在的漏洞。
输入 | 输出 | ||
商品名 | 商品价格 | 商品图片 | |
空 | 参数错误 | ||
空 | 参数错误 | ||
空 | 请选择上传图片 | ||
A | 1 | a.jpg | 添加成功 |
(4)购买商品测试
名称:购买商品测试 目的:测试购买商品界面
内容:口令的输入,合法性检查,合理性检查,界面的显示控制。
下表描述了购买商品的测试用例,防止购买时出错。
表6-6购买商品测试用例
输入 | 输出 | ||
用户ID | 商品ID | 商品数量 | |
11 | 1 | 1 | 购买商品成功 |
22 | 电视 | 请填写商品数量 | |
33 | 电视 | a | 购买失败 |
用户购买商品时,首先判断商品数量是否小于库存,若超出库存数量,则提示商品数量不足。
6.4测试结果分析
通过对农产品在线交易系统的测试,测试结果表明本系统能够完全的完成之前对系统的的功能需求分析,并能够实现农产品交易销售。同时,本系统良好的操作界面和菜单功能设计能够给操作者提供良好的视觉效果,具备了简单、美观的界面设计效果,达到了系统设计的目的。
第7章 总结与展望
经过这几个月的设计和开发,“基于Springboot的农产品在线交易系统”已经完成了,其功能符合设计需求,能够完成用户的注册、在线购买、商品查询和管理员的商品分类管理、订单审核、用户管理、信息维护、查询等功能。经过最后的使用,证明系统完全具有可行性与可扩充性。
在系统的分析阶段,主要是分析系统的需求,理解系统要完成的基本功能,找出系统的用例(Use Case)和角色(Actor),画出系统的用例模型图,用例模型是此后系统建模的基础。在用例的基础上分析顺序图和协作图,得到系统的所有对象,然后建立对象模型。抽象出系统的类,并将系统中联系紧密的类划分为若干个包,画出包图。有了这些基础,就可以将系统划分为小单元功能模块。
整个过程中,我必须认可UML统一建模语言,它让我很清晰的知道自己想做什么,想实现什么,对系统后面的代码编写起到决定性的帮助,同时经过本次系统的设计与实现,让我积累了很多经验,提高了编写程序的能力,为以后的学习和工作打下了坚实的基础。
由于时间有限,本系统还有待继续完善和改进,因此需要进一步进行分析和修改,以使其更加完善!
参考文献
- 王江霖,黄彩霞,樊旭龙.基于Springboot框架的网络资源共享平台的研究与实现[J].电脑知识与技术,2021,17(28):76-78.
- 曹华山.Springboot框架在Web应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109.
- 程红琳. 网上商城品目扩容效果几何[N]. 中国政府采购报,2021-05-18(005).
- 马君峰, 农产品自营网上商城智慧平台V1.0. 甘肃省,甘肃科博科技咨询有限责任公司,2021-02-01.
[5]王娟.基于Android系统的手机网上商城设计与实现[J].电子技术与软件工程,2021(03):43-44.
[6]韩己峰.综合性网上商城引领山东政府采购驶入高速路[J].中国政府采购,2020(12):39-41.
[7]袁江琛.基于MVC框架网上商城的设计与实现[J].信息与电脑(理论版),2020,32(20):126-128.
[8]袁江琛.Ajax+jQuery在网上商城购物车模块中的设计与实现[J].电脑编程技巧与维护,2020(10):34-35+68.
[9]王柯梦,王瑞平.基于B2C网上商城前台系统数据库设计与实现[J].广西质量监督导报,2020(09):70-71.
[10]薄志强. 基于Springboot框架的网上商城系统的设计与实现[D].西安电子科技大学,2020..
[11]张浩. 基于网上商城服务对话系统的研究与实现[D].黑龙江大学,2020.
[12]孙建英.分布式、集中式、区块链技术在网上商城中的应用[J].商场现代化,2020(01):13-15.
[13]李颖,方浪,武瑞婵.“Free-Try”虚拟试衣在网上商城中的实现[J].襄阳职业技术学院学报,2019,18(06):64-66.
[14]王一凡. 基于MOT的云南移动网上商城O2O手机营销策略优化研究[D].云南大学,2019.
[15]布祉颖.论B2C和O2O的进口零食营销的模式——关于零始科技有限公司的零始网研究[J].现代妇女(下旬),2018(12):75-76.
[16]老潘,花椰菜.零食控的购物车[J].宠物世界(狗迷),2018(12):50-55.
致 谢
大学的学习生活总是感觉短暂的,总感到知识还没有学够,但大学毕业就在我们面前,即毕业设计即将的结束,意味着我们的大学生涯即将结束。毕业设计是我们在大学所学知识的一次总结,更是对我们过去所学知识的提炼和升华,通过毕业设计,我们认识到大学学习过程中还有那些知识没有掌握,那些知识需要我们进入深入研究。这次毕业设计让我学到了很多新的知识,研究了一些新的以前自己不熟悉的领域,使我处理问题的能力得到了一定的提升,同时也为今后的继续深造或踏入社会大门提供了很好的锻炼机会。
我也曾经沮丧过,失落过,想放弃过,可是因为你们这不厌其烦的鼓励和支持才使得我坚持了下来,这里我要对我的老师和同学们说句“谢谢你们”。因为我们的知识是有限的,所以本文将不可避免的会出现一些错误和不足之处,还请老师指正。
点赞+收藏+关注 →私信领取本源代码、数据库
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!