基于SpringBoot的中小型超市数据分析系统设计与实现

目 录

摘 要 I

Abstract II

引 言 1

1 系统开发相关技术 3

1.1 SpringBoot框架 3

1.1.1发展历程 3

1.1.2 什么是SpringBoot 3

1.1.3 SpringBoot特性 3

1.1.4 SpringBoot的优势 3

1.2 MyBatis框架 4

1.2.1框架简介 4

1.2.2框架特性 4

1.3 Java语言 5

1.3.1 Java语言简介 5

1.3.2 Java语言的重要特性 5

1.4 BootStrap框架 6

1.4.1框架简介 6

1.4.2框架特性 6

1.5小结 6

2 系统分析 7

2.1功能性需求 7

2.1.1 商品库存模块分析 8

2.1.2 供应商数据模块分析 8

2.1.3 消费者数据模块分析 9

2.1.4 销售数据模块分析 9

2.1.5 管理员模块分析 9

2.2 非功能需求分析 10

2.2.1 编码规范 10

2.2.2 界面要求 10

2.3 小结 10

3 系统设计 11

3.1 系统架构设计 11

3.2 客户端服务端通信设计 12

3.3 数据库设计 13

3.4 数据分析核心设计 19

3.5 小结 20

4 系统实现 21

4.1系统服务端实现 21

4.1.1商品库存分析模块 21

4.1.2 供应商数据分析模块 22

4.1.3 消费者数据分析模块 23

4.1.4 销售数据分析模块 24

4.1.5管理员模块 25

4.2 浏览器客户端的实现 26

4.2.1 动销率分析 26

4.2.2 库存比分析 27

4.2.3 库销比分析 27

4.2.4滞销商品分析 27

4.2.5 库存预警 28

4.2.6 商品分类供应比例分析 28

4.2.7 商品退货分析 29

4.2.8 客流量分析 29

4.2.9 客单价分析 30

4.2.10 客层分析 30

4.2.11 消费者满意度分析 31

4.2.12 销售额分析 31

4.2.13 毛利润分析 32

4.2.14 净利润分析 32

4.2.15 员工绩效分析 33

4.2.16 系统登录 33

4.2.17 查看或更改个人信息 34

4.2.18 修改密码 34

4.2.19 查看登录日志 35

4.2.20 查看密码修改日志 35

4.3 小结 36

5 测试部署 37

5.1系统测试 37

5.2 系统部署 39

5.3 小结 40

结 论 41

致 谢 42

参考文献 43

摘 要

传统中小型超市进销存系统仅仅能够提供数据的管理功能,没有任何数据分析能力,导致大量具有时效性的数据被浪费,不利于中小型超市的未来发展。基于SpringBoot的中小型超市数据分析系统是一款Web应用系统。本系统在中小型超市进销存系统运营基础上,分离其数据产物,利用数据库定义数据之间的关系规则,并将数据应用于这种规则,实现对中小型超市的数据分析能力。系统设计的架构模式为B/S结构,浏览器端应用BootStrap框架实现页面渲染、SpringBoot框架构建服务端。数据库服务器选择MySQL服务器。系统主要由商品库存分析、供应商数据分析、消费者数据分析、销售数据分析、管理员五大功能模块组成,实现了对中小型超市数据信息的图形化分析处理。本系统的开发价值是多角度的。首先,系统能提供给用户最直观、简洁的分析数据,系弥补了销售行业里中小型超市数据分析领域的市场空缺,使中小型超市能够简单的拥有自己的数据分析能力。其次,本系统能够为中小型超市在营销、管理等多个方便提供准确、客观的数据支持。通过该系统能够准确找到中小型超市自身存在优势与不足,保证了中小型超市能够在残酷的市场竞争中稳步前进,对中小型超市的健康可持续发展具有指导意义。

关键词:SpringBoot; MyBatis; MySQL; 数据分析

Abstract

The traditional small and medium-sized supermarket invoicing system can only provide data management functions without any data analysis capabilities, resulting in a large amount of time-sensitive data being wasted, which is not conducive to the future development of small and medium-sized supermarkets. The data analysis system of small and medium-sized supermarkets based on SpringBoot is a Web application system. This system is based on the operation of the small and medium-sized supermarket invoicing system. It separates its data products, uses the database to define the relationship rules between the data, and applies the data to such rules to realize the data analysis capability of the small and medium-sized supermarkets. The architecture mode of the system design is B / S structure. The browser side uses BootStrap framework to realize page rendering and SpringBoot framework to build the server. Select MySQL server as the database server. The system is mainly composed of five major functional modules: commodity inventory analysis, supplier data analysis, consumer data analysis, sales data analysis, and administrator, and implements graphical analysis and processing of data information for small and medium-sized supermarkets. The development value of this system is multi-angle. First of all, the system can provide users with the most intuitive and concise analysis data, which makes up for the market gap in the data analysis of small and medium-sized supermarkets in the sales industry, so that small and medium-sized supermarkets can simply have their own data analysis capabilities. Secondly, the system can provide accurate and objective data support for marketing and management of small and medium-sized supermarkets. The system can accurately find the advantages and disadvantages of small and medium-sized supermarkets, which ensures that small and medium-sized supermarkets can steadily advance in the brutal market competition, and has a guiding significance for the healthy and sustainable development of small and medium-sized supermarkets.

Keywords: SpringBoot; MyBatis; MySQL; Data analysis

引 言

随着21世纪以来计算机科学技术水平的高度发展和不断进步,数据化、信息化的时代加速到来,人们每天所面对和收集的信息量越来越多,数据分析渐渐走进了人们的生活。数据分析在国内外引起极大关注,国外的发展已经到达了轻车熟路的地步,其市场额度已经是每年达到千亿美元级别。同时,国外的数据分析行业有着重要的地位。美国为了进行专业的数据分析,专门成立了数据中心,为本国和世界其他国家的数据分析研究提供了平台。中国在经济迅速崛起的过程中,各大企业都充分的了解数据分析在重大决策前的必要性。正是由于以上种种因素,在我国社会中数据分析的人才需求特别多,并且短期内求过于供。

数据分析主要的内容是找到在看似无规则的数据中萃取有用的信息,找到其中隐含的关联规则。数据分析在实际应用中能够帮助人们做出更加符合实际的决策。数据分析如果没有数据的支撑是完全没有意义的,讨论数据分析,最先考虑到的是分析的对象,每一个企业每一个人或者事物都可作为数据分析的对象。企业的数据来源通常是内部产生或者外部引进,数据分析企业的价值主要体现在增强了用户的体验,实现了企业资源的更加高效的利用,进而让企业充分发挥自身优势,实现利润和发展齐头并进。

数据分析在大型企业内部有着广泛的应用,随着技术工具的成熟,数据分析正在慢慢向人们生活的每个角落渗透。即使这样,数据分析领域依然有空缺。对于零售行业来说,中小型超市的数据分析应用领域基本无人问津。由于其数据来源非常广泛,每天的营业额、客流量、利润、商品售出量、库存增减等一系列指标都可作为数据分析的对象,市场前景非常广阔。基于SpringBoot的中小型超市数据分析系统能够对中小型超市的运营过程中的数据进行分析,将分析结果反馈给超市管理者,让管理者更加方便的管理和营销,使中小型超市的每一项决策都脚踏实地,真正做到数据化、科学化管理。综上所述,本系统能正确、高效地利用好中小型超市经营数据,从数据中找到对超市未来发展有指导意义的信息,解决了中小型超市当下面临的数据分析应用的难题。

文章采用如下结构:

引言部分分析论证国内外数据分析技术的发展和应用现状、数据分析目前重要的市场地位、数据分析的意义和价值、能够解决的问题、以及数据分析在中小型超市中的应用,与其带来的实际效果。

系统开发相关技术部分指出开发应用的有关技术。具体列举SpringBoot技术、MyBatis框架技术、Java语言、BootStrap框架技术。从框架和开发语言的特性以及优势两个方面说明选择以上技术的原因。

系统分析部分通过用例图指出系统的具体用例。介绍系统的模块划分,系统的具体工作原理,和系统各个模块需求的拆分。同时,也介绍了系统在实现过程中的一些具体开发要求。

