毕业设计之进销存管理系统——一步步搭建自己的框架及系统星朝

上面简单的展示了完成后的系统测试截图,你可以下载war包部署到自己的tomcat上看,下面开始进入正文。

开发一个(简单)系统,我想首要做的就是进行系统需求分析,弄清楚你为什么要做这个系统,这个系统有哪些功能模块,每个功能具体实现些什么功能。

当然,我这里的主要目的是完成毕业设计,交出毕业论文。但我并没有简单的只是为了完成一个毕业设计而去开发这个系统。主要想法是以开发这套进销存管理系统为例,详细说明一个系统从确认需求、技术选型、架构设计、系统实现到测试部署的整个开发过程。综合运用自己平时所学的知识、技术,及实习获得的经验等,去完整且较好的实现一个系统。搭建一个基础系统框架,形成一定规范,以后在此基础上做开发,可以省去很多诸如搭建框架、加入依赖、配置等工作。

这次开发所做的主要工作及意义如下:

①学会站在用户的角度分析用户需求,完成需求分析设计等。

③熟练掌握Spring+SpringMVC+Hibernate+ExtJs的开发技术。

④熟练使用maven构建工具。

⑤站在企业的角度,试着搭建自己的一个底层基础框架。

⑥建立完整的燃气管进销存管理系统,进行测试并分析结果。

⑦将系统部署到互联网上,以实现真正的web应用。

首先,对系统进行需求分析,首先需要了解的就是什么是进销存系统,进销存系统也称为供应链管理系统,最基本的内容就是采购、库存、销售、退货管理。进销存系统是对企业生产经营中采购、入库、销售进行跟踪管理,从采购单开始,到商品入库,商品销售出库,每一步都跟踪记录。有效解决企业的分销管理等业务问题。那么燃气管进销存系统有何不同呢,其实进销存系统已经具备了一般商品的进销存功能,燃气管就是一种商品。以此为出发点,开始着手设计系统功能模块。

系统分为6大模块,分别是基础设置、采购管理、销售管理、库存管理、统计分析、系统管理。系统设置的角色有admin、采购员、销售员、库存管理员等。

系统模块结构(使用xmind设计):

系统总体流程(使用visio设计):

需求确定了,就要进入具体的开发阶段,首先确定开发这个系统综合用到哪些技术、开发工具等。

简单说下这个系统的开发环境:

开发平台:windows8.1

Java版本:jdk1.8

项目管理工具:Maven

开发工具:IntellijIDEA

数据库:MySql5.1

服务器:Tomcat8.5

开发框架:Spring4+SpringMVC+Hibernate5

前端框架:ExtJs4.2+Jsp

建模工具:PowerDesigner、Visio

IDEA是java语言开发的集成环境,Intellij被公认为最好的Java开发工具之一。IDEA在代码自动提示、重构、调试、各类版本工具(maven、svn等)整合等方面都是比较强的。本人是在实习期间转用idea开发的,之前一直使用eclipse,相比eclipse,idea在调试、代码自动提示等方面更显优势。项目在idea中有一个更友好的目录结构,尤其是多工程项目。当然,eclipse比idea更容易上手,使用idea可以提高你的开发速度,但前提是你需要记住大量的快捷键。使用idea的调试功能,比如,你只需要按快捷键Alt+F8,然后输入表达式,就可以快速求值;在调试的时候,idea会在变量的后面以不同的颜色显示变量的值,你就可以很清楚的知道调试的每一步,非常方便。使用好IDEA能在很大程度上提高我们的开发速度。

ExtJs可以用来开发富客户端的ajax应用,是用javascript写的与后台技术无关的前端ajax框架,主要用于创建前端用户界面,拥有强大的数据处理功能,以及图表统计等。同时,ExtJs拥有很多个性化的主题供你选择,是开发后台管理系统的一个不错的选择。

在进行进销存系统的设计和编码之前,首先设计一个自己的底层框架,这个底层框架在之后可以作为其它具体项目开发的一个基础,从而不必每次开发项目时,都去做很多重复的工作。这个底层框架主要包括一个开发的规范,以及一些通用的工具类等,更重要的是分类别引入各个框架,如Spring、Hibernate、各个配置文件等。同时,如果以后在开发中,增加的一些新功能,还可以往这个底层中添加,不断的去完善。

在进行框架设计之前,为了使软件开发过程顺畅、提高代码的可靠性,可读性和可维护性等,首先需要确定的就是开发规范了,俗话说,没有规矩不成方圆,软件开发亦是如此。下面列出一些简单的需要遵守的规范。

