企业进销存管理系统 课程设计 软件工程

更新时间:2024-07-11 02:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

河南理工大学 计算机科学与技术学院

课程设计报告

(2015-2016-1)

课程名称 软件工程课程设计 设计题目企业进销存管理系统 学生姓名徐 松 学 号311309060209 专业班级软件工程1302 指导教师 王静

2016 年 1 月 14 日

一、系统背景....................................................................................................................................3 二、系统分析 ................................................................................................................................... 3 1.理解需求........................................................................................................................3

2.需求任务分析................................. ......................3 3.数据库..............................................................4 三、系统设计....................................................................................................................................错误!未定义书签。

1.Item类设计 .................................................................................................................. 7 2.数据模型公共类 ........................................................................................................... 8 3.Dao公共类 .................................................................................................................. 13 3.4系统登录模块设计 .......................................................................................................... 14

1.设计登录窗体 ............................................................................................................. 14 2.密码文本框 ................................................................................................................. 15 3.“登录”按钮 ............................................................................................................. 16 3.5系统主窗体设计 .............................................................................................................. 17

1.设计菜单栏 ................................................................................................................. 17 2.设计工具栏 ................................................................................................................. 17 3.设计状态栏 ................................................................................................................. 17 3.6销售单模块设计 .............................................................................................................. 18

1.设计销售窗体 ............................................................................................................. 18 2.添加销售商品 ............................................................................................................. 18 3.销售统计 ..................................................................................................................... 18 4.商品销售 ..................................................................................................................... 18

四、总结..........................................................................................................................................21

一、系统背景

中小企业在我国经济发展中具有重要地位,随着我国市场经济的蓬勃发展和人们对计算机的普遍应用,批发、零售行业正处在一个高速发展的时期。行业的快速发展必然导致竞争的加剧,要想在激烈的市场竞争中谋求发展,客观上要求企业必须加强内部管理,提高运营效率。而我国大部分小型批发、零售企业在信息机制上还没有摆脱原有的手工模式,企业内部没有形成完善的、有效的信息化管理机制,企业发展的动力不足,从而影响企业的持续、稳定、快速的发展。 当今国内外多数企业的竞争特点是:产品的种类、规格特别多,市场需求变化很快,与分销商,零售商的关系日益密切等。而随着业务量的扩大,传统的管理方法已经无法处理日益膨胀的大量的业务数据,企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。

实现企业信息化管理是现代社会中小企业稳步发展的必要条件,它可以提高企业的管理水平和工作效率,最大限度地减少手工操作带来的失误。进销存管理系统正是一个信息化管理软件,可以实现企业的进货、销售、库存管理等各项业务的信息化管理。 出于以上原因,本课程设计将基于MySQL数据库并以JAVA为开发环境设计实现一个企业进销存管理系统。该系统包括基础信息管理、进货管理、销售管理、库存管理、查询统计、系统管理几个模块,主要是处理商业企业商品的采购、库存和销售各个环节的活动,具有良好的人机界面。考虑到系统的使用对象可能较多,权限管理良好,数据查询方便,支持多条件查询。

二、系统分析

1、理解需求

本系统通过进销存系统的终端用户和客户的进行调研后,得出系统需求的关键

(1)进货管理 商品进货信息管理:商品进货信息包括商品进货数量、单价、供货商、进货日期、等。商品进货管理功能完成进货信息登记、修改和删除等。更新库存:进货信息的变动直接关系到库存的变化 (2)库存管理

库存商品信息管理::商品库存信息包括商品进货数量、单价、供货商、进货日期、等。商品库存管理功能完成库存信息登记、修改和删除、查询等。 (3)销售管理

信息管理:商品销售信息包括商品销售数量、单价、统计日等商品销售。管理功能

完成销售信息登记、修改和删除,以及销售总汇查询。

本系统应该对基础数据(用户数据字典)进行维护。系统应该提供强大的数据统计、查询、报表生成及打印等功能。系统客户端运行在Windows各版的平台下,系统还应该有一个较好飞图形用户界面。系统还应该有很好的可扩展性。系统应该容易上手,方便使用。

2、需求分析任务

