果蔬超市管理系统的设计与实现

果蔬超市管理系统的设计与实现

摘 要

自超市从90年代初开始传入中国以来,深受中国人民的喜爱,给我国人民带来了极大的便利。超市的货物进货渠道多而且杂,超市员工的级别职位要做的事也有许多不同,不方便于管理;货物商品的销售情况,哪些受到消费者的喜爱多进点,哪些商品滞货考虑少进;超市的财务状况以及各种日常问题的管理都有待于解决。此时一款好用的超市管理系统成为当前最紧要的事情。
本系统共开发了11多项模块,包括管理员的注册,登录,以及对员工,商品类型、进货渠道、超市盈余、商品销售、库存损失等一系列功能模块的查看和管理操作。其中员工管理、商品类型及库存损失等模块主要实现了增删改查等功能,用于超市信息的管理。
本超市管理系统采用了eclipse编程工具,MVC设计模式,MyBatis框架,以及java语言完成代码的书写和功能的实现,借助注解式开发使软件更简洁更有层次性,耦合度也大大降低,同时提高了代码的可复用性。

关键词:SpringMVC;MyBatis;MYSQL;超市管理系统

Design and implementation of management system for baiguoyuan chain fruit and vegetable supermarket

Abstract

Since supermarkets were introduced into China in the early 1990s, they have been deeply loved by the Chinese people and brought great convenience to them.The supermarket’s goods purchase channels are many and miscellaneous, the level of the supermarket staff to do things are also many different, not convenient for management;The sales of goods, which consumers love more into the point, which goods delay goods consider less into;The financial situation of the supermarket and the management of various daily problems need to be solved.At this time a good supermarket management system has become the most urgent thing.
The system has developed a total of 11 modules, including the administrator’s registration, login, as well as the staff, commodity types, purchase channels, supermarket surplus, commodity sales, inventory losses and a series of functional modules view and management operations.Among them, the modules of employee management, commodity type and inventory loss mainly realize the functions of adding, deleting, modifying and checking, which are used for the management of supermarket information.
This supermarket management system USES eclipse programming tools, MVC design pattern, MyBatis framework, and Java language to complete the writing of the code and the realization of the function. The annotated development makes the software more concise and hierarchical, and the coupling degree is also greatly reduced, at the same time, the code reusability is improved.

Key words: MYSQL; SpringMVC; MyBatis; supermarket management system

目 录
摘 要 I
Abstract II
1 绪论 1
1.1 课题背景 1
1.2 国内外研究现状 1
1.3 研究目的及内容 2
2 开发工具及相关技术 3
2.1 MyBatis介绍 3
2.2 Tomcat简介 3
2.3 MySQL数据库 3
2.4 JDBC程序 4
2.5 运行环境 4
3 系统分析 5
3.1 可行性分析 5
3.2 系统功能需求 6
3.3 数据需求分析 8
3.4 体系结构 9
4 系统总体设计 10
4.1 主要功能模块设计 10
4.2 数据库设计 12
5 系统实现 14
5.1 员工管理 14
5.2 商品类型 17
5.3 商品管理 19
5.4 收支统计 22
5.5 进货采购 24
5.6 商品销售 27
5.7 库存损失 30
6 系统测试 33
6.1 程序调试 33
6.2 程序的测试 33
6.3 测试结论 34
7 总结 35
参考文献 36

1 绪论
本章主要对超市管理系统的背景、意义以及国内外研究现状进行分析。
1.1 课题背景
从80年代初起,超市开始传入我国,在这之后给全国的零售业带来了翻天覆地革命性的变化,并且在我国经济发展的过程中,发挥着重要的作用。到了90年代的后期,家乐福Carrefour、沃尔玛WalMart等大型超市开始纷纷在中国设立分店,这些外国大型超市在中国设立分店,在给居民带来了价格实惠、种类繁多的商品的同时,也在购物的时间和距离等方面带来了许多的不便之处。所以超市逐渐像两大方向改变:大型的超市开始朝社区方向转型,而在消费没有大城市那么高的中小型城市的超市,则向连锁超市方向转变。在工作、学习、生活等各个场所都能看到连锁超市的影子。
由于超市的特殊性,超市的管理存在许多的问题。首先是超市的货物进货渠道繁多,其次超市员工也很多,职位也各有不同,不好管理。在信息技术十分发达的今天,继续使用人力去进行管理显得十分赶不上趟,故选择设计本百果园连锁果蔬超市管理系统。
基于此背景通过应用Spring、SpringMVC与MyBatis的相关开源框架,对连锁型超市进行管理平台的模拟研究、设计与实现。它正好充分满足超市管理系统方面中管理员的需求,信息处理全面,节省人力资源。开发此百果园连锁果蔬超市管理系统是为了更好的将超市管理的相关信息,进行简单的分类以及更准确更快速的处理,使信息的来源更加稳定。
1.2 国内外研究现状
随着当前信息技术的高速发展,不得不承认的是国外在超市信息化建设方面确实处于领跑地位,发展出来一整套的管理系统。实行了按照不同的规模开发相应的软件管理系统,来满足不同的需求。几乎所有的超市都具备完善的进销存、统计、预警等等的系统,这不仅提高了效率,也满足了消费者方便购物的要求,所以孕育了一些国际性的大型连锁超市(沃尔玛等等)[1]。国外的超市信息管理系统比起国内还是领先的。
目前国内的小型连锁超市仍然没有采用一个高效、现代化的管理方式,绝大多数仍处于手工管理阶段,虽然有一部分超市采用的POS终端收费,商品的进货、库存、盘点结账和汇总等工作还是手工完成,从而导致其出现管理方面的缺陷,如商品统计困难、结账效率低、实时分析能力差等。随着超市形态的高速发展,经营管理也变得越來越复杂,信息处理量增大、管理流程增多等问题也随之而来,原始的管理方法已无法应对这种复杂的市场,为此,针对小型连锁超市管理系统的开发与设计已成为必然。具备现实中超市管理系统商品管理功能以及销售统计等等功能。使得超市管理系统工作中的管理工作变得轻松简单,代替管理员的亲自管理超市管理系统信息,有着人工管理所无法比拟的优点[2]。这就需要开发一个功能较为全面、用户体验度较高的百果园连锁果蔬超市管理系统,本课题的选择和实现正是基于上述的情况。
1.3 研究目的及内容
随着社会的发展,特别是在我国加入WTO组织之后,国外零售行业巨头纷纷进驻中国市场,使得国内零售市场竞争越来越激烈。与国内外大型连锁超市相比,中小型连锁超市的经营更加灵活,分布范围更广,更贴近人们生活,因此在激烈的国内零售市场中占据一席之地。但是为了适应国内激烈的零售市场竞争,中小型连锁超市也应该不断改进自己的管理方式,充分利用信息技术来优化管理流程,提高管理效率,降低管理成本。在本文的研究中,主要以国内百果园果蔬连锁超市为例,通过对百果园果蔬连锁超市具体经营现状的分析,进行适合百果园果蔬连锁超市经营管理现状的超市管理系统,以其通过百果园果蔬连锁超市信息管理系统的开发,来达到提高百果园果蔬超市市场竞争力的目的。
本管理系统要能够提供安全稳定的运行和完善的功能,具体的设计目标如下:
(1)能够实现超市管理系统的管理员操作,包括管理员的注册,登录,以及对员工,商品类型、进货渠道、超市盈余、商品销售、库存损失等的一系列查看和管理操作。
(2)系统安全稳定地运行,当用户输入相关信息时,不允许输入无效的数据。
(3)用户界面的风格要统一,操作方便简单快捷。