系统设计部分阐明系统架构原理,系统架构的优势,数据库表结构的设计,包括每张数据表的字段类型、约束等具体信息。同时,对系统客户端浏览器到服务端服务器的通信原理进行解析。

系统实现部分阐明系统各个模块的实现原理并列举部分功能模块实现的代码。同时进行系统的客户端浏览器界面设计的结果展示,对于系统实现的服务端、数据库存储过程等核心代码举例介绍。

测试部署部分说明系统每一个模块的测试用例。包括系统测试内容、测试中操作、期望得到的结果,以及实际测试完毕后的结果。并且,将测试前的假设结果和测试后得到的真实数据结果对比,给出测试结论。

1 系统开发相关技术

1.1 SpringBoot框架

1.1.1发展历程

Spring框架慢慢变得成熟之后无论在个人开发还是企业开发中都应用非常广泛[1]。由此Spring 有原来功能单一体量很小的框架逐渐演变称为功能丰富,能够解决大多数企业级开发问题开源框架[2]。Spring对Apache软件基金会的多数开源软件都能够完美支持。但是任何事物不会十全十美,尽管Spring有着各种各样的优点,但配置文件非常复杂晦涩[3]。为了解决以上各种难题,SpringBoot诞生了。

SpringBoot的面世让开发者们不在为复杂的配置文件头疼,但是它是在Spring框架的基础上研发的,为了让开发者更好的使用SpringBoot,官方对其十分重视,现在已经成为公司的顶级项目,为SpringBoot技术的未来发展奠定了良好的基础。

1.1.2 什么是SpringBoot

SpringBoot 技术由 Pivotal 技术团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程[4]。

SpringBoot技术让Spring应用的开发过程变得非常简单,一个成型的软件产品运用SpringBoot框架来开发以少量的代码就可以完成。当开发者用到了其他开源框架的时候,不必担心整合问题,SpringBoot已经把一切都准备好了。例如,本系统用到了SpringBoot技术,包括SpringMVC、Spring、MyBatis技术框架的整合[5],也就是SSM框架。

1.1.3 SpringBoot特性

(1)使用 SpringBoot技术可以快速构建一个项目

(2)内置Tomcat、Jetty等Web容器

(3)强大开源社区支持,开发工具包众多

(4)支持项目热启动

(5)能够在运行在多数开发环境如 IntelliJ IDEA 、eclipse

1.1.4 SpringBoot的优势

假设没有利用SpringBoot 之前开发一个 Web 项目需要做哪些工作?首先需要有最基本的web.xml和applicationContext.xml,web.xml在JavaWeb项目中不是必须的[6],但用Spring框架开发时,web.xml必须要配置,作用是加载Spring配置文件。此外,还需要Dao、Service分层配置文件、日志文件等。大型项目中需要的配置会更多更加复杂。

不仅仅是配置方面存在以上问题。在拉取开发工具包的时候出现版本兼容性和冲突的可能性非常大,导致程序出现莫名其妙的错误。这个时候SpringBoot的优势就非常明显,这些问题都会被SpringBoot解决,开发者只需专注代码编写。

1.2 MyBatis框架

1.2.1框架简介

MyBatis作为持久层框架[7],能够自定义实现SQL、存储过程以及高级映射,是一款半自动框架。MyBatis将JDBC进行封装处理,但不会像JDBC那样手动获取参数和结果集,而是通过XML配置或者注解配置来实现对象的一一映射,通过接口返回执行结果。

1.2.2框架特性

(1)对JDBC的进一步封装

JDBC通过各个数据库厂商定制API实现数据库的交互[8],但JDBC十分偏底层,实现数据库访问的功能需要编写大量代码。在实现插入功能的时候,MyBatis只需要调用insert接口,传递对象参数即可实现插入功能,返回操作结果。

(2)学习难度低

MyBatis的学习和在实际项目中的应用都很简单,这也是该框架为什么那么流行的一个原因。倘若开发者对Java语言和数据库脚本非常熟悉,那么入门学习非常容易。

(3)自定义SQL语句

类似的ORM框架,如Hibernate,是全自动框架,所有SQL语句自动生成,虽然可以节省时间,但大大降低了灵活性,MyBatis框架能够自定义SQL语句,能够充分利用不同厂商数据库的自有特性。

(4)可以与Spring完美集成

MyBatis框架支持与Spring框架的集成,利用配置文件将二者无缝衔接,SSM框架就是经典案例,这也使MyBatis框架更加易用。

(5)良好的性能

MyBatis支持池化技术,能非常有效的减少资源开销,大幅度提升程序运行效率。

1.3 Java语言

1.3.1 Java语言简介

Java语言是一种纯粹的面向对象语言[9],分为JavaME、JavaSE、JavaEE三个平台。从Java诞生以来,成为了全世界开发者关注的热点。其融合了C++语言的开发优势,放弃了C++里多继承、指针等晦涩难懂的概念,成为了最受欢迎的编程语言之一。

1.3.2 Java语言的重要特性

(1)跨平台:Java的跨平台特性是Java语言的一个非常重要的特性[10],Java语言是半编译半解释型的语言,Java源文件经过JVM编译成为字节码文件,这些字节码文件由JVM负责解释执行。Windows、Linux平台有各自的JVM,但是都可以解释编译后的字节码文件,基于此消除了平台之前的障碍。Java如此受欢迎,和这一特性有着不可分割的关系。

(2)简单:Java放弃了C++语言多继承、指针、运算符重载等特性[11],使其更加简洁,众多强大的开源社区、开源软件库为Java开发提供有力支持,海量的技术文档能够解决大多数开发难题,面向对象技术使得应用程序的开发变得简单易用,节省代码。

(3)面向对象:Java语言里,一切都是对象[12],对象有属性和行为。对象的属性可以存取数据,对象的行为可以操作数据。Java是一种面向对象的语言,能够支持程序的扩展性、复用性等多个方面

(4)安全性:Java在编译Java文件时,会对文件进行校验,确保文件中的内容是JVM能够接受的[13],并且不会对JVM造成损害。运行过程中在经过字节码校验之后类加载器会把字节码文件载入,这就保证了JVM的平稳安全运行,同时Java用引用代替了指针,加上自动垃圾回收机制,开发者减少了内存泄漏的风险[14]。

1.4 BootStrap框架

1.4.1框架简介

Bootstrap框架是Twitter公司研发的一款前端框架,目前在国内比较流行。Bootstrap 基于HTML、CSS、JavaScript,使用简便,用户可以根据需求定制。其丰富的组件,漂亮的界面几乎能够满足所有Web应用前端页面的需要,让Web应用开发更简单、便捷。

1.4.2框架特性

(1)浏览器支持:大多数浏览器都能够很好的兼容Bootstrap。

(2)容易上手:有网页设计的基础知识,就能够轻松学习BootStrap。

(3)统一的前端接口解决方案。

(4)内置功能强大易用的组件,个性化定制。

(5)Web应用开发前端设计最佳解决方案。

(6)开源框架,无版权限制。

1.5小结

本章主要介绍了系统开发涉及到的技术。包括SpringBoot框架、MyBatis框架、Java语言、BootStrap框架,主要是从技术的起源、特性、应用场景以及开发优势四个角度进行简单介绍。

2 系统分析

2.1功能性需求

本系统划分为五个模块,分别为商品库存分析模块、供应商数据分析模块、消费者数据分析模块、销售数据分析模块、管理员模块。数据分析系统用例图见图2.1。

图2.1 数据分析系统用例图

图2.2为系统流程图,客户端把用户输入的数据打包发送给后台服务器,服务器对用户名和密码进行校验,在验证完毕后把结果反馈给客户端,登录成功之后,用户可以操作商品库存分析、供应商数据分析、消费者数据分析、销售数据分析几大功能模块。

图2.2 系统流程图

2.1.1 商品库存模块分析

动销率分析:此功能模块分析超市库存的动销率,动销率是指商品销售品种数占中小型超市商品总种类数的百分比,这个比率是评价中小型超市各种商品销售情况的指标之一,商品动销率计算公式为:已销售品种数/超市经营总品种数。通过此模块可以查看历年每月商品库存的动销率和本年度每个月的动销率。