第一项任务:画出“进销存管理系统”的组合结构图,即组织结构模型。 第二项任务:画出“进销存管理系统”的业务操作图,即业务操作模型。 第三项任务:画出“进销存管理系统”的数据流程图。

第四项任务:列出“进销存管理系统”的功能点列表,即功能模型。 第五项任务:列出“进销存管理系统”的性能点表,即性能模型。 第六项任务:确定“进销存管理系统”的环境模型,即运行环境。 3.数据库

数据库设计是进销存信息系统的核心,采用规范化设计,使数据库结构尽可能简化,减少冗余,保持系统数据结构的一致性。根据不同的需求,一个商品流通企业进销存管理系统可包括几个到上百个不等的数据表、数据视图、存储过程以及函数等,但最基本的数据表应该包括:操作用户数据表、公司信息数据表、采购明细数据表、采购客户数据表、采购信息数据表、供应客户数据表、商品信息数据表、销售明细数据表和销售信息数据表;数据视图包括:采购入库明细视图、累计采购商品视图、累计销售商品视图和销售出库明细视图

角色定义

组织结构图中各单位职责说明与相关业务,如表:

销售人员信息单据

进货信息单据

商品销售信息单据

用户信息单据

}

public String getPh() { returnthis.ph; }

publicvoid setPh(String ph) { this.ph = ph; }

public String getPzwh() { returnthis.pzwh; }

publicvoid setPzwh(String pzwh) { this.pzwh = pzwh; }

public String getMemo() { returnthis.memo; }

publicvoid setMemo(String memo) { this.memo = memo; }

public String getGysname() { returnthis.gysname; }

publicvoid setGysname(String gysname) { this.gysname = gysname; }

public String toString() { return getSpname(); }

@Override

publicint hashCode() { finalintPRIME = 31; intresult = 1;

result = PRIME * result + ((bz == null) ? 0 : bz.hashCode()); result = PRIME * result + ((cd == null) ? 0 : cd.hashCode());

result = PRIME * result + ((dw == null) ? 0 : dw.hashCode()); result = PRIME * result + ((gg == null) ? 0 : gg.hashCode()); result = PRIME * result + ((gysname == null) ? 0 : gysname.hashCode());

result = PRIME * result + ((id == null) ? 0 : id.hashCode()); result = PRIME * result + ((jc == null) ? 0 : jc.hashCode()); result = PRIME * result + ((memo == null) ? 0 : memo.hashCode());

result = PRIME * result + ((ph == null) ? 0 : ph.hashCode()); result = PRIME * result + ((pzwh == null) ? 0 : pzwh.hashCode());

result = PRIME * result + ((spname == null) ? 0 : spname.hashCode()); returnresult; }

@Override

publicboolean equals(Object obj) { if (this == obj) returntrue; if (obj == null) returnfalse;

if (getClass() != obj.getClass()) returnfalse;

final TbSpinfo other = (TbSpinfo) obj; if (bz == null) {

if (other.bz != null) returnfalse;

} elseif (!bz.equals(other.bz)) returnfalse; if (cd == null) {

if (other.cd != null) returnfalse;

} elseif (!cd.equals(other.cd)) returnfalse; if (dw == null) {

if (other.dw != null) returnfalse;

} elseif (!dw.equals(other.dw)) returnfalse; if (gg == null) {

if (other.gg != null) returnfalse;

} elseif (!gg.equals(other.gg))

}

}

returnfalse;

if (gysname == null) {

if (other.gysname != null) returnfalse;

} elseif (!gysname.equals(other.gysname)) returnfalse; if (id == null) {

if (other.id != null) returnfalse;

} elseif (!id.equals(other.id)) returnfalse; if (jc == null) {

if (other.jc != null) returnfalse;

} elseif (!jc.equals(other.jc)) returnfalse;

if (memo == null) {

if (other.memo != null) returnfalse;

} elseif (!memo.equals(other.memo)) returnfalse; if (ph == null) {

if (other.ph != null) returnfalse;

} elseif (!ph.equals(other.ph)) returnfalse;