2 开发工具及相关技术
2.1 MyBatis介绍
MyBatis 是一款支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。但与Hibernate不同的是它需要程序员手动编写原生态SQL语句,因为在查询关联对象或者关联集合对象时,MyBatis 不能根据对象关系模型直接获取,所以相对于全自动ORM映射工具Hibernate也称为半自动ORM映射工具[3]。
MyBatis 作为一款封装了JDBC的ORM框架,使得原本需要程序员手写的所有JDBC代码和参数的设置以及对查询结果集进行手工检索几乎全部消除。它支持SQL查询和映射,它使用xml文件来完成对象映射。比如在Mapper文件中将标签ID对应接口的方法,在Resultmap中通过实体类中的属性对应数据库中的字段完成关系的映射。
相对于Hibernate来说,Mybatis很容易上手,即使对JDBC了解不深,但只要会书写SQL语句便可以很快熟练操作MyBatis,程序员通过自己手写SQL语句,这样就可以手动优化SQL代码,提高语句执行速率,所以灵活度也更高。
Mybatis完全可以满足企业需求,企业需要在它的基础之上进行再次的封装,从而提高数据库访问编程效率和持久层的成熟度[4]。
2.2 Tomcat简介
Tomcat 的服务器是完全免费地开放性源代码地Web 应用的服务器,它是属于比较轻量级的应用实用型服务器,对于中小型的系统与其访问的用户不被很普遍的使用运行,对于开发与调试JSP 程序来说这是首选[5]。对刚刚接触的人来说,能认为,操作一台已经配置好的Apache 的服务器的机器时,能够利用上它所响应HTML(即:标准的通常运用于标记语言下地一个应用)地页面地访问请求。而在实际上面Tomcat 的那以部分是依照Apache 的服务器地扩展,可是它是单独运行地,当你使用运行tomcat 的时候,它在实际上是被当成一个和Apache 独立地进程然后单独进行运行地。
2.3 MySQL数据库
MySQL是一个开源的关联式数据库系统,MySQL现在被广泛的应用在互联网上的中小型网站中。MySQL有着体积小、总体拥有成本低、速度快等特点,最重要的是MySQL是开源的,所以许多中小型企业为了降低经费都会选择MySQL作为数据库支持[6]。
MySQL有着诸多特性:
(1)为多种编程语言提供了相应的API,比如说C、C++、JAVA、PHP等。
(2)是开源的数据库,不需要担心支付任何费用,减少开发成本。其查询语句是优化过后的,提高了查询速度和运行效率。
MySQL还有许多其他优点,也因为这些优点让它成为世界上最流行的数据库之一。
2.4 JDBC程序
JDBC(Java Database Connectivity,Java数据库连接)是由SUN公司推出的第一个标准的、用于执行SQL语句的Java API[7]。连接参数主要是连接的URL,不同的数据库产品的连接URL也有不同,其次还需要数据库的用户名和密码。建立数据库连接是从DriverManager中获得Connection对象,,一个Connection 对象就代表一个数据库连接,可以使用 DriverManager 的getConneciton()方法传入指定的连接URL、用户名和密码。PreparedStatement则是用于执行动态SQL语句。所以,在操作结束后要把所使用的JDBC对象全都显示关闭,以释放JDBC资源[8]。
2.5 运行环境
开发本系时电脑使用的是惠普,操作系统为win10 64位,配置电脑环境变量使用JDK1.8版本,数据库使用MySQL数据库,代码编写工具使用eclipse,服务器使用Tomcat9.0版本服务器。