库存比分析:此功能模块分析超市每种商品大分类的库存占比,库存比的含义是超市商品某一大分类库存量,占超市所有商品大分类的总库存量的百分比,结果可以看出每个大类商品的比例,从而分析那一大类商品库存低需要补货,那类商品库存较高,如果不是畅销商品,需要打折促销。

库销比分析:此功能模块分析商品每个月的销售情况,库销比指的是指商品月平均库存量与月平均销售额的比值,能够反映出中小型超市库存与销售额的综合关系,比值越大,说明销售情况不佳。

滞销商品分析:此功能模块可以分析出中小型超市一个月内没有销售记录的商品,即为滞销商品。管理员可以该通过分析结果及时打折促销,清理库存,或者指定其他策略解决问题。

库存预警:此功能模块分析出每个种类商品的库存状态,提供给超市管理者处于积压状态或短缺状态的库存商品数据,商品短缺状态指的是商品库存不足所有商品平均库存的百分之五十,此时说明该商品库存数量特别低,即处于短缺状态,结合滞销商品分析结果,确定是否需要及时补货。商品积压状态指的是商品库存大于平均商品库存的百分之一百五十,确定商品是否滞销后,进而确定是否需要及时清理库存。

2.1.2 供应商数据模块分析

商品分类供应比例分析:通过此功能模块可以分析供应商的供应商品数量占对应商品分类的总供应量的百分比。如果某一大分类、中分类或者小分类的商品全部由一个供应商供应,那么超市管理者需要考虑是否需要引进同类商品的其他品牌供应商,来增加商品的品牌种类,进而给消费者更多的选择机会,增加销售额或者销售利润。

商品退货分析:通过此功能模块可以分析出每个月每个品牌供应商供应商品的退货信息,例如,那个大类或小类的商品退货数量最多,说明该供应商的商品无论是品牌还是商品质量都不能达到客户的要求,超市管理者可以考虑更换该类商品的供应商,从而尽最大可能挽回损失。

2.1.3 消费者数据模块分析

客流量分析:通过此功能模块可以查看每天的客流量,包括男型顾客、女性顾客的数量和顾客总数。管理者可以根据男性顾客和女性顾客的数量关系,指定商品采购计划,如果女性顾客较多,那么应该较多采购女性顾客大多需要的商品。

客单价分析:通过此功能模块可以分析出每个月顾客的平均消费情况,客单价的计算方法是在一个月内的所有顾客消费总额除以对应年月的所有顾客数量。这组数据的意义是提供给管理者每个月客单价的变化。

客层分析:通过此功能模块能够分析中小型超市客流量中顾客的年龄段情况。例如,如果超市青年顾客居多,那么就应该在超市中较多摆放一些年轻人喜爱的商品,刺激消费,提高利润。

消费者满意度分析:通过此模块能够分析出消费者对中小型超市各个方面的评价。该评价结果会反映出超市经营管理方面的一些问题,在管理者了解问题之后,及时制定策略,留住消费者。

2.1.4 销售数据模块分析

销售额分析:通过此模块能够分析出某一种类商品在每一个月中销售额情况。例如,可以分析出大分类为生鲜类,中分类为水果类,小分类为进口水果的商品水蜜桃的销售额情况。

毛利润分析:通过此模块可以分析出超市每一个月的毛利润情况。毛利润指的是销售额减去售出产品成本,这个差值反映了中小型超市的盈利情况,如果差值越大,说明超市获得毛利润越多。

净利润分析:通过此模块可以分析出超市每一个月的净利润情况。净利润指的是销售额减去售出产品成本再减去所得税,这个差值也能反映中小型超市的盈利情况,如果差值越大,说明超市获得净利润越多。

员工绩效分析:通过此模块可以分析中小型超市员工的每一个月绩效情况。例如,通过分析结果的展示,超市的管理者能够轻松分析出每名员工在某一年中某一个月的销售产品数,从而制定员工计划。

2.1.5 管理员模块分析

系统管理员模块实现,登录、注销登录、修改密码、查看日志功能。管理员在输入正确的用户名密码之后进入系统,可以查看系统日志,查看个人信息,修改个人信息。密码修改过程需要再次输入正确的登录系统密码后才能修改密码,并且有密码长度限制。

2.2 非功能需求分析

2.2.1 编码规范

在进行代码编写的过程中,要有良好的代码规范[15]。包括项目的命名、包的命名、变量的命名等等。其次,变量名要有实际的意义,不能随意命名。例如返回值可以定义为returnVal,采用驼峰命名规则。

2.2.2 界面要求

浏览器客户端的界面要简洁大方,要根据数据的特点来制定相应的显示控件。比值或者比例这样特征的数值需要用饼状图来显示。在用户输入错误数据进行验证后有友好的提示语提示用户。例如"输入不能为空,请重新输入"。在前端编码过程中要求同2.2.1的编码规范。

2.3 小结

本章主要介绍了功能模块需求以及项目的用例需求。重点分析了系统的功能模块的划分。每一个功能模块的具体功能点。同时,也指明了系统编码需求和系统实现的界面要求,为系统实现章节做出铺垫。

3 系统设计

3.1 系统架构设计

图3.1为系统架构图,本系统遵循MVC设计模式[16],MVC设计模式是一种典范。其包括模型、视图、控制器三个部分。视图是一种数据解释模型,能够接受数据并且更新请求,可以发送用户的数据给控制器,允许控制器选择视图,相当于传统JavaWeb开发中的JSP。控制器能够接受用户请求、调用模型响应用户请求并且选择视图显示相应结果。模型能够封装用户的状态、响应状态查询、处理业务流程、通知视图业务状态更新。采用该设计模式能让系统各个组件之间相互独立,每一层都有自己的任务[17],任何一层的变化都不会导致其他层次的功能受到影响,降低了系统耦合度,有利于提高开发效率。

图3.1 系统架构图

图3.2为系统功能结构图,在五大功能模块中,商品库存分析模块包括动销率分析、库存比分析、库销比分析;供应商数据分析模块中包括商品分类供应比例分析,商品退货分析;消费者数据分析模块包括客流量分析、客单价分析、客层分析、消费者满意度分析;销售数据分析模块包括销售额分析、毛利润分析、净利润分析、员工绩效分析。管理员功能模块包括登录、注销登录等基本功能。

图3.2 系统功能结构图

3.2 客户端服务端通信设计

系统前后台通信用Ajax技术实现。Ajax常引用于网页的开发,可以异步连接到后台,更新网页中某个组件。在前后台数据量传递不是特别大的时候,该项技术是最佳的选择。Ajax技术的应用,使得前端与后端分离变为现实。Ajax不会依托浏览器的插件,但同样用户需要给予浏览器JavaScript脚本运行权限。Ajax给用户带来的操作体验是全面的,只请求用户需要的信息,可以避免网络资源过大消耗,使页面刷新速度有质的升华。现如今, Ajax已经是一种标准,很多企业在应用,并且还在逐步成熟。图3.3为本系前后台通信数据流图,展示了数据的传递过程。

图3.3系统数据流图

3.3 数据库设计

图3.4 系统实体关系图

图3.4为系统实体关系图,该图共有21个实体对象,1个1对1关系,11个1对多关系。在系统分析阶段,完成了各个功能模块的需求分析,根据分析结果建立实体对象。分析实体对象之间的关系之后,在MySQL数据库服务器中建立以下数据表。

表3.1为用户登录表,表中共有6个字段,1个整型字段、5个字符串型字段,在管理员在进行登录操作过程中,进行用户名密码验证,登录系统后个人信息的修改与之相关联。

表3.1用户登录表

名称 类型 长度 约束 备注

LoginId int 1 主键 主键Id

LoginName varchar 45 非空 登录名

Password varchar 45 非空 密码

Email varchar 45 非空 邮箱

Phone varchar 45 非空 登录次数

Remark varchar 200 非空 备注

表3.2为用户登录日志表,表中共有8个字段,2个整型字段、3个字符串型字段,3个时间类型字段,在管理员在进行登录操作的过程中,系统会把登录信息存储到该表,方便日后查看。

表3.2登录日志表

名称 类型 长度 约束 备注

LoginLogId int 11 主键,自增长 主键Id

LoginIp varchar 45 无 登录Ip

LoginDateTime DateTime 无 非空 登录时间

