企业进销存管理系统.docx
《企业进销存管理系统.docx》由会员分享,可在线阅读,更多相关《企业进销存管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
企业进销存管理系统
企业进销存管理系统
系别:
_________________
专业:
_________________
学生姓名:
_________________
指导教师:
_________________
石家庄职业技术学院信息工程系
年月日
摘要
中小企业在我国经济发展中具有重要地位,随着我国市场经济的蓬勃发展和人们对计算机的普遍应用,批发、零售行业正处在一个高速发展的时期。
行业的快速发展必然导致竞争的加剧,要想在激烈的市场竞争中谋求发展,客观上要求企业必须加强内部管理,提高运营效率。
而我国大部分小型批发、零售企业在信息机制上还没有摆脱原有的手工模式,企业内部没有形成完善的、有效的信息化管理机制,企业发展的动力不足,从而影响企业的持续、稳定、快速的发展。
当今国内外多数企业的竞争特点是:
产品的种类、规格特别多,市场需求变化很快,与分销商,零售商的关系日益密切等。
而随着业务量的扩大,传统的管理方法已经无法处理日益膨胀的大量的业务数据,企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。
实现企业信息化管理是现代社会中小企业稳步发展的必要条件,它可以提高企业的管理水平和工作效率,最大限度地减少手工操作带来的失误。
进销存管理系统正是一个信息化管理软件,可以实现企业的进货、销售、库存管理等各项业务的信息化管理。
出于以上原因,本课程设计将基于MySQL数据库并以JAVA为开发环境设计实现一个企业进销存管理系统。
该系统包括基础信息管理、进货管理、销售管理、库存管理、查询统计、系统管理几个模块,主要是处理商业企业商品的采购、库存和销售各个环节的活动,具有良好的人机界面。
考虑到系统的使用对象可能较多,权限管理良好,数据查询方便,支持多条件查询。
关键词:
进销存管理系统、进货管理、销售管理、库存管理、系统管理
目录
摘要2
第一章概述1
1.1系统功能概述1
1.2系统的运行环境2
1.3开发工具2
第二章系统的数据库设计3
2.1数据库字典3
2.1.1数据项条目3
2.1.2数据结构条目3
2.2数据库E-R图4
2.2.1客户实体E-R图4
2.2.2供应商实体E-R图5
2.2.3商品实体E-R图5
2.2.4销售实体E-R图5
第三章系统的程序设计与实现7
3.1各模块的功能及其关系7
3.2各功能模块的设计和实现8
3.2.1登录界面8
3.2.2系统主窗体10
3.2.3基础信息管理模块方案14
3.2.4进货管理模块15
3.2.5销售管理模块16
第四章系统测试17
4.1单元测试17
4.2功能测试20
4.3集成测试与系统测试20
4.4程序的异常处理21
4.5调试21
第五章总结22
参考文献23
致谢25
第一章概述
1.1系统功能概述
本系统要求具有以下功能:
系统操作简单、便捷,界面简洁、友好。
具有规范、完善的基础信息设置和管理。
支持多人操作,要求有用户和权限分配功能。
支持多条件的快捷查询功能。
对销售信息提供销售排行功能。
支持销售退货和入库退货功能。
支持批量填写进货单及销售单。
支持库存价格调整功能。
通过对进销存管理系统的功能需求分析,可以将本系统划分为基础信息管理、进货管理、销售管理、库存管理、查询统计、系统管理6大部分。
系统功能结构如图1-1所示。
图1-1系统功能结构图
进销存管理系统的系统流程如图1-2所示。
图1-2系统流程图
1.2系统的运行环境
本项目所用的运行环境如表1-1所示
表1-1运行环境表
类别
配置
软件
Mysql、jdk1.6
操作系统
Windowsxp以上版本
内存和硬盘大小
256M以上、1G以上
其它
USB2.0
1.3开发工具
本项目所用的开发工具如表1-2所示。
表1-2开发工具表
开发语言
JAVA
开发环境
Windows7+MyEclipse+Mysql+jdk1.6
开发工具
MyEclipse+SQLyogEnterprise
第二章系统的数据库设计
2.1数据库字典
2.1.1数据项条目
数据项编号:
1
数据项名称:
商品编号
符号名:
ID
数据类型:
varchar
长度:
5
数据项编号:
2
数据项名称:
系统用户编号
符号名:
username
数据类型:
varchar
长度:
8
数据项编号:
3
数据项名称:
供应商编号
符号名:
id
数据类型:
varchar
长度:
8
2.1.2数据结构条目
数据结构编号:
1
数据结构名称:
商品入库
简述:
商品入库的记录点
组成:
商品编号+入库日期+商品价格+供应商+数量
数据结构编号:
2
数据结构名称:
用户登记
简述:
管理员合法凭证
组成:
用户编号+用户权限
数据结构编号:
3
数据结构名称:
供应商录入
简述:
记录贸易往来
组成:
供应商编号+供应商名+供应商联系方式
2.2数据库E-R图
企业进销存管理系统主要实现从进货、库存到销售的一体化信息管理,涉及商品信息、商品的供应商、购买商品的客户等多个实体。
下面简单介绍几个关键的实体E-R图。
2.2.1客户实体E-R图
企业进销存管理系统将记录所有的客户信息,在销售、退货等操作时,将直接引用该客户的实体属性。
客户实体包括客户编号、客户名称、简称、地址、电话、邮政编码、联系人、联系人电话、传真、开户行和账号等属性,客户实体E-R图如图2-1所示。
图2-1客户实体E-R图
2.2.2供应商实体E-R图
不同的供应商可以为企业提供不同的商品,在商品信息中将引用商品供应商的实体属性。
供应商实体包括编号、名称、简称、地址、电话、邮政编码、传真、联系人、联系电话、开户行和E-mail属性,供应商实体E-R图如图2-2所示。
图2-2供应商实体E-R图
2.2.3商品实体E-R图
商品信息是进销存管理系统中的基本信息,系统将维护商品的进货、退货、销售、入库等操作。
商品实体包括编号、商品名称、商品简称、产地、单位、规格、包装、批号、批准文号、商品简介和供应商属性,商品实体E-R图如图2-3所示。
图2-3商品实体E-R图
2.2.4销售实体E-R图
销售实体分为销售主表和销售明细表两个实体,它们是一对多的关系。
其中销售主表包括:
销售票号、品种数、金额、验收结论、客户名称、经手人、结算方式、操作员和销售日期属性。
销售明细表包括:
编号、销售票号、商品编号、数量和单价属性。
销售实体E-R图如图2-4所示。
图2-4销售实体E-R图
第三章系统的程序设计与实现
通过前面的功能逻辑分析,已经将进销存管理系统划分为6大功能模块,分别为基础信息管理模块、进货管理模块、销售管理模块、查询统计模块、库存管理模块、系统管理模块。
同时考虑到系统的安全性,防止非法用户访问系统以及满足不同人员对系统操作的权限控制,再添加一个登陆模块。
再者,为了将各功能模块集成起来,还需要设计一个系统主界面,将各个功能模块整合到主界面中。
3.1各模块的功能及其关系
在登录界面,输入用户名和密码之后,经身份认证通过进入系统主界面,对于系统管理员身份的用户,其系统管理模块具有操作员管理、修改密码以及权限管理功能。
而具有操作员身份的用户在管理模块只有修改密码功能。
其他的功能模块对两种不同身份的用户都是一样的。
基础信息管理模块用于管理客户、商品和供应商信息,其功能模块主要是对这些基础信息进行添加、修改和删除。
添加操作将相关信息录入到相应的数据表中,修改和删除操作则更新相应的数据表。
进货管理模块负责商品的进货以及退货管理。
通过填写进货单,将商品的进货信息录入到数据库中的入库主表、入库详细表和库存表中。
退货功能负责将已入库的有质量问题的商品退还给供应商,其操作会将退货信息录入到数据库中相应商品的入库退货主表和入库退货详细表中同时还会更新相应商品的库存信息。
销售管理模块负责商品的销售和退货管理。
通过填写销售单,将库存商品销售出去,因此待销售的商品必须是入库了的商品,且数量大于0。
相应的该销售记录会录入到销售主表、销售详细表中,对应的库存数量减少了销售出去的数量。
退货功能负责记录客户要求退货的商品。
其操作会将退货信息录入到数据库中相应商品的销售退货主表和销售退货详细表中同时还会更新相应商品的库存信息。
查询统计模块负责根据用户的查询条件,快速地查询相应的信息。
这些查询结果都是相应的数据库表和视图中满足查询条件的数据。
这些查询操作都不会修改数据库中的数据。
库存管理负责库存商品的盘点和库存商品的价格调整。
盘点管理用于统计所有库存商品的数量。
价格调整可以修改商品的单价,其操作会修改库存表中对应商品的价格。
系统管理负责登录用户的管理。
系统管理员身份的用户具有增加、修改和删除操作员的功能,修改密码的功能,还具有修改用户的权限的功能。
而操作员身份的用户仅具有修改自身密码的功能。
3.2各功能模块的设计和实现
3.2.1登录界面
登录界面用户验证登录用户的身份信息,只有合法的用户才能进入系统,从而保证系统的安全性。
登录界面的运行结果如下图3-1所示:
图3-1登录界面
登录界面的创建:
创建Login类,它继承自JFrame。
用户名和密码通过JtextField接收,单击“登录”按钮触发监听器验证登录用户是否正确,该过程通过连接数据库,判断用户是否存在数据表Userlist表中来实现。
关键代码如下:
publicvoidlogin_Button(ActionEvente)
{
if(userName.getText().equals("")||userName.getText()==null)
{
JOptionPane.showMessageDialog(this,"用户名不能为空");
return;
}
elseif(userPassword.getText().equals("")||userPassword.getText()==null)
{
JOptionPane.showMessageDialog(this,"密码不能为空");
return;
}
else
{
user=DAO.getUser(userName.getText(),
userPassword.getText());
if(user.getUsername()==null||user.getUsername().equals(""))
{
JOptionPane.showMessageDialog(this,"用户名或密码错误");userName.setText(null);
userPassword.setText(null);
return;
}
else
{
setVisible(false);
MainFrameframe=newMainFrame();
}
}
}
连接数据库的方法:
由于系统对数据库的存取比较频繁,因此可以定义一个公共类DAO类来负责有关数据库的操作。
关键代码如下:
/***连接数据库操作*/
protectedstaticStringMysqlClassName="com.mysql.jdbc.Driver";//mysql驱动
protectedstaticStringMysqlUrl="jdbc:
mysql:
//localhost:
3306/db_JXCManager";//url
protectedstaticStringMysqlUser="root";//用户名
protectedstaticStringMysqlPwd="root";//密码
protectedstaticStringsecond=null;
publicstaticConnectionconn=null;
static{
try{
if(conn==null){
Class.forName(MysqlClassName).newInstance();
conn=DriverManager.getConnection(MysqlUrl,MysqlUser,
MysqlPwd);
}
}catch(Exceptionee){
ee.printStackTrace();
}
}
3.2.2系统主窗体
应用程序的主窗体必须设计层次清晰的系统菜单和工具栏,其中系统菜单包含系统中所有的菜单项,而工具栏主要提供常用功能快捷访问按钮。
本系统主窗体采用导航面板综合了系统菜单和工具栏的优点,而且导航面板的界面更加美观,操作快捷。
主窗体的界面如图3-2所示。
图3-2系统主窗体
创建主窗体
创建主窗体的步骤如下:
(1)创建JXFrame类,在类中创建并初始化窗体对象,为窗体添加桌面面板,并设置背景图片。
关键代码如下:
privateJDesktopPanedesktopPane;
privateJFrameframe;
privateJLabelbackLabel;
//创建窗体的Map类型集合对象
privateMapifs=newHashMap();
publicMainFrame(){
frame=newJFrame("企业进销存管理系统");//创建窗体对象
frame.getContentPane().setBackground(newColor(170,188,120));
frame.addComponentListener(newFrameListener());//添加窗体事件监听器
frame.getContentPane().setLayout(newBorderLayout());//设置布局管理器
frame.setBounds(100,100,900,700);
backLabel=newJLabel();//背景标签
backLabel.setVerticalAlignment(SwingConstants.TOP);//设置背景标签垂直对齐方式
backLabel.setHorizontalAlignment(SwingConstants.CENTER);//设置背景标签水平对齐方式
updateBackImage();//更新或初始化背景图片
desktopPane=newJDesktopPane();//创建桌面面板
desktopPane.add(backLabel,newInteger(Integer.MIN_VALUE));//将背景标签添加到桌面面板中
frame.getContentPane().add(desktopPane);//添加桌面面板到窗体中
JTabbedPanenavigationPanel=createNavigationPanel();//创建导航标签面板
frame.getContentPane().add(navigationPanel,BorderLayout.NORTH);//添加导航面板到窗体中
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);//显示窗体
}
(2)编写主窗体的main()入口方法,在该方法中创建登陆窗体对象,登陆窗体会验证登陆信息,并显示主窗体界面。
关键代码入下:
publicstaticvoidmain(String[]args){
SwingUtilities.invokeLater(newRunnable(){
publicvoidrun(){
newLogin();
}
});
}
创建导航面板
创建导航面板的实现方法:
在该方法中创建JtabbedPane选项卡面板对象。
为突出选项卡的立体效果,设置该选项卡使用BevelBorder边框效果,然后依次创建基础信息管理、库存管理、销售管理、查询统计、进货管理和系统管理的选项卡。
关键代码及注释如下:
privateJTabbedPanecreateNavigationPanel(){//创建导航标签面板的方法
Userlistuser=Login.getUser();
JTabbedPanetabbedPane=newJTabbedPane();
tabbedPane.setFocusable(false);
tabbedPane.setBackground(newColor(211,230,192));
tabbedPane.setBorder(newBevelBorder(BevelBorder.RAISED));
JPanelbaseMainPanel=newJPanel();//基础信息管理面板
baseMainPanel.setBackground(newColor(215,223,194));
baseMainPanel.setLayout(newBoxLayout(baseMainPanel,BoxLayout.X_AXIS));
stateBar.setHorizontalAlignment(SwingConstants.RIGHT);
stateBar.setBorder(BorderFactory.createEtchedBorder());
frame.getContentPane().add(stateBar,BorderLayout.SOUTH);
initTimeField();
stateBar.setVisible(true);
baseMainPanel.add(createFrameButton("客户信息管理","GuestManager"));
baseMainPanel.add(createFrameButton("供应商信息管理","TradeManager"));
baseMainPanel.add(createFrameButton("商品信息管理","ProductManager"));
JPanelstockManagePanel=newJPanel();//进货管理面板
stockManagePanel.setBackground(newColor(215,223,194));
stockManagePanel.setLayout(newBoxLayout(stockManagePanel,
BoxLayout.X_AXIS));
stockManagePanel.add(createFrameButton("进货单","ComeProductDan"));
stockManagePanel.add(createFrameButton("进货退货","BackProduct"));
JPaneldepotManagePanel=newJPanel();//库存管理面板
depotManagePanel.setBackground(newColor(215,223,194));
depotManagePanel.setLayout(newBoxLayout(depotManagePanel,BoxLayout.X_AXIS));
depotManagePanel.add(createFrameButton("库存盘点","ProductKuCun"));
depotManagePanel.add(createFrameButton("价格调整","PriceManager"));
JPanelsellManagePanel=newJPanel();//销售管理面板
sellManagePanel.setBackground(newColor(215,223,194));
sellManagePanel.setLayout(newBoxLayout(sellManagePanel,BoxLayout.X_AXIS));
sellManagePanel.add(createFrameButton("销售单","SellDan"));
sellManagePanel.add(createFrameButton("销售退货","SellBack"));
JPanelsearchStatisticPanel=newJPanel();//查询统计面板
searchStatisticPanel.setBounds(0,0,600,41);
searchStatisticPanel.setName("searchStatisticPanel");
searchStatisticPanel.setBackground(newColor(215,223,194));
searchStatisticPanel.setLayout(newBoxLayout(searchStatisticPanel,BoxLayout.X_AXIS));
searchStatisticPanel.add(createFrameButton("客户信息查询","SearchGuest"));
searchStatisticPanel.add(createFrameButton("商品信息查询","SearchProduct"));
searchStatisticPanel.add(createFrameButton("供应商信息查询","SearchTrade"));
searchStatisticPanel.add(createFrameButton("销售信息查询","SearchSell"));
searchStatisticPanel.add(createFrameButton("销售退货查询","SearchSellBack"));
searchStatisticPanel.add(createFrameButton("入库查询","SearchRuKu"));
searchStatisticPanel.add(createFrameButton("入库退货查询","SearchRkth"));
searchStatisticPanel.add(createFrameButton("销售排行","SearchSellSort"));