3 系统分析
3.1 可行性分析
在系统的开发之前,对系统进行可行性分析是十分必要的一个步骤,这样可以保证对资源的合理利用,同时也保证了项目开始之后能够顺利进行,不用再次做出大量变动。 开发任何一个软件系统都会受到资源和时间的限制,因此开发人员在接受客户的项目需求之前,需要先进行各方面的可行性分析。
(1)技术可行性
系统开发使用的是JSP技术与数据库My SQL,开发的软件也是现在流行的网页制作软件MyEclipse,而数据库MySQL是学校的理论课程,因此,从开发的角度来说是可行的。
而系统调试测使用用的Tomcat 6.0,它支持对JSP文件的调试,并且,返回错误。其安装过程简单,使用时也比较容易,从这方面来讲,技术也是可行的。
系统测试成功后发布,使用时,其操作很简单,用户不需任何培训便可自行使用,从这方面来说,也是可行的。
(2)时间可行性
根据自己掌握的技术情况,对相关行业的体验了解以及本项目的难度和相关工具以及技术的支持,本人认为开发出本共享单车模拟系统时间充裕,时间上不存在任何问题
(3)操作可行性
本系统后台是一个基于Web的超市管理系统管理服务平台,是Web技术应用于网上操作,浏览的产物,是超市管理系统发展历史上的一个新阶段。本系统后台主要用于超市管理系统管理方面。系统的操作简单,主要就是界面操作,点击相应的按钮,执行响应的操作,与其他管理型的软件几乎在操作方面是相同的,所以适合各类的人员使用,操作简单。界面清晰易懂。
由以上分析可知,本网站具有操作可行性。

3.2 系统功能需求
主要实现对系统用户角色进行划分,不同角色具有不同的使用权限;主要实现用户在网站上就可以查找自己的信息,系统管理员通过管理系统的基本信息达到目的。
注册和登录的网站是最不可缺少的功能,该网站的用户活动的重要枢纽的参与。通过注册,用户可以有效的用户名,密码,电子邮件和其它信息的采集,和系统信息保存到合法用户并传递给数据库。当用户注册完成后,您可以登录在网站上。并且只具有唯一性。
本系统为了设计、实现和后期维护的方便,以及系统用户使用的便利,所以必须采取一定的设计原则。其主要设计原则有:
(1)易操作性:本系统前端通过jsp实现,虽然界面简单,但功能齐全,并且页面对应的操作一目了然。用户不必做过多的学习便可以熟练操作。
(2)易懂性:每个按钮都有相应的文字说明,每步操作也有操作成功与否的提示可以使用户很快上手。
(3)容错性:基于前台的验证功能,可以预先过滤不合法的数据,并且后台也有相关的验证操作以保证操作的正确有序进行,不会造成因操作失误或者输入数据错误造成的系统崩溃。
(4)实用性:经过前期对共享单车流程的体验分析,本系统基本上涉及了本人所能想到的功能,可以满足大部分用户的需求。
本系统的主要功能需求如下:
(1)员工管理
为了满足超市员工正常的人员流动以及提高管理人员的工作效率,记录员工的一些基本档案信息,设计重点是对员工信息的数据进行维护、查询等要求。实现员工档案的添加,逻辑删除,修改和查询的功能,为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询,关键字查询。能够新增员工,查看员工列表,并根据特定的条件查询员工,其中新增员工需要新增的信息包含但不限于员工的姓名,性别,出生日期,身份证,联系方式,联系地址,入职日期,工资,备注等。

(2)商品类型
因超市商品的类型多种多样,需要单独列出一个功能,方便增加商品种类,时不时与竞争对手进行对比,添加缺少的商品类型,丰富超市商品类型,增加超市竞争力。管理员可以管理商品类型信息,可以查看以及管理相关信息。主要管理类型名称等信息。可对商品类型信息进行添加、删除、修改和查询等操作。
(3)商品管理
此功能是对商品类型的具体化,超市的商品种类繁多,每一个商品类型下又包含多种商品,该模块需要对同种类型的不同商品信息进行录入,商品的信息包含但不限于商品的名称,商品类型,供应商,商品库存,创建日期以及备注等信息,使管理员可以管理商品信息,可对商品信息进行添加、删除、修改、条件查询(模糊查询)和主键查询(根据条形码进行查询)等操作。
(4)收支统计
超市的每一项收入和支出都必须有明确的来源和去向,方便公司财务对账面进行清算和整理。收支统计需要对商品销售信息和进货采购信息通过单号进行实时的录入,其中单号要根据当天的日期时间自动生成。同时在日期的添加时希望是自动选择而不是手动输入。使管理员可以管理超市的收支信息,可以查看以及管理(必要的增删改查)相关信息。主要管理收支类型,收支金额,经手人,日期以及备注等信息。可对收支信息进行添加、删除、修改以及条件查询(包含但不限于收支类型,收支金额,经手人,日期)和主键查询(根据单号进行查询)等操作。
(5)进货采购
对于超市的经营来说,每日的进货采购可以说是家常便饭。为了确保每项任务落到实处,需要有经手人的记录,每项进货都要知道由谁经手。在新增进货采购时,希望输入采购的单价和采购的数量后,提交之后可以自动生成总计。并且进货采购的商品必须是已有的商品,如果是新的品类要在商品类型和商品中添加后,再进行采购。我们希望每一个模块都是相关联的,一环扣一环的,而不是一盘散沙,想进什么就进什么,所以在进货采购中要有商品这一选项,直接勾选采购的是哪一商品,以方便超市的经营及管理。

