超市购物系统 v2.0 开发记录(一)
一、需求分析
在全国各地,最离不开人们生活的就是超市,因为超市里的商品种类繁多,有食品、日用品、饮料、蔬菜、水果等,而且每家超时每天都有流水账单,相比于传统的小卖部,超市一般都有一套完善的记账系统,用于统计营业以来的收入与支出。但是,仍有许多小卖部,小型超市仍然采用传统的手写记账的方式,不仅容易出错,而且还容易丢失记录,现可开发一套供这些商家使用的订单后台管理系统,使得只需要在网页上进行简单的操作就能对所有的商品进行统一的管理。
二、技术选型
目前可采用主流的 SpringBoot + Sping +SpringMVC + MyBatis + MySQL 的技术栈来进行后台的基础搭建,同时使用SpringBoot支持的Thymeleaf模板引擎进行可视化网页的渲染,加上框架 Bootstrap美化页面的排版。由于系统分为普通用户、管理员不同的角色,故可使用 Shiro 框架进行系统认证和授权采用,实现不同角色有不同的访问权限。最后可使用 Echarts.js 插件制作统计图,用于分析周期内的营业情况。
综上,技术栈为 SpringBoot + Thymeleaf + Bootstrap + SSM + MySQL + Shiro + Echarts
回顾版本1.0的技术栈:前端JSP + Servlet + Bootstrap5 + JQuery + Echarts | 后端 MVC架构 + JDBC
三、系统设计
系统中包含管理员和经理、普通用户三个角色,其中管理员和经理可以进入系统里后台,他们属于超市的工作人员。
3.1 管理员功能模块设计
3.2 经理功能模块设计
3.3 用户功能模块设计
3.4 游客功能模块设计
3.5 系统流程图
四、数据表设计
工具:Navicat 11.2.7
4.1 用户角色表
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int NOT NULL AUTO_INCREMENT,
`roleName` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.2 用户表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`userCode` varchar(255) NOT NULL COMMENT '用户编码',
`userName` varchar(255) NOT NULL COMMENT '用户名称',
`userPassword` varchar(255) NOT NULL COMMENT '用户密码(带密文)',
`gender` int DEFAULT NULL COMMENT '性别(1: 女, 2:男)',
`birthday` date DEFAULT NULL COMMENT '生日',
`phone` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`createBy` bigint DEFAULT NULL,
`createionDate` date DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint DEFAULT NULL COMMENT '更新者',
`modifyDate` date DEFAULT NULL COMMENT '更新时间',
`pwd` varchar(255) NOT NULL COMMENT '用户密码(明文)',
`salt` varchar(255) DEFAULT NULL COMMENT '盐',
`userRole` int DEFAULT NULL COMMENT '用户角色',
PRIMARY KEY (`id`),
KEY `userRole` (`userRole`),
KEY `createBy` (`createBy`),
KEY `modifyBy` (`modifyBy`),
CONSTRAINT `user_ibfk_1` FOREIGN KEY (`userRole`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `user_ibfk_2` FOREIGN KEY (`createBy`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `user_ibfk_3` FOREIGN KEY (`modifyBy`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.3 供应商表
DROP TABLE IF EXISTS `provider`;
CREATE TABLE `provider` (
`id` bigint NOT NULL AUTO_INCREMENT,
`proCode` varchar(255) DEFAULT NULL COMMENT '供应商编码',
`proName` varchar(255) DEFAULT NULL COMMENT '供应商名称',
`proDesc` varchar(1024) DEFAULT NULL COMMENT '供应商详细描述',
`proContact` varchar(255) DEFAULT NULL COMMENT '供应商联系人',
`proPhone` varchar(255) DEFAULT NULL COMMENT '联系电话',
`proAddress` varchar(255) DEFAULT NULL COMMENT '地址',
`createdBy` bigint DEFAULT NULL COMMENT '创建者',
`creationDate` date DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint DEFAULT NULL COMMENT '更新者',
`modifyDate` date DEFAULT NULL COMMENT '更新时间',
`proFax` varchar(255) DEFAULT NULL COMMENT '传真',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.4 商品类型表
DROP TABLE IF EXISTS `commoditytype`;
CREATE TABLE `commoditytype` (
`id` int NOT NULL AUTO_INCREMENT,
`comTypeName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '商品类型的名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.5 商品表
DROP TABLE IF EXISTS `commodity`;
CREATE TABLE `commodity` (
`id` bigint NOT NULL AUTO_INCREMENT,
`comName` varchar(255) DEFAULT NULL COMMENT '货物名称',
`comStock` bigint DEFAULT NULL COMMENT '库存',
`createBy` bigint DEFAULT NULL COMMENT '创造人',
`createDate` date DEFAULT NULL COMMENT '创建日期',
`modifyBy` bigint DEFAULT NULL,
`modifyDate` date DEFAULT NULL COMMENT '修改日期',
`providerId` bigint DEFAULT NULL COMMENT '供应商ID',
`comPrice` float(10,2) DEFAULT NULL COMMENT '价格',
`comImgSrc` varchar(512) DEFAULT NULL COMMENT '图片路径',
`comDesc` varchar(1024) DEFAULT NULL COMMENT '描述',
`comType` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `createBy` (`createBy`),
KEY `modifyBy` (`modifyBy`),
KEY `providerId` (`providerId`),
KEY `commodity_ibfk_4` (`comType`),
CONSTRAINT `commodity_ibfk_1` FOREIGN KEY (`createBy`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `commodity_ibfk_2` FOREIGN KEY (`modifyBy`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `commodity_ibfk_3` FOREIGN KEY (`providerId`) REFERENCES `provider` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `commodity_ibfk_4` FOREIGN KEY (`comType`) REFERENCES `commoditytype` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
4.6 订单表
CREATE TABLE `order` (
`id` bigint NOT NULL AUTO_INCREMENT,
`billCode` varchar(255) DEFAULT NULL COMMENT '账单编码',
`productName` varchar(255) DEFAULT NULL COMMENT '商品名称',
`productDesc` varchar(255) DEFAULT NULL COMMENT '商品描述',
`productUnit` varchar(255) DEFAULT NULL COMMENT '商品单位',
`productCount` decimal(10,0) DEFAULT NULL COMMENT '商品数量',
`isPayment` int DEFAULT NULL COMMENT '是否支付(1:未支付 2:已支付)',
`createdBy` bigint DEFAULT NULL COMMENT '创建者',
`creationDate` date DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint DEFAULT NULL COMMENT '更新者',
`modifyDate` date DEFAULT NULL COMMENT '更新时间',
`totalPrice` decimal(10,2) DEFAULT NULL COMMENT '商品总额',
`providerId` bigint DEFAULT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`),
KEY `providerId` (`providerId`),
CONSTRAINT `order_ibfk_1` FOREIGN KEY (`providerId`) REFERENCES `provider` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
五、总结
相比于版本v1.0 ,Web项目实战 | 商城系统v1.0 | 前端JSP + Servlet + Bootstrap5 + JQuery + Echarts | 后端 MVC架构 + JDBC + Druid数据池,本次版本用了全新的技术栈,技术选型是根据学校课程教的,笔者打算按学校要求的来,先花时间实现基本要求以后再进行优化,数据表的设计相较于真正的电商平台还有很大的差距,目前来说只能满足基本的业务需求,希望将来有机会将这个项目上线。
笔者时常思考身为大数据专业学生是否该花时间学习JavaWeb,即JavaEE,按学校的培训计划来,主要的方向还是大数据开发,Hadoop、Flume、Zookeeper、Spark、Flink这样的技术栈,同时也能运用机器学习课程教的算法去训练模型,预测数据,进行数据分析。
但笔者认为自身的分析能力比较差,以后还是希望走偏Java的路线,即大数据平台开发之类的,所以学好JavaEE还是有必要的,以后在对数据做报表分析的时候得用到Web的知识。Java的发展路线首先是JavaSE、JavaEE、之后会有分布式、微服务相关的内容,其中的分布式则和大数据是相同的,到时候使用Redis数据库做缓存,用Ngnix实现负载均衡,可以在多个节点上部署同一个web项目的不同模块。
总的来说,路还很长,不过大致方向有了就好很多,这一次的Web项目实战预计周期和第一次一样,7天时间,希望在7天后能有更多收获。
|