本科毕业设计(论文)
题 目: 进销存管理系统的设计与实现
专题题目:
本 科 毕 业 设 计(论文)任 务 书
题 目:进销存管理系统的设计与实现
专题题目(若无专题则不填):
原始依据(包括设计(论文)的工作基础、研究条件、应用环境、工作目的等):
- 工作基础
在选题之前首先对现在企业的发展现状做了一些调查,通过调查发现了开发这个系统的必要性,然后对开发这个系统所需要的一些工具、条件等进行了调查,发现完全可以满足我们开发一个这样的系统。 - 研究条件
本项目的开发首先是考虑到是定位为小型公司,因此开发周期不能太长,开发资金不能太多,因此应该需要一些能够快速开发的技术并且能满足这些小型企业的业务需求。 - 应用环境
本项目需要在Windows7以上的操作系统上,并且有浏览器,就可以正常操作本系统了。
- 工作目的
企业的员工可以脱离手工记账的痛苦,全部可以在电脑上操作,相对以前的手工可以节省大量的人力和物力,与此同时还能提高工作效率;还有就是以前手工的操作容易出错,现在用电脑可以大大降低出错的概率,大大提高了工作效率。可以说对企业是好处多多。
主要内容和要求:(包括设计(研究)内容、主要指标与技术参数,并根据课题性质对学生提出具体要求):
- 研究内容
首先是对进货、销售和库存的正常增删改查的操作,这是一个最基本的功能,在这个的基础上,定制一些个性的功能;一个是要对以往的销售订单的统计分析,最好能用图表的形式表现出来。这样能看到一个销售的趋势,这样对公司决策者在制定公司战略时能起到一个参考的作用。接下来就是数据的安全问题,企业在运转的过程中肯定会产生很多的重要的数据,但是这些数据有时候可能会被破坏或者人为的原因导致数据的丢失,因此我们要对这写数据进行备份,以备不时之需。做到在数据丢失时,我们还能还原系统。对于这个数据备份,既提供每天定时备份,也提供自己手动备份。 - 主要技术指标与技术参数
首先是整个系统的操作比较简单,要有良好的人机交互界面,让企业的每一个员工都能轻松地操作整个系统。然后对于进货、销售和库存的操作界面简洁、易于操作,然后对于这些数据的操作都能够正确快速的响应。然后对于每一个设计的功能都是可以正常、快速的运行。 - 具体要求
独立完成本项目系统研制过程,系统能够顺利运行,并独立完成论文报告。
日程安排:
序号 | 各阶段工作内容 | 时间安排 |
1 | 毕业设计开题报告 | 2017年2月28日前完成 |
2 | 需求分析 | 第一、二周 |
3 | 概要设计 | 第三、四周 |
4 | 详细设计 | 第五、六周 |
5 | 系统设计 | 第七周 |
6 | 系统开发 | 第八、九周 |
7 | 系统测试 | 第十周 |
8 | 毕业设计论文整理 | 第十一、十二周 |
9 | 提交毕业论文 | 2017年5月21日前 |
主要参考文献和书目:(不少于15篇论文,其中M指书籍,D指学位论文,J指期刊论文)
[1] 陈广宇.管理信息系统[M].北京:清华大学出版社,2010:95-100
[2] 张墨华,张永强.Java程序设计[M].北京:清华大学出版社, 2010:123-124
[3] 黄沙.企业物流成本管理存在问题及对策[J].物流技术与应用,2011,13(2):101-102.
[4] 姚兴华. 基于轻量级ORM的R2O架构的设计和应用[D]. 福州大学 2010
[5] 李海峰. MVC模式架构的应用研究[J]. 自动化与仪器仪表. 2013(01)
[6] 汪云飞.JavaEE开发的颠覆者: Spring Boot实战[M], 2016-03
[7] 林祥纤.从零开始学Spring Boot[M], 2016-07-19
[8]基恩、席卡里尔.Pro JPA2中文版:精通Java持久化API[M], 清华大学出版社, 2011-10-1
[9] 张艳.基于工作过程的物流信息系统与管理课程的重构[J].辽宁高职学报,2010, 12(2):45-47.
[10] 李小娜,董绍华.物流信息技术在现代物流中的应用[J].中国科技信息,2008,(21):140-143.
[11] 隋英琴.供应链管理环境下的物流管理创新[J].科技创业,2008,14(03):123-125.
[12] 陈雄华 Spring 企业级应用开发详解[M] 北京:电子工业出版社 2009
[13] 王寅田. 基于Hadoop的交通物流大数据处理系统设计与实现[D]. 上海交通大学 2014
[14] 陈凤琴.基于B/S模式的中小饲料企业进销存系统设计与实现[D].南昌大学2014
[15] 黄沙.企业物流成本管理存在问题及对策[J].物流技术与应用,2011,13(2):101-102.
指导教师(签字):
年 月 日
注:本表可自主延伸,各专业根据需要调整。
本 科 毕 业 设 计(论文)开 题 报 告
题 目:进销存管理系统的设计与实现
专题题目(若无专题则不填):
本课题来源及研究现状:
- 课题来源:
21世纪是信息化的时代,各行各业都离不开信息,随之产生的问题是如何更高效的获取有用的信息。在企业经营集团化和国际化的形势下,提出了供应链的管理模式。
供应链(Supply Chain)是企业在制造生产及产品流通过程中,为了能将产品或者服务顺利的交付给用户,由上游与下游企业共同创建的需求链状网。具体而言,供应链的重点是围绕着客户需求,通过对物流、资金流和信息流的控制,从采购原材料开始,到制成中间产品以及最终产品交付,最后由各个销售网络把产品送到消费者手中。简而言之就是将供应商、制造商、分销商、零售商、最终用户连成一个整体的功能网链结构模式。
处于供应链上的各个节点企业只有在同步协调运行时,才有可能使网链结构上的所有企业都能受益并实现供应链的最优化,于是便产生了供应链管理(Supply Chain Management)。基于供应链运作规律产生的供应链管理实质上是一种管理模式和管理理念的更新,它强调供应链上的企业之间通过合理分工与流程优化,使供应链从采购到销售的全过程上的商流、物流、资金流和信息流均能高效率运作,达到缩短供应链响应时间、降低供应链总体交易成本、提高用户满意度、进而实现整条供应链价值最大化的目的。而进销存可以说是供应链中重要的一环。 - 研究现状:
供应链发展大概的可以分为三个阶段:
第一阶段,60及70年代,研究的方向和重点是:分离的物流配送和物流成本管理。
第二阶段,70及80年代,研究的方向和重点是:整合内外部物流管理和企业间关系管理。
第三阶段,90年代及以后,研究的方向和重点是:整体价值链效率和价值增值的提高。
供应链管理的发展与制造业自动化的发展、企业经营管理的演进以及企业信息系统的演化密不可分。在20世纪50-60年代,制造商强调大规模生产以降低单位生产成本,即大规模生产的运营战略。当时的企业生产较少考虑市场因素,生产、制造缺乏柔性,新产品的开发缓慢,几乎完全依靠企业内部技术和能力。因此企业的运营瓶颈是通过加大库存量来解决,很少考虑企业间的合作和发展。当时的采购仅仅被认为是生产的支持活动,管理人员很少关心采购活动(Farmer,1997)。
到了70年代,制造资源计划被引入,管理人员意识到存货数量给制造成本、新产品开发和生产提前期带来重要影响。所以通过转向新型的物料管理来提高企业绩效。
80年代后,全球竞争加剧,一些大型跨国企业面对市场竞争只有通过提供低成本、高质量、可靠的产品和更加柔性的设计来保持领先地位。制造企业开始导入JIT生产力理念,日本企业通过实施JIT来提高制造效率、缩短生产周期和降低库存。由于JIT通过快节奏制造环境、低库存来缓解生产和排成问题,制造商们意识到战略合作伙伴关系的重要。所以当制造商和供应商开始发展战略供应关系时,供应链管理的概念随即出现了。而采购、物流和运输过程的专业化,推动物料管理概念的进一步发展。制造资源计划(MRP II)强调企业内部各功能、资源的整合,而企业内部资源计划的整合需要外部供应商和分销商的合作。制造企业将企业内部物流和外部物流系统整合,这导致了整合物流概念的产生。
在90年代,供应链管理持续发展,供应链扩展为由供应商、制造商、分销和客户组成的整体价值链。采购和供应的效率要求更多地考虑成本与质量间的协调。制造商通过从选定的少数几家供应商或者经过认证的供应商那里采购原料,以消除非增值活动,如 原 材 料 质 量 检 查、入 库 检 查 等(Inman & Hubler,1992)。很多制造商和零售商通过紧密合作来提高跨企业的价值链的效率。例如,在进行新产品开发时,制造商将供应商和客户整合在一起,利 用合作伙伴的研发能力和科技,提高研发周期,增强核心竞争力(Ragate,et.al,1997;Morgan & Monczka,1995)。而分销商和零售商则将自己的分销与运输提供商进行无缝连接,以达到直接交货,消除物品检查等增值活动。
进入21世纪,企业所面对的市场需求多样化、个性化、变化频繁的特点日益突出,而企业之间的竞争也日益激烈。通过专业化分工、服务外包的手段提高核心竞争力、提升对市场的响应速度、降低供应链运行成本成为企业竞争的主要热点。其中,通过利用高效的外部供应链管理服务平台、借助专业的供应链管理公司所提供的服务,改进企业的内部供应链架构,提升供应链的运行效率,降低供应链的运行成本,是现代经济的发展的主要趋势之一。经过多年的发展,供应链管理也已经有了很好的理论实践。也产生了很多的优秀的供应链管理系统。比较有代表的如Oracle公司开发的供应链管理系统,Oracle供应链管理 (SCM) 解决方案是一款全面的管理软件套件,具有开放灵活的架构、一流的功能、完整的功能覆盖范围,以及集成和模块化的部署选项,能够将企业运营从职能需要转变为价值驱动的竞争优势。Oracle SCM解决方案可帮助企业以应用精益、需求驱动的原则,构建灵活、适应性强的供应链,加快可盈利的创新,协调供应链与业务目标。
但是这些管理系统比较大型,理论比较深,而且需要的资金也是比较多的,比较适合中大型的企业。就如上文中提到的Oracle公司,合作的公司一般是一些比较大型的企业。而对于一些小型的企业,资金并不是很充足,需要的功能并不是特别繁多,可能就是需要一个比较简便的进销存系统,此时这些大型的系统就并不是特别合适。而现在我们正处于一个大众创新万众创业的新时期,因而会有比较多的小型企业,因此小型的进销存管理系统需求量是比较大的。而前面提到的系统此时并不适合,因此我们就可以开发出一个适合小型企业、操作简单、投入小的进销存管理系统。
课题研究目标、内容、方法和手段: - 研究目标:
开发本系统的目的是为了帮助那些小型企业改变传统的进销存的管理方式,以前靠人工手动处理这些进销存数据时,不但效率低下,而且容易出错,给企业带来不良后果。本系统是进销存管理系统,包含企业通过供应商采购商品,把商品放入到仓库中,该企业在销售该商品的时候,再把商品从仓库中提取出来,卖给客户的过程。因此包含三个订单:①采购订单②销售订单③调拨订单(内部仓库之间调拨);除了包含订单管理、销售管理、库存管理,不同角色的注册、登录等基本功能;还应该会根据库存数的多少,自动产生一个需要进货的订单报表;根据销售的情况产生一个建议采购商品订单。 - 研究内容:
I:是用户的注册、登录功能(需要对密码进行处理):这里面包含一般用户和管理员用户的登录和注册功能,在登录和注册页面里,需要对用户的用户名、密码做一些限定:用户名长度要在6-12,密码长度要在8-12,用户名不能包含空格、特殊字符这些限定。在系统后台还需要对传进来的密码做加密处理,提高安全性。
II:是快速、简单的对三种订单进行增、删、改、查操作:①采购订单:
添加需要采购的货物的信息、修改需要采购货物的信息、删除采购货物的信息、查看需要采购货物的信息。②销售订单:对交易成功订单的查看、对交易成功订单删除。③调拨订单:将货物从一个仓库换到另一个仓库时,对数据进行修改。
III:分析功能:对销售订单数据进行统计,然后分析:哪些商品销售量大,哪些商品销售量小;对销售量大的商品应该在进货订单里多一些,对销售小的商品在进货订单里少一些。对过去的销售数据进行分析,然后对接下来的销售策略进行一些预测,让公司在制定策略时可以有一些参考。
IV:库存告警功能:商品在库存里有一个下限值,对剩余库存统计分析,低于下限值得商品就要提醒:需要订货了。产生需要进货的订单报表(对低于库存下限的商品,需要放到进货单里面)。
V:备份功能:对一些重要的数据需要进行备份:如进货订单数据,仓库数据,销售订单数据;还有一些人员数据等等需要进行备份,以防意外情况发生。 - 研究方法:
本项目用的是spring tool suite + maven的集成开发环境,java作为开发语言,使用spring boot 内置tomcat作为web服务器,数据库使用的是mysql,加上使用spring boot + JPA框架。结合mysql数据库存储的优点,体积小,可移植性强,使用方便等多方面的优点,独立开发出了本系统。
前端页面用到了Javasrcipt技术(使用JQuery、bootstarp框架),对页面进行了一些美化,是界面更简洁、美观。在某些页面中还用AJAX技术(异步交互功能),使做出来的页面更合理、美观。
增、删、改、查功能:实际上是对数据库的大量操作,考虑到实用性和使用性能问题,选择了mysql数据库作为存储数据库(mysql数据库体积小、免费、跨平台性好)。因为要大量的增删改查操作,因此用Java的JDBC连接数据库就不是很合理,于是采用了JPA作为连接数据库工具,可以让我们快速、简单的和数据库进行交互。
分析功能运用大数据里面的数据挖掘和数据抽取技术,先采集到数据,然后对数据排序处理过后,能看到数据销量排行,就能得到数据:哪些商品销售量大,哪些商品的销售量小。还应该具备一个功能,就是对过去的销售数据进行分析,然后对接下来的销售策略进行一些预测,让公司在制定策略时可以有一些参考。
库存告警功能:首先需要把商品库存量计算出来,然后拿到剩余库存量,对剩余库存量小于警告值的,将该商品放到进货订单的列表中,这样就能让仓库的商品不会突然卖完就没了的情况。
备份与恢复功能:对这些重要数据,每天在一个特定时间会自动进行备份,备份到文件夹,还可以自己手动点击备份;然后在数据库里数据被破坏或者丢失时,我们就可以把备份的数据恢复到数据库中去。
设计(论文)提纲及进度安排: - 设计(论文)提纲:
第一章 绪论
第二章 相关技术与方法
第三章 系统分析
第四章 系统设计
第五章 系统实现
第六章 系统测试
第七章 总结
- 进度安排:
序号 | 各阶段工作内容 | 时间安排 |
1 | 毕业设计开题报告 | 2017年2月28日前完成 |
2 | 需求分析 | 第一、二周 |
3 | 概要设计 | 第三、四周 |
4 | 详细设计 | 第五、六周 |
5 | 系统设计 | 第七周 |
6 | 系统开发 | 第八、九周 |
7 | 系统测试 | 第十周 |
8 | 毕业设计论文整理 | 第十一、十二周 |
9 | 提交毕业论文 | 2017年5月21日前 |
主要参考文献和书目:(不少于15篇论文,其中M指书籍,D指学位论文,J指期刊论文)
[1] 辛运帏等. java语言程序设计[M].北京:人民邮电出版社,2009
[2] (美)(Nicholas C.Zakas)扎卡斯. JavaScript高级程序设计[J].人民邮电出版社2006
[3] 姜承尧. MySQL技术内幕:InnoDB存储引擎[M].机械工业出版社 2011-1
[4] 张海藩;吕云翔.软件工程[M]. 人民邮电出版社 2013-09-01
[5] Roger S.Pressman, 郑人杰, 马素霞等. 软件工程:实践者的研究方法(原书第7版)[M]. 北京: 机械工业出版社, 2011
[6] 李兴华, 王月清. 名师讲坛:Java Web开发实战经典基础篇(JSP, Servlet, Struts, Ajax)[M].北京: 清华大学出版社, 2010
[7] 成先海.数据库基础与应用[M].北京:机械工业出版社,2008.
[8] 张艳.基于工作过程的物流信息系统与管理课程的重构[J].辽宁高职学报,2010, 12(2):45-47.
[9] 李小娜,董绍华.物流信息技术在现代物流中的应用[J].中国科技信息,2008,(21):140-143.
[10] 隋英琴.供应链管理环境下的物流管理创新[J].科技创业,2008,14(03):123-125.
[11] 陈雄华 Spring 企业级应用开发详解[M] 北京:电子工业出版社 2009
[12] 王寅田. 基于Hadoop的交通物流大数据处理系统设计与实现[D]. 上海交通大学 2014
[13] 李海峰. MVC模式架构的应用研究[J]. 自动化与仪器仪表. 2013(01)
[14] 陈凤琴.基于B/S模式的中小饲料企业进销存系统设计与实现[D].南昌大学2014
[15] 黄沙.企业物流成本管理存在问题及对策[J].物流技术与应用,2011,13(2):101-102.
指导教师审核意见:
指导教师(签字): 年 月 日
注:本表可自主延伸
摘 要
进入21世纪以来,商业管理中需要处理的数据和信息越来越多。大量的数据和繁杂的数据使得古老的手工处理数据的方式渐渐显得力不从心。甚至有些信息处理的方式在手工处理的模式下是根本无法是实现的,只能利用计算机的高运行频率来进行迭代计算。而且最近国家正在提倡大众创业,中小型企业很多。中小企业在我国经济发展中具有重要地位,目前我国的中小企业数量多,地区分布广泛,行业分布跨度大。随着全球经济一体化的发展和电子商务的兴起,中小企业之间的竞争将越来越激烈。网络及电子商务的迅猛发展突破了时间、空间的局限性,给中小企业带来了更多的发展机会,同时也增大了企业之间的竞争强度。这就要求中小企业必须改变企业的经营管理模式,提高企业的运营效率。随着技术发展,电脑操作及管理日趋简化,电脑知识日趋普及,同时市场经济快速多变,竞争激烈,企业采用电脑管理进货、库存、销售等诸多环节也已成为必然趋势。
关键词:进销存管理系统;B/S结构;mysql数据库;JSP;spring;springMVC;spring boot;JPA
ABSTRACT
Since twenty-first Century, more and more data and information are needed in business management. A large number of data and complex data makes the ancient way of manual processing of data gradually appear inadequate. Even some of the information processing in the manual processing mode can not be achieved at all, only the use of the computer's high operating frequency for iterative calculation. And recently, the country is promoting public entrepreneurship, many small and medium enterprises. Small and medium-sized enterprises play an important role in China's economic development. At present, there are a large number of small and medium-sized enterprises in china. With the development of global economic integration and the rise of e-commerce, the competition between small and medium enterprises will become more and more fierce. The rapid development of network and electronic commerce has broken through the limitation of time and space, and has brought more opportunities for the development of small and medium-sized enterprises. This requires the small and medium-sized enterprises must change the mode of operation and management of enterprises, improve the operational efficiency of enterprises. With the development of computer technology, operation and management is simplified, the growing popularity of computer knowledge, and fast changing market economy, intense competition, enterprise computer management purch asing inventory sales and many other sectors and has become an inevitable trend.
Keywords: Purchase, sales and inventory management system; B / S structure; Mysql Database; JSP; Spring;SpringMVC;spring boot;JPA
目 录
第一章 绪论1
1.1 研究背景和意义1
1.2 研究目标1
1.3 论文结构1
1.4 本章小结2
第二章 相关技术与方法3
2.1 架构概述3
2.2 关键技术简介3
2.3 开发工具4
2.4 本章小结5
第三章 系统分析6
3.1 可行性分析6
3.2 需求分析6
3.3 本章小结15
第四章 系统设计16
4.1 系统类分析16
4.2 关键业务设计21
4.3 数据库设计23
4.4 本章小结33
第五章 系统实现35
5.1 用户登录35
5.2 采购管理37
5.3 库存管理39
5.4 销售管理42
5.5 备份与恢复43
5.6 本章小结46
第六章 系统测试47
6.1 系统测试综述47
6.2 测试用例48
6.3 测试分析51
6.4 本章小结52
第七章 总结53
参考文献54
致 谢55
绪论
研究背景和意义
目前,许多的中小企业普遍存在一个问题:企业的决策者看到的进销存资料及相关报表都是比较繁杂,让本应该一目了然的结果因信息的分散使得产生的结果无法保持一致和完整,造成企业在进销存管理上问题很多。由此发展而来的进销存管理系统就能够很好的解决上面出现的问题,能够将数据快速转化为有效信息,为企业管理者制定生存发展决策提供了依据。
在现今社会中,各个产品的质量都相差不大,现在顾客对个性化服务的期望值越来越高,在产品质量一样的情况下顾客更看重的是哪家的服务更好。企业的竞争已渐渐从产品的竞争这个战场转变到服务的竞争这个战场,因此企业要发展的话就必须要进一步优化业务流程来提高企业自身的竞争能力。因此,加强进销存管理是企业能适应现阶段发展的必然,通过计算机来快速准确地完成大量本来由人工手工完成的工作,这是真正达到合理和充分利用现有资源,减轻了员工的工作压力,提高了企业的生产效率。
信息已深入到现代社会的各个行业,因此信息的管理需要有一个信息管理系统,进销存管理系统就是这样一个系统。进销存管理系统开发的市场将是非常庞大的。在这飞速发展的信息时代,这类的信息管理系统的开发为中小型企业带来了方便和有效的信息,促进了经济的发展。
研究目标
实现一个进销存管理系统,实现对企业运作过程中的进货、销售、仓储的电子化操作,可以节省大量人力物力,可以说对企业的运作带来不可限量的好处。实现一个简单实用,操作界面友好的进销存管理系统是首要解决的任务。然后一是要实现对库存数据进行分析,对接下来的进货进行一些指导;二是实现对销售数据的采集分析,对企业决策者对下一个季度或者年份的销售计划提供一个参考的功能。系统肯定要具备对进销存的一些基本的增删改查操作。
论文结构
第一章绪论:主要叙述了进销存管理系统开发的缘由和意义,也就是开发这个系统的背景。开发这个系统有哪些优点,开发的这个系统具备哪一些功能,或者说能开发出哪些功能,对这些功能进行了一个概述。
第二章相关技术和方法:本章节首先是概述了系统的结构,用那些技术搭建的开发环境;接下来是简单介绍了一下关键功能和是怎么实现这些关键功能;最后是介绍了用到的开发工具。
第三章系统分析:本章节的重点系统分析,主要从可行性分析和需求分析两方面入手。可行性分析从技术可行性、经济可行性、操作可行性三个方面进行综合分析,最终得出系统开发的可行;需求分析从两个方面分析:系统总体需求和用例图分析,从这两个方面确定系统是可行的。
第四章系统设计:本章节主要分为系统类设计、关键业务设计、数据库设计三个模块。系统类设计主要是用类图来呈现系统中类的一些属性和功能;关键业务设计主要是用顺序图来直观的呈现这些功能的处理流程和处理步骤;数据库设计首先是用了ER图来直观的把数据库表的一些属性表示出来,其次对涉及到的每一张表都进行了分析和介绍。
第五章系统实现:本章节主要是对核心功能介绍,首先是功能描述,然后附上实现的界面,接下来详细描述功能的实现过程并且附上实现这些功能的核心代码。
第六章系统测试:本章是说明测试目标和测试计划,对测试目标给出测试用例,并分析测试结果是否达到系统预期,如未达到提出改进的措施。
第七章总结:本章主要是对进销存系统的设计的整个过程做一个总结,说明本论文的结构组成,从绪论开始到总结结束,对每一个大的章节内容进行简单的叙述。并且阐述了自己的收获与不足,给出不足的解决方案。
本章小结
本章从研究的背景开始,叙述了进销存管理系统开发的整个流程,为什么要开发这个系统,开发这个系统有啥优势。其次就是描述了本系统需要开发出什么的功能,需要具备什么样的功能,能否开发出这些功能。最后对正文的每个章节进行了一个简单的描述。
相关技术与方法
架构概述
本系统设计采用的是MAVEN + SPRING BOOT+ JPA 的架构来搭建的项目。Maven是一个不错的项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的逻辑。由于 Maven 的缺省构建规则具有不错的可重用性,因此用Maven 可以快速的构建项目。Spring Boot是由Pivotal团队提供的全新框架,设计这个框架目的就是用来简化Spring应用的初始搭建以和开发过程。这个框架使用了特定的方式做配置,因此开发人员不需要和传统的Spring应用一样写大量的配置文件。Springboot具有以下优势:创建的Spring应用程序是独立的;本身嵌入了Tomcat,无需部署WAR文件;Maven配置作了简化;自动配置Spring。因此用maven加上spring boot可以让我们快速的搭建起项目来,可以省去很多繁琐的步骤。
JPA全称为Java Persistence API,是通过注解或者XML来描述对象-关系表的映射关系,并且可以将在运行的Entity类对象存储到数据库中去。使用JPA可以打破一般简单持久化框架的局限,在我们开发企业级应用中发挥更大作用,因为JPA支持容器级事务:大数据集、事务、并发等。使用JPA创建实体非常简单,就和我们平常创建一个JAVA类一样,不存在任何的约束和限制,我们只需要在对应的实体上标注javax.persistence.Entity注解即可;开发人员很容易就可以掌握JPA,因为JPA没有特殊的规则和太多的设计模式,框架和接口都很简单。JPA采用的原则是非侵入式原则,因此对其他框架的兼容性很好,易于和其他框架集成。JPA中定义了和Hibernate HQL相似的QL:JPQL,它是EJB QL的一种拓展,操作的对象是实体,而不是关系数据库的一张表。而且能够正常的支持SQL才能够提供的高级查询特性:批量修改和更新、JOIN、GROUPBY、HAVING等,并且支持子查询功能。最重要的是JPA也支持面向对象的高级特性,这样的话开发者在开发企业级应用时能够最大化的使用面向对象的模型来设计,而不用自己来处理这些特性的持久化。
用这三个技术搭建项目框架,可以快速完成,省去许多简单繁杂的步骤,对于我们快速开发是有非常大的优势的。
关键技术简介
作为一个进销存管理系统,其最根本的功能还是在对采购管理、销售管理和库存管理上面,其他的功能都是在这个的基础上才能够开发出来。基础功能也就是对进货、销售和库存的增删改查。其中对进货订单的添加和销售订单的添加,每个订单都含有一个或者多个商品,因此订单生成时做了跟购物车类似,我们可以把商品一个一个添加到这个购物车上,等我们商品添加完成,此时可以提交订单,这样就产生 了一个进货订单或者销售订单。跟数据库打交道肯定少不了连接数据库的技术,在本系统用到的是JPA,JPA本身有许多默认的增删改查的方法,并且不用写配置文件,而且可以自己个性化定制sql语句,只需要写一个接口继承JPARepository接口,然后在这个接口里写抽象方法,在方法上写注解就可以了,很方便。
首先是数据分析功能,因为我们本身数据库里存有大量的销售数据库,所以我们就不用去收集数据了,直接对数据库里的数据进行分析即可。第一阶段:探索性数据分析,因为数据库里的数据是杂乱无章的,因而看不出规律。因此我们需要通过作图、表格、用各种形式的方程拟合、计算某些特征量等手段来找出某些可能的关联或某些隐含在数据中的规律。第二阶段:选定模型进行分析,接下来我们通过前面的初步操作,在探索性分析的基础上提出一种或几种可能的模型,然后通过进一步分析从里面挑选最符合当前发展的几个模型。第三阶段:推断分析,使用数理统计方法对第二阶段所定的模型做出以下判断:估计的可靠程度,精确程度作出推断。选定最终的模型。
其次是数据备份功能,企业在运转中,系统难免会出现一些突发情况导致数据的丢失、损坏。因此当出现这些情况时,我们就需要把备份的数据恢复到数据库中去。备份数据时会占用较大的IO资源的,因此我们需要选择一个对系统影响尽可能地小的时段来进行数据的备份;对重要的数据,要保证在极端情况下的数据都可以正常恢复。在选择备份方案时要考虑到实施方案的可操作性和经济性,因此选择了逻辑备份,此方法不需要数据库运行在归档模式下,不但备份简单,而且可以不需要依赖外部存储设备。
开发工具
系统前段页面采用jsp + JavaScript + css的组合技术开发,其中JavaScript使用了jQuery和bootstrap框架,这两个前段框架让我们能更友好的使用JavaScript。省去了许多步骤,简化了我们的使用。数据库使用的是MySQL数据库,MySQL 是现阶段最流行的关系型数据库之一,因为它的体积小、运行速度快、免费,尤其是开放源码这一特点,一般中小型网站的开发都会选择MySQL作为网站数据库。考虑到系统设计的用户群体以及MySQL数据库的这些优点,于是选择了MySQL数据库作为开发数据库。开发使用的IDE工具是:Spring tool suit,这个IDE工具是Spring官网推荐的开发工具,在使用Spring体系的框架开发应用是,这个IDE工具具有很多优势。Web服务器是使用的Spring boot内置的Tomcat服务器。根据以上选择的框架、工具,选择了JDK1.8作为开发、编译环境。
本章小结
本章主要简单叙述了系统使用了的框架、用了哪些开发工具。重点介绍如何实现系统的核心功能,还有实现这些功能用到了哪些技术,对这些方面进行了阐述。
系统分析
可行性分析
技术可行性
基于本项目用到的spring boot、JPA、mysql、jQuery等技术都已经是成熟的开发技术了,完全可以满足本项目的开发需求。项目主要功能所涉及的一些技术都能是能够实现的,因此在技术上是可行的。
经济可行性
企业在运转过程中信息的系统化管理,运用电脑对数据进行自动化的统计,为企业在制定经营决策时提供了大量的、权威的科学数据;强大的进销存数据统计功能,大大简化了员工的日常工作,工作效率提高了很多,大大降低了人工管理过程中数据易错所带来的一系列的不良反应,提高了企业的经济效益。可以节省大量的人力物力,并且现在不会存在之前人工操作产生的人工误差的情。可以说是大大提高了企业的经济效益。因此,本系统在经济上也是可行的。
操作可行性
本项目因为有友好的交互界面,所以每位企业员工都能够轻松学会去操作本系统,因为操作人员只需要把数据输入进去,数据都是自动去计算的,因此可以省去以前需要手动计算的劳动,并且效率高好多。而且以前都是手动计算不仅容易出错,而且还费时费力;现在都是程序自动计算,在减小了出错的概率的同时还节省了人力物力、提高了工作效率。可以说对企业的运转是大大节省了花费,并且提高了生产效率。综合考虑本系统在操作上是可行的。
需求分析
系统总体需求
系统需要具备以下功能:
⑴一般企业人员的计算机知识掌握的不多,因此要求有良好的人机交互界面,这样对操作这个系统的企业人员比较友好。
⑵对于本系统使用对象的不同,需要给予不同的权限。
⑶支持多条件语句查询,方便进销存数据的查询。
⑷基础信息管理与查询(包括商品信息、客户信息、供应商信息)。
⑸一键点击,能够直接查看仓库所有商品的库存信息。
⑹方便、健全的账单统计功能。
⑺图表分析年销售状况。
⑻商品销售排行统计。
⑼当停电、网络病菌的原因损坏本系统数据时,系统可以还原系统的数据。
⑽各种数据的统计计算自动完成,尽可能的减少人工干预。
⑾系统退出。
质量要求
主要质量属性 | 详细要求 |
正确性 | 按照需求正确执行任务,完成各个模块的相应要求。 |
健壮性 | 具有较高的容错能力和恢复能力。 |
性能效率 | 响应用户的请求的时间越短越好。 |
易用性 | 系统开发过程中应该有详细的文档,这样让别人能够更好的使用。 |
安全性 | 防止软件受到意外或蓄意的存取、使用、修改、毁坏或泄密导致系统的数据丢失。 |
可扩展性 | 能方便的进行二次开发,满足对功能的扩展或提高并能提高相应的安全机制。 |
兼容性 | 不易与其他软件起冲突。 |
用例图分析
图3-1系统管理用例图
系统管理用例有配置系统、管理部门、管理员工、管理权限,这里主要介绍一下管理权限,具体说明见表3-1:
表3-1管理权限
用例编号 | UC01 | |
用例名称 | 管理权限 | |
用例概述 | 系统管理员通过此用例管理系统中的用户的操作权限 | |
主参与者 | 管理员 | |
前置条件 | 管理员身份正确登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要的操作,增加、修改、删除用户权限 | |
A2 | 输入用户权限信息 | |
A3 | 保存输入的信息 | |
扩展事件流 | 1a | 用户名不存在,返回提示信息 |
1b | 操作权限不存在,返回提示信息 |
图3-2财务用例图
财务用例有查询应收款项、记录应收应付款项、管理发票,这里主要介绍一下记录应收应付款项,具体说明见表3-2:
表3-2记录应收应付款项
用例编号 | UC02 | |
用例名称 | 记录应收应付款项 | |
用例概述 | 系统管理员通过此用例管理系统中的用户的操作权限 | |
主参与者 | 财务 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要的操作,增加、修改、删除应收应付款项 | |
A2 | 输入应收应付款项信息 | |
A3 | 保存输入款项信息 |
图3-3 采购部分用例图
采购部分用例有两个角色采购员和采购经理。采购员用例有采购单、管理供应商、管理商品信息;采购经理用例有审批采购单、管理商品分类。具体说明见表3-3至表3-4:
表3-3采购单
用例编号 | UC03 | |
用例名称 | 采购单 | |
用例概述 | 采购员通过此用例来生成采购单 | |
主参与者 | 采购员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要的操作,增加、修改、删除采购单 | |
A2 | 输入需要采购的商品信息 | |
A3 | 保存输入的信息 | |
扩展事件流 | 1a | 输入的商品不存在,返回提示信息 |
1b | 输入商品信息错误,返回提示信息 |
表3-4审批采购单
用例编号 | UC04 | |
用例名称 | 审批采购单 | |
用例概述 | 采购经理通过此用例来对采购员生成的采购单审批 | |
主参与者 | 采购经理 | |
前置条件 | 采购经理身份正确登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要审批采购单 | |
A2 | 审批采购单 | |
扩展事件流 | 1a | 采购单不存在,返回提示信息 |
图3-4库存部分用例图
库存部分总共有质检员、库存管理员、仓库经理三个角色,涉及到的用例比较多,这里具体介绍一下出入库单、确认入库单、开出库单、统计库存信息、出调拨单,具体说明见表3-5至表3-9:
表3-5出入库单
用例编号 | UC05 | |
用例名称 | 出入库单 | |
用例概述 | 质检员通过此用例管理仓库出库入库单 | |
主参与者 | 质检员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要的操作,增加、修改、删除出入库单 | |
A2 | 输入出库或入库单信息 | |
A3 | 保存出库或入库单信息 |
表3-6确认入库单
用例编号 | UC06 | |
用例名称 | 确认入库单 | |
用例概述 | 库存管理员通过此用例确认质检员开出的入库单 | |
主参与者 | 库存管理员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择入库单 | |
A2 | 确认入库单信息 |
表3-7开出库单
用例编号 | UC07 | |
用例名称 | 开出库单 | |
用例概述 | 库存管理员通过此用例生成出库单 | |
主参与者 | 库存管理员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 选择需要出库的物品信息 | |
A2 | 生成出库单 |
表3-8统计库存信息
用例编号 | UC08 | |
用例名称 | 统计库存信息 | |
用例概述 | 仓库经理通过此用例统计库存信息 | |
主参与者 | 仓库经理 | |
前置条件 | 仓库经理身份正确登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 统计库存信息 |
表3-9出调拨单
用例编号 | UC09 | |
用例名称 | 出调拨单 | |
用例概述 | 仓库经理通过此用例生成调拨单 | |
主参与者 | 仓库经理 | |
前置条件 | 仓库经理身份正确登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 根据需求生成调拨单 |
图3-5销售部分用例图
销售部分用例图包括销售经理和销售员两种角色,销售经理用例有统计销售信息;销售员用例有管理客户、查询商品库存、下订单、确认订单具体说明见表3-10至表3-12:
表3-10统计销售信息
用例编号 | UC10 | |
用例名称 | 统计销售信息 | |
用例概述 | 销售经理通过此用例统计销售信息 | |
主参与者 | 销售经理 | |
前置条件 | 销售经理身份正确登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 统计销售信息 |
表3-11查询商品库存
用例编号 | UC11 | |
用例名称 | 查询商品库存 | |
用例概述 | 销售员通过此用例查询商品库存 | |
主参与者 | 销售员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 输入需要查询的商品名称 | |
A2 | 查询出商品库存信息 |
表3-12下订单
用例编号 | UC12 | |
用例名称 | 下订单 | |
用例概述 | 销售员通过此用例生成订单 | |
主参与者 | 销售员 | |
前置条件 | 无 | |
基本事件流 | 步骤 | 活动 |
A1 | 拿到客户的订单 | |
A2 | 生成订单信息 |
本章小结
本章主要是进行了系统的分析,首先第一节是可行性分析,从技术可行性、经济可行性、操作可行性三个角度对系统分析是否是可行的,最终得出本系统是可行的。第二节是需求分析分析了系统所具备的一些的功能,然后重点介绍了一些特色功能。接着第二节是需求分析,第一小节阐述了系统的总需求,应该具备哪些功能;第二小节通过用例图对需求主要功能进行了具体分析。
系统设计
系统类分析
经分析,该系统核心业务类见下图:
- 系统核心类
- MANAGER类
MANAGER类用于记录系统的用户信息,并完成登陆和注销的操作。
表4-1 MANAGER类功能表
类功能描述 | 处理和用户相关的业务操作 | |||
所在包名称 | Com.xu.bean | |||
继承对象 | 无 | |||
实现对象 | ||||
类属性 | ||||
保护属性 | 类型 | 名称 | 描述 | 备注 |
Private | Long | ID | 用户ID | 系统中用户的唯一标示,由系统自动生成 |
Private | String | Name | 姓名 | 长度限制20位 |
Private | String | Password | 密码 | 长度限制20位 |
Private | String | Gender | 性别 | 只能为男或者女 |
Private | Long | Age | 年龄 | |
Private | String | Phonenumber | 手机号码 | |
主要实现方法 | ||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 |
Public | login | string id,string pwd | Manager" | 登陆系统,用户输入ID和PASSWORD后进行验证,验证通过返回用户,验证返回NULL。 |
Public | Register | Manager manager | int | 员工注册,输入用户信息进行注册,注册成功返回注册成功消息 |
GOODS类
GOODS类用于记录商品的信息,并且实现对商品的增删改查等功能。
表4-2 GOODS类功能表
类功能描述 | 处理和商品相关的业务操作 | |||
所在包名称 | Com.xu.bean | |||
继承对象 | 无 | |||
实现对象 | ||||
类属性 | ||||
保护属性 | 类型 | 名称 | 描述 | 备注 |
Private | Long | ID | 商品ID | 系统中商品的唯一标示,由系统自动生成 |
Private | String | Name | 商品名称 | |
Private | String | Unit | 单位 | |
Private | String | Space | 商品产地 | |
Private | Long | SupplierId | 供应商编号 | |
Private | String | ApproveId | 批准文号 | |
Private | String | BatchId | 生产批号 | |
主要实现方法 | ||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 |
Public | save | Goods goods | int | 商品添加,输入商品信息进行添加,添加成功返回1,失败返回0 |
Public | deleteGoodsByName | String name | int | 商品删除,输入商品名字进行删除,删除成功返回1,失败返回0 |
Public | findAllGoods | List<Goods> | 查找出所有的商品 | |
Public | findGoodsCountByName | String name | int | 查找某种商品的总数,输入某种商品的总数,返回该商品的库存数量 |
SALEORDER类
SALEORDER类用于记录销售订单的信息,并且实现对销售订单的增删改查等功能。
表4-3 SALEORDER类功能表
类功能描述 | 处理和销售订单相关的业务操作 | |||
所在包名称 | Com.xu.bean | |||
继承对象 | 无 | |||
实现对象 | ||||
类属性 | ||||
保护属性 | 类型 | 名称 | 描述 | 备注 |
Private | Long | ID | 销售订单ID | 系统中销售订单的唯一标示,由系统自动生成 |
Private | Long | CustomerId | 客户ID | 引用自客户ID,是唯一的 |
Private | String | pay | 结算方式 | |
Private | Date | saleDate | 销售时间 | |
Private | Double | Total | 总金额 | |
主要实现方法 | ||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 |
Public | save | SaleOrdersaleorder | int | 销售订单添加,输入订单信息进行添加,添加成功返回1,失败返回0 |
Public | delete | Long customerId | int | 销售订单删除,输入客户ID进行删除,删除成功返回1,失败返回0 |
Public | findAllSaleOrder | List<SaleOrder> | 查找出所有的销售订单 | |
Public | update | SaleOrder order | int | 更新订单信息,输入要更改的信息更新,更新成功返回1,失败返回0 |
PURCHASEORDER类
PURCHASEORDER类用于记录采购订单的信息,并且实现对采购订单的增删改查等功能。
表4-4 PURCHASEORDER类功能表
类功能描述 | 处理和采购订单相关的业务操作 | |||
所在包名称 | Com.xu.bean | |||
继承对象 | 无 | |||
实现对象 | ||||
类属性 | ||||
保护属性 | 类型 | 名称 | 描述 | 备注 |
Private | Long | ID | 采购ID | 系统中采购订单的唯一标示,由系统自动生成 |
Private | Long | supplierId | 供应商ID | 引用自供应商ID |
Private | String | pay | 结算方式 | |
Private | Date | inDate | 采购时间 | |
Private | Double | total | 总金额 | |
主要实现方法 | ||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 |
Public | save | purchaseOrderpurchaseorder | int | 采购订单添加,输入订单信息进行添加,添加成功返回1,失败返回0 |
Public | delete | Long supplierId | int | 采购订单删除,输入供应商ID进行删除,删除成功返回1,失败返回0 |
Public | findAllPurchaseOrder | List<PurchaseOrder> | 查找出所有的采购订单 | |
Public | update | PurchaseOrder order | int | 更新订单信息,输入要更改的信息更新,更新成功返回1,失败返回0 |
STOCK类
STOCK类用于记录库存的信息,并且实现对库存的增删改查等功能。
表4-5 STOCK类功能表
类功能描述 | 处理和库存相关的业务操作 | |||
所在包名称 | Com.xu.bean | |||
继承对象 | 无 | |||
实现对象 | ||||
类属性 | ||||
保护属性 | 类型 | 名称 | 描述 | 备注 |
Private | Long | ID | 采购ID | 系统中采购订单的唯一标示,由系统自动生成 |
Private | Long | goodsId | 商品ID | 引用自商品ID |
Private | Long | count | 商品库存数量 | |
Private | String | area | 存放地方 | |
主要实现方法 | ||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 |
Public | save | Stock stock | int | 库存添加,输入库存信息进行添加,添加成功返回1,失败返回0 |
Public | delete | Long goodsId | int | 库存删除,输入商品ID进行删除,删除成功返回1,失败返回0 |
Public | findAllStock | List<Stock> | 查找出所有的商品库存 | |
Public | update | Long goodsId , Long count ,String area | int | 更新商品库存信息,输入要更改的信息更新,更新成功返回1,失败返回0 |
关键业务设计
关键业务与用例图之间存在一定的对应关系,原则上用例图中所提出的用例应该在关键业务分析中体现,每一个用例对应一个时序图,每个时序图后面应当有一段简短的说明,时序图用WORD绘制比较难,可以借用其他工具,但复制过来时应尽量只有黑白颜色,下面以登录为例说明关键业务的说明方法。
添加商品
添加商品顺序图
采购业务员通过UI界面选择添加商品菜单,此时后台controller会判断该操作用户是否有权限;权限检查通过,操作员进入到商品添加表单,输入商品信息提交,后台controller会调用service的add方法,service中的方法add在调用database中的板寸方法。成功后返回成功提示。
查询商品
查询商品顺序图
采购业务员通过UI界面输入查询条件,此时后台controller会检查查询条件;controller会调用service里面的find方法,find方法会调用database中具体的查询方法;把查询到的结果显示到UI界面。
添加库存
添加库存顺序图
库存业务员通过UI界面选择商品菜单,输入该商品的库存信息,此时后台controller检查输入商品库存信息;controller会调用service中的add方法,add方法调用database中的具体添加方法处理,添加成功返回功能提示。
添加销售订单
添加销售订单顺序图
销售业务员通过UI界面选择添加订单菜单,输入订单信息,此时后台controller会检查订单信息;controller会调用service中的update方法,update方法会调用database中的具体更新方法,更新成功后会返回成功提示。
数据库设计
概念设计
(一)总的E-R图
系统ER图
(二)分E-R图
商品ER图
顾客ER图
供应商ER图
管理员ER图
日志用于记录用户的日常行为,通过用户编号与用户实体之间存在一对多关系。
数据库表
系统中使用到数据库基本如表4-1所示。
- 系统数据库表
编号 | 表名 | 描述 |
01 | customer | 顾客表 |
02 | dept | 部门表 |
03 | employee | 员工表 |
04 | goods | 商品表 |
05 | manager | 管理员表 |
06 | purchase_item | 采购单明细表 |
07 | purchase_order | 采购订单表 |
08 | return_item | 采购退货明细表 |
09 | return_order | 采购退货表 |
10 | sale_item | 销售订单明细表 |
11 | sale_order | 销售订单表 |
12 | sale_return_item | 退货销售明细表 |
13 | sale_return_order | 销售退货表 |
14 | stock | 库存表 |
15 | suppliers | 供应商表 |
- 顾客表
顾客表用于记录顾客信息,顾客表的具体字段如表4-2所示。
顾客表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
customer_id | 顾客编号 | Long | PK | |
customer_name | 顾客名称 | Varchar(20) | NOT NULL | |
address | 顾客地址 | Varchar(255) | ||
zip | 邮编 | Varchar(20) | ||
telPhone | 联系电话 | Varchar(20) | ||
linkMan | 联系人 | Varchar(20) | ||
linkTel | 联系人号码 | Varchar(20) | ||
bank | 银行 | Varchar(20) | ||
bankAccoount | 银行账号 | Long | ||
email | 邮箱 | Varchar(20) |
字段顾客编号为本表的主键,用来标识一个顾客,字段顾客名称非空字段,字段顾客地址、邮编、联系电话、联系人、联系人号码、开户银行、银行账号、邮箱是顾客的一些详细信息。
- 部门表
部门表用于记录部门的信息,部门表的具体字段如表4-3所示。
部门表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
dept_id | 部门编号 | Long | PK | |
dept_name | 顾客名称 | Varchar(20) | NOT NULL |
字段部门编号为本表的主键,用来标识一个部门,字段部门名称为非空字段。
- 员工表
员工表用于记录员工的信息并且用于员工登录系统,员工表的具体字段如表4-4所示。
员工表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
employee_id | 员工编号 | Long | PK | |
employee_name | 员工姓名 | Varchar(20) | NOT NULL | |
employee_password | 密码 | Varchar(20) | NOT NULL | MD5加密 |
employee_gender | 性别 | Varchar(5) | ||
employee_age | 年龄 | Long | ||
employee_phonenumber | 手机号码 | Varchar(20) | ||
deptId | 部门ID | Long | FK |
字段员工编号为本表的主键,用来标识一个员工,员工名字和员工密码为非空字段,部门ID为外键,引用自部门表;字段性别、年龄和手机号码为员工的一些基本信息。
- 商品表
商品表用于记录商品的信息,商品表的具体字段如表4-5所示。
商品表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
goods_id | 商品编号 | Long | PK | |
goods_name | 商品名称 | Varchar(20) | NOT NULL | |
unit | 单位 | Varchar(20) | ||
space | 商品产地 | Varchar(255) | ||
supplierId | 供应商编号 | Varchar(20) | FK | |
approveId | 批准文号 | Varchar(20) | ||
batchId | 生产批号 | Varchar(20) |
字段商品编号为本表的主键,用来标识一个商品,字段商品名称不为空,字段供应商编号为外键,引用自供应商表,字段单位、商品产地、批准文号和生产批号为商品的一些属性。
- 管理员表
管理员表用于记录管理员的信息并且用于管理员登录系统,管理员表的具体字段如表4-6所示。
管理员表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
manager_id | 管理员编号 | Long | PK | |
manager_name | 管理员姓名 | Varchar(20) | NOT NULL | |
manager_password | 密码 | Varchar(20) | NOT NULL | MD5加密 |
manager_gender | 性别 | Varchar(5) | ||
manager_age | 年龄 | Long | ||
manager_phonenumber | 手机号码 | Varchar(20) | ||
dept_name | 部门名称 | Varchar(255) | FK |
字段管理员编号为管理员表的主键,用来标识一个管理员,字段管理员名字和密码是不能为空的,部门编号是一个外键,引用自部门表,字段性别、年龄和手机号码是管理员的一些个人信息。
- 采购单明细表
采购单明细表用于记录采购单信息,采购单明细表的具体字段如表4-7所示。
采购单明细表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
purchase_item_id | 采购单明细编号 | Long | PK | |
goods_name | 商品名称 | Varchar(20) | FK | |
purchase_order_id | 采购单编号 | Varchar(20) | FK | |
purchase_price | 单价 | Double | ||
purchase_count | 数量 | Long |
字段采购单明细编号为采购单明细表的主键,用来标识一个采购订单明细,其中字段采购单编号和商品名称是外键,分别引用自采购订单表和商品表,字段单价和数量是采购单明细表的属性。
- 采购订单表
采购订单表用于记录采购单信息,采购订单细表的具体字段如表4-8所示。
采购订单表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
purchase_order_id | 采购单编号 | Long | PK | |
suppliersId | 采购商编号 | Varchar(20) | FK | |
purchase_order_pay | 支付方式 | Varchar(20) | ||
inDate | 采购日期 | Date | ||
purchase_order__total | 总金额 | Double |
字段采购单编号为采购订单表的主键,用来标识一个采购订单,其中字段采购商编号为外键,引用自采购商表,字段支付方式、采购日期和总金额为采购订单的信息。
- 采购退货明细表
采购退货明细表用于记录采购退货单信息,采购退货明细表的具体字段如表4-9所示。
采购退货明细表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
return_item_id | 采购退货单明细编号 | Long | PK | |
returnOrderId | 采购退货单编号 | Long | FK | |
goodsName | 商品名称 | Varchar(20) | FK | |
return_item_price | 单价 | Double | ||
return_item_count | 数量 | Long |
字段采购退货单明细编号是采购退货明细表的主键,用来标识一个采购退货明细,其中采购退货单编号和商品名称是外键,分别引用自采购退货表和商品表。字段单价和数量为采购明细表的属性。
- 采购采购退货表
采购采购退货表用于记录采购采购退货信息,采购采购退货表的具体字段如表4-10所示。
采购采购退货表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
return_order_id | 采购单编号 | Long | PK | |
suppliersId | 采购商编号 | Varchar(20) | FK | |
return_order_pay | 支付方式 | Varchar(20) | ||
return_order_outDate | 退货日期 | Date | ||
return_order_total | 总金额 | Double |
字段采购退货单编号是采购退货表的主键,用来标识一个采购退货,其中字段采购商编号为外键,引用自采购商表,字段支付方式、退货日期和总金额为采购退货表的属性。
- 销售订单明细表
销售订单明细表用于记录销售订单明细信息,销售订单明细表的具体字段如表4-11所示。
销售订单明细表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
sale_item_id | 销售订单明细编号 | Long | PK | |
saleOrderId | 销售订单编号 | Long | FK | |
sale_item_name | 商品名称 | Varchar(20) | FK | |
sale_item_price | 单价 | Double | ||
sale_item_count | 数量 | Long |
字段销售订单明细编号是销售订单明细表的主键,用来标识一个销售明细,其中字段销售订单编号和商品名称是外键,分别引用自销售订单表和商品表,字段单价和数量是销售订单明细的属性。
- 销售订单表
销售订单表用于记录销售订单信息,销售订单表的具体字段如表4-12所示。
销售订单表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
sale_order_id | 销售单编号 | Long | PK | |
customerId | 顾客编号 | Varchar(20) | FK | |
sale_order_pay | 支付方式 | Varchar(20) | ||
sale_order_saleDate | 销售日期 | Date | ||
sale_order_total | 总金额 | Double |
字段销售单编号是销售订单表的主键,用来标识一个销售订单,字段顾客编号是外键,引用自顾客表,字段支付方式、销售日期和总金额是销售订单表的属性。
- 销售退货明细表
销售退货明细表用于记录销售退货明细信息,销售退货明细表的具体字段如表4-13所示。
销售退货明细表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
sale_return_item_id | 销售退货订单明细编号 | Long | PK | |
saleReturnOrderId | 销售退货订单编号 | Long | FK | |
goodsName | 商品名称 | Varchar(20) | FK | |
sale_return_item_price | 单价 | Double | ||
sale_return_item_count | 数量 | Long |
字段销售退货订单明细编号是销售退货明细表的主键,用哪个来标识一个销售退货明细,字段销售退货订单编号、商品名称为外键,分别引用自销售退货表和商品表,字段单价和数量为销售退货明细表的属性。
- 销售退货表
销售退货表用于记录销售退货信息,销售退货表的具体字段如表4-14所示。
销售退货表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
sale_return_order_id | 销售退货单编号 | Long | PK | |
customerId | 顾客ID | Varchar(20) | FK | |
sale_return_order_pay | 支付方式 | Varchar(20) | ||
sale_return_order_returnDate | 退货日期 | Date | ||
sale_return_order_total | 总金额 | Double |
- 库存表
库存表用于记录库存信息,库存表的具体字段如表4-15所示。
库存表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
stock_id | 库存编号 | Long | PK | |
goodsId | 商品编号 | Long | FK | |
stock_count | 商品库存数量 | Varchar(20) | NOT NULL | |
stock_area | 存放地方 | Varchar(255) |
字段库存编号是库存表的主键,用来标识一个库存,字段商品编号是外键,引用自商品表,字段商品库存数量不为空,字段存放地方为库存表的属性。
- 供应商表
供应商表用于记录供应商信息,供应商表的具体字段如表4-16所示:
供应商表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
suppliers_id | 供应商编号 | Long | PK | |
supplier_name | 供应商名称 | Varchar(20) | NOT NULL | |
address | 顾客地址 | Varchar(255) | ||
zip | 邮编 | Varchar(20) | ||
telPhone | 联系电话 | Varchar(20) | ||
linkMan | 联系人 | Varchar(20) | ||
linkTel | 联系人号码 | Varchar(20) | ||
bank | 银行 | Varchar(20) | ||
bankAccoount | 银行账号 | Long | ||
email | 邮箱 | Varchar(20) |
字段供应商编号是供应商表的主键,用来标识一个供应商,字段供应商名称不为空,字段顾客地址、邮编、联系电话、联系人、联系人号码、开户银行、银行账号和邮箱是供应商表的属性。
本章小结
本章主要分为三个小节来介绍系统设计。第一节是系统类分析,主要是通过类图的方式来介绍系统设计到的类,介绍类里的属性和设计到的方法。第二节是关键业务设计,主要是通过顺序图的方式来介绍核心业务的设计和处理过程。第三节是数据库设计,首先是通过ER图的方式介绍设计到的模块和模块的一些字段(分为总ER图和分ER图),其次是数据库表,介绍了所设计到的表,详细的介绍了表中的字段和字段对应的关系。
系统实现
用户登录
- 功能描述
登录是对用户使用系统功能进行身份验证的过程,登录也是可以很好的控制用户的权限问题,登录界面要求简明易懂。每一用户都有自己的独有的账号和密码,用户在系统的每一个操作都有日志进行记载,可以有效保证数据可追溯性,做到责任到人,界面如下图。
用户登录
- 实现流程
在登陆按钮添加监听事件,在用户输入账号密码点击登录后,终端先判断是否满足JS中的验证方法,此方法是防止当账号密码为空时登录的提示,如果为空跳出一个对话框来提示用户账号和密码需要填。如果不为空,后台会把接受的用户名密码与数据库数据库中用户信息比较核对,如果是一致则顺利登录到用户权限所对应的界面中,否则出现账号密码错误的提示,登录失败。登录流程如图5-12所示。实现代码如下:
if("manager".equals(user)){
Managers managers = null;
try {
managers = managerService.login(name, password);
} catch (ServiceException e) {
e.printStackTrace();
}
if(managers!=null){
http://logger.info(name+"登录成功!!!");
ServletContext app = req.getSession().getServletContext();
app.setAttribute("user",managers);
req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp);
}else{
http://logger.info("登录失败,用户名或者密码错误");
HttpSession session = req.getSession();
session.setAttribute("msg","用户名或者密码错误");
resp.sendRedirect("login.html");
}
}else if("employee".equals(user)){
Employee employee = null;
try {
employee = managerService.employeelogin(name, password);
} catch (ServiceException e) {
e.printStackTrace();
}
if(employee!=null){
http://logger.info(name+"登录成功!!!");
ServletContext app = req.getSession().getServletContext();
app.setAttribute("user",employee);
req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp);
}else{
http://logger.info("登录失败,用户名或者密码错误");
HttpSession session = req.getSession();
session.setAttribute("msg","用户名或者密码错误");
resp.sendRedirect("login.html");
}
}
用户登录
采购管理
- 功能描述
采购管理是对需要采购的订单的综合管理,在这个模块里包含采购订单、收货入库、采购退货三个子模块。其中采购订单是员工用来生成采购单的,还有对采购单的一些处理;收货入库是对已经提交的采购单进行入库操作;采购退货是把我们已经提交的采购单进行退货处理的操作。主要界面如下图:
采购管理
- 实现流程
点击采购订单按钮会跳转到采购订单首页,在首页可以看到所有已经提交的采购单信息;当我们想添加新的采购订单的时候,首先点击添加商品按钮,会跳转到商品添加页面,我们把商品信息输入进去之后点击提交,后台方法会把商品信息暂时存起来,当我们把所有商品添加完成,我们可以再点击添加订单按钮,此时会把我们添加的所有的商品都提交生成一个采购订单,并且把数据存进对应的数据库表中保存起来。对已经提交的订单当我们点击退货按钮时,后台会接收到要退货的订单ID,并且根据ID到数据库中订单表把数据删除,同时在退货表中把数据插进去。当我们点击入库按钮时,后台会接收到需要入库的订单的ID,并且把订单表中的flag字段的值修改为已入库,同时在库存表中会新加一条数据。主要实现代码如下:
Long suppliersId = Long.parseLong(request.getParameter("suppliersId"));
String name = request.getParameter("name");
Double price = Double.parseDouble(request.getParameter("price"));
Long count =Long.parseLong(request.getParameter("count"));
String unit = request.getParameter("unit");
String space = request.getParameter("space");
Long supplierId = Long.parseLong(request.getParameter("supplierId"));
String approveId = request.getParameter("approveId");
String batchId = request.getParameter("batchId");
purchaseItem = new PurchaseItem();
purchaseItem.setCount(count);
purchaseItem.setPrice(price);
purchaseItem.setName(name);
purchaseItem.setSupplierId(suppliersId);
list.add(purchaseItem);
model.addAttribute("list", list);
http://logger.info("成功添加商品");
http://logger.info("提交采购订单");
String pay = request.getParameter("pay");
purchaseOrder = new PurchaseOrder();
purchaseOrder.setPay(pay);
purchaseOrder.setInDate(new Date());
purchaseOrder.setFlag("未入库");
try {
int i = managerService.addPurchaseOrder(purchaseOrder, list);
if(i==1){
list.removeAll(list);
/*orderList.removeAll(orderList);*/
orderList = managerService.findPurchaseOrderByPage(0);
count = managerService.findPurchaseOrderCount();
currentPage = 1L;
totalPage = managerService.getTotalPage();
model.addAttribute("currentPage", currentPage);
model.addAttribute("totalPage", totalPage);
model.addAttribute("orderList", orderList);
model.addAttribute("count", count);
http://logger.info("提交采购订单成功");
}
库存管理
- 功能描述
库存管理是对仓库里的商品的综合管理,包括商品入库、商品出库、某种商品的库存查询、商品移库和库存盘点。商品入库是对新的商品需要入库的管理;商品出库是根据销售订单到库存里拿出对应数量的商品并且库存进行相应的减少;库存查询是输入想查询的商品会返回该商品的库存数量;商品移库是输入商品ID和需要移动到的仓库号就可以更改商品的存放仓库;最后一个是库存盘点,该功能是返回仓库里所有商品的库存信息。主要界面如下图:
图5.31商品出库
图5.32库存查询
图5.33商品移库
- 实现流程
首先是商品入库,点击商品入库按钮跳转到对应商品添加页面,填入对应商品信息,后台首先会判断该商品在商品表里是否已经存在,如果存在,则更新该商品的库存即可,如果不存在,则先在商品表里添加一条商品的信息,再到库存表里添加一条库存信息。商品出库,首先是输入需要出库的商品ID和该商品出库的数量,后台根据接收的商品ID和数量到数据库库存表去更新该商品的库存数量。库存查询,输入需要查询库存的商品ID,后台会根据商品的ID去库存表里查询该商品的库存数量,并且返回到对应的前台页面。商品移库,输入商品ID和移动到的仓库号,后台会根据商品ID号到数据库库存表中更新该商品的库存地方。库存盘点,这个功能是会显示所有商品的库存信息。主要实现代码如下:
商品入库:
public int stockAdd(Stock stock, Goods goods) throws ServiceException {
Goods gods = goodsRepository.findGoodsByName(goods.getName());
if(gods==null){
gods = goodsRepository.save(goods);
}
stock.setGoodsId(gods.getId());
Stock stok = findStockByGoodsId(gods.getId());
if(stok==null){
stockRepository.save(stock);
}else{
stockRepository.updateStockCountByGoodsId(stok.getCounts()+stock.getCounts(),stock.getGoodsId());
}
return 1;
}
商品出库:
@RequestMapping("/update")
public String UpdateStock(HttpServletRequest request,Model model){
http://logger.info("库存信息更新开始");
Long goodsId = Long.parseLong(request.getParameter("goodsId"));
Long count = Long.parseLong(request.getParameter("count"));
try {
stockService.updateStock(goodsId,count);
outList = stockService.findStockByPage(0);
model.addAttribute("outList", outList);
http://logger.info("库存信息更新完成");
} catch (ServiceException e) {
e.printStackTrace();
}
return "outStock";
}
商品移库:
@RequestMapping("updateArea")
public String upDateArea(HttpServletRequest request,Model model){
http://logger.info("存放仓库信息更新开始");
Long goodsId = Long.parseLong(request.getParameter("goodsId"));
String area = request.getParameter("area");
try {
stockService.updateStockAreaByGoodsId(area,goodsId);
List<Stock> list = stockService.findAllStock();
model.addAttribute("outList", list);
http://logger.info("存放仓库信息更新完成");
} catch (ServiceException e) {
e.printStackTrace();
}
return "updateArea";
}
销售管理
- 功能描述
销售管理对销售订单的综合管理,包含销售订单、发货出库和销售退货。销售订单,将销售的信息形成销售订单并且存入到数据库销售订单表中;发货出库,将提交的销售订单的flag状态改为已发货,并且对应的库存表中的库存数量也相应的减少;销售退货,对已经销售的订单进行退货处理。主要界面如下图:
图5.41 销售管理
- 实现流程
首先是销售订单,第一步是点击添加商品,然后输入对应的商品信息点击提交,后台接收到数据,会暂时将商品信息存储起来,当商品添加完毕,点击添加订单按钮,可以将刚才添加的所有订单信息提交到后台,后台在将这些订单信息持久化到数据库中去。发货出库,对提交销售的订单可以进行发货操作,后台会根据订单ID对订单表中的flag字段值修改为已发货,并且会到库存表中去,将该订单对应的商品的库存数作相应的改变。销售退货,对已经提交的订单可以进行退货操作,点击退货按钮,后台会根据订单ID到数据库销售订单表中把对应订单信息删除,并且在销售退货表中加入相应的退货记录,与此同时会根据flag字段,如果flag字段值是未发货,则不用去库存表跟新库存数据,如果flag字段的值为已发货,则需要到库存表中把订单对应的商品的库存数加回去。主要实现代码如下:
@RequestMapping("/addSaleOrder")
public String saveSaleOrder(HttpServletRequest request,Model model){
String pay = request.getParameter("pay");
SaleOrder saleOrder = new SaleOrder();
saleOrder.setFlag("未发货");
saleOrder.setPay(pay);
saleOrder.setSaleDate(new Date());
try {
int i = saleService.addSaleOrder(saleOrder,itemList);
if(i==1){
itemList.clear();
saleorderList = saleService.findSaleOrderByPage(0);
cunt = saleService.findSaleOrderCount();
crrentPage = 1L;
ttalPage = saleService.getTotalPage();
model.addAttribute("crrentPage", crrentPage);
model.addAttribute("ttalPage", ttalPage);
model.addAttribute("saleorderList", saleorderList);
model.addAttribute("cunt", cunt);
}
} catch (ServiceException e) {
e.printStackTrace();
}
return "sale";
}
备份与恢复
- 功能描述
备份与恢复,顾名思义就是对系统的重要数据进行备份,以备不时之需,备份是可以设定每天在一个固定的时间自动进行备份;当系统数据损坏时我们可以自由选择恢复哪一天的数据。主要界面如下图:
图5.51 数据备份与恢复
- 实现流程
备份功能,首先当系统启动的时候已经设定了一个自动备份的时间点,每天到这个时间点都会自动把数据库的数据备份一次,但是我们也可以手动备份,我们只需要点击数据备份就可以了;数据恢复,当某个时候系统数据损坏或者丢失的时候,此时我们就可以用到数据恢复功能了,我们可以选择恢复到一个时间点的数据文件。主要实现代码如下:
public static void backup() {
try {
Runtime rt = Runtime.getRuntime();
// 调用 调用mysql的安装目录的命令
Process child = rt.exec(backuppath);
// 设置导出编码为utf-8。这里必须是utf-8
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
InputStreamReader xx = new InputStreamReader(in, "utf-8");
// 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 组合控制台输出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用来做导入用的sql目标文件:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmm");
FileOutputStream fout = new FileOutputStream("D:\\jxc\\backup\\"+sdf.format(new Date())+".sql");
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
writer.write(outStr);
writer.flush();
in.close();
xx.close();
br.close();
writer.close();
fout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 备份数据恢复
* @param databaseName
*/
public static void restore(String fileName) {
try {
Runtime runtime = Runtime.getRuntime();
Process process = runtime .exec(restorepath);
OutputStream outputStream = process.getOutputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("D:\\jcx\\backup\\"+fileName), "utf-8"));
String str = null;
StringBuffer sb = new StringBuffer();
while ((str = br.readLine()) != null) {
sb.append(str + "\r\n");
}
str = sb.toString();
// System.out.println(str);
OutputStreamWriter writer = new OutputStreamWriter(outputStream,
"utf-8");
writer.write(str);
writer.flush();
outputStream.close();
br.close();
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
本章小结
本章主要是介绍了系统实现,重点介绍了系统的用户登录、采购管理、库存管理、销售管理、备份与恢复五个模块。这五个模块首先分别介绍了他们的功能,并且附上界面图,然后再从实现流程上对这些功能进行详细的描述,最后附上实现这些功能的主要代码。
系统测试
系统测试综述
系统完成后,对系统的测试是非常重要的一环。首先在系统的每个模块完成后对这个模块做的单元测试,另外一个是在系统整体完成了后对整个系统做的综合测试。
用户登录模块,当用户输入正确的用户名和密码时,能正常登录;当用户输入错误的用户名或者错误的密码或者不存在的用户名的时候,系统应当输出响应用户名或者密码错误;当用户没有输入用户名或者没用输入密码或者两者都没有输入的时候,系统应当响应用户名、密码项是必填项。
采购管理模块,当天如对应的商品信息时,后台新系统能够接收到商品信息,并且在提交订单的时候能够顺利把这些信息都持久化到数据库中去,并且在出错的时候能正确返回对应的错误码;对采购订单入库时,能正常的把flag标志改为已入库,并且在库存表中更新响应的商品库存信息;销售退货,后台能根据订单ID将采购订单表中的数据删除,并且把数据插入到采购退货表中去。
库存管理模块,商品入库功能,当用户把商品信息输入正确的时候,后台能够真确的收到数据,并且正确的持久化到数据库中去;商品出库,当用户输入出库的商品和数量时,后台能够正确到数据库库存表把对应的商品的数量相应的减少;库存查询,当输入商品的ID时,后台能根据这个ID查出该商品的库存信息,并且能正确的返回到用户界面;商品移库,当输入商品ID和移库的信息后,后台能正确地更新数据库中对应商品的库存信息。
销售管理模块,销售模块,当前段把销售订单的信息都正确输入的时候,后台能正确的接收到订单信息,并且把订单信息正确持久化到数据库中去,在产生错误时,能够返回对应的错误码;发货出库,当销售订单的信息提交之后,我们可以对这些的订单做发货操作,点击发货后,后台要把相应商品的库存信息进行更新,并且把订单表中的flag字段的值改为已发货;销售退货,点击退货按钮,后台能正常的把销售订单表中的对应订单信息删除,并且在销售退货表中把退货信息存进去,并且要把商品的数量加回到库存表中去。
备份与恢复模块,首先是系统每天能够在固定时间产生一个备份数据库的文件,然后在我们手动点击备份按钮的时候也能够产生一个备份数据库的文件;当点击恢复按钮时,会把我们选择的数据库文件恢复到数据库中去。
测试用例
用户登录模块
- 用户登录
功能测试 | |||||
概述 | |||||
测试编号 | XU001 | ||||
功能描述 | 用户登录 | ||||
功能URL | http://localhost:8989/login.html | ||||
用例目的 | 测试用户是否能登录成功 | ||||
前提条件 | 进入用户登录界面 | ||||
测试操作 | |||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 |
1 | 输入不存在的用户名,不填写密码 | 系统提示密码项必须填 | 系统提示密码项必须填 | 正确 | |
2 | 输入正确的用户名输入错误的密码 | 系统提示用户名或密码错误 | 系统提示登录名或密码错误 | 正确 | |
3 | 输入错误的用户名输入正确的密码 | 系统提示用户名或密码错误 | 系统提示登录名或密码错误 | 正确 | |
4 | 不填写用户名及密码 | 系统提示用户名和密码项必须填 | 系统提示用户名和密码项必须填 | 正确 |
采购管理模块
采购管理
功能测试 | |||||
概述 | |||||
测试编号 | XU002 | ||||
功能描述 | 采购管理 | ||||
功能URL | http://localhost:8989/purchase | ||||
用例目的 | 测试采购管理功能是否正常 | ||||
前提条件 | 进入采购管理界面 | ||||
测试操作 | |||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 |
1 | 输入正确的采购订单信息 | 成功将订单信息添加到采购订单表中 | 添加成功,在采购订单表中查到订单数据 | 正确 | |
2 | 成功提交的采购订单点击入库按钮 | 在库存表能够查到入库的商品的信息,并且入库的数量是正确的 | 成功入库,在库存表查到了该商品的入库的数量信息 | 正确 | |
3 | 成功提交的采购订单点击退货按钮 | 在采购订单表把该订单数据删除,并且在采购退货单里能查到退货信息 | 退货成功,在采购订单表已经查不到该订单信息,在退货表里可以查到该订单信息 | 正确 |
库存管理模块
库存管理
功能测试 | |||||
概述 | |||||
测试编号 | XU003 | ||||
功能描述 | 库存管理 | ||||
功能URL | http://localhost:8989/stock | ||||
用例目的 | 测试库存管理是否正常 | ||||
前提条件 | 进入库存管理界面 | ||||
测试操作 | |||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 |
1 | 输入商品信息,点击入库 | 成功将商品信息添加到库存表中 | 入库成功,在库存表中能够查到该商品信息 | 正确 | |
2 | 输入出库商品ID和出库的数量 | 出库表中增加一条数据,并且库存表中该商品的数量减少了出库数量 | 库存表中该商品的数量正确的减少了 | 正确 | |
3 | 输入查询商品的ID | 将该商品的信息正确的显示在页面上 | 页面上成功显示出了该商品的库存信息 | 正确 | |
4 | 输入要移库商品的ID和移库的地点 | 将库存表中该商品的存储位置修改为修改的地址 | 库存表中成功修改来了该商品的库存位置 | 正确 |
销售管理模块
销售管理
功能测试 | |||||
概述 | |||||
测试编号 | XU004 | ||||
功能描述 | 销售管理 | ||||
功能URL | http://localhost:8989/sale | ||||
用例目的 | 测试销售管理是否正常 | ||||
前提条件 | 进入销售管理界面 | ||||
测试操作 | |||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 |
1 | 输入销售订单信息,点击提交 | 在销售订单表中有对应订单的信息, | 在销售订单表中查询到了该订单的信息 | 正确 | |
2 | 已经提交成功的销售订单,点击发货按钮 | 在销售订单表中把flag字段的值改为已发货,库存表中该订单的商品的数量最相应的减少 | 销售订单表中flag字段修改正确,并且库存表中的商品库存数修改正确 | 正确 | |
3 | 已经提交成功的销售订单,点击退货按钮 | 在销售订单表中把该订单信息删除,然后在退货表中把该订单信息加入,然后把退货订单的商品的数量信息重新归还到库存中去 | 销售订单表中该订单成功删除,并且在退货表中增加了该订单数据,然后这些商品在库存表中的数量修改正确。 | 正确 |
备份与数据恢复模块
备份与数据恢复
功能测试 | |||||
概述 | |||||
测试编号 | XU005 | ||||
功能描述 | 备份与数据恢复 | ||||
功能URL | http://localhost:8989/ backups | ||||
用例目的 | 测试备份与数据恢复功能是否正常 | ||||
前提条件 | 进入备份与数据恢复界面 | ||||
测试操作 | |||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 |
1 | 点击备份按钮 | 在电脑的文件夹中能找到备份的数据库文件 | 可以找到备份的数据库文件 | 正确 | |
2 | 点击数据恢复按钮 | 在数据库中可以看到已经恢复的数据库信息 | 在数据库中可以看到这些数据库信息 | 正确 |
测试分析
经过这些测试,整个系统的大部分功能都已经能够正常的运行,达到了我们预想的结果。对于采购管理、库存管理和销售管理三个模块先阶段的功能都能达到预期效果,但是还可以加入一些其他的支持(对Excel表格的支持),能够直接导入Excel表格的数据,并且可以直接导出为Excel表格,这个功能暂时还没达到预期效果,因此需要把这个功能加上;在一个就是对权限的控制方面做的不是特别完善,因此接下来,在权限方面还应该加强。对于备份和数据恢复功能,现在和预期的结果是一致的,比较符合。实力和时间的限制,在代码的编写上面,存在许多的冗余代码,因此这方面需要改进,把重复的代码封装成方法,减少冗余度。
本章小结
本章主要是对已完成的功能做系统测试,分模块的进行测试,测试这些功能是否能达到预期的结果;为什么没有达到预期。对于每一个模块都写了相应的测试用例,通过这些测试用例的分析,整个系统的功能基本上达到了预期的效果,但是还有进一步改进的地方,让整个系统更完善。
总结
历经四个月的时间,到现在为止,系统的开发工作已经全部完成。本系统采用的是Maven来搭建的项目,使用Spring boot、JPA来实现的。对采购、销售、库存的管理,对数据的备份等功能基本上都已经实现。
在设计本系统的初期,选择Spring boot和JPA作为本系统的开发技术是一个大胆的尝试,因为在此之前根本没有接触这两个框架,对他们也不了解。在确立了系统开发技术后,在开发初期先对这两个技术进行了初步的熟悉,然后就是边开发边学习。在系统开发的初期阶段可以说是走了很多弯路,因为对技术不熟悉的缘故。于是乎就是去多找资料、找书学习,认真学习编程思想,吸收它的编程技巧,最后运用到自己的系统上,最终顺利的把系统完成了。在完成整个毕业设计的过程,可以说对我来说学到了很多。之前只是接触到书本上的知识比较多,但是没怎么亲自动手实践,有点眼高手低的感觉。但是经过毕业设计,可以说对自己有了一个很好的磨炼。从题目的确立,系统的设计,系统的实现,到系统的完成,自己经历了一整个过程,让自己的见识有了提高,同时学会了很多的处理问题和解决问题的方法,为我们即将走入到工作岗位上打好了基础。
完成整个系统也是对我们大学四年所学的知识的一个综合运用,之前是理论学的多,实践的太少。通过实践,可以让自己快速的成长起来,还学到了Spring boot和JPA的知识。对于系统的权限控制问题,以后还有待于完善,还有对进销存对Excel的支持,这个在以后都是可以改进的部分。
参考文献
[1] 辛运帏等. java语言程序设计[M].北京:人民邮电出版社,2009
[2] (美)(Nicholas C.Zakas)扎卡斯. JavaScript高级程序设计[J].人民邮电出版社2006
[3] 姜承尧. MySQL技术内幕:InnoDB存储引擎[M].机械工业出版社 2011-1
[4] 张海藩;吕云翔.软件工程[M]. 人民邮电出版社 2013-09-01
[5] Roger S.Pressman, 郑人杰, 马素霞等. 软件工程:实践者的研究方法(原书第7版)[M]. 北京: 机械工业出版社, 2011
[6] 李兴华, 王月清. 名师讲坛:Java Web开发实战经典基础篇(JSP, Servlet, Struts, Ajax)[M].北京: 清华大学出版社, 2010
[7] 成先海.数据库基础与应用[M].北京:机械工业出版社,2008.
[8] 张艳.基于工作过程的物流信息系统与管理课程的重构[J].辽宁高职学报,2010, 12(2):45-47.
[9] 李小娜,董绍华.物流信息技术在现代物流中的应用[J].中国科技信息,2008,(21):140-143.
[10] 隋英琴.供应链管理环境下的物流管理创新[J].科技创业,2008,14(03):123-125.
[11] 陈雄华 Spring 企业级应用开发详解[M] 北京:电子工业出版社 2009
[12] 王寅田. 基于Hadoop的交通物流大数据处理系统设计与实现[D]. 上海交通大学 2014
[13] 李海峰. MVC模式架构的应用研究[J]. 自动化与仪器仪表. 2013(01)
[14] 陈凤琴.基于B/S模式的中小饲料企业进销存系统设计与实现[D].南昌大学2014
[15] 黄沙.企业物流成本管理存在问题及对策[J].物流技术与应用,2011,13(2):101-102.
致 谢
在毕业设计撰写的这几个月,从选题、设计系统、实现系统,到最终系统和论文完成,中间有着自己的努力,更有老师和同学的关心和帮助。
感谢老师指导我选题,引领我设计系统的思路。老师认真的态度让我们最终能顺利的完成论文的撰写。从论文的选题、开题直到论文的完成,老师都耐心的进行了指导,使我能一步一步完成论文。最后,本论文能顺利的完成,离不开各位老师的认真负责,让我能够在毕设中运用所学知识和掌握所学知识。正是有了你们的帮助和支持,我的毕设论文才能顺利完成,在此向你们表示由衷的谢意。