(6)商品销售
这是超市的最基本的一个功能,在新增销售的商品时,商品最基本的一些信息,如销售单价,销售数量,总计,经手人以及销售日期等。单号能根据日期时间自动生成。管理员可以管理商品销售信息,可以查看以及管理相关信息。主要管理销售单价,销售数量,总计,经手人以及销售日期等信息。可对商品销售信息进行添加、删除、修改以及查询。为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(7)库存损失
库存的损失是在超市的日常经营过程中可能发生的,所以我们希望对其信息也进行记录,并对损失的原因加以说明,方便日后处理。同时需要有单号,单号以日期年月日加时间为主要构成部分,日期希望是可选择并在逻辑范围内。主要管理库存损失数量,损失金额,损失原因,负责人等信息。可对库存损失信息进行添加、删除、编辑。
3.3 数据需求分析
(1)员工管理
员工管理需要记录一些员工的关键信息,包含但不限于员工的姓名,性别,出生日期,身份证,联系方式,联系地址,入职日期,工资,备注等。
(2)商品管理
主要包括的字段包含但不限于条形码,商品的名称,商品类型,供应商,商品库存,创建日期以及备注等信息。
(3)收支统计
主要包括的字段有收支单号,收支类型,收支金额,经手人,日期以及备注等信息。
(4)进货采购
主要包括的字段有采购单号,商品,采购单价,采购数量,总计,日期,经手人等。
(5)商品销售
主要包括的字段有销售单号,销售单价,销售数量,总计,经手人以及销售日期等信息。
(6)库存损失
主要包括的字段有库存损失单号,损失商品,数量,金额,损失原因,负责人,损失日期等。
3.4 体系结构
在当今的Web软件开发中,MVC模式已成为一种标准[9]。MVC模式是制作软件的标准设计模式,也是开发J2EE应用程序最常用的开发模式[10],本系统体系结构即采用这种模式:M(模型层),V(视图层),C(控制层);采用这样的架构好处在于降低耦合性,使得这三个模块相互独立,无论改变哪一个模块都不会影响到另外两个模块,不仅使程序的复杂度得到了简化,程序结构更加直观易懂,并且增加了代码的可复用性和可扩展性,大大的提高了代码的重用性!下面将详细介绍各层的作用:
Model(模型层):也称为业务逻辑层,作为一个程序的核心层它封装了领域数据及逻辑,例如算法实现、数据库设计以及数据存取操作实现进行处理业务逻辑,它可以将处理结果进行反馈,并且持久化,当出现不可预知错误时,比如断电宕机,服务器压力过大,线程不安全等问题时还可以进行回滚以保证数据的安全性、一致性。其对应组件为对项目进行分析后抽离出来的类,即平时所说的JavaBean。
View(视图层):望文生义是用户可以看到并且与系统进行交互的页面,网站首页,图片,表格,等等的展示都属于视图层。它负责的是将查询到的数据进行展示并且接收用户的数据和操作,页面变化等信息,其对应组件一般是jsp或者html文件。
Controller(控制器层):截获用户请求并改变领域数据。接收用户请求,比如解释用户的鼠标和键盘输入所形成相应的请求信息,然而本身并不输出任何东西和做任何处理,只是接收请求并决定调用哪个Model组件中去处理请求,处理结束后确定调用哪个View去显示返回的结果,其对应组件是Servlet。

4 系统总体设计
4.1 主要功能模块设计
本系统的功能模块图如图4-1所示。

图 4-1主要功能模块图

本系统的主要模块如下:
(1)员工管理
包含新增员工,员工列表,查询员工三个部分,实现员工档案的添加,删除,修改和查询的功能,为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询。其中新增员工需要新增的信息包含但不限于员工的姓名,性别,出生日期,身份证,联系方式,联系地址,入职日期,工资,备注等。
(2)商品类型
包含新增商品类型,商品类型列表,查询商品类型三个部分。管理员可以管理商品类型信息,可以查看以及管理相关信息。主要管理类型名称等信息。可对商品类型信息进行添加、删除、修改和查询等操作。
(3)商品管理
包含新增商品,商品列表,查询商品三个部分。商品的信息包含但不限于商品的名称,商品类型,供应商,商品库存,创建日期以及备注等信息,使管理员可以管理商品信息,可对商品信息进行添加、删除、修改、条件查询

(4)收支统计
包含收支统计列表,查询收支统计两个部分。使管理员可以管理超市的收支信息,可以查看以及管理相关信息。主要管理收支类型,收支金额,经手人,日期以及备注等信息。可对收支信息进行添加、删除、修改以及条件查询(包含但不限于收支类型,收支金额,经手人,日期)和主键查询(根据单号进行查询)等操作。
(5)进货采购
包含新增进货采购,进货采购列表,查询进货采购三个部分。使管理员可以管理超市的采购信息,可以查看以及管理相关信息。主要包括的字段有采购单号,商品,采购单价,采购数量,总计,日期,经手人等。可对进货采购信息进行添加、删除、修改以及查询。为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(6)商品销售
包含新增商品销售,商品销售列表,查询商品销售三个部分。管理员可以管理商品销售信息,可以查看以及管理相关信息。主要管理销售单价,销售数量,总计,经手人以及销售日期等信息。可对商品销售信息进行添加、删除、修改以及查询。为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(7)库存损失
包含新增库存损失,库存损失列表,查询库存损失三个部分。主要管理库存损失数量,损失金额,损失原因,负责人等信息。可对库存损失信息进行添加、删除、修改。

