• 6.71 MB
  • 2022-05-16 18:35:19 发布

[计算机软件及应用]企业仓库管理系统的设计与实现

  • 39页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
3本科毕业论文企业仓库管理系统的设计与实现学院:计算机与信息工程学院专业:计算机科学与技术学号:姓名:徐紫瑞指导教师:职称:论文提交日期:二ОО九年六月 3摘要企业仓库管理系统主要用Java语言编写设计完成,其中使用到的主要技术有:JDBC数据库连接技术、Swing高级类页面处理技术等。系统的使用的集成开发工具是MyEclipse6.0,它集成了开发过程中要使用到的很多技术,充分利用它提供的这些技术可以大大的提高开发进度,减小开发难度。系统完成后的主要功能包括基本资料、进货管理、销售管理、库存管理、信息查询、系统维护,等6个内容。这个系统主要的特点是1.平台适应性广,大多数操作系统都可运行。2.在电脑上的速度运行更快,性能优越。关键词:Java仓库管理JDBC数据库 3AbstractHavecompiledspecialfieldmainlywithJavaforStore-roomManageSystem.ThemaintechnologyisJDBCTechnologyfordatabaseconnenting,ThehighyclassSwingforinterfacemanagement-technologyandsoon.TheIDEthatthesystemisusedisMyEclipase6.0,whichincludemanytechnologiesusedintheprocessing.Ifwocouldmakethebestuseofthistechnologies,itwillmakethetimethatusedforthesystemshoterandmakethepresionthattheprocessingwhitlower.Thefounctionsthatthesystemincludearebasicinformation,inputmanagement,sellmanagement,store-amountmanagement,informationmanagement,systemkeepingsuchas6contents.Themainfeatureofthissiteis1.Platformforwideadaptability,themajorityoftheoperatingsystemcanrun.2onthesiterunfasterspeed,Javawillgenerateanddisplaythecontentsofseparation,willprovideallthefunctionsofServlets.Keywords:JavaStore-roommanagementJDBCDatabase 3目录引言………………………………………………………………………………………11开发技术描述………………………………………………………………………….21.1开发语言简介……………………………………………………………….….21.2Java语言的特点及特性…………………………………………………….......21.3系统的开发工具—Myclipse6.0………………………………………….…….32系统分析与概要设计………………………………………………………………….42.1背景与业务机会………………………………………………………………..42.2用户需求…………………………………………………………….………….42.3可行性分析……………………………………………………………………..42.3.1编写目的……………………………………………………………………...42.3.2可行性分析的内容…………………………………………………………...52.3.3技术难点……………………………………………………………………...52.3.4最终结论……………………………………………………………………...52.4系统名称及业务流程图………………………………………………………..52.4.1系统名称………………………………………………………………………52.4.2业务流程图…………………………………………………………………...52.5功能需求分析…………………………………………………………………..63系统总体结构设计…………………………………………………………………....83.1系统功能设计目标……………………………………………………………..83.2系统性能实现目标……………………………………………………………...73.3系统开发编码规范……………………………………………………………..73.4系统开发环境配置……………………………………………………………...83.4.1硬件资源配置………………………………………………………………...83.4.2软件资源配置………………………………………………………………...84数据库设计及数据建表………………………………………………………………94.1数据库概述……………………………………………………………………...94.2系统数据库设计………………………………………………………………...94.3系统数据建表…………………………………………………………………...95系统详细设计………………………………………………………………………..125.1聆风企业仓库管理系统的总体结构设计……………………………………125.2聆风企业仓库管理系统主窗口结构介绍……………………………………125.3系统功能实现…………………………………………………………………135.3.1系统功能实现……………………………………………………………….145.3.2技术难点的实现…………………………………………………………….185.3.3系统的模块功能实现……………………………………………………….215.4系统运行效果图………………………………………………………………296总结…………………………………………………………………………………33致谢……………………………………………………………………………………..34参考文献………………………………………………………………………………..3537内蒙古农业大学学士学位论文 37内蒙古农业大学学士学位论文引言伴随着经济全球化和信息化的不断加强,商业也得到飞速发展,交易多样化,虚拟化不断加强。为适应企业的发展,及时满足客户的需求,仓库成了众多企业领导层关注的对象,如此,仓库管理员应运而生。经过一段时间的检测,效果并不理想,各企业仍会出现供应不足、发货不及时等现象。为此,建立各企业的仓库管理软件,让电脑代替人脑,让系统的精确运行代替人们的各种疏忽,以提高企业效益。仓库管理系统是促进企业发展的重要组成部分,是商业企业经营管理中的核心环节,也是一个企业能否取得效益的关键,如果能够做到合理采购、及时销售、库存量小、减少积压,那么企业就能取得最佳效益。在现代社会中,大多数企事业单位,特别时中小型企业的首要任务是实现信息化管理。只有实现信息化管理才能提高工作效率和企业管理水平。市场经济快速而多变,竞争激烈,企业采用信息化管理仓库的进货、库存、销售等诸多环节已成为发展趋势及必然。企业仓库管理系统是在作者发现上述问题后,以中小型超市为设计对象,根据其对仓库的各方面要求来设计实现的。该系统以当前广泛使用的系统开发语言Java为设计实施语言,以Windowsxp作为系统的开发依托,以SQLServer2000数据库管理系统作为数据库。在整个系统的开发过程中,利用到的技术主要有:JDBC链接、操作SQLServer2000数据库技术、Swing高级布局管理器技术、Swing菜单栏和工具栏的使用技术、数据库的数据备份及数据恢复技术、Desktop类实现系统资源关联技术等。本论文根据系统的开发过程,对系统的分析设计过程,及上述的各种技术的应用及关键功能的实现进行详细的讲解。通过该论文的完成,回顾大学知识,共有已有技术,学习掌握新技术。 37内蒙古农业大学学士学位论文1开发技术描述1.1开发语言简介根据自己的兴趣爱好及个人专长,聆风企业仓库管理系统以Java为主要开发语言。Java是一门与平台无关、面向对象、安全、稳定和多线程的优秀程序开发语言,在目前的软件开发中的到了广泛的应用。Java是1995年6月由Sun公司推出的,Java的出现,对于开发语言起到了革命性的意义。1.2Java语言特点Java是目前使用最为广范的网络编程语言之一。它具有简单、面向对象、与平台无关、解释型、多线程、安全、动态等特点。简单:指这门程序设计语言易学好用,它不需要程序员付出多么大的精力,只要有了面向对象的概念,或对面向对象语言有所了解,就可以实用它进行开发。但,如果要达到使用熟练,提高设计能力的话,还是要好好地学习。面向对象:万物皆对象,基于对象的编程语言,更加符合人们的思维模式,是人们更容易编写程序,而不需要像C语言那样,进行过程化的编程,使人们不易理解及容易造成疏漏。与平台无关:实现跨平台是Java的最大亮点。与以往的语言不通,Java不是在CPU上编译和运行的,而是在其自身的JVM(Java虚拟机)上编译运行。在不同的平台上使用不同的Java虚拟机,将源文件编译成任何平台都可以识别的字节码文件,从而实现跨平台。解释型:我们知道C、C++等语言,都是针对CPU芯片进行编译,生成及其代码,该代码的运行就与特定的CPU有关。而Java则不然,它是针对JVM编程,通过JVM编译形成的字节码可以再不同德JVM上解释执行。多线程:多线程机制能够使应用程序在同一时间并行执行多项任务,而且相应的同步机制可以保证不同线程能够正确的共享数据。使用多线程,可以带来更好的交互能力和实时行为。安全:Java语言删除了类似C语言中的指针和内存释放等语法,从而有效地比卖弄了非法的操作内存。Java程序代码要经过代码校验、指针校验等很多的测试步骤才能够运行,所以,未经允许的Java程序不可能出现损害系统平台的行为,而且使用Java可以编写防病毒和防修改的系统。动态:Java在很多方面比C和C++更能够适应发展的环境,可以动态调整库中方法和变量的增加,而客户端却不需要任何更改。在Java中动态调整是非常简单、直接的。Java语言特性 37内蒙古农业大学学士学位论文Java语言特性主要有以下三个:继承、封装、多态。继承:继承是在面向对象开发思想中的一个非常重要的概念,它使整个程序架构具有一定的弹性,在程序中复用一写已经完善定义的类不仅可以节省空间,还可以提高软件的可维护性及可扩展性。要声明一点:继承不只是扩展父类的功能,还可以重写父类的成员方法,来更好的满足不同子类的需要。封装:它是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,实现类对客户隐藏其实现细节的效果,这就是封装的思想。采用封装思想,保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操纵此数据结构,而只能执行允许公开的数据,这避免了外部对内部数据的影响,提高程序的可维护性。多态:它是在实际编程当中使用最为广范的技术之一,多态允许以统一的风格编写程序,来处理种类繁多的已存在的类以及相关类。简单来讲,多态就是允许使用父类声明对象变量,使用子类的构造方法创建对象。这样可以使父类对象调用子类的重写父类的方法。达到结构上的统一及封装上的深层次。1.3系统开发工具—MyEclipse6.0在以往的系统开发中,广泛使用的系统集成开发工具(IDE)是Eclipse,而在本系统的开发中,我使用了MyEclipse6.0,主要原因如下:1.MyEclipse6.0也是由IBM公司开发,并且他集成了Eclipse的所有功能并以扩充,是开发更方便,加快开发进度。2.在本系统的设计开发中,会大量的使用Swing类中的方法来处理系统界面这样会增大开发难度,减慢开发进度。而MyEclipse6.0中提供了直接拖动组件类处理颜面的插件,从而大大减小了开发难度。3.在以往的系统开发中,数据库的添加和连接往往会给系统开发增假不必要麻烦。如果利用Windows自带的“数据源管理工具”来添加和处理数据库连接,有时会莫名其妙的断开系统与数据库之间的连接。从而在测试过程中产生错误。但是,如果使用MyEclipse6.0中的MyEclipseDatabaseExplorer插件来添加数据库驱动、添加数据库、测试数据库连接,就会很好的避免以上的麻烦,因为,使用插件后的操作就相当于把数据库作为程序本身的一部分,就和类一样。4.MyEclipse6.0中集成了图形处理功能,可以方便的完成类图、流程图及一相关软件工程图的设计和完成。同时,他还可以处理图片,从而方便的做好界面工作,使界面美观。 37内蒙古农业大学学士学位论文2系统分析与概要2.1背景与业务机会伴随着经济全球化和信息化的不断加强,商业也得到飞速发展,交易多样化,虚拟化不断加强。为适应企业的发展,及时满足客户的需求,仓库成了众多企业领导层关注的对象,如此,仓库管理员应运而生。经过一段时间的检测,效果并不理想,各企业仍会出现供应不足、发货不及时等现象。为此,建立各企业的仓库管理软件,让电脑代替人脑,让系统的精确运行代替人们的各种疏忽,以提高企业效益。仓库管理系统是促进企业发展的重要组成部分,是商业企业经营管理中的核心环节,也是一个企业能否取得效益的关键,如果能够做到合理采购、及时销售、库存量小、减少积压,那么企业就能取得最佳效益。在现代社会中,大多数企事业单位,特别时中小型企业的首要任务是实现信息化管理。只有实现信息化管理才能提高工作效率和企业管理水平。市场经济快速而多变,竞争激烈,企业采用信息化管理仓库的进货、库存、销售等诸多环节已成为发展趋势及必然。2.2用户需求根据日常生活中的观察,针对日常销售中的问题,提出系统的功能需求。1界面设计美观大方,方便、快捷、操作灵活2实现仓库管理的基本功能,包括基本信息、进货、销售、库存管理3能够在不同的操作系统下运行,实现跨平台4提供数据库数据备份与数据恢复功能5提供库存盘点功能2.3.1编写目的为了让自己更好的掌握系统的需求,明确开发目标,掌握开发进度,做好项目实施计划,同时也为了能更好的理解系统,明确其开发中可能遇到的问题,及技术上的难题,特根据实际情况,以文件的形式,清晰明了的做好项目的可行性分析。2.3.2可行性分析的内容1.要求:1)附加进货-退货和销售退货功能,以增加管理的灵活性2)系统功能要符合实际生活情况,满足实际商业活动中,企业对仓库的使用、管理要求3)管理的内容较多,要设计很多窗口,涉及的窗口容易混乱,要提供窗口的集合操作和菜单管理。 37内蒙古农业大学学士学位论文4)支持数据库数据备份和数据恢复功能,提高系统安全型和数据安全性5)系统健壮性良好2.目标:聆风企业仓库管理系统的主要工作是对企业仓库的进货、销售和库存以信息化的方式进行管理,最大限度的减少各个环节中可能出现的错误,有效减少盲目采购、降低采购成本、减少资金占用并提高市场灵敏度,使企业能够合理安排进、销、存的各个关键环节,提升企业的市场竞争力。3.评价尺度:顺利完成项目的设计和实施,按照项目计划书的要求,在指定的时间内完成相应的任务,最终完成项目。对自己而言,能实现项目的基本功能,实现仓库的基本管理和实现商业活动中的各项要求,为最终的开发要求。在测试中,要尽量的发现和解决项目中的错误,尽量达到系统功能稳定,错误少,奖状性良好的目标。如果最终能达到以上要求,即项目顺利完成。2.3.3技术难点:JDBC链接数据库,数据库数据备份和数据恢复,涉及以上功能时,要多加注意。2.3.4最终结论项目可以开发、实施。2.4系统名称及业务流程图为了保证能按时保质保量的完成预定目标,更好的了解项目的实际情况按照合理的顺序开展工作,现以书面的形式,将项目开发过程中的任务时间分配,开发进度,和项目测试,系统完成提交的工作描述出来,作为自己开发过程中的计划书。2.4.1系统名称:聆风企业仓库管理系统2.4.2业务流程图 37内蒙古农业大学学士学位论文系统登陆登陆验证N提示错误Y聆风企业仓库管理系统基本资料进货管理销售管理库存管理信息查询系统维护其它供应商管理客户管理管理商品基本资料的增、删、改查等维护操作库存盘点价格调整关于技术网站技术支持退出系统密码修改数据备份与恢复关闭系统图1业务流程图2.5功能需求分析根据用户功能需求,将系统划分为:基本资料、进货管理、销售管理、库存管理、信息查询、系统维护六个模块,各模块的功能结构图如下所示:图2功能需求图 37内蒙古农业大学学士学位论文3系统总体结构设计3.1系统功能设计目标开发聆风企业仓库管理系统的主要目的是实现企业仓库管理的系统化、信息化和自动化,根据对小型商店的调查,系统应达到以下目标:1)灵活的人机交互界面,操作系统简单方便、界面简洁美观2)键盘操作,快速响应3)对进货和销售提供相应的退货管理功能4)实现各种查询,如:条件查询、模糊查询等5)可以随时修改系统口令6)系统最大限度的实现易安装、易维护、易操作7)运行稳定,安全可靠3.2系统性能实现目标经过对几种流行的实现技术的优缺点比较,再结合系统自身的功能需要,我们决定以Java作为系统开发语言。首先,系统具有跨平台性,UNIX服务器的性能更加优良。Java程序设计语言拥有“一次编写,各处执行”的特点。并且随着越来越多的供货商将Java支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。其次,系统开发职责的高度分离和代码的可重用性。使用Java技术,页面开发人员可以使用Java中的Swing类中的各个设计方法来设计和格式化最终页面。设计过程中要特别注意层次的划分,做好实体层、业务层、Dao层的划分,尽量提高代码的重用率,提高系统的可维护性。最后,系统优良的运行速度和安全性。作为实时的服务系统,其对运行速度的要求自然很高,为了提高运行速度,在业务逻辑层对数据库层的访问过程中采用数据库连接池来减少连接数据库对系统性能的损失。3.3系统开发编码规范开发企业应用程序需要团队合作来完成,每个人负责不同的业务模块,为了使程序的结构域代码的风格统一标准化,增加代码可读性,需要在编码之前指定一套统一的编码规范。下面介绍聆风企业仓库管理系统在开发中的编码规范。1)供应商信息编号:供应商信息的ID编号以字符串“gys”为前缀,加上4位数字的后缀,编号数字从1000开始。如:gys10052)客户信息编号:客户信息的ID编号以字符串“kh” 37内蒙古农业大学学士学位论文为前缀,加上4位数字的后缀,编号数字从1000开始。如kh10023)商品信息编号:商品信息的ID编号以字符串“sp”为前缀,加上4位数字的后缀,从2000开始编号。如:20084)销售单编号:销售单的编号命名规则以“XS”为前缀,加上销售单的销售日期和3位数字后缀。如:XS2009512888.5)进货单编号:进货单ID编号命名规则以“RK”字符串的前缀,加上商品的入库日期和3位数字作为后缀。如:RK2009042298。3.4系统开发环境配置3.4.1硬件资源配置显示器:液晶17英寸分辨率:1024×768CPU:P42.0GHZ内存:1024MB以上硬盘空间:80GB光驱:DVD16X鼠标:光电鼠标硬盘:高级防水键盘3.4.2软件资源配置操作系统:WindowsXP数据库:SQLServer2000JDK环境:JDK1.6开发工具:MyEclipse6.0数据库管理软件:MicrosoftSQLServer2000运行平台:Windows、Linux等如何平台运行环境JREVersion6.0分辨率:最佳效果1024×768 37内蒙古农业大学学士学位论文4数据库设计及数据建表4.1数据库概述在人类进入21世纪知识经济时代以后,信息变为经济发展的战略资源,信息技术已成为社会生产力重要的组成部分.人们充分认识到,数据库是信息化社会中信息资源管理与开发利用的基础。对于一个国家,数据库的建设规模,使用水平已成为衡量该国信息化程度的重要标志。因此,数据库的学习是非常重要的.对于我们所做的系统,数据库的创建是第一位的,也是最基础的,如果没有一个良好的数据库支持,系统的创建不会顺利。因此我们的首要任务是做好数据库的设计。数据库技术是20世纪60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。SQLServer2000是微软公司开发的大型关系型数据库管理系统,具有强大的关系数据库创建、开发、设计及管理功能,在各个行业中均得到了广泛的应用,称为众多数据库产品中的接触代表。4.2系统数据库设计聆风企业仓库管理系统需要使用数据库存储和管理仓库日常业务过程中的数据。考虑到数据量的庞大和安全性的保障,本系统决定采用SQLServer2000数据库系统作为本系统的后台数据库。数据库名称为db_database28。其中包含了14张表详细如下下图3-1示:图3聆风企业仓库管理系统中使用到的数据表4.3系统数据建表本系统总共设计到14张表,下面对部分关键表的结构进行详细介绍:1) 37内蒙古农业大学学士学位论文供应商信息表:供应商信息表的名称为tb_gysinfo,主要用于存储供应商信息:表1供应商信息表结构字段名称数据类型字段大小是否主键说明IdVarchar32主键供应商编号NameVarchar50供应商名称JcVarchar20供应商简称AddressVarchar100供应商地址BianmaVarchar10邮政编码TelVarchar15电话FexVarchar15传真LianVarchar8联系人ItelVarchar15联系电话YhVarchar50开户银行MailVarchar30电子邮箱1)商品信息表:名称为tb_spinfo,用于存储商品信息。结果如下:表2存储商品信息表结构字段名称数据类型字段大小是否主键说明IdVarchar32主键商品编号SpnameVarchar50商品名称JcVarchar30商品简介CdVarchar50产地DwVarchar10商品计量单位GgVarchar10商品规格BzVarchar20包装PhVarchar32批号PzwhVarchar50批准文号MemoVarchar100备注GysnameVarchar50供应商名称 37内蒙古农业大学学士学位论文1)销售主表:名称tb_sell_main,主要用于存储销售单据信息,结果如下:表3存储销售单表结构字段名称数据类型字段大小是否主键说明SellIDVarchar30主键销售编号PzsVarchar8销售品种数JeVarchar8总计金额YsjlVarchar50验收结论KhnameVarchar100客户名称XsdateVarchar8销售日期CzyVarchar30操作员JsrVarchar30经手人JsfsVarchar10结算方式2)销售明细表:名称为tb_sell_detail,主要用于存储销售详细信息,结果如下:表4销售明细表结构字段名称数据类型字段大小是否主键说明IdVarchar50主键流水号SellidVarchar50销售编号SpidVarchar50商品编号DjVarchar8销售单价SlVarchar8销售数量 37内蒙古农业大学学士学位论文5系统详细设计5.1聆风企业仓库管理系统的总体结构设计根据已有的系统功能需求,系统分为以下六个模块:基本资料、进货管理、销售管理、库存管理、信息查询、系统维护,各模块的具体功能如下:1)基本资料:在此模块中,完成商品信息、客户信息、商品供应商信息的添加,修改管理,同时完成交易经手人的添加设置,实现业务的一体化及数据信息的集中统一管理2)进货管理:根据库存数据生成进货单和进货退货单(进货不符合要求(假货)),完成两种单据的添加和数据入库工作。3)销售管理:根据业务订单数据生成销售单,同时根据退货数据生成销售退货单(顾客对所购货物不满意),除此之外完成两种单据的添加和入库。4)库存管理:此模块包括库存盘点和价格调整,根据各种货物的库存数据,生成货物的库存盘点数据统计单。同时,根据市场行情及销售情况完成价格调整。5)信息查询:此模块包括销售查询、商品查询、销售排行。销售查询:可以根据销售单号或销售客户拼配查询销售记录;商品查询:可以根据商品编号或商品名称查询商品详细信息;销售排行:在设定的时间内,根据每种商品的销售记录,统计销售数量,根据销售总计排列顺序。6)系统维护:此模块包括数据库备份与恢复、密码修改、退出系统。数据库备份与恢复:为了保证数据安全,可以定期对数据进行备份,在使用数据时,可以将恢复数据;密码修改:对大部分企业来讲,仓库的数据是绝对机密的,为提高企业安全及系统数据安全,仓库管理员可以更换登陆密码,这也是系统没有设置“用户注册”功能的原因,如果要使用系统只有系统管理员分配账号密码才可以。5.2聆风企业仓库管理系统主窗口结构介绍根据系统的模块划分,同时为达到灵活的人机交互界面,操作系统简单方便、界面简洁美观的效果,我将窗口设计如下(图4):1:标题2:模块菜单3:常用工具栏4:主窗口背景5:单位名称6:登陆日期7:当前仓库管理员8:当前操作窗口 37内蒙古农业大学学士学位论文23567841图4主窗口结构介绍5.3系统功能实现在整个系统的设计和开发过程中,功能是实现占据了大部分时间,但在实际的开发中不是如此。首先介绍系统的文件结构,如图5示:商品管理窗体类包客户管理窗体类包供应商管理窗体类包操作员管理窗体类包内部窗体类包数据模型类包数据库操作类包主窗体类包源文件夹闪屏图片SQLServer数据库驱动库数据库文件JDBC驱动库文件Java类库按钮图片资源包图片资源包按键监听类包登陆窗体类包 37内蒙古农业大学学士学位论文图5系统文件结构图5.3.1公共类设计公共类是代码重用的一种形式,它将各个功能模块经常调用的方法提取到公用的Java类中,如:访问数据库的Dao(DataBaseAccessObject)类容纳了所有访问数据库的方法,并同时管理着数据库的连接和关闭。这样不仅实现了代码的重用,还提高了系统的性能和代码的可读性。5.3.1.1Item公共类设计Item公共类是对数据表最常用的ID和name属性的封装,用于Swing列表、表格、下拉列表框组件的赋值。该类重写了toString()方法,该方法中输出name属性,所以Item类在Swing组件显示文本时,只包含名称信息,不会连带着ID属性。但是,在获取组件内容时,获取的是Item类的对象,从该对象中可以很容易的获取ID属性,然后通过该属性到数据库中获取唯一数据。Item公共类的程序代码如下:publicclassItem{privateStringid;//id编号属性privateStringname;//名称属性publicItem(){}publicItem(Stringid,Stringname){//初始化属性的构造方法this.id=id;this.name=name;}publicStringgetId(){//获取ID属性returnid;}publicvoidsetId(Stringid){//设置ID属性this.id=id;}publicStringgetName(){//获取属性名称returnname;}publicvoidsetName(Stringname){//设置属性名称 37内蒙古农业大学学士学位论文this.name=name;}publicStringtoString(){//重写toString()方法,只输出名称属性returngetName();}}5.3.1.2数据模型公共类设计在com.lzw.dao.model包中存放的是数据模型公共类,他们对应着数据库中不同的数据表,这些模型将被访问数据库的Dao类和程序中各个模块甚至各个组件所使用。和Item公共类的使用方法类似,数据模型类也是对数据表中各个字段的封装,但是数据模型是纯粹的模型类,它不但需要重写父类toString()方法,还要重写hashCode()方法,来判断两个数据对象是否相同,模型类主要用于数据的存取,并通过相应的get和set方法实现不同属性的访问原则。下面以库存为例展示它所对应的模型类的部分关键代码:packagecom.lzw.dao.model;publicclassTbKucunimplementsjava.io.Serializable{privateStringid;//id属性privateStringspname;//商品名称privateStringjc;//商品简称privateStringcd;//产地privateStringgg;//规格privateStringbz;//包转privateStringdw;//单位privateDoubledj;//定价privateIntegerkcsl;//库存数量publicTbKucun(){}publicTbKucun(Stringid){this.id=id;}publicTbKucun(Stringid,Stringspname,Stringjc,Stringcd,Stringgg,Stringbz,Stringdw,Doubledj,Integerkcsl){ 37内蒙古农业大学学士学位论文this.id=id;this.spname=spname;this.jc=jc;this.cd=cd;this.gg=gg;this.bz=bz;this.dw=dw;this.dj=dj;this.kcsl=kcsl;}publicStringgetId(){returnthis.id;}publicvoidsetId(Stringid){this.id=id;}publicStringgetSpname(){returnthis.spname;}publicvoidsetSpname(Stringspname){this.spname=spname;}…………publicStringgetDw(){returnthis.dw;}publicvoidsetDw(Stringdw){this.dw=dw;}publicDoublegetDj(){returnthis.dj;}publicvoidsetDj(Doubledj){this.dj=dj; 37内蒙古农业大学学士学位论文}publicIntegergetKcsl(){returnthis.kcsl;}publicvoidsetKcsl(Integerkcsl){this.kcsl=kcsl;}publicStringtoString(){returngetSpname();}}5.3.1.3Dao公共类设计Dao的全称是DataAccessObject,即数据访问对象。在该类中实现了数据库的驱动、连接、关闭和多个操作数据库的方法,这些方法包括不同的数据表的操作方法。Dao类的定义,也就是数据库驱动和连接的代码。主要代码如下:publicclassDao{//定义数据库驱动类protectedstaticStringdbClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver";//定义数据库的URLprotectedstaticStringdbUrl="jdbc:microsoft:sqlserver://localhost:1433;"+"DatabaseName=db_database28;SelectMethod=Cursor";//设置访问数据库的用户名protectedstaticStringdbUser="sa";//设置密码protectedstaticStringdbPwd="";protectedstaticStringsecond=null;//获取链接publicstaticConnectionconn=null;static{ 37内蒙古农业大学学士学位论文try{初始化连接代码if(conn==null){Class.forName(dbClassName).newInstance();conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);}}catch(ClassNotFoundExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"请将SQLServer2000的JDBC驱动包复制到lib文件夹中。");System.exit(-1);}catch(Exceptione){e.printStackTrace();}}5.3.2技术难点的实现5.3.2.1JDBC连接数据库实现数据连接的方法以上已经进行了介绍,但这只是实现了数据库的宏观连接,没有实现对数据库中各张表的操作。在Dao类中对所有表的操作方法都是通过static方法实现的。下面对Dao类中关键的方法进行介绍:1)getKhInfo(Itemitem)方法该方法用于获取客户信息,方法的返回值是TbKhInfo类的对象,即客户信息的数据模型。方法将接收一个Item类的实例对象,通过该对象获取客户的Id,然后从数据库中获取该Id的数据信息,并且封装到客户的数据模型中,这个数据模型最后会作为方法返回,返回给方法的调用者。关键代码如下://读取客户信息publicstaticTbKhinfogetKhInfo(Itemitem){Stringwhere="khname=""+item.getName()+""";if(item.getId()!=null)where="id=""+item.getId()+""";TbKhinfoinfo=newTbKhinfo();ResultSetset=findForResultSet("select*fromtb_khinfowhere"+where);try{ 37内蒙古农业大学学士学位论文if(set.next()){info.setId(set.getString("id").trim());info.setKhname(set.getString("khname").trim());info.setJian(set.getString("jian").trim());info.setAddress(set.getString("address").trim());info.setBianma(set.getString("bianma").trim());info.setFax(set.getString("fax").trim());info.setHao(set.getString("hao").trim());info.setLian(set.getString("lian").trim());info.setLtel(set.getString("ltel").trim());info.setMail(set.getString("mail").trim());info.setTel(set.getString("tel").trim());info.setXinhang(set.getString("xinhang").trim());}}catch(SQLExceptione){e.printStackTrace();}returninfo;}2)getGysInfo(Itemitem)方法该方法用于获取供应商的信息,方法的返回值是TbGysinfo类的对象,即供应商数据表的模型对象。方法将接收Item类的对象参数,从Item对象中获取供应商的编号和名称,然后从数据库中获取该编号的供应商信息并封装到供应商数据模型对象中,最后将该模型对象作为反方返回值返回给方法调用者。该方法的关键代码如下://读取指定供应商信息publicstaticTbGysinfogetGysInfo(Itemitem){Stringwhere="name=""+item.getName()+""";if(item.getId()!=null)where="id=""+item.getId()+""";TbGysinfoinfo=newTbGysinfo();ResultSetset=findForResultSet("select*fromtb_gysinfowhere"+where);try{if(set.next()){ 37内蒙古农业大学学士学位论文info.setId(set.getString("id").trim());info.setAddress(set.getString("address").trim());info.setBianma(set.getString("bianma").trim());info.setFax(set.getString("fax").trim());info.setJc(set.getString("jc").trim());info.setLian(set.getString("lian").trim());info.setLtel(set.getString("ltel").trim());info.setMail(set.getString("mail").trim());info.setName(set.getString("name").trim());info.setTel(set.getString("tel").trim());info.setYh(set.getString("yh").trim());}}catch(SQLExceptione){e.printStackTrace();}returninfo;}3)checkLogin(StringuserStr,StringpassStr)方法该方法用于判断登陆用户的用户名和密码是否正确,方法的返回值是boolean类型,接收的参数有userStr和passStr,分别是用户名和密码信息。该方法将在一条SQL语句中获取指定用户名和密码的数据。如果用户名和密码正确就返回true,否则返回false。关键代码如下://匹配用户名和密码publicstaticbooleancheckLogin(StringuserStr,StringpassStr)throwsSQLException{ResultSetrs=findForResultSet("select*fromtb_userlistwherename=""+userStr+""andpass=""+passStr+""");if(rs==null)returnfalse;returnrs.next();}在Dao类中还有很多static的数据表和数据库的处理方法,由于数量太多,这里就不再嗷述了,详见系统代码 37内蒙古农业大学学士学位论文。5.3.2.2数据库备份与恢复的实现数据库备份与数据恢复是实现数据安全的重要手段,在系统中实现这个功能的方法是:restorOrBackup(Stringsql)。该方法用于执行实现数据库备份与恢复的SQL语句。由于这类数据库操作涉及到多用户操作、数据库连接共享等多种可能导致数据库备份与恢复无法执行的异常,所以该方法首先设置数据库的选项为单用户连接模式,再执行相应的SQL语句,这样就可以避免数据库恢复或备份时失败。该方法的关键代码如下:publicstaticintrestoreOrBackup(Stringsql)throwsException{intrs=0;if(conn!=null){conn.close();}conn=DriverManager.getConnection(//连接到系统数据库"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master",dbUser,dbPwd);Statementstmt=conn.createStatement();Stringsingle="alterdatabasedb_database28setsingle_userwithrollbackimmediate"+sql;rs=stmt.executeUpdate(single);stmt.close();conn.close();//关闭数据库连接conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);//恢复原有数据库连接returnrs;}5.3.3系统的模块功能实现聆风企业仓库管理系统主要分为六个模块,可分为两类:登陆模块、主窗口模块。由于在此涉及内容太多,在此详细介绍登陆模块和主窗口模块下的进货单模块、库存管理模块和基本资料模块。 37内蒙古农业大学学士学位论文5.3.3.1登陆模块设计系统登录模块是项目必须开发的模块,它是系统的安全门,只有提供了正确的用户名和密码才可以进入系统。登录模块的设计有两部分组成,一部分是登录窗体,另一部分是窗体中带背景的面板。首先介绍窗体设计:所有的组件都要布置在窗体内容面板上,而登录的内容面板使用了背景图片,这就继承了Swing和JPanel类编写自己的面板类,然后将该面板作为窗体的内容面板。程序代码如下:图6登陆窗口importjava.awt.*;importjava.net.URL;importjavax.swing.*;importjava.awt.Dimension;publicclassLoginPanelextendsJPanel{publicintwidth,height;privateImageimg;publicLoginPanel(){//创建背景图片super();URLurl=getClass().getResource("/res/login.jpg");//获取图片Urlimg=newImageIcon(url).getImage();//初始化image对象}protectedvoidpaintComponent(Graphicsg){//重写父类的组件绘制方法 37内蒙古农业大学学士学位论文super.paintComponent(g);g.drawImage(img,0,0,this);//在面板的左上角开始绘制背景图片}}接下来介绍登陆窗体的创建。创建LoginDialog类,该类继承了JFrame类,成为一个窗体。设置窗体的标题为“系统登录”,设置内容面板为LoginPanel类的对象。该窗体用于布置各种组件,来实现系统登录的界面。此处技术实现简单,代码展示忽略,详见系统src文件夹下。接下来就是登录模块上的事件处理:“密码”文本框上的回车事件、“登录”按钮的事件处理。首先看回车事件,等用户输入好密码后,点击回车就会相当于点击界面上的登录按钮。实现代码如下:privateJPasswordFieldgetPasswordField(){if(passwordField==null){passwordField=newJPasswordField();passwordField.setBounds(newRectangle(143,69,125,22));passwordField.addKeyListener(newjava.awt.event.KeyAdapter(){publicvoidkeyTyped(java.awt.event.KeyEvente){if(e.getKeyChar()=="n")//如果按键字符是换行符“n”,执行以下操作loginButton.doClick();}});}returnpasswordField;}“登录”按钮的事件处理:当用户点击登陆按钮后首先要获取用户名和密码文本框中的内容,同时添加非空判断,防止出现异常。获取两个数据后就要连接数据库,匹配用户名和密码,匹配了就进入主窗体,没有返回信息“用户名或密码错误”。实现代码如下:privateJButtongetLoginButton(){if(loginButton==null){loginButton=newJButton();loginButton.setBounds(newRectangle(109,114,48,20));loginButton.setIcon(newImageIcon(getClass().getResource( 37内蒙古农业大学学士学位论文"/res/loginButton.jpg")));loginButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){try{userStr=userField.getText();StringpassStr=newString(passwordField.getPassword());if(!Dao.checkLogin(userStr,passStr)){JOptionPane.showMessageDialog(LoginDialog.this,"用户名与密码无法登录","登录失败",JOptionPane.ERROR_MESSAGE);return;}}catch(Exceptione1){e1.printStackTrace();}mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);mainFrame.getCzyStateLabel().setText(userStr);//设置状态栏的操作员setVisible(false);}});}returnloginButton;}5.3.3.2系统主窗体设计主窗体是人际交互的主题,用户通过主窗体中提供的各种菜单、表格、文本框、子窗体等组件进行管理。本系统主界面采用的是多用户界面,可以对打开的窗体进行平铺、关闭等操作,并在菜单中列出当前打开的子窗体的名称。如图7 37内蒙古农业大学学士学位论文图7主窗体结构图由于菜单和工具栏的设计可以直接通过工具实现,这里就不再介绍了,接下来介绍进货单模块的设计实现。进货单模块负责添加企业的进货信息,它根据进货人员提供的单据,将采购商品的名称、编号、产地、规格、单价和数量等信息记录到数据库中的库存表中。进货单的窗体界面如图8:图8进货单窗口设计图 37内蒙古农业大学学士学位论文在进货单窗体中单击“添加”按钮,会在表格中添加一个空行,可以在该空行的第一个字段选择商品名称,其他的字段信息会根据选择的商品自动填充。这样就需要为按钮编写ActionListener监听器,在该监听其中实现相应的操作。按钮的初始化由getTjButton()方法完成,该方法在初始化“添加”按钮时,为按钮添加了动作事件监听器。代码如下:privateJButtongetTjButton(){if(tjButton==null){tjButton=newJButton();tjButton.setText("添加");tjButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){//初始化票号java.sql.Datedate=newjava.sql.Date(jhsjDate.getTime());jhsjField.setText(date.toString());StringmaxId=Dao.getRuKuMainMaxId(date);idField.setText(maxId);//结束表格中没有编写的单元stopTableCellEditing();//如果表格中不包含空行,就添加新行for(inti=0;i<=table.getRowCount()-1;i++){if(table.getValueAt(i,0)==null)return;}DefaultTableModelmodel=(DefaultTableModel)table.getModel();model.addRow(newVector());}});}returntjButton;} 37内蒙古农业大学学士学位论文于此同时,在窗体面板(bottomPanel)中布置了多个文本框,用于统计商品的数量、品种数量、合计金额等商品信息的统计。在添加进货商品之后,要实现商品信息的自动统计,就要在table表格的PropertyChangeListener事件监听器中编写统计代码。这里将统计代码编写为ComputeInfo()方法,然后在事件监听器中调用。为表格添加监听的代码如下:table.addPropertyChangeListener(newPropertyChangeListener(){publicvoidpropertyChange(java.beans.PropertyChangeEvente){if((e.getPropertyName().equals("tableCellEditor"))){ComputeInfo();}}});当table表格发生属性改变事件时,事件监听器首先会检测发生的事件类型,也就是判断发生了哪种更改属性的事件,如果事件类型是tableCellEditor则说明属于表格编辑事件,这时应该针对表格的修改事件去调用ComputeInfo()方法执行商品进货的统计业务,并将结果显示在相应的组件上。ComputeInfo()方法的实现代码如下:/***@authorlzwJava*事件处理器,该处理器用于计算货品总数、合计金额等信息。*/privatefinalvoidComputeInfo(){//计算代码introws=table.getRowCount();intcount=0;doublemoney=0.0;//计算品种数量TbSpinfocolumn=null;ObjectvalueAt=table.getValueAt(rows-1,0);if(!(valueAtinstanceofTbSpinfo))return;if(rows>0)column=(TbSpinfo)valueAt;if(rows>0&&(column==null||column.getId().isEmpty()))rows--; 37内蒙古农业大学学士学位论文//计算货品总数和金额for(inti=0;iset=ruMain.getTabRukuDetails();introws=table.getRowCount(); 37内蒙古农业大学学士学位论文for(inti=0;i