CreateUserId varchar 45 非空 创建作者

CreateTime DateTime 无 非空 创建时间

LoginMessage DateTime 45 非空 登录信息

LoginName varchar 45 非空 登录名

LoginTime int 11 非空 登录次数

表3.3为商品的大分类表,表中共有4个字段,2个整型字段、1个字符串型字段,1个字节型字段。该表的意义是记录中小型超市的商品大分类名称,例如熟食类、生鲜类等。商品的中分类、小分类表都和该表有联系、通过该表的大分类编号能够查询到商品的大分类名称。

表3.3商品大分类表

名称 类型 长度 约束 备注

CatId int 11 主键,自增长 分类Id

CatNumber int 11 非空 分类号

CatName varchar 45 非空 分类名

CatState bit 1 非空 状态

表3.4为商品的中分类表,表中共有5个字段,3个整型字段、1个字符串型字段,1个字节型字段。该表记录了中小型超市的商品中分类名称,例如水果、水产等。

表3.4商品中分类表

名称 类型 长度 约束 备注

CatId int 11 主键,自增长 分类Id

CatNumber int 11 非空 分类号

CatName varchar 45 非空 分类名

CatState bit 1 非空 状态

ParentId int 11 非空 父类Id

表3.5为商品品牌表,共3个字段,其中有1个整型字段、2个字符串型字段,该表的意义是个记录商品品牌信息。在进行退货分析的时,能够反映出各个品牌商品质量情况。

表3.5商品品牌表

名称 类型 长度 约束 备注

BrandId int 11 主键,自增长 品牌Id

BrandName varchar 45 非空 品牌名

BrandNumber varchar 45 非空 品牌编号

表3.6为商品小分类表,表中共有6个字段,4个整型字段、1个字符串型字段,1个字节型字段。该表记录中小型超市的商品小分类名称,例如进口水果、鲜榨果汁等。商品的大分类、中分类表都和本表有依赖关系,通过本表的分类编号能够确定一个商品的具体分类。

表3.6商品小分类表

名称 类型 长度 约束 备注

CatId int 11 主键,自增长 分类Id

CatNumber int 11 非空 分类号

CatName varchar 45 非空 分类名

CatState bit 1 非空 状态

ParentId int 11 非空 父类Id

GrandParent_Id int 11 非空 大分类Id

表3.7为商品信息表,共10个字段,其中有6个整型字段、3个字符串型字段,1个数字类型字段,该表记录商品分类信息。通过分类层次和商品批号能够找到某一类型商品的信息。

表3.7商品信息表

名称 类型 长度 约束 备注

GoodsId int 11 主键,自增长 主键Id

GoodsName varchar 45 非空 商品名

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

BrandId int 11 非空 品牌

StockId int 11 非空 库存

Status varchar 45 非空 状态

GoodNumber varchar 45 非空 编号

UnitPrice decimal 8 非空 单价

表3.8为消费者信息表,共7个字段,全部为整型字段,该表的意义是记录消费者客流量信息,进行消费者数据分析时,需要查询该表。该表反映了中小型超市的顾客结构。

表3.8消费者信息表

名称 类型 长度 约束 备注

ConsumersId int 11 主键,自增长 主键Id

ConsumerNumber int 11 非空 顾总数客数

Year smallint 4 非空 年

Month smallint 2 非空 月

Day smallint 2 非空 日

Man int 11 非空 男性数

Woman int 11 非空 女性数

补充说明: Man为男性顾客的数量、Woman为女性顾客的数量,顾客的总数量为男性顾客和女性顾客的求和

表3.9为客层信息表,共4个字段,其中有1个整型字段、3个字符串型字段。该表记录消费者的年龄段。例如,19-39为青年、40-59为中年、60岁以上为老年。

表3.9客层信息表

名称 类型 长度 约束 备注

FloorId int 11 主键 主键Id

FloorNumber varchar 45 非空 客层编号

FloorName varchar 45 非空 客层名称

FloorRange varchar 45 非空 客层范围

表3.10为员工信息表,共5个字段,其中有1个整型字段、4个字符串型字段,该表的意义是记录员工信息。销售数据分析中的员工绩效分析模块与之关联,销售记录表的员工编号对应该表的员工编号。

表3.10员工信息表

名称 类型 长度 约束 备注

EmployeeId int 11 主键,自增长 主键Id

EmployeeName varchar 45 非空 员工名

EmployeeNumber varchar 45 非空 编号

Phone varchar 45 非空 手机号

IdCard varchar 45 非空 身份证号

表3.11为消费者满意度信息表,共6个字段,全部为整型字段,该表的意义是存储定期调查的消费者满意度情况,消费者给出0-5范围的评价分数,来反应消费者的满意度。

表3.11消费者满意度信息表

名称 类型 长度 约束 备注

InquireId int 11 主键,自增长 主键Id

ServiceAttitude smallint 6 非空 单号

ServiceQuality smallint 6 非空 大分类

ServiceEfficiency smallint 6 非空 中分类

Year smallint 4 非空 小分类

Month smallint 2 非空 月

表3.12为商品利润信息表,共9个字段,其中有7个整型字段, 1个数字类型字段,1个字符串型字段,该表的意义是记录了每个大分类、中分类、小分类商品的利润信息。

表3.12商品利润信息表

名称 类型 长度 约束 备注

ProfitId int 11 主键,自增长 主键Id

Year smallint 4 非空 年

Month smallint 2 非空 月

Day smallint 2 非空 日

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

profit decimal 5 非空 利润

GoodName varchar 45 非空 商品名

表3.13为商品入库信息表,共12个字段,其中有9个整型字段,2个日期类型字段,1个数字类型字段,该表的意义是记录了商品入库的详细信息,例如入库时间等。该表和商品大分类表、中分类表、小分类表存在依赖关系。

表3.13商品入库信息表

名称 类型 长度 约束 备注

InStockId int 11 主键,自增长 主键Id

InStockNumber int 11 非空 单号

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

SupplierId int 11 非空 供应商Id

StockId int 11 非空 库存

InstockTime DateTime 无 非空 入库时间

GoodNumber int 11 非空 批号

CompleteTime DateTime 无 非空 完成时间

InStockAmount int 11 非空 入库数量

UnitPrice decimal 8 非空 单价

表3.14为商品税务信息表,共3个字段,其中有1个整型字段、1个字符串型字段,1浮点类型字段,该表的意义是记录商品税务信息。在计算商品净利润时会用到。

表3.14商品税务信息表

名称 类型 长度 约束 备注

Tax int 11 主键 主键Id

TaxName varchar 45 非空 税务名

TaxAmount float 4 非空 税率

表3.15为密码修改日志表信息表,共4个字段,其中有1个整型字段、2个字符串型字段,1个日期类型字段,在管理员在登录系统之后,可以重新设置密码,该表记录了相关信息。

表3.15密码修改日志信息表

名称 类型 长度 约束 备注

ModifyPasswordLogId int 11 主键,自增长 主键Id

ModifyDateTime DateTime 无 无 修改时间

OldPassword varchar 45 无 旧密码

ModifyIp varchar 45 无 修改Ip

表3.16为商品销售记录信息表,共12个字段,其中有10个整型字段, 2个字符串类型字段,该表的意义是记录了商品销售记录信息。与销售数据分析功能模块有密切关系。 同时该表是中小型超市数据分析系统中最重要的一张数据表,是销售数据分析模块中的销售额分析、净利润分析、毛利润分析、员工绩效分析这四个功能的数据来源。与员工表、商品税务表有直接依赖关系。

表3.16商品销售记录信息表

名称 类型 长度 约束 备注

RecordId int 11 主键,自增长 主键Id

GoodNumber varchar 45 非空 批号

EmployeeId int 11 非空 员工Id

SaleNumber int 11 非空 销售数量

Year smallint 4 非空 年

Month smallint 2 非空 月

Day smallint 2 非空 日

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

Floor varchar 45 非空 客层

TaxNumber int 11 非空 商品税务Id

表3.17为商品库存信息表,共8个字段,其中有5个整型字段, 2个字符串类型字段,1个日期类型字段。该表的意义是记录了商品库存信息。该表与商品详情信息表存在一对一的实体关系,即每一件商品都有其对应的唯一的商品库存记录。