4.2 数据库设计
百果园连锁果蔬超市管理系统统需要后台数据库,本系统采用MYSQL数据库作为数据存储,下面介绍数据库中的各个表的详细信息。
(1)员工信息表如表4-1所示。
表4-1员工信息表
列 名 说 明 类型 备 注
Id 编号 Int (4) 主键
name 员工姓名 Nvarchar (50) 不允许空
sex 性别 Nvarchar (20) 不允许空
birthday 出生日期 Nvarchar (20) 不允许空
idcard 身份证 Nvarchar (20) 不允许空
tel 联系方式 Nvarchar (20) 允许空
address 联系地址 Nvarchar (20) 允许空
rzdate 入职日期 Datetime 不允许空
salary 工资 Nvarchar (10) 不允许空
remark 备注 Nvarchar (10) 不允许空

(2)商品信息表如表4-2所示。
表4-2 商品信息表
列 名 说 明 类型 备 注
id 条形码 Int (4) 主键
name 商品名称 Nvarchar (20) 不允许空
type 商品类型 Char(1) 不允许空
gys 供应商 Nvarchar (50) 不允许空
gkc 商品库存 Nvarchar (50) 不允许空
createtime 创建日期 Datetime 不允许空
remark 备注 Nvarchar (50) 不允许空

(3)商品销售信息表如表4-3所示。

表4-3 商品销售信息表
列 名 说 明 类型 备 注
Id 销售单号 Int (4) 主键
goods 商品 Nvarchar (50) 不允许空
price 销售单价 Nvarchar (50) 不允许空
xsnum 销售数量 Nvarchar (50) 不允许空
count 总计 Nvarchar (50) 不允许空
jsuser 经手人 Nvarchar (50) 不允许空
xsdate 销售日期 Datetime 不允许空
remark 备注 Nvarchar (50) 不允许空

(4)库存损失表如表4-4所示。
表4-4 库存损失表
列 名 说 明 类 型 ( 长 度 ) 备 注
Id
goods
snum
price
reason
responsor
remark 损失单号
商品
数量
损失金额
损失原因
负责人
备注 Int (4)
Nvarchar (50)
Nvarchar (50)
Nvarchar (50)
Nvarchar (50)
Nvarchar (50)
Nvarchar (50) 主键
不允许空
不允许空
不允许空
不允许空
允许空
允许空

5 系统实现
5.1 员工管理
管理员可以管理员工信息,可以查看以及管理相关信息。主要管理员工的姓名,性别,出生日期,联系地址,入职日期以及工资等信息。可对员工信息进行添加、删除、修改和查询等操作。使用日期插件,方便日期插入,可直接选择日期进行日期信息的录入。
(1)添加员工如图5-1所示。

图5-1添加员工

核心代码:
// 添加数据
@RequestMapping(“addEmp.action”)
public String addEmp(Emp emp) {
emp.setEmpid(VeDate.getStringDatex());
this.empDAO.insertEmp(emp);
return “redirect:/emp/createEmp.action”;
}

(2)删除修改员工信息如图5-2所示。

图5-2删除修改员工信息
核心代码:
// 通过主键删除数据
@RequestMapping(“deleteEmp.action”)
public String deleteEmp(String id) {
this.empDAO.deleteEmp(id);
return “redirect:/emp/getAllEmp.action”;
}
// 更新数据
@RequestMapping(“updateEmp.action”)
public String updateEmp(Emp emp) {
this.empDAO.updateEmp(emp);
return “redirect:/emp/getAllEmp.action”;
}

(3)查询员工信息如图5-3所示。

图5-3查询员工信息

核心代码:
// 按条件查询数据 (模糊查询)
@RequestMapping(“queryEmpByCond.action”)
public String queryEmpByCond(String cond, String name, Map<String, Object> map) {
List empList = new ArrayList();
Emp emp = new Emp();
if (cond != null) {
if (“empname”.equals(cond)) {
emp.setEmpname(name);
empList = this.empDAO.getEmpByLike(emp);
}
if (“sex”.equals(cond)) {
emp.setSex(name);
empList = this.empDAO.getEmpByLike(emp);
}
if (“address”.equals(cond)) {
emp.setAddress(name);
empList = this.empDAO.getEmpByLike(emp);
}
if (“workdate”.equals(cond)) {
emp.setWorkdate(name);
empList = this.empDAO.getEmpByLike(emp);
}
}
map.put(“empList”, empList);
return “admin/queryemp”;
}

5.2 商品类型
管理员可以管理商品类型信息,可以查看以及管理相关信息。主要管理类型名称等信息。可对商品类型信息进行添加、删除、修改和查询等操作。
(1)添加商品类型如图5-4所示。

图5-4添加商品类型

核心代码:
// 添加数据
@RequestMapping(“addCate.action”)
public String addCate(Cate cate) {
cate.setCateid(VeDate.getStringDatex());
this.cateDAO.insertCate(cate);
return “redirect:/cate/createCate.action”;
}

(2)删除修改商品类型如图5-5所示。

	图5-5删除修改商品类型

核心代码:
// 通过主键删除数据
@RequestMapping(“deleteCate.action”)
public String deleteCate(String id) {
this.cateDAO.deleteCate(id);
return “redirect:/cate/getAllCate.action”;
}
// 更新数据
@RequestMapping(“updateCate.action”)
public String updateCate(Cate cate) {
this.cateDAO.updateCate(cate);
return “redirect:/cate/getAllCate.action”;
}
(3)查询商品类型如图5-6所示。

	图5-6查询商品类型