首先需要遵守的是一些基础规范。一般来说,公司会将域名作为所有命名的一个基础,比如文件名、包名等等。因此我申请了一个域名[www.lyyzoo.com]作为个人域名。然后将D:/lyyzoo-repo作为开发的根目录,即个人代码仓库,以后所有的项目都会建到这个目录下。所有的项目开发使用maven来管理项目,因此目录结构是标准的maven规范目录。

maven约定的目录结构:

①命名

>所有的命名需要见名之意,尽量保证通过变量名得知变量的含义,需要注释的地方尽量添加注释。

>包命名全小写,通过域名倒写+模块的形式,如:com.lyyzoo.service

>类命名采用Pascal名法,大写字母开头,每个单词首字母大写。

>方法名采用Camel命名法,小写字母开头,每个单词首字母小写;getter和setter使用Lombok自动生成,只需添加@Data注解即可。

>变量名采用Camel命名法,小写字母开头,每个单词首字母大写。变量名不宜过长,可采用首字母缩写的形式,但要见名之意。

>常量名全大写,每个单词之间使用”_”分隔。

②分层

项目以功能模块划分,不同项目建立不同的工程,使用maven的依赖进行管理。包的基本分层有controller(控制层)、service(业务层)、dao(数据访问层)、entity(模型层)。

底层模块结构图:

以下是各个POM之间的关系:

①lyyzoo>pom.xml

②lyyzoo-base>pom.xml

③lyyzoo-starter>pom.xml

结构建好后,就需要进行一些详细的依赖配置工作了,lyyzoo是所有模块的父类,所以在lyyzoo中需要添加公用的属性、依赖管理、maven插件等。

首先将所有的版本号提出来,放到里,这样一旦需要切换到另一个版本时,就可以只改个版本号就达到目的了。其中列出了一些属性如下:包括底层的版本、Java版本、Spring、Hibernate的版本等等。

①首先需要引入lyyzoo下的其它模块,如lyyzoo-base-core、lyyzoo-starter-base等模块。

12org.hibernate3hibernate-c3p04${hibernate.version}567org.hibernate.common8hibernate-commons-annotations9${hibernate.version}101112org.hibernate13hibernate-core14${hibernate.version}151617org.hibernate18hibernate-entitymanager19${hibernate.version}20ViewCode

说明一下,整个底层很大一部分是从之前实习的公司(这个就不说了)直接拿过来的,有些则更改了。相信我拿取的这部分代码并不会涉及机密问题,不用于商业用途,仅仅只是学习,应该没多大问题。

lyyzoo-base-core目录结构:

lyyzoo-base-core是基础核心,封装了返回结果和加入了一些常用的工具类。

com.lyyzoo.bean包下封装了BaseBean和Result,BaseBean是Bean类的一个基础类,实现了序列化,重写了toString()方法,如下:

1packagecom.lyyzoo.bean;23importorg.apache.commons.lang3.builder.ToStringBuilder;4importorg.apache.commons.lang3.builder.ToStringStyle;56importjava.io.Serializable;78/**9*BaseBean实现序列化

10*11*@authorbojiangzhou12*@date2017-03-2713*/14publicabstractclassBaseBeanimplementsSerializable{1516/**17*ToStringBuilder–用于辅助实现Object.toString()方法

18*/19publicStringtoString(){20returnToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);21}2223}ViewCodeResult则封装了返回的结果,这里主要与ExtJs相对应,ExtJs进行ajax请求时,返回success=true,会进入success()方法;返回success=false,会进入failure()方法。同时,封装了返回消息、标识、错误信息等,便于前端拿到相应数据。

lyyzoo-starter-base目录结构:

lyyzoo-starter-base是web应用程序的一个基础,主要封装了基础实体类以及spring-base和日志的配置。实体的顶层是AbstractEntity,AbstractEntity继承BaseBean。AbstractEntity重写了equals和hashCode方法,主要做的处理是,如果两个实体的id相同也算这两个对象为同一个对象。代码如下:

1packagecom.lyyzoo.data.entity;23importcom.lyyzoo.bean.BaseBean;45importjava.io.Serializable;67/**8*抽象实体类重写equals和hashCode方法9*10*@authorbojiangzhou11*@date2017-03-2812*/13@SuppressWarnings("serial")14publicabstractclassAbstractEntityextendsBaseBeanimplementsSerializable{1516publicabstractIDgetId();1718@Override19publicbooleanequals(Objectobj){2021if(null==obj){22returnfalse;23}24if(this==obj){25returntrue;26}27if(!getClass().equals(obj.getClass())){28returnfalse;29}3031AbstractEntity<>that=(AbstractEntity<>)obj;3233returnnull==this.getId()false:this.getId().equals(that.getId());34}3536@Override37publicinthashCode(){38inthashCode=17;3940hashCode+=null==getId()0:getId().hashCode()*31;4142returnhashCode;43}4445}ViewCodeBaseEntity则继承AbstractEntity,BaseEntity作为其它实体的父类存在,BaseEntity定义了主键ID的生成策略。代码如下:

在开始开发一个系统之前,首先需要做的就是根据需求分析设计系统的实体对象以及对应的数据库表结构,这是开发的基础。

根据前面的需求分析设计的功能模块,实体对象可以分为5个模块,分别是系统模块(system)、基础模块(base)、采购模块(purchase)、销售模块(sale)、库存模块(stock)。下面是实体清单:

有了清单之后,利用PowerDesigner进行数据库物理模型设计。由于拥有对数据库的完全控制权,所以不对表设置约束,所有的约束在程序代码中进行控制。下面列出各个实体的属性即对应的表,具体可参考《数据库物理模型.pdm》。物理模型设计完成后,创建名为gpss的数据库,然后创建各个表。

数据库模型:

需求分析做完了,技术没问题,底层架构也设计好了,数据库设计好了,前面的所有准备工作做完了,下面就要进行燃气管进销存系统的编码实现了。首先要做的工作就是创建工程,项目名拟为gpss,即燃气管进销存(GasPurchaseSaleStock)的缩写,工程名则为lyyzoo-gpss。

lyyzoo-gpss目录结构:

lyyzoo-gpss>pom.xml:

lyyzoo-gpss-base>pom.xml:

lyyzoo-gpss-web>pom.xml:

一些基础的配置如下:

比如JDBC的属性:

config-online.xml:

maven环境配置,在lyyzoo-gpss>pom.xml中配置两个环境:

1234dev567env8dev91011121314online151617env18online19202122ViewCode不同环境打包插件(portable-config-maven-plugin)的配置:

1234com.juvenxu.portable-config-maven-plugin5portable-config-maven-plugin61.1.578910replace-package1112131415src/main/resources/portable/config-${env}.xml16171819ViewCode3.模块分层3.1lyyzoo-gpss-base工程建好后,创建包的结构。按照一般的分层方式,分为dao层、entity层、service层,同时,每层下按模块划分为system、base、purchase、sale、stock。然后在entity下根据表设计创建实体类。

lyyzoo-gpss-base目录结构:

然后是lyyzoo-gpss-web模块,该模块主要是controller层,以及静态资源文件、jsp文件等。com.lyyzoo.gpss.web作为controller层的包,同样,在web下按系统模块划分。

lyyzoo-gpss-web目录结构:

lyyzoo-gpss-web/src/main/webapp/static作为静态文件的根目录,static/lib目录作为三方类库的根目录,如ExtJs、jQuery、其它的插件等。static/css是系统css文件的根目录;static/img是图片的根目录;static/js是系统js文件根目录,/js下同样按模块划分。

静态资源文件目录结构:

taglib.jsp中引入了标签和设置了资源的路径:

BaseController代码如下:

HomeController代码如下:

系统容错性测试,主要是测试输入一些错误的数据类型以及超出范围的数值测试系统在异常条件下的行为。系统在这方面做得比较好,如果用户输入了一些非法的数据,会立即提醒用户输入正确的数据。首先会在前台判断用户输入的数据的合法性、是否必须输入等,数据传到后台后,还会在代码里判断一次数据是否正确,才会保存到数据库。而系统使用的Jdbc也能在一定程度上防止SQL注入等问题。如果系统发生一些无法预测的异常,也会以友好的界面提示用户,以便技术员及时维护系统。

总体来说,整个的测试过程比较顺利,也存在一些小问题,就立即修复了。功能全部实现了,该系统能满足一个基本的进销存流程,以后也还可以扩展。

写到这里就基本完了,大学四年的最后一篇博客,以后就是在工作中去学习了。

很开心,要离开学校了,可以去工作找money了;很忧伤,要离开学校了,一生中可能最舒适的时光就是大学时光了。

我很喜欢我的学校——西南大学,坐落于缙云山下,环境优美、美女如云,哈哈!

