0


软件工程 超市库存管理系统 设计报告

文章目录


1 总体设计

1.1 需求规定

主要输入输出项目:
商品信息表tb_product:(商品id,商品编号,商品名,类型,生产日期,保质期,单位,库存)。

1.2 运行环境

硬件环境:
推荐配置:CPU:Intel i7-9750H,内存:512M以上,硬盘:100GB以上空间。
软件环境:
Windows 10家庭版
Google Chrome
Apache-Maven-3.8.4
Apache-Aomcat-8.5.77
IntelliJ IDEA 2021.2 1.1.3

基本设计概念和处理:
在这里插入图片描述

1.3功能需求与程序的关系

各项功能需求的实现同各块程序的分配关系:
在这里插入图片描述

1.4人工处理过程

商品名、编号、保质期、生产日期等信息需要人工录入。

1.5 接口设计

1.5.1 用户接口

在这里插入图片描述

1.5.2 外部接口

在这里插入图片描述

1.5.3 内部接口

在这里插入图片描述

1.6 运行设计

1.6.1运行模块组合

施加不同的外界运行控制时所引起的各种不同的运行模块组合如下表所示:
在这里插入图片描述

1.6.2 运行控制

在这里插入图片描述

1.7 系统数据结构设计

1.7.1 逻辑结构设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 详细设计

2.1 前台管理员登录注册设计

用户点击登录后随即跳转到登录界面,用户输入账号和密码,密码采用password为不可见形式,保护了用户的账号安全,点击登录提交表单后,页面会将数据送到数据库验证此记录是否存在于tb_user表中,如果存在且输入的密码与数据库记录的一致则登录成功。如果没有账号,则点击注册按钮,依次输入昵称、账号、密码,提交,tb_user表中相应增加新注册的用户记录。
关键代码如下:

    login() {
    var _this = this;
    // 发送ajax请求,添加数据
    axios({
        method: "post",
        url: "http://localhost:8080/brand-case/user/select",
        data:_this.user
    }).then(function (resp) {
        if (resp.data == "success") {
            //登录成功
            //关闭窗口
            _this.dialogFormVisible = false;
            document.location.href="product.html";
        }else {
            _this.$message({
                message: '密码或账号错误',
                type: 'error'
            });
        }
    })
},

2.2 前台商品列表设计

使用axois向后端服务器发送http请求api接口,返回的json数据用定义的商品模型product {number: ‘’,tradeName: ‘’,typeName:‘’,type:‘’,date: ‘’,id: “”,quality: “”,stock: “”,unit:“”}接收,用第三方控件Element-UI中的列表进行数据的展示,并用v-model双向绑定到列表数据tableData上,实现实时的数据展示。
关键代码如下:

// 查询数据
selectAll(){
    var _this = this;
    axios({
        method:"get",
        url:"http://localhost:8080/brand-case/product/selectAll"
    }).then(function (resp) {
        _this.tableData = resp.data;
    })
},

2.3 后台商品功能模块设计

后台商品功能模块通过BaseServlet解析前台发送来的http请求分发路径,BaseServlet继承HttpServlet,并替换HttpServlet根据请求的最后一段路径来进行方法分发,降低系统耦合度。最后将整个系统部署到Tomcat上运行。

2.3.1 新增商品功能设计

后台ProductServlet继承BaseServlet,接收前台发送的post请求并进行处理,首先将前台发送的json数据转换成Product对象,其次用product对象作为参数调用service层productService的添加数据方法。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象的添加方法,使用其中的方法将product对象持久化,并前台响应成功的标识。
关键代码如下:

publicvoidadd(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{//1. 接收商品数据BufferedReader br = request.getReader();String params = br.readLine();//json字符串//ProductProduct product = JSON.parseObject(params,Product.class);//2. 调用service添加
    productService.add(product);//3. 响应成功的标识
    response.getWriter().write("success");}

#2.3.2 删除商品功能设计

2.3.2.1 单个删除

后台ProductServlet继承BaseServlet,接收前台发送的get请求并进行处理,将前台发送的id作为参数调用service层productService的删除数据方法。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的删除方法,将数据库中的数据成功删除,并向前台响应成功标识。
关键代码如下:

//1. 接收数据String id = request.getParameter("id");//2. 调用service删除
productService.delete(Integer.parseInt(id));//3. 响应成功的标识
response.getWriter().write("success");

2.3.2.2 批量删除

后台ProductServlet继承BaseServlet,接收前台发送的post请求并进行处理,将前台发送的ids数组作为参数调用service层productService的批量删除数据方法。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的批量删除方法,将数据库中的数据成功删除,并向前台响应成功标识。
关键代码如下:

//1. 接收数据  [1,2,3]BufferedReader br = request.getReader();String params = br.readLine();//json字符串//转为 int[]int[] ids = JSON.parseObject(params,int[].class);//2. 调用service添加
productService.deleteByIds(ids);//3. 响应成功的标识
response.getWriter().write("success");

2.3.3 修改商品功能设计

后台ProductServlet继承BaseServlet,接收前台发送的post请求并进行处理,将前台发送的json字符串转成product对象作为参数调用service层productService的修改数据方法。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的修改数据方法,将数据库中的数据成功删除,并向前台响应成功标识。
关键代码如下:

//1. 接收品牌数据BufferedReader br = request.getReader();String params = br.readLine();//json字符串///转为Product对象Product product = JSON.parseObject(params,Product.class);//2. 调用service修改
productService.update(product);//3. 响应成功的标识
response.getWriter().write("success");

2.3.4 查找商品功能设计

2.3.4.1 查找全部

后台ProductServlet继承BaseServlet,接收前台发送的get请求并进行处理,调用service层productService的查询数据方法。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的查询方法,同时需要调用TyprService的按照商品分类id查询商品分类名的方法查询到对应的商品名字,写入将成功查询到的product对象中,再将数据转成json字符串发送到前台进行展示。
关键代码如下:

//1. 调用service查询List<Product> products = productService.selectAll();for(int i =0; i < products.size(); i++){String typename = productService.selectTypeAndDate(products.get(i).getType());
    products.get(i).setTypeName(typename);}//2. 转为JSONString jsonString = JSON.toJSONString(products);//3. 写数据
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(jsonString);

2.3.4.2 模糊搜索
后台ProductServlet继承BaseServlet,接收前台发送的post请求并进行处理,将返回的json字符串转化成product对象,使用product中的tradeName商品名属性作为参数,调用service层productService的查询数据方法,在模糊查询中需要将商品名字的字符串进行处理,例如,“糖”需要变成“%糖%”才能实现模糊查询。ProductService是一个接口对象,其实现类为ProductServiceImpl对象,在ProductServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的查询方法,同时需要调用TyprService的按照商品分类id查询商品分类名的方法查询到对应的商品名字,写入将成功查询到的product对象中,再将数据转成json字符串发送到前台进行展示。
关键代码如下:

// 获取查询条件对象BufferedReader br = request.getReader();String params = br.readLine();//json字符串//转为 ProductProduct product = JSON.parseObject(params,Product.class);//2. 调用service查询List<Product> products = productService.selectAndCondition(product);//写入商品类名for(int i =0; i < products.size(); i++){String typename = productService.selectTypeAndDate(products.get(i).getType());
    products.get(i).setTypeName(typename);}if(products.size()==0){//找不到商品
    response.getWriter().write("null");}else{//转为JSONString jsonString = JSON.toJSONString(products);//写数据
    response.setContentType("text/json;charset=utf-8");
    response.getWriter().write(jsonString);}

2.4 后台管理员功能模块设计

2.4.1 新增管理员功能设计

后台UserServlet继承BaseServlet,接收前台发送的post请求并进行处理,首先将前台发送的json数据转换成User对象,其次用User对象作为参数调用service层UserService的添加数据方法。UserService是一个接口对象,其实现类为UserServiceImpl对象,在UserServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象的添加方法,使用其中的方法将User对象持久化,并前台响应成功的标识。
关键代码如下:

//1. 接收数据BufferedReader br = request.getReader();String params = br.readLine();//json字符串///转为user对象User user = JSON.parseObject(params,User.class);//2. 调用service查找User select = userService.select(user.getAccount());if(select.getPassword().equals(user.getPassword())){//3. 响应成功的标识
    response.getWriter().write("success");}

2.4.2 管理员登录功能设计

后台UserServlet继承BaseServlet,接收前台发送的post请求并进行处理,将json字符串转成user对象,UserService是一个接口对象,其实现类为UserServiceImpl对象,在UserServiceImpl使用SqlSessionFactory 工厂对象获得一个sqlSession,通过sqlSession调用MyBatis中的mapper对象中的查询方法用user对象的账号作为参数调用service层UserService的查询数据方法,如果对应的账号存在且密码正确,则可以成功登录,向前台相应成功标识。
关键代码如下:

//1. 接收数据BufferedReader br = request.getReader();String params = br.readLine();//json字符串///转为user对象User user = JSON.parseObject(params,User.class);//2. 调用service查找User select = userService.select(user.getAccount());if(select.getPassword().equals(user.getPassword())){//3. 响应成功的标识
    response.getWriter().write("success");}

本文转载自: https://blog.csdn.net/weixin_45531381/article/details/125425440
版权归原作者 扛枪大帅 所有, 如有侵权,请联系我们删除。

“软件工程 超市库存管理系统 设计报告”的评论:

还没有评论