核心代码:
// 按条件查询数据 (模糊查询)
@RequestMapping(“queryCateByCond.action”)
public String queryCateByCond(String cond, String name, Map<String, Object> map) {
List cateList = new ArrayList();
Cate cate = new Cate();
if (cond != null) {
if (“catename”.equals(cond)) {
cate.setCatename(name);
cateList = this.cateDAO.getCateByLike(cate);}}
map.put(“cateList”, cateList);
return “admin/querycate”;
}
5.3 商品管理
管理员可以管理商品信息,主要管理商品的名称,商品类型,供应商,商品库存,创建日期以及备注等信息。可对商品信息进行添加、删除、修改、条件查询(模糊查询)和主键查询(根据条形码进行查询)等操作。使用日期插件,方便日期插入,可直接选择日期进行日期信息的录入。
(1)添加商品如图5-7所示。

图5-7添加商品

核心代码:
// 添加数据
@RequestMapping(“addGoods.action”)
public String addGoods(Goods goods) {
goods.setGoodsid(VeDate.getStringDatex());
goods.setAddtime(VeDate.getStringDateShort());
goods.setStorage(“0”);
this.goodsDAO.insertGoods(goods);
return “redirect:/goods/createGoods.action”;
}

(2)修改删除商品信息如图5-8所示。

	图5-8删除修改商品信息

核心代码:

// 通过主键删除数据
@RequestMapping(“deleteGoods.action”)
public String deleteGoods(String id) {
this.goodsDAO.deleteGoods(id);
return “redirect:/goods/getAllGoods.action”;
}
// 更新数据
@RequestMapping(“updateGoods.action”)
public String updateGoods(Goods goods) {
this.goodsDAO.updateGoods(goods);
return “redirect:/goods/getAllGoods.action”;
}

(3)查询商品信息如图5-9所示。

	图5-9查询商品信息

核心代码:

// 按条件查询数据 (模糊查询)
@RequestMapping(“queryGoodsByCond.action”)
public String queryGoodsByCond(String cond, String name, Map<String, Object> map) {
List goodsList = new ArrayList();
Goods goods = new Goods();
if (cond != null) {
if (“gcode”.equals(cond)) {
goods.setGcode(name);
goodsList = this.goodsDAO.getGoodsByLike(goods);
}
if (“goodsname”.equals(cond)) {
goods.setGoodsname(name);
goodsList = this.goodsDAO.getGoodsByLike(goods);
}

	}
	map.put("goodsList", goodsList);
	return "admin/querygoods";
}

5.4 收支统计
管理员可以管理超市的收支信息,可以查看以及管理相关信息。主要管理收支类型,收支金额,经手人,日期以及备注等信息。可对收支信息进行添加、删除、修改以及条件查询(模糊查询)和主键查询(根据收支单号进行查询)等操作。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(1)修改删除收支统计信息如图5-10所示。

图5-10修改删除收支统计信息

核心代码:

// 通过主键删除数据
@RequestMapping(“deleteBooks.action”)
public String deleteBooks(String id) {
this.booksDAO.deleteBooks(id);
return “redirect:/books/getAllBooks.action”;
}
// 更新数据
@RequestMapping(“updateBooks.action”)
public String updateBooks(Books books) {
this.booksDAO.updateBooks(books);
return “redirect:/books/getAllBooks.action”;
}
(2)查询收支统计如图5-11所示。

	图5-11查询收支统计

核心代码:

// 按条件查询数据 (模糊查询)
@RequestMapping(“queryBooksByCond.action”)
public String queryBooksByCond(String cond, String name, Map<String, Object> map) {
List booksList = new ArrayList();
Books books = new Books();
if (cond != null) {
if (“tno”.equals(cond)) {
books.setTno(name);
booksList = this.booksDAO.getBooksByLike(books);
}
if (“money”.equals(cond)) {
books.setMoney(name);
booksList = this.booksDAO.getBooksByLike(books);
}

	}
	map.put("booksList", booksList);
	return "admin/querybooks";
}

5.5 进货采购
使管理员可以管理超市的采购信息,可以查看以及管理相关信息。主要包括的字段有采购单号,商品,采购单价,采购数量,总计,日期,经手人等。可对进货采购信息进行添加、删除、修改以及查询。为了方便查询,系统需要增加多个查询条件,必要时可以进行更加精确的查询。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(1)添加进货采购如图5-12所示。

	图5-12添加进货采购

核心代码:
// 添加数据
@RequestMapping(“addBuy.action”)
public String addBuy(Buy buy) {
buy.setBuyid(VeDate.getStringDatex());
buy.setTotal("" + (Double.parseDouble(buy.getPrice()) * Double.parseDouble(buy.getNum())));
buy.setAddtime(VeDate.getStringDateShort());
this.buyDAO.insertBuy(buy);
Goods goods = this.goodsDAO.getGoodsById(buy.getGoodsid());
goods.setStorage("" + (Integer.parseInt(goods.getStorage()) + Integer.parseInt(buy.getNum())));
this.goodsDAO.updateGoods(goods);
Books books = new Books();
books.setAddtime(VeDate.getStringDateShort());
books.setBooksid(VeDate.getStringDatex());
books.setEmpid(buy.getEmpid());
books.setMoney(buy.getTotal());
books.setCate(“支出”);
books.setMemo("采购 " + goods.getGoodsname() + “支出”);
books.setTno(buy.getBno());
this.booksDAO.insertBooks(books);
return “redirect:/buy/createBuy.action”;
}

