水产品销售系统的设计与实现
摘 要
在信息飞速发展的今天,网络已成为人们重要的信息交流平台。水产品公司每天都有大量的信息需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的水产品销售系统。
该系统以Java编程语言、MySQL和前端UI等为开发技术,实现了添加、修改、查看、删除系统数据。本系统采取组件化的方式对系统进行拆分,并对数据库中各个表的增删查改、表与表之间的约束关系进行分析与设计,最终实现符合用户需求功能的商业级应用。
系统界面简洁大方,布局合理,易操作易上手。对应用户的每一步操作,系统都能高响应地做出反馈。系统具体包含对用户的管理、销售单、供应商信息、客户信息、商品信息、采购单、采购入库、销售出库等功能,为水产品销售系统提供一个管理平台,实现对数据地高效、安全地管理。
关键词:B/S模式,Java编程语言,易操作
Design and implementation of aquatic products sales system
Abstract
Today, with the rapid development of information, the network has become an important information exchange platform for people. Aquatic products companies have a lot of information to publish through the network every day. Therefore, I developed an aquatic products sales system based on B / S (Browser / server) mode.
The system takes Java programming language, MySQL and front-end UI as development technology to add, modify, view and delete system data. The system adopts the component-based way to split the system, and analyzes and designs the addition, deletion, query and modification of each table in the database, and the constraint relationship between tables, so as to finally realize the commercial application that meets the needs of users.
The system interface is simple and generous, the layout is reasonable, easy to operate and easy to use. The system can respond to each step of the user's operation with high response. The system specifically includes the functions of user management, sales order, supplier information, customer information, commodity information, purchase order, purchase receipt, sales delivery and so on. It provides a management platform for the aquatic product sales system to realize the efficient and safe management of data.
Key words:B / S mode, Java programming language, easy to operate
目 录
- 绪论
- 背景及意义
随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对水产品销售管理系统方面的要求也在不断提高,水产品的数量更是不断增加,使得水产品销售管理系统的开发成为必需而且紧迫的事情。水产品销售管理系统主要是借助计算机,通过对水产品销售管理系统所需的信息管理,增加管理员的选择,同时也方便对广大管理员信息的及时查询、修改以及对管理员信息的及时了解。水产品销售管理系统对管理员带来了更多的便利,该系统通过和数据库管理系统软件协作来满足管理员的需求。计算机技术在现代管理中的应用,使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题,提高效率。
- 国内外研究概况
随着国内经济形势的不断发展,中国互联网进入了一个难得的高峰发展时期,这使得中外资本家纷纷转向互联网市场。然而, 许多管理领域的不合理结构,人员不足以及管理需求的增加使得更多的人具备了互联网管理的意识。
在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。“水产品销售管理系统”是基于Mysq1数据库,在springboot程序设计的基础上实现的。为确保中国经济的持续发展,信息时代日益更新,蓬勃发展。同时,随着信息社会的快速发展,水产品销售管理系统面临着越来越多的信息,因此很难获得他们对高效信息的需求,如何使用方便快捷的方式使查询者在广阔的海洋信息中查询,存储,管理和共享信息方面有效,对我们的工作和生活具有重要的现实意义。因此,国内外学术界对此进行了深入而广泛的研究,一个新的研究领域一水产品销售管理系统诞生了。
- 开发现状
目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的水产品销售管理系统的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,首页、个人中心、用户管理、销售单、供应商信息、客户信息、商品信息、采购单、采购入库、销售出库、管理员管理等信息管理功能,从而达到对水产品销售管理系统信息的高效管理。
- 本文的组织结构
六个章节共同组成了本文研究及设计内容,包括:
第一章:绪论。本文章的开头部分,对本题目的背景及意义和研究意义等一些做文字性的描述。
第二章:相关技术介绍。主要介绍Java编程技术、Java的开发工具、B/S模式等。
第三章:系统分析。包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
第四章:系统设计。本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。
第五章:系统实现。将本系统分为前提的开发工具介绍和后期的功能代码实现。
第六章:系统测试。系统完成后,根据各个模块的测试用例才对各个模块进行功能测试。
- 相关技术介绍
2.1Myeclipse描述
我们在利用Java来开发系统时通常采用的软件就是Myeclipse,它是用来设计Java, JavaEE的Eclipse插件的调集,采取了 Myeclipse大部分可以实现对Mysql的数据库和Javaee的研究和开发。用了Myeclipse很大的便利了开发人员,系统开发的进度也会得到一些提高。
2.2 Mysql描述
现在Mysql数据库在网络上它可以支撑许多个用户,而且也可以适应客服机和服务器的部署或者配置等,我们这里的服务器和客户机其实就是一种软件上的概念,并且我们使用的计算机硬件也与他们不存在一一对应的关系。
Mysql是一款非常流行的关系型数据库管理系统,它的出现一直都是佼佼者,它不仅功能非常强大,而且使用起来非常方便,并且Mysql的跨平台能力也很好,软件开发人员非常喜欢它的这些强大的优点。不同于其他关系型数据库,对于数据库的管理它有着自己的一套方案,通过对用户设定相应的权限和角色来达到对数据库的管理。由此可见,Mysql是一个能够适用于吞吐量高,可靠性高,效率高的一款数据库管理软件[4]。
优点一:Mysql中对于不同身份的用户都设定其不同的权限来完成不同的业务逻辑,这使得Mysql在安全和完整性远远超出了其他关系型数据库。
优点二:对于那些动画、图形和声音的数据类型Mysql也可以支持,这说明多数据类型Mysql也是可以支持的。
优点三:Mysql还可以做到多个平台的开发,软件开发的多种编程语言都可以实现对Mysql数据库的操作。
2.3Tomcat描述
Tomcat是一个不收费的服务器。使用场景比较适合访问量比较少的情况下。意思就是,将Tomcat安装到电脑上的时候,前端HTML页面的访问请求可以通过它进行解析。实际上,Tomcat是对Apache的扩展,但它相对于Apache却是相对独立作业的,由此可以看作它与Apache 是相对独立进程运行的。
Tomcat最开始是sun公司的戴维森进行开发应用的,经过他的努力,不断地将其变为开源的服务器。还由sun公司将其交给了Apache软件基金会。不断发展的tomcat服务器在最近的一个版本中进行了大量的重构和梳理,使其使用起来更加的方便。基于Tomcat负载均衡算法是一种开源的软件,实现方式。不需要增加额外的硬件投入,实现起来也很方便,特别适用于一般的小企业网站服务器在现在和将来一段时间的扩展。从目前的实践来看,可作为需要进行类似应用的一个参考借鉴。
2.4 spring boot框架介绍
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
- 系统分析
- 可行性分析
- 法律可行性分析
开发软件有没有触犯法律,这涉及到软件或者系统能不能发布的问题。如果触犯了法律,就必将会受到法律的制裁。常见法律问题就是软件抄袭问题,若是抄袭别人软件,将会受到严厉惩罚。
- 技术可行性分析
软件产业经过多年的发展,现在已经达到了很大的规模,从事软件开发的专业人员不计其数,软件产业的重要性已经上升到了影响和推动国民经济发展的核心地位。本系统基于的架构,目前技术已经非常的成熟,是不存在技术上面难以实现的麻烦。
- 经济可行性分析
开发软件所需的时间、人力和物力成本,开发完成后的收益如何,从投资回报的角度软件所需功能在现有经济条件能不能实现等进行深入的考虑,都符合实际的要求。所以洗衣店管理系统具有经济可行性和实用性,可以节约管理成本
- 功能需求分析
1.注册:首先检查用户名和邮箱是否存在,如果都不存在才能进行注册,并将用户输入的密码进行MD5加密,注册成功后提示注册成功,并将用户信息保存到数据库中。
2.商品展示功能模块主要包括产品搜索、查看商品详情功能。未注册用户(游客)和已注册用户均可以在首页进行产品搜索及查看商品详情。具体功能需求如下:
(1)商品搜索:前台用户可以在前台输入关键词进行搜索,搜索成功后返回该商品的动态排序列表,且能够进行分页展示。
(2)查看商品详情:用户可点击对应商品,从而查看该商品的商品详情。
3.采购入库管理功能模块主要包括采购入库、更新采购入库、删除采购入库商品:
加入采购入库:采购入库是存放用户想要入库的商品。
(2)更新入库商品数量:用户可在查看采购入库时更新所需采购商品的数量。
4.商品管理:
(1)商品列表:展示所有商品信息,形成的列表样式。
(2)商品搜索:通过商品名、商品类目来搜索商品。
(3)图片上传:给商品添加商品图片。
(4)增加商品;
(5)更新商品:更新商品的信息,如商品名、商品图片、价格、数量等。
(6)商品上下架;
5.客户信息管理:
(1)添加客户:管理员可对客户信息进行管理,点击添加客户选择客户并输入客户即可添加客户信息。
(2)修改客户信息:管理员可对客户的信息进行修改。
(3)查看客户信息:管理员可查看所有客户信息等。
6.销售单管理:
(1)按单号查询订单:
(2)查看销售详情:
- 非功能需求分析
系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。
- 用例分析
1.采购主管主要使用系统的在线购买业务,下图所示为采购主管的用例图。
![](https://i-blog.csdnimg.cn/blog_migrate/384433b58d250a9c56d0d4e12f3808d5.png)
图3-1 采购主管用例图
2.管理员主要负责用户管理、销售单、供应商信息、客户信息、商品信息、采购单、采购入库、销售出库,下图所示描述管理员的用例图。
![](https://i-blog.csdnimg.cn/blog_migrate/b4a7b0ac82fee8829c3fd7096e9a4720.png)
图3-2 管理员用例图
- 业务流程分析
系统业务流程图如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/5bb2483b39b365efa3e4a9e094e23bb1.png)
图3-3 系统业务流程图
首先系统使用用户分2种,使用购买功能的为普通用户,使用管理功能的为管理员用户,普通用户注册成功后得到账号和密码,在登录页输入账号密码后登录到系统,普通用户便可以浏览到系统展示的商品,然后进行商品购买,接着形成个人购买订单;管理员用户对系统的数据进行维护,包括商品信息的维护,对商品的数量等进行更新和编辑,对客户的订单进行确认和维护等。
- 数据流程分析
如下为系统的顶层数据流图,外部实体有用户和管理员,分别对系统输入数据,从而得到要输出的数据。
![](https://i-blog.csdnimg.cn/blog_migrate/85d5afba8791dfc1d278f2324eb434e2.png)
图3-4系统顶层数据流图
如下图所示为系统底层数据流图。
![](https://i-blog.csdnimg.cn/blog_migrate/e4bc77099e7aed2fb269b29ca639a3f3.png)
图3-5系统底层数据流图
水产品销售系统底层数据流图主要描述系统底层模块的数据流、数据载体、数据处理、外部实体的具体交互。本系统就是管理员和普通用户在商品维护、销售单维护、用户维护等模块上的数据交互。
- 系统设计
- 系统架构设计
水产品销售系统采用三层开发设计模式,分为:用户界面层,业务逻辑层和数据访问层。用户界面层用来和用户交互,业务逻辑层负责业务的处理和各层之间的数据的传递;数据访问层负责对数据库的访问和检索。
系统的架构图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/274fd3fd5c6a435a85bbb9d8e5992db1.png)
图4-1 系统架构图
系统各层之间的调用过程如下:
(1)用户通过用户界面层访问系统,向系统提交请求,界面层对请求进行初步的处理和包装,并判断是否要与业务逻辑层进行交互。
(2)业务逻辑层接收来自界面层的请求,对请求进行数据处理。然后调用数据访问层来实现数据库访问,数据访问层访问数据库,将数据读出并返回给逻辑层。
(3)逻辑层将处理的结果,返回给界面层。界面层加以处理呈现给用户。
- 系统功能结构
为了将系统从“做什么”落实到“怎么做”,基于系统设计原则,对系统功能进行更适合编码实现的功能划分。根据上图的系统架构设计,整理出规范的系统功能结构图,为系统的实现编码做好准备。
如下图所示为系统功能结构图。
![](https://i-blog.csdnimg.cn/blog_migrate/9b350a428a3f45a1da39ab62856ab9dd.png)
图4-2系统功能结构图
(1)用户信息的管理:系统管理员可以对已经注册过系统的用户数据信息进行CRUD操作。
(2)商品数据信息资源管理:管理员可以对系统的商品信息进行增删改查的基本操作。
(3)显示商品分类信息:所有商品的类别都会显示在首页中,用户可根据这些类别快速的找到自己喜欢的商品。
(4)搜索商品:商品很多时,用户不容易查找,因此提供了商品搜索功能,可以通过商品标号对商品进行查找。
- 功能模块设计
用户管理针对所有用户和管理员。未注册用户点击注册,进入注册页面填写新用户信息,得到自定义生成账号后,注册完成。未注册用户注册的活动图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/849432311d814bb2e3ec901cac46a094.png)
图4-3未注册用户注册活动图
用户可进行登录使用更多功能,首先进入用户登录界面,输入用户账号和密码,后台对账号和密码信息进行核对验证,验证成功则页面直接显示登录用户昵称代表登录成功,否则返回用户登录界面。用户登录活动图如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/0d357e9f9c06a14e72318a3b2c19a4c9.png)
图4-4用户登录活动图
用户登录后,进入功能页面,可对自己的信息进行管理,包括个人信息,个人信息,购买订单管理、个人订单管理、在线支付。用户使用功能活动图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/e61a8dc9b2335cbfbd5f0b46c6b5edb0.png)
图4-5用户使用功能活动图
用户功能界面可对自己的密码进行修改。进入修改密码界面后核对当前密码,核对成功后填写新密码。如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/a19246332b7814caf6c44b0ac8c16a50.png)
图4-6修改密码活动图
- 数据库设计
水产品销售系统采用的数据库是MySQL,该部分将根据系统需求和设计,设计合理的数据库。本系统考虑到之后系统的扩展集群,数据库将不使用外键。此外,不用外键时数据管理也较为简单,操作更加方便,性能更高。
- E-R图
E-R图,更加直观的告诉开发人员系统的各个数据的属性,各个数据之间的联系,各个数据的类型。能通过该模型更直观地了解数据库的设计,并根据对其逐渐改善。
本系统图设计,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/2e025917719fb7e63fd93c6c436a9741.png)
图4-7系统E-R图
- 表结构设计
本系统根据第三范式的思想设计数据库,减少最大程度的冗余,总共建立有多个表,用户表、客户信息表、商品表、销售单表、供应商信息表、销售员表、采购主管表、采购员表、采购入库表、销售出库表、采购单表结构如下所示。
supplier_information表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
supplier_information_id | int | 11 | 是 | 是 | 供应商信息ID |
supplier_number | varchar | 64 | 否 | 否 | 供应商编号 |
supplier_name | varchar | 64 | 否 | 否 | 供应商名称 |
supplier_telephone | varchar | 64 | 否 | 否 | 供应商电话 |
supplier_address | varchar | 64 | 否 | 否 | 供应商地址 |
person_in_charge | varchar | 64 | 否 | 否 | 负责人 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
salesperson表: |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
salesperson_id | int | 11 | 是 | 是 | 销售员ID |
gender | varchar | 64 | 否 | 否 | 性别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sales_slip表: |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
sales_slip_id | int | 11 | 是 | 是 | 销售单ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
sales_time | date | 0 | 否 | 否 | 销售时间 |
sales_volumes | int | 11 | 否 | 否 | 销售数量 |
customer_card_number | varchar | 64 | 否 | 否 | 客户卡号 |
customer_name | varchar | 64 | 否 | 否 | 客户姓名 |
selling_price | int | 11 | 否 | 否 | 销售价格 |
total_amount | varchar | 64 | 否 | 否 | 总金额 |
salesperson | int | 11 | 否 | 否 | 销售员 |
cumulative_integral | int | 11 | 否 | 否 | 累计积分 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sales_delivery表: |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
sales_delivery_id | int | 11 | 是 | 是 | 销售出库ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
sales_volumes | int | 11 | 否 | 否 | 销售数量 |
delivery_time | date | 0 | 否 | 否 | 出库时间 |
salesperson | int | 11 | 否 | 否 | 销售员 |
ex_warehouse_remarks | text | 0 | 否 | 否 | 出库备注 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
purchasing_supervisor表 |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
purchasing_supervisor_id | int | 11 | 是 | 是 | 采购主管ID |
gender | varchar | 64 | 否 | 否 | 性别 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
purchase_warehousing表: |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
purchase_warehousing_id | int | 11 | 是 | 是 | 采购入库ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
purchase_quantity | int | 11 | 否 | 否 | 采购数量 |
warehousing_time | date | 0 | 否 | 否 | 入库时间 |
buyer | int | 11 | 否 | 否 | 采购员 |
warehousing_remarks | text | 0 | 否 | 否 | 入库备注 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
purchase_order表: |
|
|
|
|
|
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
purchase_order_id | int | 11 | 是 | 是 | 采购单ID |
commodity_number | varchar | 64 | 否 | 否 | 商品编号 |
commodity_type | varchar | 64 | 否 | 否 | 商品类型 |
trade_name | varchar | 64 | 否 | 否 | 商品名称 |
procurement_time | date | 0 | 否 | 否 | 采购时间 |
purchase_quantity | int | 11 | 否 | 否 | 采购数量 |
supplier_name | varchar | 64 | 否 | 否 | 供应商名称 |
purchase_price | int | 11 | 否 | 否 | 采购价格 |
total_amount | varchar | 64 | 否 | 否 | 总金额 |
- 系统实现
- 开发工具
系统中应用的开发工具总结如下表所示。
表5-1开发工具
名称 | 工具 | 版本 |
操作系统 IDE(Integrated Development Environment) | windows ZendStudio | 7/8/10 2017 |
服务器 | Apache | 9.10.7 |
数据库 浏览器 界面工具 | MySQL 谷歌 Photoshop | 5.6 6.0 2016 |
- 登录模块
用户在首页点击登录,进入用户登录界面uerLogin.Java,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层,调用userLogin方法,通过实现登录的接口向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。
用户点击注销,清空浏览器session值,然后返回登录页或者首页。
登录界面如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/3c69c90ec77407730777c9ecf14e4b3e.png)
图5-1登录界面
登录关键代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
- 用户模块
- 用户首页模块
系统呈现出一种简洁大方的首页:界面简约、鳞次栉比,用户能轻车熟路的使用。出于对系统使用群体广泛的顾虑,应有良好性能的后台。
如下图所示为系统的首页界面。
![](https://i-blog.csdnimg.cn/blog_migrate/752e459c93d6f21a68e511e492411c7d.png)
图5-1用户首页界面
- 个人信息模块
登录用户在首页点击进入用户中心userCenter.Java,再点击修改个人信息按钮进入userChangeInfo.Java界面,系统根据session中存储的目前登录的用户的账号,向控制层发送请求,搜索当前用户信息,控制层向用户接口调用查询用户方法,向数据库的用户表搜索当前用户信息并将用户信息以对象的形式层层返回到userChangeInfo.Java界面,显示出当前用户的个人信息。
若用户要对个人信息进行修改,则通过修改当前信息之后点击确认,向控制层发送更改后的用户信息,调用修改用户信息的方法,通过实现用户接口向数据库用户表更新用户信息,若成功则反馈注册成功,则返回的userChangeInfo.Java界面被更改成功;若失败则显示修改失败。
![](https://i-blog.csdnimg.cn/blog_migrate/05b746450ec86ddcf1b28b63e1358cf7.png)
图5-1个人信息界面
- 供应商信息模块
供应商信息过程中,首先使用getmap(id,"xinxi"),通过供应商ID得到供应商数据,将供应商数据赋值给供应商,调用CommDAO的insert方法将供应商数据插入供应商表中,最后查看个人历史供应商信息记录,可以销毁供应商数据。
供应商信息界面如图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/8956cc8b8331a1d89f18e3b5dfacd089.png)
图5-1供应商信息界面
- 商品信息模块
商品信息过程中,首先使用getmap(id,"xinxi"),通过商品ID得到商品数据,将商品数据赋值给商品信息,调用CommDAO的insert方法将商品数据插入商品档表中,最后查看个人历史商品信息记录,可以销毁历史商品信息数据。
![](https://i-blog.csdnimg.cn/blog_migrate/3cb4ec4b2417ec19be379a9f0d9e0076.png)
图5-1商品购买界面
- 管理员模块
- 采购员管理模块
采购员在yhzhgl查看采购员信息,先使用sql语句查询出所有采购员表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用Java得到每个ArrayList对象的数据,在Java页面中解析ArrayList对象,得到其各个键值对的值。
采购员管理界面如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/7550f7de344c3ee367f737ef7c08d389.png)
图5-1采购员管理界面
采购员管理逻辑代码如下所示。
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
log.info("[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
- 商品管理模块
管理员在后台管理界面点击到所有商品界面shangpin_list.Java,向控制层发送请求,搜索当前所有商品信息,商品控制类向商品实现接口调用搜索全部商品的请求,向数据库的商品表搜索当前所有商品并将商品信息以对象的形式层层返回到shangpin_list.Java界面,显示出当前所有商品信息。若要对商品信息进行修改和删除,则分别进入shangpin_updt.Java或shangpin_delete.Java,通过商品的控制层向商品实现接口调用对应的修改或删除方法,向数据库的商品表做相应的持久层操作。
商品管理界面如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/ed6f04ec39d6f92b06899a36cf204d2d.png)
图5-1商品管理界面
商品管理关键代码如下所示。
@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();
}
- 客户管理模块
添加客户信息时,输入必填字段后,表现层的YifangController接受传过来的客户信息参数,再调用YifangController类的addYifang方法,经过YifangService业务层到YifangMapper持久层的处理,完成对整个添加客户信息的操作。addYifang方法也和用户管理中的addUser方法类似,同时做添加和修改工作。
修改客户信息时,选择需要修改的客户进行修改,调用YifangController控制器的editYifang方法,拿到该客户原本的信息并显示到页面,管理员再对需要修改的客户信息字段进行修改,完成后调用addYifang方法,调用业务层的updateByKey方法,更新数据库的客户信息表的数据。
客户管理流程图如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/0ba4183a18748ca42d1f9ab60f0fafeb.png)
图5-1客户管理流程图
客户管理界面如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/7a5f8b72ffc268b898013e00cf4b1f71.png)
图5-1客户管理界面
客户管理关键代码如下所示。
@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);
}
- 销售出库管理模块
删除销售出库时,选择需要删除的销售出库进行删除,把主键的uId传到HetongController控制器,再调用控制器的deleteHetong方法,数据经过HetongService业务层解析和处理,请求HetongMapper持久层调用deleteByPrimaryKey方法操作数据库将销售出库数据从数据库中删除。
查找销售出库时,输入需要查找的销售出库名,调用getData方法获取所有数据并且进行分页,把获取到的所有数据显示到视图上,这时候只需要用脚本方法便能快速查找,不涉及对数据库操作。
销售出库管理流程图如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/d4d3989d04c4fb5e5b9018559ddabe04.png)
图5-1销售出库管理流程图
销售出库管理界面如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/7e2b79f14119490a9cbe5977645b5e09.png)
图5-1销售出库管理界面
- 系统测试
- 测试概述
软件测试是软件开发完成后必须经过的一道程序,它在软件开发过程中地位十分重要,需要由专业的测试工程师来对软件进行各方面的测试,大到功能模块测试,小到代码的单元测试,这对测试工程师来说需要有足够的耐心和专业的测试方案,软件测试归根结底就是对软件的结构和功能的综合测评,需要做到结构稳定和功能正确,二者兼顾。软件测试也叫寻找系统bug的过程,世界上没有完美无缺、不存在bug的软件,只能将软件的bug降到最低最小,来追求极致。
- 测试过程
- 登录测试
登录测试是系统最开始就要进行,测试用户能否登录,才能完成后续的功能操作。
登录测试用例表如下所示。
表6-1登录测试
用例编号 | YL001 | 程序版本 | 1.00 |
功能名称 | 使用者登录测试 | 编制人 | 李铁蛋 |
功能描述 | 根据用户的登录情况测试 | ||
用例目的 | 测试用户登录情况是否正确 | ||
测试项 | 测试数据 | 测试结果 | 预期结果 |
用户名 | 为空 | 请输入用户名 | 请输入用户名 |
密码 | 为空 | 请输入密码 | 请输入密码 |
用户密码组合 | 用户名:klouse 密码 klouses | 用户与密码不匹配 | 用户与密码不匹配 |
用户密码组合 | 用户名 : klouse 密码 klouse | 进入系统 | 正确的用户名和密码 登录系统 |
- 信息录入测试
管理员在发布信息页面,通过按照预先格式发布信息,如果因为输入时候缺少相关内容,就不能发布成功,且有相应错误提示
信息录入发布测试用例表如下所示。
表6-1信息录入发布测试
用例编号 | YL002 | 程序版本 | 1.00 |
功能名称 | 信息发布测试 | 编制人 | 李铁蛋 |
功能描述 | 对使用者发布或者录入信息进行测试,判断其功能是否达到预期的要求 | ||
用例目的 | 对系统使用者录入发布信息进行原型测试。 | ||
测试项 | 测试数据 | 测试结果 | 预期结果 |
属性1 | 为空 | 请输入属性1对应的数据 | 请输入属性1对应的数据 |
属性2 | 为空 | 请输入属性2对应的数据 | 请输入属性2对应的数据 |
属性3 | 为空 | 请输入属性3对应的数据 | 请输入属性3对应的数据 |
全部输入 | 数据均填入 | 录入发布成功 | 录入发布成功 |
- 信息更新测试
管理员在更新信息页面,通过按照预先格式更新信息,如果因为输入时候缺少相关内容或者更新的数据不符合当前规范的话,就不能更新成功,且有相应错误提示
信息更新测试用例表如下所示。
表6-1信息更新测试
用例编号 | YL003 | 程序版本 | 1.00 |
功能名称 | 信息更新测试 | 编制人 | 李铁蛋 |
功能描述 | 对使用者更新信息进行测试,判断其功能是否达到预期的要求 | ||
用例目的 | 对系统使用者更新信息进行原型测试。 | ||
测试项 | 测试数据 | 测试结果 | 预期结果 |
属性1 | 编号:321 | 编号更新成功 | 编号更新成功 |
属性2 | 名称:名称1 | 名称更新成功 | 名称更新成功 |
属性3 | 内容:内容1234内容 | 内容更新成功 | 内容更新成功 |
全部输入 | 数据均未更改 | 更新成功 | 更新成功 |
- 信息删除测试
管理员在信息页面,通过点击数据删除按钮来删除该条数据,如果该数据和其他数据有关联,则提示是否确定删除。
信息删除测试用例表如下所示。
表6-1信息删除测试
用例编号 | YL004 | 程序版本 | 1.00 |
功能名称 | 信息删除测试 | 编制人 | 李铁蛋 |
功能描述 | 对使用者删除信息进行测试,判断其功能是否达到预期的要求 | ||
用例目的 | 对系统使用者删除信息进行原型测试。 | ||
测试项 | 测试数据 | 测试结果 | 预期结果 |
数据1 | 无任何关联的数据1 | 数据删除成功 | 数据删除成功 |
数据2 | 和其他数据有关联的数据2 | 请确认是否删除 | 请确认是否删除 |
- 测试结果
在经过之前的所有的工作之后,通过对软件的测试方法、测试原则还有典型的测试用例进行全面的、深入的介绍。经过对系统的全面测试,系统目前所具有的所有功能均成功的实现并且通过了测试,整个系统实现了基于Java 开发的期望。
- 总结与展望
- 总结
水产品销售系统采用MVC结构,该结构非常完美的集优点于一身,成熟、强大、易理解易使用,通过使用这个结构,降低了开发的难度。本系统实现了基于Java的水产品销售系统,将销售流程转化成电脑操作流程,具体实现了对销售订单和客户的管理、系统人员管理、商品和商品类型管理,并提供查询统计功能来对订单和商品的相关数据进行统计分析,让使用者能更清晰的掌握运营情况,帮助使用者进行销售管理,简化工作流程,提高工作效率和盈利。
- 展望
目前完成的水产品销售系统,还有许多有待改进的地方。一个是功能上的改进,用户理应可以修改自己的相关信息,故应增设个人中心功能;另外,系统如果能提供更多查询统计功能就会使得系统更加丰富和多样化,比如客户购买力排行功能、购买积分功能等。第二个是技术上的改进,由于对开发框架不太熟悉,权限管理这部分,本系统采用一个Java页面来规定好导航栏,即跳转的页面,这相对比较不灵活,如果将URL路径记录到数据库并实现增删查改会比较好;另外就是对EasyUI的使用还不够熟练,视觉效果和界面观感有待提升,希望日后能对这个系统有所改进。
参考文献
[1]于旭蕾,李相泽.基于JAVA技术平台的气动轻量机械臂伺服控制系统设计[J/OL].计算机测量与控制:1-8[2022-05-08].http://kns.cnki.net/kcms/detail/11.4762.tp.20220506.1000.004.html
[2]栗岩,栗国栋. 水产品识别检测智能销售系统一体机[P]. 上海市:CN114333183A,2022-04-12.
[3].武汉白沙洲:水产品进入销售旺季,价格保持稳定[J].科学养鱼,2022(01):58.DOI:10.14184/j.cnki.issn1004-843x.2022.01.030.
[4]吴微微.基于MVC模式的电子产品销售系统的设计与研究[J].信息与电脑(理论版),2021,33(23):113-115.
[5]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[6]Qu Xiaona. Application of Java Technology in Dynamic Web Database Technology[J]. Journal of Physics: Conference Series,2021,1744(4).
[7]朱春雨, 新荒渔场 水产品销售. 张文实 主编,大安年鉴,吉林文史出版社,2018,271,年鉴.DOI:10.40187/y.cnki.yjlda.2020.001744.
[8]Duqing Qu, Guangzhong Hu, Cong Deng , Yuan Liu. Web Online Teaching Answering System based on Java Technology[J]. Frontiers in Economics and Management,2020,1(5).
[9].宁夏水产品市场:价格比较平稳,产地水产品有零星销售[J].科学养鱼,2020(04):59.
[10]莫嘉延,麦国通,区子阳,黄志权,曾云龙.广东佛山高明区销售水产品中副溶血性弧菌污染状况分析[J].公共卫生与预防医学,2019,30(06):37-39.
[11]郭胜男. 生鲜水产品冷链物流销售环节风险管理研究[D].安徽理工大学,2019.
[12]许敏慧,焦朝霞.浙江省水产品网上销售存在的问题及对策[J].电脑知识与技术,2018,14(30):283-285.DOI:10.14004/j.cnki.ckt.2018.3599.
[13]刘俊敏, 合缘水产品销售订货管理系统. 湖北省,孝昌县合缘水产养殖专业合作社,2018-10-11.
[14]张柠柠.水产品销售SWOT分析[J].农村经济与科技,2018,29(12):80.
[15]范宇.全渠道零售模式下水产品销售与冷链配送的创新研究[J].现代经济信息,2018(08):169-170.
[16]盛慧娟.舟山鲜活水产品电子商务销售模式研究[J].管理观察,2017(36):57-58.
[17]GB/T 34767-2017, 水产品销售与配送良好操作规范[S].
致谢
在老师的教导和帮助下,本人完成了本篇论文,老师对论文的内容、格式都有非常严格的要求,在我写毕业论文的过程中,他多次给出了建议,并定期检查,对我们严格要求,帮助我们在文档的编写上写到极致和正确,他这种教学和工作态度,让我对他产生无限的敬佩感和尊敬感。写毕业论文的同时,作为应届生,我也忙着找工作中,遇到了很多选择,感到困惑迷茫的时候,老师给了我很多意见,感谢老师的耐心开导,跟她的聊天我明白了许多。
我还要感谢我的父母,一直以来都非常支持和相信我,在精神和经济上给了我很多力量,如今我将毕业走上工作之路,终于能报答父母的养育教导之恩。还有我大学期间所有老师和全体同学,遇到问题时,这些老师同学总是无私地帮助我,真的非常感谢,我也会加油努力成长为一个有用的人。
免费领取项目源码,请关注点赞+私聊