表3.17商品库存信息表

名称 类型 长度 约束 备注

StorgeId int 11 主键,自增长 主键Id

GoodNumber varchar 45 非空 批号

GoodName varchar 45 非空 商品名

RealAmount int 11 非空 库存数量

InStockTime DateTime 无 非空 入库时间

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

表3.18为供应商信息表,共7个字段,其中有1个整型字段, 6个字符串类型字段。该表的意义是记录了供应商的基本信息。系统的供应商数据分析模块会用到该表。

表3.18供应商信息表

名称 类型 长度 约束 备注

SupplierId int 11 主键,自增长 主键Id

SupplierNumber varchar 45 非空 编号

SupplierName varchar 45 非空 供应商名

Address varchar 45 非空 地址

PostCode varchar 45 非空 邮政编码

Phone varchar 45 非空 电话

GoodNumber varchar 45 非空 批号

表3.19为顾客投诉信息表,共7个字段,其中有5个整型字段, 2个字符串类型字段,该表的意义是记录了超市顾客投诉信息。消费者数据分析模块会用到该表。

表3.19顾客投诉信息表

名称 类型 长度 约束 备注

ComplainId int 11 主键,自增长 主键Id

ComplainNumber varchar 45 非空 投诉编号

ComplainReason varchar 45 非空 投诉原因

EmployeeNumber int 11 非空 员工编号

Year smallint 4 非空 年

Month smallint 2 非空 月

Day smallint 2 非空 日

表3.20为商品月平均库存信息表,共8个字段,其中有7个整型字段, 1个字符串类型字段,该表的意义是记录了超市每一个月的平均库存,在商品库存分析功能模块会用到该表。

表3.20 商品月平均库存信息表

名称 类型 长度 约束 备注

StorgeId int 11 主键,自增长 主键Id

Year smallint 4 非空 年

Month smallint 2 非空 月

AvgStorge int 11 非空 平均库存

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 2 非空 小分类

GoodNumber varchar 45 非空 商品批号

表3.21为商品退货信息表,共11个字段,其中有10个整型字段, 1个字符串类型字段,该表的意义是记录超市的退货详细信息,在商品退货分析功能模块中会从该表中过滤信息。

表3.21商品退货信息表

名称 类型 长度 约束 备注

RejectedId int 11 主键,自增长 主键Id

SupplierId int 11 非空 供应商Id

GoodNumber varchar 45 非空 商品编号

FirstLevel int 11 非空 大分类

SecondLevel int 11 非空 中分类

ThirdLevel int 11 非空 小分类

Year int 11 非空 年

Month int 11 非空 月

Day int 11 非空 日

BrandId int 11 非空 品牌

Amount int 11 非空 总数

3.4 数据分析核心设计

基于SpringBoot的中小型超市数据分析系统的数据分析核心逻辑在数据库服务器上运用存储过程实现[18]。首先,利用数据库的存储过程预先构建出数据库中各个实体对象之间的关系,在MyBatis框架请求执行对应模块的存储过程时,数据库将MyBatis框架请求的存储过程执行完毕后将构建好的数据集合返回给MyBatis框架。最后,经过视图控制器将已经转换为Json格式的数据返回给JSP页面[19],经过JavaScript框架DataTable技术把数据整理成为表格形式、EChars框架将数据以图形化信息进行展示。系统利用MySQL数据库的存储过程把中小型超市复杂的业务逻辑封装[20],数据库服务器能够自动对其优化。存储过程执行过后,系统会将结果缓存起来,下一次请求同样的存储过程时,从缓存结果中直接拿到数据[21]。这样不仅能够省去复杂的Java代码构建业务逻辑,也会减少数据在网络中的传输,提升系统的安全性和扩展性[22]。

3.5 小结

本章首先介绍了系统的架构模式,简单分析了采用MVC设计模式的优势[23]。同时分析说明系统客户端同服务器的通信方式[24],最后介绍了系统数据库的设计和每张数据表的基本内容和数据分析功能的核心原理。

4 系统实现

4.1系统服务端实现

4.1.1商品库存分析模块

动销率分析:每个商品有商品的大分类、中分类、小分类对应,并且每一种商品对应一个商品批号。首先需要计算所有库存商品的中分类总数,然后在已售商品中过滤商品的中分类种类数,将过滤的商品中分类数和所有商品中分类数作除法运算,得到结果。

库存比分析:计算库存比数据首先计算库存商品总分类数,在商品总库存数据表中求得每一种大分类商品的总数量,在商品大分类数据表中获取大分类名称,将每一大类的商品总数量与库存商品总数量作除法运算,得到每一大类商品的库存比。

库销比分析:计算库销比首先要计算一个月内商品的总销售额。然后,在商品平均库存表中拿到对应月份商品的平均库存。商品在一个月内平均库存和该月商品的总销售额的比值即为商品的库销比。

滞销商品分析:滞销商品分析首先需要在商品销售记录表中找出当月中无销售记录的商品,结合商品大、中、小分类数据表和商品详情信息表,采用多表查询的方式准确找到本月滞销商品的大分类名称、中分类名称、小分类名称和商品名称。

库存预警:库存预警功能首先要从商品库存表中获取所有商品的库存总数量,其次获取库存表中所有商品种类数,用商品库存的总数量/商品总种类数,得到平均库存量。如果某一种类的商品的库存量低于平均库存的百分之五十,则表明该种类商品处于缺货状态,被标记为短缺。如果商品的库存量高于平均库存的百分之一百五十,表明该商品库存处于积压状态,被标记为积压。

核心功能代码示例:

declare total int; // 声明变量,用于存储所有商品的总库存数量

declare amount int; // 声明变量存储,用于存储库存中所有商品种类

declare avg float; // 声明变量,用于存储商品平均库存

create table temp ( // 创建临时表,存储最终结果

FirstName varchar(50),

SecondName varchar(50),

ThirdName varchar(50),

GoodName varchar(50),

State varchar(50));

set total = (select sum(RealAmount) from storge); //为商品总库存赋值

set amount = (select count(*) from storge); //为商品库存种类数赋值

set avg = total/amount; // 计算所有商品种类的平均值

// 获取库存量少于平均库存一半的商品并标记为短缺

insert into temp (FirstName,SecondName,ThirdName,GoodName,State)

(select A.CatName FirstName , B.CatName SecondName ,

C.CatName ThirdName,S.GoodName,"短缺"

from storge S ,cat_first_level A , cat_second_level B , cat_third_level C

where S.RealAmount < avg * 0.5

and S.FirstLevel = A.CatId

and S.SecondLevel = B.CatId

and S.ThirdLevel = C.CatId);

// 获取库存量大于平均库存1.5倍的商品并标记为积压

insert into temp (FirstName,SecondName,ThirdName,GoodName,State)