THE END
1.进销存软件的使用步骤与方法!进销存的数据在初期的时候一定要是完善的,有的数据还是要靠人工来输入完成,比如进销存的库存商品等! 期初数据是手工帐和电脑账衔接的过程,只有把期初的数据盘点清楚,后面计算出的数据才能准确。如果期初数据不准确,那么,后期的数据分析、报表查询就没有多大作用和意义了,因为期初数据不准,过程管理得再好,最后的数据https://m.hishop.com.cn/xinlingshou/show_72360.html
2.进销存系统怎么使用方法零代码企业数字化知识站如何选择合适的进销存系统? 选择合适的进销存系统需要考虑多个因素,包括系统的功能是否满足企业需求、操作界面的友好程度、售后服务的质量、价格的合理性等。在选择之前,企业可以进行试用,了解系统的实际操作体验,以确保选择最合适的解决方案。 进销存系统是否需要定期维护? https://www.jiandaoyun.com/blog/article/900828/
3.一文详细讲解进销存系统(附架构图流程功能介绍)进销存系统通过多种方式确保数据准确性。首先,在数据录入环节,系统通常会设置必填项和数据格式验证,避免错误数据的录入。例如,在采购订单录入时,要求必须填写正确的供应商名称、商品编码、数量等信息,且数量必须为数字格式。其次,系统会自动进行数据计算和更新。比如在货物出入库时,根据实际操作自动增减库存数量,避免人工计https://blog.csdn.net/BeWorkingMan/article/details/143406570
4.金蝶精斗云进销存系统权限设置常见问题8、审核提示:收款额不为空时,请选择结算账户!如何处理? 1、商品期初数据的权限在哪里? 【权限说明】 商品期初设置权限属于反向权限,勾选全部权限给子账号无法直接设置商品期初,需要取消“关闭期初设置”权限 【操作流程】 1、登录账套管理员账号 2、操作:设置--权限设置--角色管理--云进销存--商品,取消勾选“https://vip.kingdee.com/article/368349253028166912
5.跨境电商erp系统如何操作跨境电商erp进销存软件虾皮erp系统如何操作一种产品定制方法、装置、系统及计算机存储介质。该产品定制方法包括:查看定制产品的第一图片;第一图片用于展示定制产品的原始产品形态;响应于针对定制产品的编辑触发操作,展示定制产品的待定制信息;响应于针对待定制信息的编辑操作,实时展示定制产品的第二图片;第二图片用于展示定制产品根据待定制信息编https://www.miwaimao.com/soft_68664.html
6.Access数据库制作完整进销存系统access进销存教程提供灵活、方便的权限设置功能,使整个系统的管理分工明确。 对用户输入的数据,系统进行严格的数据检验,尽可能排查人为的错误。 操作注意事项 (1)本系统管理员用户名为:tsoft,密码为:111。 操作流程 在使用本系统时,请按照以下流程进行操作: 输入用户名、密码后进入进销存管理后如图1.4所示。 https://blog.51cto.com/u_14691/11723355
7.钉钉进销存进销存进销存系统搭建 你好,想实现进销存系统的搭建,具体的操作方法及步骤可以参考文档进销存系统搭建。 查看详情 如何实现进销存系统 您好,实现进销存系统可以参考以下文档:进销存系统搭建 查看详情 进销存怎么设置不显示0库存的数据 您好,关于进销存怎么设置不显示0库存的数据,详情您可以参考以下文档:如何设置 0 库存不https://www.dingtalk.com/qidian/help-keyword-84734.html
8.进销存erp系统进销存系统盘点计划: 仓库在一定时期进行盘点规划,防止实际库存数和账面库存数不一致的情况。 查看详情 调拨出库 1、产品调拨出库 2、物料调拨出库 查看详情 调拨入库 查看详情 产品库存查询 查看详情 仓库操作流程 仓库产品和物料出入库操作流程: 1、调拨操作 2、采购入库 3、销售出库 4、生产入库 5、仓库盘点 http://www.moemmo.com/CN1/JXCSYS.html
9.里诺仓库管理系统进销存软件wms仓储里诺仓库管理系统(11月14日),确保企业及时准确地掌握库存的真实数据,合理保持和控制库存。面世16年,5万家中小企业选择!软件简单实用,7天学会操作。http://lenosoft.net/
10.Max(TM)进销存管理系统Max(TM)进销存管理系统 历史版本可能因过时等原因而有错误,请点击访问本词条的最新解释版本 一、 适用对象: 使用电脑进行采购、销售、仓储管理的各大、中、小企业。 二、 软件特点: 美观简便的操作界面:直观的图形化操作界面,以及丰富详细的操作提示,帮助您高效快捷的完成仓储、销售、采购管理工作;https://baike.esnai.com/history.aspx?id=5016
11.进销存管理系统怎么应用进销存管理系统怎么应用您好,请问您的 管理系统是从哪里下载的?wps不自带任何管理插件https://www.wps.cn/learning/room/d/299691
12.易呈ERPERP系统erp软件ERP管理系统易呈软件是操作简单的工厂ERP软件和ERP系统定制开发服务商,旗下erp管理系统,MES系统,erp生产管理软件,生产管理系统erp,erp进销存软件,erp仓库管理系统,库存管理软件,erp财务管理软件,屠宰erp软件,屠宰场管理系统等,支持WMS、APS、电商网店,移动开单等功能。基于互联网页https://www.scyicheng.net/