if (pzwh == null) {

if (other.pzwh != null) returnfalse;

} elseif (!pzwh.equals(other.pzwh)) returnfalse;

if (spname == null) {

if (other.spname != null) returnfalse;

} elseif (!spname.equals(other.spname)) returnfalse; returntrue;

3.Dao公共类

Dao的全称是Data Access Object,即数据访问对象。本项目中应用该名称作为数据库访问类的名称,在该类中实现了数据库的驱动、连接、关闭和多个操作数据库的方法,这些方法包括不同数据表的操作方法。在介绍具体的数据库访问方

法之前,先来看一下Dao类的定义,也就是数据库驱动和连接的代码。 代码如下

publicclass Dao {

static Statement sql; static ResultSet res;

protectedstatic String dbClassName=\; protectedstatic String

dbUrl=\; protectedstatic String dbUser=\;

protectedstatic String dbPwd=\; protectedstatic String second = null;

publicstatic Connection conn=null;

static{ try{

if(conn==null){

Class.forName(dbClassName).newInstance(); conn = (Connection)

DriverManager.getConnection(dbUrl,dbUser,dbPwd); }

}catch(Exception ee){ ee.printStackTrace();

} }

3.4系统登录模块设计 1.设计登录窗体

登录模块的窗体设计由两部分组成,一部分是登录窗体,另一部分是窗体中带背景图片的内容面板。

1.创建内容面板

publicclassLoginPanelextends JPanel { publicintwidth, height; private Image img; public LoginPanel() { super();

URL url = getClass().getResource(\); img = new ImageIcon(url).getImage(); }

protectedvoid paintComponent(Graphics g) { super.paintComponent(g);

g.drawImage(img, 0, 0, this); } }

2.创建登录窗体

private LoginPanel getLoginPanel() { if (loginPanel == null) { jLabel1 = new JLabel();

jLabel1.setBounds(new Rectangle(86, 71, 55, 18)); jLabel1.setText(\密 码:\); jLabel = new JLabel();

jLabel.setText(\用户名:\);

jLabel.setBounds(new Rectangle(85, 41, 56, 18)); loginPanel = new LoginPanel(); loginPanel.setLayout(null);

loginPanel.setBackground(new Color(0xD8DDC7)); loginPanel.add(jLabel, null);

loginPanel.add(getUserField(), null); loginPanel.add(jLabel1, null);

}

loginPanel.add(getPasswordField(), null); loginPanel.add(getLoginButton(), null); loginPanel.add(getExitButton(), null); }

returnloginPanel;

2.密码文本框

在系统登录窗体的“密码”文本框中添加了按键事件监听器,它在获取到“密码”文本框输入的回车字符时将执行登录事件,也就是说在“密码”文本框输入密码后,按Enter键将执行与单击“登录”按钮相同的业务逻辑。 代码如下:

private JPasswordField getPasswordField() { if (passwordField == null) {

passwordField = new JPasswordField();

passwordField.setBounds(new Rectangle(143, 69, 125, 22));

passwordField.addKeyListener(new KeyAdapter() { publicvoid keyTyped(KeyEvent e) { if (e.getKeyChar() == '\\n') loginButton.doClick(); } }); }

returnpasswordField; }

3.“登录”按钮

“登录”按钮用于执行用户名和密码的验证工作,如果验证用户名和密码有效,则启动系统,否则禁止进入系统。

在“登录”按钮的动作事件监听器中,首先获取用户输入的用户名与密码信息,然后调用Dao类的checkLogin()方法,如果该方法返回true则登录成功,否则禁止用户登录,并提示输入的用户名与密码无法登录系统。

如图所示代码如下:

private JButton getLoginButton() { if (loginButton == null) {

loginButton = new JButton(); loginButton.setBounds(new Rectangle(109, 114, 48, 20)); loginButton.setIcon(new ImageIcon(getClass().getResource(

\)));

loginButton.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent e) { try {

userStr = userField.getText();

String passStr = new String(passwordField .getPassword());

if (!Dao.checkLogin(userStr, passStr)) {

JOptionPane.showMessageDialog(LoginDialog.this,

\用户名与密码无法登录\, \登录失败\, JOptionPane.ERROR_MESSAGE); return; }

} catch (Exception e1) { e1.printStackTrace(); }

mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE); mainFrame.setVisible(true);

MainFrame.getCzyStateLabel().setText(userStr); setVisible(false); } }); }