(select A.CatName FirstName , B.CatName SecondName ,

C.CatName ThirdName,S.GoodName,"积压" from storge S ,

cat_first_level A , cat_second_level B , cat_third_level C

where S.RealAmount > avg 1.5
and S.FirstLevel = A.CatId
and S.SecondLevel = B.CatId
and S.ThirdLevel = C.CatId);
select * from temp; // 查询最终结果
drop table temp; // 删除临时表
4.1.2 供应商数据分析模块
商品分类供应比例分析:计算商品分类供应比例首先需要在商品入库信息表中通过分组查询取得入库商品的大、中、小分类名,对应分类的总数量。然后创建临时数据表把查询到的数据暂时存储到临时数据表中。再次通过多表查询,把上一次查询得到的商品分类信息对应的供应商名称获取到,以商品的大、中、小分类和供应商编号、入库时间为基础把信息分组,同时计算供应比例,将结果缓存到另一张临时数据表中。最后通过第二张临时数据表根据商品大、中、小分类、供应商名称分组计算,得到最后结果,然后删除创建的临时数据表。
商品退货分析:商品退货分析首先需要从在商品退货信息表中查询所有商品的退货信息,从筛选出的信息中把相同大、中、小、分类名,商品名称、年月、供应商名称、品牌名称信息进行分组统计。得到的结果就是有退货记录的商品每个月的退货详情信息。
核心功能代码示例:
//创建临时表存储大中小分类商品数量
create table temptable as
select FirstLevel,SecondLevel,ThirdLevel ,sum(InStockAmount) as sumAmount
from instock
group by FirstLevel,SecondLevel,ThirdLevel;
// 创建临时表存储 不同供应商、大中小分类、更新时间的的商品库存比
create table final as
(select S.SupplierName SupplierName ,S.SupplierId SupplierId ,One.CatName
FirstName,Two.CatName SecondName,Three.CatName ThirdName,
I.InstockAmount/T.sumAmount Rate
from instock I, suppliers S,cat_first_level One,cat_second_level Two,
cat_third_levelThree , temptable T
where I.FirstLevel = T.FirstLevel
and I.SecondLevel = T.SecondLevel
and I.ThirdLevel = T.ThirdLevel
and I.SupplierId = S.SupplierId
and I.FirstLevel = One.CatId
and I.SecondLevel = Two.CatId
and I.ThirdLevel = Three.CatId
group by I.SupplierId,I.FirstLevel,I.SecondLevel,I.ThirdLevel,I.InStockTime);
// 根据商品大中小分类分组求和计算出,商品大、中、小分类的占比
select SupplierName,FirstName,SecondName,ThirdName,round(Sum(Rate),2) Rates
from final
//根据大、中、小分类分组
group by SupplierId,FirstName,SecondName,ThirdName;
// 删除临时表
drop table temptable;
drop table final;
4.1.3 消费者数据分析模块
客流量分析:客流量分析需要分析统计一年中每一个月每一天的客流量信息,包括男性、女性顾客数量、顾客的总数量。这部分数据直接从消费者信息表中获取即可。
客单价分析:客单价分析首先从商品销售记录信息表中计算出每天每种商品的销售额总数,结合客流量信息表,计算出每天的客流量总数。每天的总销售额和对应的顾客总数量的比值即为一天的客单价。
客层分析:客层分析首先需要创建一个临时数据表,依次从销售记录信息表中统计出每个月的青年、中年、老年顾客的数量,存储到临时数据表中。再新建一张临时表用于存储上一张临时表的每个月顾客总数量,从两张临时表抽取年、月、客层名称,计算比例占比。最后删除临时数据表。
消费者满意度分析:消费者满意度分析需要从消费者满意度信息表中根据年、月字段进行分组,分组后进行服务态度评分、服务效率评分和服务质量评分平均值计算,结果为每一个月消费者对超市的评价信息。
核心功能代码示例:
// 创建临时表用于存储青年顾客的总数量
create table floors (
Year smallint,
month smallint,amount float(2),
floor varchar(45));
// 向临时表中添加青年顾客信息
insert into floors (select Year,Month,count(Floor),FloorName from salerecord S,
consumersfloor C where S.Floor = "1"
and S.Floor = C.FloorNumber
group by .Year,S.Month);
// 向临时表中添加中年顾客信息
insert into floors (select Year,Month,count(Floor),FloorName from salerecord S,
consumersfloor C where S.Floor = "2"
and S.Floor = C.FloorNumber
group by S.Year,S.Month);
// 向临时表中添加老年顾客信息
insert into floors (select Year,Month,count(Floor),FloorName from salerecord S,
consumersfloor C where S.Floor = "3"
and S.Floor = C.FloorNumber
group by S.Year,S.Month);
// 计算各个消费群体的占比
create table temps as ( select year,Month,sum(amount) Amount from floors group by year,Month);
select F.Year,F.Month,F.Floor,Format(F.Amount/T.Amount ,2) rate
from floors F,temps T where F.Year = T.Year
and F.Month = T.Month
order by Year,Month;
// 删除临时表
drop table floors;
drop table temps;
4.1.4 销售数据分析模块
销售额分析:销售额数据分析首先需要计算出所有商品每一个月的总销售额。其次,根据商品销售记录商品的年、月、大分类、中分类、小分类进行分组,将每组的商品销售额和对应月份所有商品销售额作除法运算。最后得到每一种商品的销售额在本月总销售额的占比大小。
毛利润分析:毛利润分析需要计算出每种商品在一个月中的毛利润,商品的月度毛利润为商品售价和商品进价的差值与月度销售总数量乘积。根据商品的大分类、中分类、小分类、年、月、商品编号分组查询。
净利润分析:商品净利润为商品的售价减去商品的进价和商品的税收费用。在商品的毛利润基础上减去对应商品的税收,采用多表查询并分组的方式将销售记录表和商品税收表对应,计算出每件商品净利润。
员工绩效分析:员工绩效分析包括两部分,在一个月内平均每天商品售出量和收到来自消费者的投诉情况。在商品销售记录信息表中,员工在一个月内销售的商品总数量与对应月份天数的比值为每天平均售出量。员工的相关投诉信息可在顾客投诉表中取得。
核心功能代码示例:
// 从销售记录表、商品大分类表、商品中分类表、商品小分类表、商品表库存表中过滤数据
select S.Year , S.Month ,A.catName FirstLevel ,
B.catName SecondLevel ,
C.catName ThirdLevel ,
G.GoodsName,sum(S.SaleNumber
(G.UnitPrice-I.UnitPrice)) total // 计算每一个商品毛利润

from

salerecord S ,goods G ,instock I,cat_first_level A,

cat_second_level B,cat_third_level C

where //设置过滤条件

S.FirstLevel = G .FirstLevel

and S.SecondLevel = G.SecondLevel

and S.ThirdLevel =G.ThirdLevel

and S.GoodNumber = G.GoodNumber

and S.GoodNumber = I.GoodNumber

and S.FirstLevel = A.catNumber

and S.SecondLevel = B.catNumber

and S.ThirdLevel = C.catNumber

// 根据商品大、中、小分类,年、月、商品编号进行分组求和

group by S.FirstLevel , S.SecondLevel , S.ThirdLevel,S.Year,S.Month,S.GoodNumber ;

4.1.5管理员模块

用户登录时在浏览器中输入的数据提交给后台服务器,服务器把用户输入的数据和数据库中数据作对比,如果用户名密码全部正确,登录成功跳转页面,否则提示错误;成功登入系统后,JSP页面请求前端控制器查询登录日志表、密码修改日志表、个人信息表,并把查询到的数据经过控制器传递给JSP页面;密码修改时浏览器把原密码和新密码发送给后台服务器进行验证,如果原密码正确,继续修改密码,否则提示修改失败;用户点击客户端浏览器中注销登录按钮即可注销登录,返回登录页。

核心功能代码示例:

LoginBean login=loginService.selectByName(username); // 根据用户名查询用户是否存在

session = request.getSession(); // 建立session对象

String retVal = "false"; //定义返回消息

LoginLogBean logBean = new LoginLogBean();

logBean.setCreatetime(new Date());

logBean.setCreateuserid("System");

logBean.setLogindatetime(new Date());

logBean.setLoginip(request.getRemoteAddr());

logBean.setLoginname(username);

logBean.setLogintime(logService.getLastLoginTime()+1);

logBean.setLoginmessage("登录失败"); // 用户名密码都正确,设置登录成功信息。

if(login != null && login.getPassword().compareToIgnoreCase(passwd)==0) {

session.setAttribute("SESSION_USERNAME", username);

logBean.setLoginmessage("登录成功");

retVal = "ok";

}

logService.insertLog(logBean); // 插入登录日志,

return JSONObject.toJSONString(retVal); // 返回登录提示信息

4.2 浏览器客户端的实现

4.2.1 动销率分析

如图4.1为商品动销率分析客户端页面,用户可以从数据表格中查询每月商品各个种类动销率,并且根据柱形图分析出本年度那一个月的动销品种最多。用户可以根据按钮、文本框等控件提示,检索数据或者打印数据。

图 4.1 商品动销率分析客户端页面

4.2.2 库存比分析

如图4.2为商品库存比分析客户端页面,用户可以查询到每一类商品所占库存总量的比例,并且根据扇形图分析出库存中那种分类商品所占比例最大,并根据需求打印可排序的数据。

图 4.2 库存比分析客户端页面

4.2.3 库销比分析

如图4.3为库销比分析客户端页面效果。页面实现了库销比信息的显示、分页、打印库销比数据表格等功能。用户浏览信息的同时,可以根据表头提示检索想要获得的具体信息。