(2)删除修改进货采购信息如图5-13所示。

	图5-13删除修改进货采购信息

核心代码:

// 通过主键删除数据
@RequestMapping(“deleteBuy.action”)
public String deleteBuy(String id) {
this.buyDAO.deleteBuy(id);
return “redirect:/buy/getAllBuy.action”;
}
// 更新数据
@RequestMapping(“updateBuy.action”)
public String updateBuy(Buy buy) {
this.buyDAO.updateBuy(buy);
return “redirect:/buy/getAllBuy.action”;
}
(3)查询进货采购如图5-14所示。

	图5-14查询进货采购

核心代码:
// 按条件查询数据 (模糊查询)
@RequestMapping(“queryBuyByCond.action”)
public String queryBuyByCond(String cond, String name, Map<String, Object> map) {
List buyList = new ArrayList();
Buy buy = new Buy();
if (cond != null) {
if (“bno”.equals(cond)) {
buy.setBno(name);
buyList = this.buyDAO.getBuyByLike(buy);
}
if (“goodsid”.equals(cond)) {
buy.setGoodsid(name);
buyList = this.buyDAO.getBuyByLike(buy);
}
}
map.put(“buyList”, buyList);
return “admin/querybuy”;
}
5.6 商品销售
管理员可以管理商品销售信息,可以查看以及管理相关信息。主要管理销售单价,销售数量,总计,经手人以及销售日期等信息。可对商品销售信息进行添加、删除、修改以及条件查询(模糊查询)和主键查询(根据单号进行查询)等操作。使用日期插件,方便日期插入,可直接选择日期进行信息录入。
(1)添加商品销售信息如图5-15所示。

	图5-15添加商品销售信息

核心代码:
// 添加数据
@RequestMapping(“addSell.action”)
public String addSell(Sell sell) {
sell.setSellid(VeDate.getStringDatex());
sell.setAddtime(VeDate.getStringDateShort());
sell.setTotal("" + (Double.parseDouble(sell.getPrice()) * Double.parseDouble(sell.getNum())));
Goods goods = this.goodsDAO.getGoodsById(sell.getGoodsid());
if (Integer.parseInt(goods.getStorage()) >= Integer.parseInt(sell.getNum())) {
goods.setStorage("" + (Integer.parseInt(goods.getStorage()) - Integer.parseInt(sell.getNum())));
this.goodsDAO.updateGoods(goods);
this.sellDAO.insertSell(sell);
Books books = new Books();
books.setAddtime(VeDate.getStringDateShort());
books.setBooksid(VeDate.getStringDatex());
books.setMemo("销售 " + goods.getGoodsname() + “收入”);
this.booksDAO.insertBooks(books);
} else {
this.getRequest().getSession().setAttribute(“message”, “库存余额不足”);}
return “redirect:/sell/createSell.action”;
}
(2)删除修改商品销售信息如图5-16所示。

	图5-16删除修改商品销售信息

核心代码:
// 通过主键删除数据
@RequestMapping(“deleteSell.action”)
public String deleteSell(String id) {
this.sellDAO.deleteSell(id);
return “redirect:/sell/getAllSell.action”;
}
// 更新数据
@RequestMapping(“updateSell.action”)
public String updateSell(Sell sell) {
this.sellDAO.updateSell(sell);
return “redirect:/sell/getAllSell.action”;
}
(3)查询商品销售如图5-17所示。

	图5-17查询商品销售

核心代码:
// 按条件查询数据 (模糊查询)
@RequestMapping(“querySellByCond.action”)
public String querySellByCond(String cond, String name, Map<String, Object> map) {
List sellList = new ArrayList();
Sell sell = new Sell();
if (cond != null) {
if (“sno”.equals(cond)) {
sell.setSno(name);
sellList = this.sellDAO.getSellByLike(sell);
}
if (“goodsid”.equals(cond)) {
sell.setGoodsid(name);
sellList = this.sellDAO.getSellByLike(sell);
}
if (“price”.equals(cond)) {
sell.setPrice(name);
sellList = this.sellDAO.getSellByLike(sell);
}
}
map.put(“sellList”, sellList);
return “admin/querysell”;
}

5.7 库存损失
管理员可以管理库存损失信息,可以查看以及管理相关信息,主要管理库存损失数量,损失金额,损失原因,负责人等信息。可对库存损失信息进行添加、删除、编辑以及条件查询(模糊查询)和主键查询(根据单号进行查询)等操作。使用日期插件,方便日期插入,可直接选择日期进行日期信息的录入。
(1)添加库存损失如图5-18所示。

	图5-18添加库存损失

核心代码:
// 添加数据
@RequestMapping(“addBroken.action”)
public String addBroken(Broken broken) {
broken.setBrokenid(“B” + VeDate.getStringDatex());
broken.setAddtime(VeDate.getStringDateShort());
Goods goods = this.goodsDAO.getGoodsById(broken.getGoodsid());
if (Integer.parseInt(goods.getStorage()) >= Integer.parseInt(broken.getNum())) {
goods.setStorage("" + (Integer.parseInt(goods.getStorage()) - Integer.parseInt(broken.getNum())));
this.goodsDAO.updateGoods(goods);
this.brokenDAO.insertBroken(broken); } else {
this.getRequest().getSession().setAttribute(“message”, “库存余额不足”);}
return “redirect:/broken/createBroken.action”;}
(2)修改删除库存损失如图5-19所示。

	图5-19修改删除库存损失