returnloginButton; }

3.5系统主窗体设计 1.设计菜单栏

本系统的菜单栏是由MenuBar类实现的,该类是一个自定义菜单栏类,它继承JMenuBar类成为Swing的菜单栏组件。下面以创建进货单菜单为例,。

(1)创建MenuBar类,该类继承javax.swing.JMenuBar类,并且在该类中定义一个私有的成员变量,类型为JMenu,用于表示菜单对象。

(2)编写一个名称为getJinhuo_Menu()的方法,该方法的返回值为一个JMenu对象,也就是一个菜单对象。在该方法中,当进货菜单对象为null时,创建一个菜单对象,并为其设置菜单名和快捷键。

(3)编写一个初始化菜单栏界面的方法initialize(),在该方法中,首先设置组件的尺寸,然后调用JMenuBar对象的add()方法向菜单栏中添加一个菜单。 (4)编写以下构造方法,用于调用初始化菜单栏界面。

(5)在MenuBar类,再创建一个JMenuItem类型的成员变量jinhuoItem,表示进货菜单项。

(6)编写一个名称为getJinhuoItem()的方法,该方法的返回值为一个JMenuItem对象,也就是一个菜单项对象。在该方法中,当进货单菜单项对象为null时,创建一个菜单项对象,并为其设置菜单项名、图标和动作事件监听器。(7)按照步骤(5)和步骤(6)的方法再创建一个进货退货菜单项对象,名称为jinhuo_tuihuoItem。

(8)在getJinhuo_Menu()方法中,应用JMenu对象的add()方法向菜单中添加菜单项。

2.设计工具栏

工具栏用于放置常用命令按钮,如进货单、销售单、库存盘点等。

向本系统中添加工具栏的方法和添加菜单栏的方法类似,也需要继承Swing的JTool组件编写自己的工具栏。当然,也可以直接使用Swing的JTool组件。组件的initialize()方法用于初始化工具栏的程序界面。

3.设计状态栏

本系统的状态栏显示了当前选择的功能窗体、登录用户名、当前日期和本系统所属公司,即版权所有者等信息,如下图所示。

3.6销售单模块设计 1.设计销售窗体 2.添加销售商品

在销售单窗体中单击“添加”按钮,将向table表格中添加新的空行,操作员可以在空行的第一列字段的商品下拉列表框中选择销售的商品,这个下拉列表框和进货单窗体的不同,它不是根据供应商字段确定选择框内容,而是包含了数据库中所有可以销售的商品。要实现添加销售商品功能,需要为“添加”按钮添加动作监听器,在监听器中实现相应的业务逻辑。

3.销售统计

和进货单的统计功能类似,销售单也需要统计功能,统计的内容包括货品数量、品种数量、合计金额等信息,实现方式也是通过table表格的事件监听器来处理相应的统计业务,但是销售单窗体使用的不是PropertyChangeListener属性改变事件监听器,而是使用ContainerListener容器监听器。 4.商品销售

在销售单窗体中添加完销售商品之后,单击“销售”按钮,将完成本次销售单的销售业务。系统会记录本次销售信息,并从库存表中扣除销售的商品数量。这些业务处理都是在“销售”按钮的动作监听器中完成的,该监听器需要获取销售单窗体中的所有销售信息和商品信息,将所有商品信息封装为销售明细表的模型对象,并将这些模型对象放到一个集合中,然后调用Dao公共类的insertSellInfo()方法将该集合与销售主表的模型对象保存到数据库中。

初始化表格代码:

privatevoid initTable() {

String[] columnNames = { \商品名称\, \商品编号\, \供应商\, \产地\, \单位\, \规格\, \单价\,

\数量\, \包装\, \批号\, \批准文号\ }; ((DefaultTableModel) table.getModel()) .setColumnIdentifiers(columnNames);

TableColumn column = table.getColumnModel().getColumn(0); final DefaultCellEditor editor = new DefaultCellEditor(sp); editor.setClickCountToStart(2); column.setCellEditor(editor); }