图 4.3 库销比分析客户端页面

4.2.4 滞销商品分析

如图4.4为滞销商品分析客户端页面,用户可以查询到滞销商品的大分类、中分类,或者小分类的商品分类信息,并通过实时搜索功能实时获取相应的结果,也可根据商品分类、名称对结果排序。

图 4.4 滞销商品分析客户端页面

4.2.5 库存预警

如图4.5为库存预警客户端页面,页面提供了商品大分类、中分类、小分类、商品名称、商品状态等信息,用户根据页面提示的信息可以获取处于短缺或者积压状态的库存商品信息。

图 4.5 库存预警客户端页面

4.2.6 商品分类供应比例分析

如图4.6为商品分类供应比例分析客户端页面,页面提供了商品大分类、中分类、小分类、供应商,以及商品同类分类的各个供应商供应占比信息,用户可根据页面控件信息提示筛选供应商、商品的分类等信息,也可以按照商品分类供应比例进行排序。

图 4.6 商品分类供应比例分析客户端页面

4.2.7 商品退货分析

如图4.7为商品退货分析客户端页面,页面提供了商品大分类、中分类、小分类、年、月、商品名称、退货数量等信息,用户浏览信息的同时可以根据时间或者商品分类筛选信息、打印数据。

图 4.7 商品退货分析客户端页面

4.2.8 客流量分析

如图4.8为客流量分析客户端页面,页面提供了年、月、日、周、男性顾客、女性顾客、顾客总量等信息,用户可以根据页面展示的信息对超市客流量进一步查询分析统计,在需要时进行数据的检索和打印。

图 4.8 客流量分析客户端页面

4.2.9 客单价分析

如图4.9为客单价分析客户端页面,页面提供了年、月、日、客单价等信息,用户能够根据页面提示的信息查询某年、月、日的客单价信息,并且可以在检索数据的基础上,进行客单价排序。

图 4.9 客单价分析客户端页面

4.2.10 客层分析

如图4.10为客层分析客户端页面实现效果,用户可根据控件提示,对相应的年、月、日等信息进行检索,检索过程中会实时显示检索结果,并可以根据年、月、日、客层、比例进行组合排序并打印数据。

图4.10 客层分析客户端页面

4.2.11 消费者满意度分析

如图4.11为消费者满意度分析客户端页面实现,用户可以浏览每个月消费者对超市的平均评价分数,评价分数为5分制。并根据需要检索年、月对应的消费者的评价,或者打印评价数据。

图 4.11 消费者满意度分析客户端页面

4.2.12 销售额分析

如图4.12为销售额分析客户端页面实现,用户可以浏览每个月对应商品种类的销售额,在当月中的比例。同时,根据用户需要,页面实现了对年、月、大分类、中分类、小分类、销售额和占比数据的综合排序。

图 4.12 销售额分析客户端页面

4.2.13 毛利润分析

如图4.13为商品毛利润分析客户端页面实现,用户可以浏览每个月对应商品种类的毛利润。同时,用户可以对年、月、大分类、中分类、小分类和毛利润进行检索或者综合排序,在需要时打印数据。

图 4.13 毛利润分析客户端页面

4.2.14 净利润分析

如图4.14为商品净利润分析客户端页面实现,用户可以浏览每个月对应商品种类的净利润。同时,页面实现了对年、月、大分类、中分类、小分类和净利润进行综合排序,例如在查找生鲜类商品后可以在筛选后的数据基础上对数据排序,并且在需要时可以打印数据。

图 4.14 净利润分析客户端页面

4.2.15 员工绩效分析

如图4.15为员工绩效分析客户端页面实现,用户可以浏览每个月员工的业绩,即每个月员工的平均日销售商品数量。同时,页面实现了查找、排序等功能,用户可以在查找的基础上对数据排序。

图 4.15 员工绩效分析客户端页面

4.2.16 系统登录

如图4.16为系统登录页,用户输入用户名密码之后点击登录按钮进行登录操作。登录成功或者失败会有提示。如果成功则进行页面跳转,进入商品库存分析模块中的动销率分析页面;否则,提示用户名密码错误消息后继续留在本页面等待下一次用户输入。

图4.16 系统登录客户端页面

4.2.17 查看或更改个人信息

如图4.17为管理员个人信息客户端页面实现,进入个人信息页面后,首先会显示个人信息供用户浏览,包括用户名,邮箱,手机号。其次,用户可以在文本框内输入想要更改的数据项,点击保存按钮即可实现个人信息更改,如果更改成功则提示保存成功;否则提示保存失败。

图4.17 管理员个人信息客户端页面

4.2.18 修改密码

如图4.18为密码修改客户端页面实现。进入密码修改页面后,进行修改密码,首先需要输入原密码,然后再输入想要更改的密码,在点击保存按钮时提交给后台验证,若原密码正确,在点击保存按钮之后提示修改成功,否则提示修改失败。

图4.18 密码修改客户端页面

4.2.19 查看登录日志

如图4.19为系统登录日志客户端页面实现,该页面中实现了对登录日志中编号、登录Ip、登录时间、登录信息、登录名等数据的综合排序和过滤,用户可根据需要打印系统登录日志表。

图4.19 登录日志客户端页面

4.2.20 查看密码修改日志

如图4.20为系统密码修改日志客户端页面实现。本页面与登录日志信息在同一页面内的不同面板中,用户可以点击加号来实现面板折叠功能。该页面中实现了对密码修改日志中编号、修改Ip、修改时间、旧密码信息的综合排序和过滤,用户可根据需要打印系统密码修改日志表。

图4.20 密码修改日志客户端页面

4.3 小结

本章节十分详细的介绍了系统的商品库存分析、供应商数据分析、消费者数据分析、销售数据分析四大模块的实现原理和对应的功能实现效果,对每个模块涉及到的功能点进行详尽阐述。

5 测试部署

5.1系统测试

项目开发完成之后最重要的一个环节就是单元测试,该项目采用JUnit框架来完成本系统的单元测试工作,JUnit框架是一种能够为Java程序做测试的优秀框架。该框架的自动化水平非常高,有众多不可替代的特性。例如对开发者预想结果做出断言,能够极大的改善程序开发效率,并且能够很好的与SpringBoot框架兼容。

由于很多逻辑在客户端中或者数据库中实现,这里不做全面测试,只挑选最具代表性的测试用例。选定好每个模块的测试用例之后,开始进行单元测试,单元测试用例见表5.1。

表5.1 单元测试用例表

模块 测试功能点 测试操作流程 预想结果 测试结果

员 登录 输入正确用户名密码,点击登录 登录成功,页面跳转 登录成功,页面跳转

修改个人信息 登录后在管理员模块点击查看个人信息,重新输入后保存 提示保存成功 浏览器提示保存成功

商品库存分析 动销率分析 登录后点击动销率分析 显示数据 显示数据

库存比分析 登录后点击库存比分析 显示数据 显示数据

供应商数据分析 商品分类供应比例分析 登录后点击商品分类供应比例分析 显示数据 显示数据

商品退货分析 登录后点击商品退货分析 显示数据 显示数据

消费者数据分析 客流量分析 登录后点击客流量分析 显示数据 显示数据

客单价分析 登录后点击客单价分析 显示数据 显示数据

销售数据分析 销售额分析 登录后点击销售额分析 显示数据 显示数据

员工绩效分析 登录后点击员工绩效分析 显示数据 显示数据

进行单元测试首先需要在测试类上面加SpringBoot框架的单元测试注解。这样做的目的是表明该类是一个测试类,并且自动配置单元测试。MockMvc是一个工具类,能够自定义URL模拟HTTP请求对Controller进行测试。通过实例化MvcResult对象接收测试结果,在单元测试通过之后,再把结果通过控制台进行打印。单元测试的核心代码如下:

@SpringBootTest

@AutoConfigureMockMvc

@RunWith(SpringRunner.class)

public class MiniMarketDsasApplicationTests {

@Autowired

private MockMvc mockMvc; // 利用MockMvc发送HTTP请求

@Test

public void helloTest() throws Exception { // 测试方法

MvcResult mvcResult= mockMvc.perform(MockMvcRequestBuilders.get("/saledRate"))

.andReturn(); // 输出接口返回的结果

System.out.println(mvcResult.getResponse().getContentAsString());

}}