核心代码:
// 通过主键删除数据
@RequestMapping(“deleteBroken.action”)
public String deleteBroken(String id) {
this.brokenDAO.deleteBroken(id);
return “redirect:/broken/getAllBroken.action”;
}
// 更新数据
@RequestMapping(“updateBroken.action”)
public String updateBroken(Broken broken) {
this.brokenDAO.updateBroken(broken);
return “redirect:/broken/getAllBroken.action”;
}

(3)查询库存损失如图5-20所示。

	图5-20查询库存损失

核心代码:
// 按条件查询数据 (模糊查询)
@RequestMapping(“queryBrokenByCond.action”)
public String queryBrokenByCond(String cond, String name, Map<String, Object> map) {
List brokenList = new ArrayList();
Broken broken = new Broken();
if (cond != null) {
if (“bno”.equals(cond)) {
broken.setBno(name);
brokenList = this.brokenDAO.getBrokenByLike(broken);
}
if (“goodsid”.equals(cond)) {
broken.setGoodsid(name);
brokenList = this.brokenDAO.getBrokenByLike(broken);
}
if (“num”.equals(cond)) {
broken.setNum(name);
brokenList = this.brokenDAO.getBrokenByLike(broken);
}
}
map.put(“brokenList”, brokenList);
return “admin/querybroken”;
}

6 系统测试
6.1 程序调试
在设计系统时,有一些误差是不可避免的。语法错误陈述,该程序会自动运行的提示,并要求立即纠正,因此,比较容易找到这样的错误并加以改正。但另一种类型的错误是在程序执行一个错误的结果,由于不正确操作或计算逻辑错误的某些数据。这种类型的错误隐藏的,有时,有时不会出现,因此,会出现解决这种动态的错误是很费时。
6.2 程序的测试
(1) 测试的重要性及目的
测试是为了发现程序中的错误而执行程序的过程,测试的目的就是在软件投入生产性运行之前,尽可能多的发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审,也是必不可少的关键步骤。
整个系统设计完成后,在整合系统功能之后,在数据库中添加入一定的数据,进行功能数据测试,找出问题,进行相关的修改和完善。本章主要介绍系统测试范围和主要内容,并进行测试用例编写的相关说明。
(2) 测试概述
软件测预期结果不一致的情况,从而为了后续产品健壮性作出一定的整改经验。同时在以后程序设试是软件开发过程中最重要的一个环节,其目的是为了检验所开发的应用软件是否符合软件需求规格说明书的要求。以及验证程序的可用性,是否满足正常需求,还包括检查出来和计中避免再次遇到相同错误。
(3) 测试的内容
软件测试作为软件开发重要环节之一,它同样有确保软件的质量,对软件的顺利运行起着保障性作用。因此,为了确保计算机软件能够正常运行,降低错误发生率,减少软件的开发费用,探究计算机软件测试方法具有重要意义。

由于篇幅原因,现仅测试重点功能,
(1)测试没有选择任何选项提交,测试如图6-1所示:

图6-1测试无选项提交
(2)测试不输入任何数据提交,测试如图6-2所示:

图6-2测试无数据提交
6.3 测试结论
经过最初的测试,本产品满足基本的需求,但在上线前有必要进行压力测试来发现可能存在的问题。

7 总结
本文从超市管理系统管理系统的背景以及发展现状的研究中,获得了开发超市管理系统管理系统的意义与目的。但是系统仍然存在很多不足之处,部分功能还是不够人性化,用户体验度不是很高,这都有待后期的改善和优化。毕竟没有哪个系统能做到十全十美,一些小的bug和缺乏人性化的设计都需要一步步的改善和维护。
现阶段看到的不足有三点:一是只为管理员所用,二是每次商品销售信息录入太过麻烦,三是信息在填写时没有明显的必填选填提示。对于第一个不足,后期会陆续开放员工对该系统的使用,对不同角色进行更细致的划分;对于第二点,未来可与前台的收银相连,直接录入商品销售信息;对于第三点,加上信息提示,必填的信息用红色星号标明。
无论如何,系统的初步完成也是对自己这段时间努力的肯定,但不能因此放松,在未来的时间里要继续努力,将系统完善成为一个真正上线给店家提供便利的网站。

参考文献

[1]薄学.软件工程技术在系统软件开发中的应用[J].无线互联科技,2017,(19):49-50.
[2]王涛.软件工程化的基本形式和关键技术[J].电子技术与软件工程,2017,(19):37.
[3]张雅南.计算机软件工程管理与应用[J].电子技术与软件工程,2017,(18)
[4]王伟敏.软件工程化管理方法实践[J].电子质量,2017,(10):58-62.
[5]王依楠.数据库基于计算机软件工程的编程技术[J].电子技术与软件工程,2017,(20):165.
[6]于博文.基于计算机软件工程的数据库编程技术[J].中国高新区,2017,(24):182.
[7]颜巾帼.软件工程在企业信息化平台建设中重要性[J].民营科技,2017,(09):95.
[8]冷艳萍.系统软件开发过程中的软件工程技术探究[J].电子制作,2017,(18):51-52.
[9]周志杰.软件工程系统结构模型研究[J].通讯世界,2017,(19):263-264.
[10]Quintero,A.O.Research on application information system integration platform in medicine manufacturing enterprise.[J]. International Journal of the Commons,2010(1):23-40.

  • 12
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值