基于java的小型企业进销存管理系统毕业毕业论文.doc_第1页
基于java的小型企业进销存管理系统毕业毕业论文.doc_第2页
基于java的小型企业进销存管理系统毕业毕业论文.doc_第3页
基于java的小型企业进销存管理系统毕业毕业论文.doc_第4页
基于java的小型企业进销存管理系统毕业毕业论文.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文)题目: 基于JAVA的企业进销存管理系统 姓 名 准考证号 专 业 专科学校 指导教师 南京航空航天大学2012 年 4 月目录摘要1前言2第一章 系统分析31.1 需求分析31.2 可行性分析31.3 系统功能结构31.4 系统业务流图4第二章 系统运行环境及系统开发技术52.1 系统运行环境环境52.2 系统开发技术52.2.1 Java简介52.2.2 SQL Server 2000 数据库7第三章 系统设计93.1 数据库与数据库表设计93.1.1 数据库介绍93.1.2 E-R图93.1.3 数据库表设计103.2 系统功能模块设计133.2.1 公共类设计133.2.2 系统登录模块设计143.2.3 系统主窗体设计153.2.4 进货单模块设计163.2.5 销售单模块设计203.2.6 库存盘点模块设计233.2.7 数据库备份与恢复模块设计25第四章 系统测试284.1 系统软件测试284.1.1 测试的原则284.1.2 模块测试284.1.3 集成测试294.2 测试总结294.3 系统实施与维护29结束语30参考文献31基于JAVA的企业进销存管理系统摘要企业进销存管理系统的主要工作是对企业的进货、销售和库存信息化的方式进行管理,最大限度地减少各环节中可能出现的错误,有效减少盲目、采购降低成本、合理控制库存、减少资金占用并提高市场灵敏度,是企业能够合理安排进、销、存的每个关键步骤,提升企业市场的竞争能力。本论文将从企业进销存管理系统的发展历程说起,详细介绍系统的开发步骤:系统分析、系统设计、系统实现以及系统维护。在系统分析中,先后使用数据流图、系统的功能结构图分析系统所需的各种数据;系统设计和系统实现并举,说明所需实体、数据库表、表字段等数据库设计,以及介绍系统的各功能模块的设计,并展现相应的功能界面。本系统采用Java进行开发,数据库采用SQL Server 2000进行管理。关键字:企业进销存管理系统、Java、SQL Server 2000 前言在信息技术的催化之下,世界经济的变革已经进入了加速状态。世界经济一体化,企业经营全球化,以及高度竞争造成的高度个性化与迅速改变的客户需求,令企业与顾客、企业与供方的关系变得更加密切和复杂。强化管理,规范业务流程,提高透明度,加快商品资金周转,以及为流通领域信息管理全面网络化打下基础,是销售公司乃至众多商业企业梦寐以求的愿望。进销存软件概念起源于上世纪80年代,由于电算化的普及,计算机管理的推广,不少企业对于仓库货品的进货,存货,出货管理,有了强烈的需求,进销存软件的发展从此开始。 进入90年代以后,随着进销存软件的应用面越来越广,出现了许多从功能上,从用途上,更为全面的进销存系统,从单纯的货品数量管理,扩展为货品的流程管理,进销存软件对每一批货品的来源,存放,去向,都作仔细的记录,随后并延伸为财务进销存一体化的管理模式。 进入00年以后,各种各样的进销存软件产品应运而生,在仓库进销存管理的基础上,集合了财务管理。客户管理,业务管理等相关内容,成为进销存财一体化的管理系统。企业进销存管理系统的不断完善,为企业管理现代化和运营信息化提供了有力的支持。第一章 系统分析1.1 需求分析需求分析的过程可以说是一个对具体问题的反复理解和抽象的过程。理解就是对现实问题的理解,要弄清楚究竟需要解决什么问题。抽象就是出去问题的表面,提取问题的本质,建立问题的逻辑模型,以便以后阶段的系统的设计实现。需求分析阶段是软件产品生存命期的一个重要阶段,其根本任务四确定用户对软件系统的需求。所谓需求是指用户对软件的功能和性能的要求,就是用户希望软件能干什么事情,完成什么样的功能,达到什么性能。通常需求分为两种类型:一种是功能性需求,一种是非功能性需求,这一点也需要有一种清楚的认识。功能性需求是指需要计算机系统解决的问题,也就是对数据的处理要求,这是一类主要的需求。非功能性需求是指实际使用环境所要求的要求,往往是一些限制要求,例如:性能要求,可靠性要求,安全保密要求等等。根据用户方的需求,要求企业进销存管理系统具有以下功能:(1) 界面设计美观大方,操作方便、快捷、灵活。(2) 实现强大的进销存管理,包括基本信息、进货、销售和库存管理。(3) 提供数据库备份与恢复功能。(4) 提供库存盘点功能。(5) 提供技术支持的联系方式,可以使用邮件进行沟通,或者直接连接到技术网站。1.2 可行性分析企业进销存管理系统必须提供商品信息、供应商信息和客户信息的基础设置;提供强大的搜索功能和商品的进货、销售和库存管理功能。系统还必须保证数据的安全性、完整性和准确性。企业进销存管理系统的目标是实现企业的信息化管理,减少盲目采购、降低采购成本、合理控制库存、减少资金占用并提升企业市场竞争力。项目主要以企业的进货、销售和查询统计功能为主,对于库存、销售和进货的记录信息应该及时、准确的保存,并提供想要的查询和统计。由于库存商品数量太多,不易盘点,传统的盘点方式容易出错,系统中的库存盘点功能要准确的计算出各种商品的损益数量,减少企业的不必要的损失。1.3 系统功能结构企业进销存管理系统功能结构图如图1.1所示。图1.1 企业进销存管理系统功能结构图1.4 系统业务流图企业进销存管理系统业务流程图如图1.2所示。图1.2 企业进销存管理系统业务流程图第二章 系统运行环境及系统开发技术2.1 系统运行环境环境硬件环境,CPU(中央处理器):Intel(R)Pentium(R) E5300 2.60GHz RAM(内存):2G HDD(硬盘):500G软件开发环境,操作系统:Windows xp SP3 JDK环境:Java SE Development KIT(JDK) Version 6 开发工具:Eclipse 3.2 数据库管理软件:Microsoft SQL Server 2000 SP42.2 系统开发技术本系统的开发主要是使用在Eclipse平台下的Java语言,并结合了SQL Server 2000数据库技术,使此系统具有强大的查询功能。2.2.1 Java简介Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C+语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:(1) Java语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。(2) Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C+ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。(3) Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。(4) Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。(5) Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。 (6) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 (7) Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。(8) Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。(9) Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C+。 (10) Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来构造,thread(Runnable) 的构造子类将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(synchronized)。(11) Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。22.2.2 SQL Server 2000 数据库SQL Server是一个后台数据库管理系统,是一个关系数据库管理系统。它功能强大、操作简便、日益为广大数据库用户所喜爱。SQL Server 2000,是Microsoft 公司推出的SQL Server 数据库管理系统。该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能,具有使用方便、可伸缩性好、与相关软件集成程度高等优点。SQL Server 2000界面友好,易学易用且功能强大,与Windows 2000 操作系统完美结合,可以构造网络环境数据库甚至分布式数据库,可以满足企业及Internet等大型数据库应用。SQL Server 2000主要具有以下功能特性:(1)实现了客户机服务器模式。客户机服务器(CS)模式数据库计算是一种分布式的数据存储、访问和处理技术,它已成为大多数企业计算的标准。Microsoft SQL Server是客户服务器系统应用的完美的例子。(2)与Internet集成。SQL Server 2000数据库引擎提供完整的XML支持。具备构造大型Web站点的数据存储组件所需的可伸缩性、可用性和安全性。 (3)具备很强的可伸缩性和可用性。SQL Server 2000包含企业版、标准版、开发版和个人版等4个版本,使同一个数据库引擎可以在不同的操作系统平台上使用,从运行Windows 9x的便携式电脑,到运行Windows2000 Data Center Server的大型多处理器的服务器。增强的图形用户界面管理工具,使管理更加方便。(4)具备企业级数据库功能SQL Server 2000关系型数据库引擎支持当今苛刻的数据处理环境所需的功能,可同时管理上千并发数据库用户,其分布式查询使用户可以引用来自不同数据源的数据,同时具备分布式事务处理系统,保障分布式数据更新的完整性。 (5)易于安装、部署和使用。SQL Server 2000的安装向导可帮助用户方便地实现各种方式的安装,如网络远程安装、多实例安装、升级安装和无人职守安装等。SQL Server 2000还提供了一些管理开发工具,使用户可以快速开发应用程序。(6)数据仓库功能。企业在正常的业务运作过程中需要收集各种数据,包含企业的动态历史记录,数据仓库的目的是合并和组织这些数据,以便对其进行分析并用来支持业务决策。数据仓库是一种高级、复杂的技术。Microsoft SQL Server 2000提供的强大工具,可帮助您完成创建、使用和维护数据库的任务。 第三章 系统设计3.1 数据库与数据库表设计3.1.1 数据库介绍所谓数据库(Database)就是按一定组织方式存储在一起,相互相关的若干数据的结合,数据库管理系统(Database Management System)就是一种操作和管理数据库的大型软件,简称DBMS,他们建立在操作系统的基础上,对数据库进行统一的管理和控制,其功能包括数据库定义,数据库管理,数据库的建立和维护,与操作系统通信等。DBMS通常由数据字典,数据描述语言及其编译程序,数据操纵(查询)语言极其编译程序,数据库管理例行程序等部分组成。关系数据库是以关系模型为基础的数据库,是根据表、记录和字段之间关系进行组织和访问的一种数据库,它通过若干表(Table)来存取数据,并且通过关系(Relation)将这些表联系在一起,关系数据库提供了成为机构化查询语言(SQL)标准接口,该接口允许使用多种数据库工具和产品,关系数据库是目前最广泛应用的数据库。3.1.2 E-R图进销存系统主要实现从进货、库存到销售的一体化管理,设计商品信息、商品的供货商、购买商品的客户等多个实体。下面列举了关键的实体和系统的综合E-R图。(1) 供应商实体属性图供应商实体包括:编号、名称、简称、地址、电话、邮政编码、传真、联系人、联系人电话、开户行和E-mail属性,如图3.1所示。图3.1 供货商实体属性图(2) 商品实体属性图商品实体包括:编号、商品名称、商品简称、产地、单位、规格、包装、批号、批准文号、商品简介和供应商属性。如图3.2所示。图3.2 商品实体属性图(3) 客户实体属性图客户实体包括:客户编号、客户名称、简称、地址、电话、邮政编码、联系人电话、传真、开户行和账号属性。如图3.3所示。图3.3 客户实体属性图(4) 销售实体属性图销售实体分为销售主表和销售明细表两个实体,它们是一对多的关系。其中销售主表包括:销售票号、品种数、金额、验收结论、客户名称、经手人、结算方式、操作员和销售日期属性。销售明细表包括:编号、销售票号、商品编号、数量和单价属性。如图3.4所示。图3.4 销售实体属性图3.1.3 数据库表设计数据库在整个管理系统中占据非常重要的地位,数据库结构设计的好坏直接影响着系统的效率和实现效果。进销存管理系统采用SQL Server 2000 SP4版本的数据库,数据库名称为db_JXC,因篇幅所限,本论文只给出几个重要数据表的表结构。(1) 供应商信息表供应商信息表的名称为tb_gysinfo,主要用于存储供应商的详细信息,结构如表3.1所示。表3.1 供应商信息表字段名称数据类型字段大小是否主键说明idvarchar32主键供货商编号namevarchar50供货商名称jcvarchar20供货商简称addressvarchar100供货商地址bianmavarchar10邮政编码telvarchar15电话faxvarchar15传真lianvarchar8联系人ltelvarchar15联系电话yhvarchar50开户银行mailvarchar30电子邮箱(2) 商品信息表商品信息表的名称为tb_spinfo,主要用于存储商品的详细信息,结构如表3.2所示。表3.2 商品信息表字段名称数据类型字段大小是否主键说明idvarchar32主键商品编号spnamevarchar50商品名称jcvarchar30商品简称cdvarchar50产地dwvarchar10商品计量单位ggvarchar10商品规格bzvarchar20包装phvarchar32批号pzwhvarchar50批准文号memovarchar100备注gysnamevarchar50供应商名称(3) 入库主表入库主表的名称为tb_ru_main,主要用于存储入库单据信息,其结构如表3.3所示。表3.3 入库主表字段名称数据类型字段大小是否主键说明rkIDvarchar32主键入库编号pzsfloat8品种数量jemoney8总计金额ysjlvarchar50验收结论gysnamevarchar100供货商名称rkdatedatetime8入库时间czyvarchar30操作员jsrvarchar30经手人jsfsvarchar10结算方式(4) 入库明细表入库明细表的名称为tb_ruku_detail,主要用于存储入库的详细信息,结构如表3.4所示。表3.4 入库明细表字段名称数据类型字段大小是否主键说明idvarchar50主键流水号rkIDvarchar0入库编号spidvarchar50商品编号djvarchar8单价s1float8数量(5) 销售主表销售主表的名称为tb_sell_main,主要用于存储销售单据的信息,结构如表3.5所示。表3.5 销售主表字 段 名 称数 据 类 型字 段 大 小是 否 主 键说明sellIDvarchar30主键销售编号pzsfloat8销售品种数jemoney8总计金额ysjlvarchar50验收结论khnamevarchar100客户名称xsdatedatetime8销售日期czyvarchar30操作员jsrvarchar30经手人jsfsvarchar10结算方式(6) 销售明细表销售明细表的名称为tb_sell_detail,主要用于存储销售的详细信息,结构如表3.6所示。表3.6 销售明细表字 段 名 称数 据 类 型字 段 大 小是 否 主 键说明idvarchar50主键流水号sellIDvarchar50销售编号spidvarchar50产品编号djmoney8销售单价slfloat8销售数量(7) 客户信息表客户信息表的名称为tb_khinfo,主要用于存储客户的信息,结构如表3.7所示。表3.7 客户信息表字段名称数据类型长度是否主键说明idvarchar50主键客户编号khnamevarchar50客户名称jianvarchar50客户简称addressvarchar100客户地址bianmavarchar50邮政编码telvarchar50客户电话faxvarchar50客户传真lianvarchar50联系人ltelvarchar50联系人电话mailvarchar50E-mail地址xinhangvarchar60开户行haovarchar60账号3.2 系统功能模块设计3.2.1 公共类设计公共类也是代码重用的一种形式,他将各个功能模块经常调用的方法提取到共用的Java类中,例如访问数据库的Dao类容纳了所有访问数据库的方法,并同时管理者数据库的连接和关闭。这样不但实现了项目代码的重用,还提高了程序的性能和代码可读性。(1) Item公共类Item公共类是对数据表最常用的id和name属性的封装,用于Swing列表、表格、下拉列表框等组件的复制,该类重写了toString()方法,在该类方法中只输出那么属性,所以Item类在Swing组件现实文本时只包含名称信息,不会连带着id属性。但是在获取组件的内容时,获取的是Item类的对象,从该对象中可以很容易的获取id属性,然后通过该属性到数据库中获取唯一的数据。(2) 数据模型公共类数据模型公共类,它对应着数据库中不同的数据表,这些模型将被访问数据库的Dao类和程序中每个模块甚至各个组件所使用。和Item公共类的使用方法类似,数据模型也是对数据表中所有字段(属性)的封装,但是数据类型是纯粹的模型,它不但需要重写父类的toString()方法,还要重写hashCode()方法和equals()方法(这两个方法分别用于生成模型对象的哈希代码和判断模型对象是否相同)。模型类主要用于存储数据,并通过想要的getXXX()方法和setXXX()实现不同属性的访问原则。(3) Dao类Dao 的全称是Data Access Object,即数据库访问对象。本项目中应用该名称数据库访问类的名称,在该类中实现了数据库的驱动、连接、关闭和多个操作数据库的方法,这些诶方法包括不同数据表的操作方法。其关键代码如下:package com.lzw.dao;import java.sql.*;import java.sql.Date;import java.util.*;import javax.swing.JOptionPane;import com.lzw.Item;import com.lzw.dao.model.*;public class Dao protected static String dbClassName = net.sourceforge.jtds.jdbc.Driver;protected static String dbUrl = jdbc:jtds:sqlserver:/localhost:1433/+ db_database28;SelectMethod=Cursor;protected static String dbUser = sa;protected static String dbPwd = ;protected static String second = null;public static Connection conn = null;static try if (conn = null) Class.forName(dbClassName).newInstance();conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); catch (ClassNotFoundException e) e.printStackTrace();JOptionPane.showMessageDialog(null,请将SQL Server 2000的JDBC驱动包复制到lib文件夹中。);System.exit(-1); catch (Exception e) e.printStackTrace();3.2.2 系统登录模块设计系统登录也是项目必须开发的模块,主要由两部分组成,一部分是登录窗体,另一部分是窗体中带背景图片的内容面板。它是系统的安全门,只有提供正确的用户名和登录口令之后,才能进入企业进销存管理系统进行进销存管理工作。系统登录模块如图3.5所示。图3.5 系统登录界面(1) 创建内容面板所有组件都要布置在窗体的内容面板上,而登陆模块的内容使用了背景图片来美化窗体界面,这就需要继承Swing的Jpanel类编写自己的面板类,然后将面板类作为窗体的内容面板。(2) 创建登录窗体创建LoginDialog类,该类继承Jframe类,成为一个窗体。设置窗体的标题为“系统登录”,设置内容面板为LoginPanel类的对象。该窗体用于不知各种组件,来实现系统登录的界面。(3) “密码”文本框的回车事件在系统登录窗体的“密码”文本框中添加了按键事件监听器,它在获取到“密码”文本框输入的回车符时将执行登录事件,也就是说在“密码”文本框输入密码后,按Enter键将执行与单机“登录”按钮相同的业务逻辑。(4) “登录”按钮的事件“登录”按钮用于执行用户名和密码的验证工作,如果验证用户名和密码有效,则启动系统,否则禁止进入系统。在“登录”按钮的动作事件监听器种,首先获取用户输入的用户名与密码信息,然后调用Dao类的checkLogin()方法,如果该方法返回true则登陆成功,否则禁止用户登录,并提示输入的用户名与密码无法登录系统。3.2.3 系统主窗体设计主窗体是人际交互的本体,用户通过主窗体中提供的各种菜单、表格、文本框、子窗体等组件进行管理操作。本系统主界面采用的是MID(即“多文档界面”),类似于Word的应用程序,可以同时打开多个子窗体,并对打开的功能窗体进行各种操作。系统主窗体界面如图3.6所示。图3.6 系统主窗体界面(1) 设计菜单栏本系统的菜单栏是由MenuBar类实现的,该类是一个自定义菜单栏类,他继承JmenuBar类成为Swing菜单栏组件。菜单栏界面如图3.7所示。图3.7 菜单栏界面(2) 设计工具栏工具栏用于放置常用命令按钮,如进货单、销售单、库存盘点等。像本系统中添加工具栏的方法和添加菜单栏的方法类似,需要继承Swing的Jtool组件编写自己的工具栏。工具栏界面如图 3.8所示。图3.8 工具栏界面(3) 设计状态栏本系统的状态栏显示了当前选择的功能窗体、登录用户名、当前日期和本系统所属公司,即版权所有者等信息。该状态栏是由JPanel面板、Jlabel标签和Jseparator分割条组件组成。3.2.4 进货单模块设计进货单模块负责添加企业的进货信息,他根据进货人员提供的单据,将采购商品的名称、编号、产地、规格、单价和数量等信息记录到数据的库存表中。进货单模块窗体界面如图3.9所示。图3.9 进货单窗体界面(1) 设计进货单窗体在Eclipse中选择“文件”/“新建”/Visual Class命令,在弹出的New Java Visual Class对话框中创建Internal Frame内部窗体类,命名为JinHuoDan_Iframe。(2) 添加进货商品在进货单船体点击“添加”按钮,会在表格中添加一个空行可以再该空行的第一个字段选择商品名称,其他的字段信息会根据选择的商品自动填充。这就需要为“添加”按钮编写ActionListener动作监听器,在该监听器中实现相应的操作。“添加”按钮的初始化由getTiButton()方法完成,该方法在初始化“添加”按钮时,为按钮添加了动作事件监听器。其关键代码如下: private JButton getTjButton() if (tjButton = null) tjButton = new JButton();tjButton.setText(添加);tjButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / 初始化票号java.sql.Date date = new java.sql.Date(jhsjDate.getTime();jhsjField.setText(date.toString();String maxId = Dao.getRuKuMainMaxId(date);idField.setText(maxId);/ 结束表格中没有编写的单元stopTableCellEditing();/ 如果表格中不包含空行,就添加新行for (int i = 0; i = table.getRowCount()-1; i+) if (table.getValueAt(i, 0) = null)return;DefaultTableModel model = (DefaultTableModel) table.getModel();model.addRow(new Vector(););return tjButton;(3) 进货统计在bottomPanel面板中布置了多个文本框,用于统计品种数量、货品总数、合计金额等商品信息,在添加货品之后,要实现商品信息的自动统计,既要在table表格的PropertyChangeListener事件监听器编写统计代码。这里将统计代码编写在ComputeInfo()方法,然后在事件监听器中调用。当table表格发生属性改变事件是,事件监听器首先会检测发生的事件类型,也就是判断发生了那种更改属性的事件,如果事件类型是tableCellEditor则说明术语表格编辑事件,这时应该针对表格的修改事件去调用ComputeInfo()方法执行产品进货的统计业务并将结果显示在相应的组件上。(4) 商品入库再添加了进货单中的所有商品后,单机“入库”按钮可以将这些商品添加到数据库中。这需要在“入库”按钮的初始化方法中,为按钮添加ActionListener动作监听器,在监听器中实现商品入库的业务逻辑。getRukuButton()方法是“入库”按钮的初始化方法,该方法将判断“入库”按钮对象是否初始化,如果已经初始化就直接将按钮对象返回给方法调用者,否者现对按钮进行初始胡,然后返回该按钮对象。在初始化“入库”按钮的过程中为按钮添加了事件监听器,在该事件监听器中首先调用stopTableCellEditing()方法停止正在编辑的表格单元,然后获取进货单的品种数量,结算方式、合计金额、经手人、操作员、进票号、验证结论等信息,并对关键信息进行判断,防止用户忘记填写这些关键信息。最后,创建进货主表的模型对象、进货详细表的模型对象和库存表的模型对象,使用进货单窗体中的信息初始化这些模型对象,并把他们通过Dao公共类的insertRukuInfo()方法保存到数据库中。其关键代码如下: private JButton getRukuButton() if (rukuButton = null) rukuButton = new JButton();rukuButton.setText(入库);rukuButton.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) stopTableCellEditing(); / 结束表格中没有编写的单元String pzsStr = pzslField.getText(); / 品种数String jeStr = hjjeField.getText(); / 合计金额String jsfsStr = jsfsComboBox.getSelectedItem().toString(); / 结算 方式String jsrStr = jsrComboBox.getSelectedItem() + ; / 经手人String czyStr = jsrComboBox.getSelectedItem() + ; / 操作员String rkDate = jhsjField.getText(); / 入库时间String ysjlStr = ysjlField.getText().trim(); / 验收结论String id = idField.getText(); / 票号String gysName = gysComboBox.getSelectedItem() + ;/ 供应商名字if (jsrStr = null | jsrStr.isEmpty() JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,请填写经手人);return;if (ysjlStr = null | ysjlStr.isEmpty() JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,填写验收结论);return;if (table.getRowCount() = 0) JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,填加入库商品);return;TbRukuMain ruMain = new TbRukuMain(id, pzsStr, jeStr,ysjlStr, gysName, rkDate, czyStr, jsrStr, jsfsStr);Set set = ruMain.getTabRukuDetails();int rows = table.getRowCount();for (int i = 0; i rows; i+) TbSpinfo spinfo = (TbSpinfo) table.getValueAt(i, 0);if (spinfo = null | spinfo.getId() = null| spinfo.getId().isEmpty()continue;String djStr = (String) table.getValueAt(i, 6);String slStr = (String) table.getValueAt(i, 7);Double dj = Double.valueOf(djStr);Integer sl = Integer.valueOf(slStr);TbRukuDetail detail = new TbRukuDetail();detail.setTabSpinfo(spinfo.getId();detail.setTabRukuMain(ruMain.getRkId();detail.setDj(dj);detail.setSl(sl);set.add(detail);boolean rs = Dao.insertRukuInfo(ruMain);if (rs) JOptionPane.showMessageDialog(JinHuoDan_IFrame.this,入库完成);DefaultTableModel dftm = new DefaultTableModel();table.setModel(dftm);pzslField.setText(0);hpzsField.setText(0);hjjeField.setText(0););return rukuButton;3.2.5 销售单模块设计商品销售时进销存管理中的重要环节之一,进货商在入库之后就可以开始销售。销售单模块主要负责根据经手人的销售单据,操作进销存管理系统的库存商品和记录销售信息,方便以后查询和统计。其窗体界面如图3.10所示。图3.10 销售单窗体界面(1) 设计销售单窗体创建Internal frame 内部窗体类,命名为XiaoShouDan。该窗体主要用于处理商品销售的业务逻辑(2) 添加销售商品在销售单窗体中单击“添加”,将向table表格中添加新的空行,操作员可以在空行的第一列字段的商品下来列表中选择销售的商品,这儿下拉列表框和进货单窗体的不同,它不是根据供货商字段确定选择框内容,而是包含了数据库中所欲可以销售的商品。要实现添加商品的功能,需要为“添加”按钮添加动作监听器,在监听器种实现相应的业务逻辑。在该监听器中调用了initPiaoHao()方法初始化销售票号,该票号就是销售单在数据库中的id编号。initPiaoHao()方法首先创建java.sql包中Date类的对象,该对象包含当前日期;然后调用Dao累的getSellMainMaxId()方法获取数据库销售主表中的最大ID号;最后,将该ID编号更新到piaoHao文本框中。(3) 销售统计和进货单的统计功能类似,销售单也需要统计功能,统计的内容包括货品数量、品种数量、合计金额等信息,实现方式也是通过table表格的事件监听器来处理相应的统计业务,但是销售但船体使用不是PropertyChangeListener属性改变事件监听器,而是使用ContainerListener容器监听器。(4) 商品销售在销售单窗体中添加完销售商品之后,单击“销售”按钮,将完成本次销售单的销售业务。系统会记录本次销售信息,并从库存表中扣除销售的商品数量。这些业务处理都是在“销售”按钮的动作监听器中完成,该监听器需要获取销售单窗体中所有销售信息和商品信息,将所有商品信息封装为销售明细表的模型对象,并将这些模型对象放到一个集合中,然后调用Dao公共类的insertSellInfo()方法将集合与销售主表的模型对象保存到数据库中。其关键代码如下:/ 单击销售按钮保存进货信息JButton sellButton = new JButton(销售);sellButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) stopTableCellEditing(); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论