商品库存分析模块的动销率分析单元测试结果见图5.1,其中左上角的绿色长条表明本次单元测试成功,无编译或者运行错误。在eclipse控制台中,输出了年、月、动销率的具体数据信息,测试通过。

图5.1动销率分析单元测试

供应商数据分析模块的商品分类供应比例分析单元测试结果见图5.2,其中左上角的绿色长条表明本次单元测试成功,无编译或者运行错误。在eclipse控制台中,输出了商品大、中、小分类等信息,测试通过。

图5.2商品分类供应比例分析单元测试

消费者数据分析模块的客层分析单元测试结果见图5.3,其中左上角的绿色长条表明本次单元测试成功,无编译或者运行错误。在eclipse控制台中,输出了年、月、客层名称、客层占比等信息,测试通过。

图5.3 客层分析单元测试

销售数据分析模块的销售额分析单元测试结果见图5.4,其中左上角的绿色长条表明本次单元测试成功,无编译或者运行错误。在eclipse控制台中,输出了商品分类名称,商品名,销售额占比等信息,测试通过。

图5.4销售额分析单元测试

5.2 系统部署

系统在开发环境中开发和测试完成之后,需要部署到生产环境中上线运行。如图5.5为系统部署图,本系统可部署在Windows10操作系统中。系统包括Java开发工具包和系统运行环境(JDK)、数据库服务器(MySQL)、Web服务器(Tomcat)。用户通过浏览器的HTTP请求即可实现对系统的访问[25]。

图5.5 系统部署图

5.3 小结

本章主要是介绍了基于SpringBoot的中小型超市数据分析系统的测试以及部署,详细阐述了具体测试方法,保证了系统的平稳运行,减少错误和异常的发生,增强了系统健壮性。

结 论

2个月的时间终于完成了"基于Springboot的中小型超市数据分析系统"的开发工作。在如今数据满天飞的时代中,数据的价值是不可估量的。我们要从细节中找到这些数据潜在的价值,挖掘其中隐含的规则,把握并且利用好这些数据,如果是这样,这对于每天产生大量数据的中小型超市来说无疑是一个福音。

本系统的设计开发充分利用了中小型超市数据量庞大的特点,对数据进行充分分析利用,实现了对中小型超市库存、消费者、供应商、销售四个方面的数据分析,将结果以最佳的用户体验效果呈现出来,为超市的经营管理奠定了数据基础。在这个基础上,中小型超市的管理经营者能够及时发现超市经营方面的问题。最重要的是,中小型超市有了数据化的依据支撑,才能有丰富的利润,走得更加长远。

本系统基于SpringBoot框架、MyBatis框架、SpringMVC技术,结合MySQL数据库设计编码完成,实现了中小型超市数据分析过程需要的必要功能。但这还不够完善,从业务角度来说,有很多细节功能还欠缺,例如由于对超市的数据库系统不是特别熟悉,对超市仓库的分析业务没有实现。在代码实现的角度来说,针对数据量庞大的特点,由于知识能力有限,没有采用处理大量数据的系统架构。这样会导致数据库的压力非常大,影响系统的整体运行效率,未来会逐步解决以上问题,进一步完善系统功能,为中小型超市提供更加全面的数据分析服务。

致 谢

大学四年时光,眨眼间便过去,马上就要和大学说拜拜了,昨天的新生,今天即将迈入社会,纵使心中有万般不舍,也不能停止前进的脚步。这四年的时光应该是人生中最最值得回忆的时光。因为,在这里曾经流过充满奋斗精神的汗水、遇到生活或者学习过程中的问题难以解决时的泪水,结交到人生中的挚友,遇到认真负责的老师。四年光景中,有过欢乐,有过悲伤,有过沉思,也有过憧憬,这一切已经过去。完成本篇论文的致谢,也就意味着与大学生活彻彻底底的别离,怎么也找不出一句话表达自己的心情,这也可能意味着我们真正的"长大了",大学生活让我明白了学习的重要意义,也许学习没有带给我们特别多的物质财富,但是学习能让一个人成长起来。成年人的世界里有很多伤感和遗憾,但奋斗的脚步一刻也不能放缓,昨天已经是昨天,今天终将过去,我们要努力奋斗拥抱明天。

在这次毕业设计中,最主要的是感谢我的毕业设计指导老师崔满老师、刘荫忠老师,无论是在系统开发设计或者是论文写作方面都给予我非常非常多的帮助。在完成毕业设计的过程中,我真真切切感受到了两位老师尽职尽责、平易近人、孜孜不倦的人格魅力。同时,在专业技能的角度老师同样让我明白了什么是专业性。正是由于二位老师的无私帮助、多次提出了宝贵建议,才完成了论文的编写,再次向二位老师表达衷心的感谢。

参考文献

[1]陈雄华. Spring企业级应用开发详解[M]. 北京: 电子工业出版社, 2009

[2]Craig Walls,Ryan BreidenBach. Spring In Action [M]. Manning ublications, 200

[3]陈亚探.Struts2 + Spring + Hibernate框架技术与项目实战[M].北京:清华大学出版社,201

[4]李刚.轻量级J2EE企业应用实战[M].北京:电子工业出版社,2007

[5]赵利庆.Java Web架构中数据库优化模式的研究与实现[D].北京:北京邮电大学,2015

[6]贺松平.基于MVC模式的B/S架构的研究与应用[D].武汉:华中科技大学,200

[7]张孝祥. 深入Java Web开发内幕------核心基础[M]. 北京:电子工业出版社. 2006

[8]孙卫琴,李洪成. Tomcat 与 Java Web 开发技术详解[M]. 电子工业出版社,2003.6:1-205

[9]朱红,司光亚. JAVA Web编程指南[M].电子工业出版社,2001.9:34-307

[10]BruceEckel. Java编程思想[M]. 机械工业出版社,2003.10:1-378

[11]Joshua Bloch. Effective Java[M]. Piscataway, N.J: IEEE Press, 2009

[12]BruceEckel. Java编程思想[M]. 机械工业出版社,2003.10:1-378

[13]杨静.基于JAVA WEB中MVC模式的研究与应用[J].电脑知识与技术,2014,9(28):68-71

[14]林信良. Spring2.0技术手册[M]. 北京:电子工业出版社,2005

[15]FLANAGAN. Java技术手册[M]. 中国出版社,2002.6:1-465

[16]赛奎春. JAVA工程应用与项目实践[M]. 机械工业出版社2002.8:23-294

[17]飞思科技产品研发中心. JAVA应用开发详解[M].电子工业出版社,2003.9:32-300

[18]赛奎春. JAVA工程应用与项目实践[M]. 机械工业出版社,2002.8:23-29

[19]耿祥义 JSP 基础编程[M].清华大学出版社,2004.55-162

[20]田珂,谢世波,方马. J2EE数据持久层的解决方案[J]. 计算机工程,2003, 29(22): 93-95

[21]孙一林,彭波. Java数据库编程实例[M]. 清华大学出版社,002.8:30-210

[22]Ju Feng Juan. The Application of Servlet and Javabean In the Design of Blog[J]. Energy Procedia, 2011, 13: 8952-8956

[23]R Suzanne W. Dietrich, Susan D. Urban, Ion Kyriakides. JDBC demonstration courseware using Servlets and Java Server Pages. 2002, 34(1): 266-270

[24]Fahmida Y Rashid,Fahmida Y Rashid. Oracle security includes Java, MySQL, Oracle Database fixes[J]. InfoWorld.com,2016

[25]Hatma Suryotrisongko;Dedy Puji Jayanto;Aris Tjahyanto. Design and Development of Backend Application for Public Complaint Systems Using Microservice Spring Boot[D]. Procedia Computer Science, 2016

相关推荐
小李不想输啦1 小时前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
张铁铁是个小胖子1 小时前
微服务学习
java·学习·微服务
ggs_and_ddu1 小时前
Android--java实现手机亮度控制
android·java·智能手机
敲代码娶不了六花3 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
Yhame.3 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
是小崔啊4 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL4 小时前
linux安装idea
java·ide·intellij-idea
青春男大4 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
HaiFan.5 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)5 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先