初始化商品下拉框:

privatevoid initSpBox() {

Listlist = newArrayList(); ResultSet set = Dao.query(\ + \kcsl>0)\);

sp.removeAllItems();

sp.addItem(new TbSpinfo()); for (inti = 0; table != null&&i

TbSpinfo tmpInfo = (TbSpinfo) table.getValueAt(i, 0); if (tmpInfo != null&&tmpInfo.getId() != null) list.add(tmpInfo.getId()); }

try {

while (set.next()) {

TbSpinfo spinfo = new TbSpinfo();

spinfo.setId(set.getString(\).trim()); if (list.contains(spinfo.getId())) continue;

spinfo.setSpname(set.getString(\).trim()); spinfo.setCd(set.getString(\).trim()); spinfo.setJc(set.getString(\).trim()); spinfo.setDw(set.getString(\).trim()); spinfo.setGg(set.getString(\).trim()); spinfo.setBz(set.getString(\).trim()); spinfo.setPh(set.getString(\).trim());

spinfo.setPzwh(set.getString(\).trim()); spinfo.setMemo(set.getString(\).trim());

spinfo.setGysname(set.getString(\).trim()); sp.addItem(spinfo); }

} catch (SQLException e) { e.printStackTrace(); } }

在事件中计算品种数量、货品总数、合计金额

privatefinalclass computeInfo implements ContainerListener { publicvoid componentRemoved(ContainerEvent e) { // 清除空行

clearEmptyRow(); // 计算代码

introws = table.getRowCount(); intcount = 0;

doublemoney = 0.0;

// 计算品种数量

TbSpinfo column = null; if (rows> 0)

column = (TbSpinfo) table.getValueAt(rows - 1, 0); if (rows> 0 && (column == null || column.getId().isEmpty())) rows--;

// 计算货品总数和金额

for (inti = 0; i

String column7 = (String) table.getValueAt(i, 7); String column6 = (String) table.getValueAt(i, 6); intc7 = (column7 == null || column7.isEmpty()) ? 0 : Integer

.valueOf(column7);

Double c6 = (column6 == null || column6.isEmpty()) ? 0 : Double

.valueOf(column6); count += c7;

money += c6 * c7; }

pzs.setText(rows + \); hpzs.setText(count + \); hjje.setText(money + \); }

publicvoid componentAdded(ContainerEvent e) { } }

根据商品下拉框的选择,更新表格当前行的内容

privatesynchronizedvoid updateTable() {

TbSpinfo spinfo = (TbSpinfo) sp.getSelectedItem(); Item item = new Item();

item.setId(spinfo.getId());

TbKucun kucun = Dao.getKucun(item); introw = table.getSelectedRow(); if (row>= 0 &&spinfo != null) {

table.setValueAt(spinfo.getId(), row, 1);

table.setValueAt(spinfo.getGysname(), row, 2); table.setValueAt(spinfo.getCd(), row, 3); table.setValueAt(spinfo.getDw(), row, 4); table.setValueAt(spinfo.getGg(), row, 5);

table.setValueAt(kucun.getDj() + \, row, 6); table.setValueAt(kucun.getKcsl() + \, row, 7); table.setValueAt(spinfo.getBz(), row, 8);

table.setValueAt(spinfo.getPh(), row, 9); table.setValueAt(spinfo.getPzwh(), row, 10); table.editCellAt(row, 7); } }

停止单元格编辑

privatevoid stopTableCellEditing() {

TableCellEditor cellEditor = table.getCellEditor(); if (cellEditor != null)

cellEditor.stopCellEditing(); }

四、总结

本课程设计在对企业的进货业务、销售业务和库存管理业务进行分析后,提出了自己的进、销、存管理系统结构。系统成功的解决了脱离有纸的管理方式,在管理数据时非常方便以及在操作数据库时也非常的方便。系统可以通过计算机对企业货物进行系统和安全的管理,极大地减低了管理者和操作者的工作量。

本文来源:https://www.bwwdw.com/article/tr5.html

Top