中小型企业便捷管理系统.docx
《中小型企业便捷管理系统.docx》由会员分享,可在线阅读,更多相关《中小型企业便捷管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
中小型企业便捷管理系统
中小型企业便捷管理系统
摘要:
进销存管理系统是针对中小型企业的管理特点,融合了众多先进管理意识开发而成的通用商业进销存一体化计算机管理软件,满足用户进货管理、销售管理、库存管理、基本资料管理、综合查询等各项工作。
系统具有稳定性高、安全、易扩展、结构合理、界面友好、操作方便、实用而科学、性能价格比高等特点。
强大的查询、统计功能,将大量的、动态的数据和信息直观化,真正实现对物流、信息流的轻松管理。
系统开发的目标是实现企业进销存管理的系统化,规范化和自动化,该系统具有完成产销连接,产品库存管理,客户管理,发货管理,库存管理,订单管理等多个功能,满足企业高效管理的需求。
进销存管理系统是一个好用,易用,实用,快上手的好软件,是针对中小型企业的进货销售仓储等业务制作的精致进销存管理软件,功能强大。
关键词:
数据库,MyEclipse,进销存管理
前言
随着全球经济信息化的进程和WTO的成功实现,企业面临着前所未有的机遇和挑战,在如此激变的社会形势和激烈的市场竞争下,愈来愈多的企业管理者意识到效率管理和科学管理的重要性,以及增强市场竞争力的迫切性,因此建立科学、规范、高效的管理制度和秉承富有竞争力的经营理念是每一个企业管理者的渴望,企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。
在进货、库存、销售环节中,由于商品种类繁多、业务量大、库存管理复杂,使用手工操作的工作量很大,在操作过程中也很容易出现各种错误。
而采用计算机管理则可以大大提高日常工作的效率,不仅将原来由手工操作的进货、出货及销售这一整套流程用计算机进行全程管理,而且消除了手工操作中可能存在的不确定因素,达到进销存管理流程清晰,从而能够比较彻底地贯彻经营者的管理模式。
企业进销存管理系统是以软件工程方法为指导,结合实践,对系统进行调研、需求分析、软件设计、数据库设计、界面设计、编码测试等设计工作来完成企业进销存管理系统的系统原型。
企业进销存管理系统的开发设计主要依据软件工程的软件开发原则,结合着所学过的面向对象的可视化语言来完成,在结合前人的工作经验的基础上自己来开发系统。
此系统采用面向对象的程序设计语言Java做前台开发软件和MySQL这款强大的数据库专业软件做后台数据库的设计,整个系统用简洁明快的界面展现出来,使操作简单可行,用户使用方便、简洁。
本系统使用的是窗体模式开发的桌面应用程序。
它使用一个主窗体包含多个子窗体,子窗体只能在主窗体规定的范围内移动。
这些子窗体由导航面板上的按钮调用,这些按钮需要添加事件监听器,在单击该按钮时,由事件监听器创建并初始化相应的窗体,然后显示该子窗体。
如果每个按钮都使用自己的监听类,那么就需要很多监听器类,这样代码的工作量大。
为了提高程序开发效率,使用java的反射功能为使用一个事件监听器类而实现所有的事件监听提供了可能。
企业进销存管理系统是一个复杂而庞大的管理信息系统。
由于时间仓促,在设计中还存在不足之处,有些功能还不是很完善。
在分析设计中还有些地方没有考虑周全,请大家指出错误提出您宝贵的意见。
第1章、绪论
实现企业信息化管理是现代社会中小企业稳步发展的必要条件,它可以提供企业的管理水平和工作效率,最大限度地减少手工操作带来的失误。
进销存管理系统正是一个信息化管理软件,可以实现企业的进货、销售、库存管理等各项业务的信息化管理。
1.1、系统的开发背景
加入WTO以后,随着国内经济的高速发展,中小型企业的商品流通越来越多,其所经营的商品种类繁多,难以管理,而进销存管理系统逐渐成为企业经营和管理中的核心环节,也是企业取得效益的关键。
为了完善管理制度,增强企业的竞争力,很多公司都决定开发进销存管理系统,以实现商品管理的信息化。
1.2、系统开发简介
企业进销存管理系统的前台开发软件选择的是MyEclipse6.5,该软件是面向对象的开发工具,代码的可重用性好、软件易于维护。
进销存管理系统后台的数据库采用的是MySQL数据库,MySQL简单易于掌握,该软件适用于中大型的数据库操作,企业进销存所使用的数据库属于中型的数据库,故采用该数据库。
1.2.1、系统开发工具简介
MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。
它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。
在结构上,MyEclipse的特征可以被分为7类:
●JavaEE模型
●WEB开发工具
●EJB开发工具
●应用程序服务器的连接器
●JavaEE项目部署服务
●数据库服务
●MyEclipse整合帮助
对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。
MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。
简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错,MyEclipse6.0以前版本需先安装Eclipse。
MyEclipse6.0以后版本安装时不需安装Eclipse。
1.2.2、MySQL简介
MySQL被广泛地应用在Internet上的中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库[4]。
与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQLCluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。
对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
1.2.3系统开发环境
●操作系统:
WindowsXP(SP2)
●Java开发包:
JDK1.6
●数据库:
MySQL5.5
●分辨率:
最佳效果为1440*960像素
第2章、系统分析
2.1、需求分析
需求分析是一项重要的工作,也是最困难的工作[2]。
通过调查组织机构情况和系统必须实现的功能,经过仔细的思考和设计,现制定如下的需求分析:
●系统操作简单,界面友好
●进货、退货管理
●基础信息管理(包括客户、商品和供应商的信息管理和修改删除操作)
●销售、退货管理
●库存管理(包括库存盘点和价格调整)
●查询统计分析(客户、商品、供应商、销售、入库、销售排行查询)
●系统管理
●可以批量填写进货单和销售单
2.2、系统开发的可行性分析
系统分析人员需要5天时间确认需求分析文档,去除其中可能出现的问题,例如用户可能临时有事,占用6天时间确认需求分析。
那么程序开发人员需要在1个月零15天的时间内进行系统设计、程序编码、系统测试、程序调试和最终文档编写等工作。
其间包括休息时间。
时间上可行。
在技术方面由于java的易操作性,以及系统设计人员对软件工程的理解,系统编码方面不会出现太大的问题。
技术上可行。
由于系统是由个人独立编写,所以也就不存在资金方面的困扰,经济效益上可行。
综上所述,项目在时间、技术和资金方面都是可行的。
因此认为该项目可以按时保质量开发。
2.3、系统功能分析
根据需求分析的描述以及与用户的沟通,现制定系统功能实现模块如下:
1)进货管理:
包括进货、进货后退货两个子模块。
2)基础信息管理:
包括商品信息管理、客户信息管理和供应商信息管理三大模块。
其中每个模块下又分为几个小模块来实现增删改查操作。
3)销售管理:
包括销售订单、销售后退货处理模块。
4)库存管理:
包括库存盘点和库存价格调整两个模块,可以很方便地将系统与实
物之间的数量和价格一一对应上,使信息更准确。
5)查询统计:
提供了强大的查询和搜索功能,其中包括客户查询、商品查询、供应商查询、销售查询、退货查询、入库查询、销售排行等子模块,查询功能强大。
6)系统管理:
包括操作员管理、密码更改、退出系统等子项。
2.4、业务逻辑编码
由于涉及到多张数据库表格,固对表格编码作一统一规划,方便程序编写。
其中数据库对象命名以字母db开头,数据表对象命名以字母tb开头。
●供应商编号:
作为供应商信息表的主键。
以字符串gys为前缀后面跟4位数字作为编号的后缀。
这四位数字从1001开始。
(gys1001)。
●客户编号:
作为客户信息表的主键。
以字符串kh为前缀后面跟4位数字作为编号的后缀。
这四位数字从1001开始(kh1001)。
●商品编号:
作为商品信息表的主键。
以字符串sp为前缀后面跟4位数字作为编号的后缀。
这四位数字从1001开始(sp1001)。
●销售单编号:
作为销售单信息表的主键。
以字母xs为前缀后面跟3位数字作后缀。
(xs1001)。
●入库编号:
作为进货信息表的主键。
以字母rk为前缀后面跟3为数字作后缀。
(rk1001)。
●库存编号:
作为库存信息表的主键。
以字母kc为前缀后面跟4位数字作为编号的后缀。
这四位数字从1001开始。
(kc1001)。
●用户表编号:
作为管理用户信息表的主键。
以user作为前缀后跟两位数字作为后缀。
这两位数字从01开始。
(user01)
第3章、系统总体设计
3.1、系统流程图
进销存管理系统的系统流程如图3.1所示:
3.2、系统总体结构图
本系统包括:
基础信息管理、进货管理、销售管理、库存管理、查询统计、系统管理等6大部分。
系统结构图如下图2所示:
图3.2:
进销存系统结构图
3.3、数据库的设计
3.3.1、数据库分析
本系统是一个桌面应用程序,MySQL服务器安全,免费。
选用MySQL服务器完全满足中小企业的要求。
硬件平台:
⏹CPUCeleron1.6GHz
⏹内存:
1G
⏹硬盘空间:
80G
软件平台:
⏹操作系统:
WindowsXP
⏹数据库:
MySQL5.0.67
3.3.2、进销存管理系统E-R图
E-R图是用来描述某一组织(单位)的概念模型,提供了表示实体、属性和联系的方法。
构成ER图的基本要素是实体、属性和关系。
实体是指客观存在并可相互区分的事特;属性指指实体所具有的每一个特性[5]。
图3.3:
客户实体E-R图
图3.4:
供应商实体E-R图
图3.5:
商品实体E-R图
图3.6:
库存实体E-R图
图3.7:
进货单实体E-R图
图3.8:
销售单实体E-R图
图3.9:
用户表实体E-R图
第4章、系统详细设计
4.1、主窗体设计
主窗体界面也就是系统的欢迎界面。
应用程序的主窗口必须设计层次清晰的系统菜单和工具栏,其中系统菜单包含系统中所有功能的菜单项,而工具栏主要提供常用功能的快捷访问按钮。
企业进销存管理系统采用导航面板综合了系统菜单和工具栏的优点,而且导航面板的界面更加美观,操作更快捷。
图4.1程序主窗体界面效果
主窗体设计的主要思路是先创建一个JFrame对象,在此容器下创建一个JDesktopPane对象,导航面板即JTabbedPane对象就是安放在此对象上的。
由于导航面板的简洁和方便性,所有的按钮都是放在一个个选项卡上面的。
每个按钮都对应相应的点击事件,如果每个按钮都添加各自的事件监听器的话,那么将有很多事件监听器类。
但是从实际的按钮监听器所实现的业务逻辑中不难发现,它们所完成的工作基本相同,都是创建并初始化子窗体,然后显示它们。
如果能够使用同一个事件监听器类就可以实现代码重用,同时也节省了代码量,提高程序开发速度。
所以我使用了java的反射机制,它可以很好地解决这个问题。
在java.lang.reflect包中有Constructor类,可以通过Class类的getConstructor()方法获取Constructor类的实例对象,然后调用该对象的newInstance()方法创建类的实例对象。
关键代码如下:
//采用java中的反射机制处理内部窗口。
这样可以大大简化代码量
privatefinalJInternalFramegetInternalFrame(Stringframename){
JInternalFrameinternalFrame=null;
//生成唯一的内部窗体对象(通过判断HashMap中是否已经有了内部窗体对象)
if(!
ifs.containsKey(framename)){
try{
ClasstempClass=Class.forName("com.wyl.internalFrame."+framename);
Constructorconstructor=tempClass.getConstructor();
internalFrame=(JInternalFrame)constructor.newInstance();
ifs.put(framename,internalFrame);
}catch(Exceptione){
e.printStackTrace();
}
}
else{
internalFrame=ifs.get(framename);
}
returninternalFrame;
}
//多个内部窗体对象[8]
privateMapifs=newHashMap();
publicWelcomeFrame(){
frame=newJFrame("企业进销存系统");
updateBackImage();//添加、更新背景图片
desktopPane=newJDesktopPane();
desktopPane.add(backLabel,newInteger(Integer.MIN_VALUE));
frame.getContentPane().add("Center",desktopPane);//在窗体中添加JDesktopPane对象
JTabbedPanenavigatorPane=createNavigatorPane();//创建导航面板
frame.getContentPane().add("North",navigatorPane);
..........
frame.setVisible(true);
}
privatevoidupdateBackImage(){//添加、更新背景图片[9]
if(backLabel!
=null){
intimageWidth=frame.getWidth();
intimageHeight=frame.getHeight()-110;
backLabel.setSize(imageWidth,imageHeight);
backLabel.setText("
imageHeight+"'src='"+this.getClass().getResource("welcome.jpg")+"'>"+
""
);
}
}
privateJTabbedPanecreateNavigatorPane(){
JTabbedPanenavigatorPane=newJTabbedPane();
navigatorPane.setBorder(newBevelBorder(BevelBorder.RAISED));
navigatorPane.setBackground(newColor(211,230,192));
navigatorPane.setFocusable(false);
JPanelstockManagePanel=newJPanel();//进货管理
stockManagePanel.setBackground(newColor(215,223,194));
stockManagePanel.setLayout(newBoxLayout(stockManagePanel,BoxLayout.X_AXIS));
stockManagePanel.add(createButton("进货单","Jinhuodan"));
stockManagePanel.add(createButton("退货","Tuihuo"));
JPanelsaleManagePanel=newJPanel();//销售管理
...........
JPanelstorageManagePanel=newJPanel();//库存管理
...........
JPanelbaseInfoManagePanel=newJPanel();//基础信息管理
...........
JPanelsearchStatisticManagePanel=newJPanel();//查询统计
...........
JPanelsystemManagePanel=newJPanel();//系统管理
//将以上各个面板添加到导航面板中
navigatorPane.addTab("进货管理",null,stockManagePanel,"进货管理");
navigatorPane.addTab("销售管理",null,saleManagePanel,"销售管理");
navigatorPane.addTab("库存管理",null,storageManagePanel,"库存管理");
navigatorPane.addTab("基础信息管理",null,baseInfoManagePanel,"基础信息管理");
navigatorPane.addTab("查询统计",null,searchStatisticManagePanel,"查询统计");
navigatorPane.addTab("系统管理",null,systemManagePanel,"系统管理");
returnnavigatorPane;
}
privateJButtoncreateButton(Stringcname,Stringfname){
StringpicUrl="res/ActionIcon/"+cname+".png";//原始图片
StringpicUrl_roll="res/ActionIcon/"+cname+"_roll.png";//鼠标经过时显示的图片[10]
StringpicUrl_down="res/ActionIcon/"+cname+"_down.png";//鼠标按下时显示的图片
Iconicon=newImageIcon(picUrl);
Iconicon_roll=newImageIcon(picUrl_roll);
Iconicon_down=newImageIcon(picUrl_down);
Actionaction=newopenFrameAction(cname,fname,icon);//点击按钮响应的事件
JButtonbutton=newJButton(action);
//设置按钮外观样式,美化界面
button.setMargin(newInsets(0,0,0,0));//设置按钮边框和标签之间的空白(top,left,bottom,right)全为空白
button.setText("");
button.setFocusPainted(false);//设置按钮获取焦点后,是否显示焦点样式。
此处取消,更美观
button.setBorderPainted(false);//设置是否绘制边框,此处取消,更美观
button.setContentAreaFilled(false);//希望绘制图标按钮就将此属性设置为false
//设置鼠标经过,按下时按钮样式
if(icon_roll!
=null)
button.setRolloverIcon(icon_roll);
if(icon_down!
=null)
button.setPressedIcon(icon_down);
returnbutton;
}
//编写内部类,它继承AbstractAction对象,实现Action接口[11]
protectedclassopenFrameActionextendsAbstractAction{
privatestaticfinallongserialVersionUID=1L;
Stringframename="";
//构造方法,接受传递过来的参数
publicopenFrameAction(Stringcname,Stringframename,Iconicon){
this.framename=framename;
this.putValue(Action.NAME,cname);//设置点击按钮的动作名
this.putValue(Action.SHORT_DESCRIPTION,cname);//设置按钮上的Tooltip文字
this.putValue(Action.SMALL_ICON,icon);//设置按钮图标
}
//点击按钮响应的事件。
(即生成相应的内部窗体然后显示出来)[12]
publicvoidactionPerformed(ActionEvente){
JInternalFrameinternalFrame=getInternalFrame(framename);//调用getInternalFrame()方法生产内部窗体
if(internalFrame.getDesktopPane()==null){
desktopPane.add(internalFrame);//将内部窗体添加为JDesktopPane实例的内部窗体
internalFrame.setVisible(true);//将内部窗体显示出来
}
//添加内部