基础Java的超市管理系统开发研究_第1页
基础Java的超市管理系统开发研究_第2页
基础Java的超市管理系统开发研究_第3页
基础Java的超市管理系统开发研究_第4页
基础Java的超市管理系统开发研究_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGEI基础Java的超市管理系统开发摘要随着小型超市及店面规模的不断扩大,商品数量急剧增加,有关商品的各种信息量也成倍增长。各行业间联系愈发密切,对超市管理的要求也不断提高,实现超市管理自动化,无疑将带来高效率的企业管理。超市时时刻刻都需要对商品各种信息进行统计分析,以及对所产生的各类数据进来合理的整理和分析。该系统采用java作为接口和功能开发工具,2010作为后台数据库,利用java提供的各种面向对象的开发工具开发接口和数据库。本文系统基本上能满足现代超市进销存管理的需求。本文分析了软件开发的背景以过程;首先介绍了软件的开发环境,其次介绍了本软件的详细过程:数据库的设计、各个模块的设计和实现,以及具体界面的设计和功能。关键词:超市管理系统;数据查询;数据库;JAVA

AbstractWiththecontinuousexpansionofsmallsupermarketsandstorefronts,thenumberofcommoditieshasincreaseddramatically,andtheamountofinformationrelatedtogoodshasdoubled.Thelinksbetweenindustriesarebecomingmoreandmorecloselyrelated,andthedemandforsupermarketmanagementisalsoimproving.Theautomationofsupermarketmanagementwillundoubtedlybringaboutefficientbusinessmanagement.Supermarketsneedtomakestatisticalanalysisofallkindsofinformation,andsortoutandanalyzeallkindsofdata.ThissystemusesJAVAastheinterfaceandfunctiondevelopmenttoolandSQLSever2010asthebackgrounddatabase,andusesallkindsofobjectorienteddevelopmenttoolsprovidedbythemtodeveloptheinterfaceanddatabase.Thissystembasicallymeetstheneedsofmodernsupermarket'spurchase,saleandstoragemanagement.Thebackgroundofsoftwaredevelopmentisanalyzedinthispaper.First,thedevelopmentenvironmentofthesoftwareisintroduced.Secondly,thedetailedprocessofthesoftwareisintroduced:thedesignofthedatabase,thedesignandimplementationofeachmodule,andthedesignandfunctionofthespecificinterface.Keywords:supermarketmanagementsystem;dataquery;database;JAVA

目录摘要 IAbstract II1绪论 11.1项目背景 11.2国内外发展状况 11.3研究内容 22开发技术 32.1系统运行环境环境 32.2系统开发技术 32.2.1JAVA简介 32.2.2MySQL数据库 32.2.3HTML5 43软件需求分析 53.1需求分析 53.2可行性分析 53.3系统功能结构 53.4系统业务流图 54系统设计 74.1数据库与数据库表设计 74.1.1数据库介绍 74.1.2E-R图 74.1.3数据库表设计 84.2系统功能模块设计 114.2.1公共类设计 114.2.2系统登录模块设计 124.2.3系统主窗体设计 134.2.4进货单模块设计 144.2.5销售单模块设计 184.2.6库存盘点模块设计 214.2.7数据库备份与恢复模块设计 225系统测试 245.1系统软件测试 245.1.1测试的原则 245.1.2模块测试 245.1.3集成测试 25结语 26参考文献 27致谢 29PAGE281绪论1.1项目背景二十一世纪是信息的时代,随着计算机技术的发展以及计算机网络(互联网等)的逐渐普及。信息的交换和信息流通特别重要。超市等服务性行业的竞争也进入到一个全新的领域。同时我们都可以看到这样一个现象竞争已不再是规模的竞争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是连锁超市业的竞争核心。零售领域目前呈现多元化发展趋势,多种行业形态,如:超市、仓储店、便利店、特许加盟店、专店、货仓等等将相互并存,相互制约。如何在激烈的竞争中扩大销售额、降低经营成本、扩大经营规模,将成为本进销存管理系统努力追求的目标和发展方向。超市经营模式是当前最为流行的市场模式之一,所以与之相关的管理和配置的需求与要求都大大提高了。当今社会,超市已成为社会不可缺少的一部分,不论大中小城市,都存在或大或小或多或少的超市。对于一个稍有规模的超市甚至很小的店面,都需要一个管理系统,进行规范化统一化的管理。因此超市管理系统的开发,显得十分有必要。超市形态模式具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面。目前市面上是有何种各样的这类管理系统,但是用JAVA语言编译实现的几乎没有。因本人热爱并学习JAVA语言,为了验证自己的JAVA学习情况,同时想知道自己对JAVA的掌握能力。于是决定用JAVA重新开发一个这样的系统,以弥补JAVA语言编译在这类系统上的空缺。经过认真的市场研究和从实际分析,开发并实现一个比较合理的,完善的超市进销存管理系统。也许这个系统还有很多BUG,但是我会在以后慢慢修改,同时也希望大家能提出所知道的漏洞。1.2国内外发展状况信息管理系统在强调管理、强调信息的现代社会中它变得越来越普及。信息管理系统在很多科学的基础上,形成信息收集和加工的方法,从而形成一个纵横交错的系统。从国际技术发展趋势来看,20世纪90年代出现了集中全新的管理技术。一种远见的企业管理模式,其特点是职工素质高、组织机构精良、多功能小组效率高、信息存放灵活、影响要求迅速。在二十一世纪中,管理信息系统(MIS)也正处于进入新的发展阶段的特点。许多新问题和新情况要我们去研究和探讨。经济领域和经济学思想的变化和科学思想的变化是两个直接影响到MIS研究和教学的重要的背景。值得我们认真地进行研究。中国大学中开设MIS课程的不到100个。具体包括在管理科学当中,并涵盖了图书情报,信息管理等内容。中国的MIS的先期发展有大连研究中心和几个财经学校,随后又逐渐有北大、人大等大学加入其中。1.3研究内容本系统使用JAVA作为界面和功能开发工具和SQLSever2010作为后台数据库,利用其提供的各种面向对象的开发工具进行界面和数据库开发。本文系统基本上能满足现代超市进销存管理的需求。本文分析了软件开发的背景以过程;首先介绍了软件的开发环境,其次介绍了本软件的详细过程:数据库的设计、各个模块的设计和实现,以及具体界面的设计和功能。

2开发技术2.1系统运行环境环境硬件环境,CPU(中央处理器):Intel(R)Pentium(R)E53002.60GHzRAM(内存):2GHDD(硬盘):500G软件开发环境,操作系统:WindowsxpSP3JDK环境:JAVASEDevelopmentKIT(JDK)Version6开发工具:Eclipse3.2数据库管理软件:MicrosoftMySQLSP42.2系统开发技术本系统的开发主要是使用在Eclipse平台下的JAVA语言,并结合了MySQL数据库技术,使此系统具有强大的查询功能。2.2.1JAVA简介Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:(1)Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。(2)Java语言是一个面向对象的。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。2.2.2MySQL数据库MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。MySQL是MySQLAB的注册商标。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。MySQL网站()提供了关于MySQL和MySQLAB的最新的消息。MySQL是一个数据库管理系统一个数据库是一个结构化的数据集合。它可以是从一个简单的销售表到一个美术馆、或者一个社团网络的庞大的信息集合。如果要添加、访问和处理存储在一个计算机数据库中的数据,你就需要一个像MySQL这样的数据库管理系统。2.2.3HTML5HTML5,即JavaServerPages,它是一种基于Java的语言技术,用于生成动态网页,支持跨平台、跨Web服务器。众所周知,当今网络开发的三大主流技术,有Sun公司的HTML5,微软的ASP以及开源的JAVA。其中HTML5凭借J2EE平台,有跨平台使用优势,能够轻松地运行与微软的视窗系统、服务器通UNIX系统和开源的Linux系统,这项优势是其它语言难以匹敌的。HTML5拥有Java(加哇)语言“Writeonce,runeverywhere(一次编码,遍地运行)”的特性。鉴于HTML5的众多优势,其必将成为未来发展的趋势。HTML5技术所开发的web应用程序是基于Java的,它拥有Java跨平台的特性,以及业务代码分离,组建重用,基础Javaservlet功能和预编译功能。

3软件需求分析3.1需求分析根据用户方的需求,要求企业进销存管理系统具有以下功能:(1)界面设计美观大方,操作方便、快捷、灵活。(2)实现强大的进销存管理,包括基本信息、进货、销售和库存管理。(3)提供数据库备份与恢复功能。(4)提供库存盘点功能。(5)提供技术支持的联系方式,可以使用邮件进行沟通,或者直接连接到技术网站。3.2可行性分析企业进销存管理系统必须提供商品信息、供应商信息和客户信息的基础设置;提供强大的搜索功能和商品的进货、销售和库存管理功能。系统还必须保证数据的安全性、完整性和准确性。项目主要以企业的进货、销售和查询统计功能为主,对于库存、销售和进货的记录信息应该及时、准确的保存,并提供想要的查询和统计。由于库存商品数量太多,不易盘点,传统的盘点方式容易出错,系统中的库存盘点功能要准确的计算出各种商品的损益数量,减少企业的不必要的损失。3.3系统功能结构企业进销存管理系统功能结构图如图2.1所示。图2.1企业进销存管理系统功能结构图3.4系统业务流图企业进销存管理系统业务流程图如图2.2所示。图2.2企业进销存管理系统业务流程图

4系统设计4.1数据库与数据库表设计4.1.1数据库介绍所谓数据库(Database)就是按一定组织方式存储在一起,相互相关的若干数据的结合,数据库管理系统(DatabaseManagementSystem)就是一种操作和管理数据库的大型软件,简称DBMS,他们建立在操作系统的基础上,对数据库进行统一的管理和控制,其功能包括数据库定义,数据库管理,数据库的建立和维护,与操作系统通信等。4.1.2E-R图购销存系统主要实现从购销、库存到销售的一体化管理,设计了商品信息、商品供应商、购货客户等多个实体。下面列举了关键的实体和系统的综合E-R图。供应商实体属性图供应商实体包括:编号、名称、简称、地址、电话、邮政编码、传真、联系人、联系人电话、开户行和E-mail属性,如图4.1所示。图4.1供货商实体属性图商品实体属性图商品实体包括:编号、商品名称、商品简称、产地、单位、规格、包装、批号、批准文号、商品简介和供应商属性。如图4.2所示。图4.2商品实体属性图客户实体属性图客户实体包括:客户编号、客户名称、简称、地址、电话、邮政编码、联系人电话、传真、开户行和账号属性。如图4.3所示。图4.3客户实体属性图销售实体属性图销售实体分为销售主表和销售明细表两个实体,它们是一对多的关系。其中销售主表包括:销售票号、品种数、金额、验收结论、客户名称、经手人、结算方式、操作员和销售日期属性。销售明细表包括:编号、销售票号、商品编号、数量和单价属性。如图4.4所示。图4.4销售实体属性图4.1.3数据库表设计数据库在整个管理系统中占据非常重要的地位,数据库结构设计的好坏直接影响着系统的效率和实现效果。进销存管理系统采用MySQLSP4版本的数据库,数据库名称为db_JXC,因篇幅所限,本论文只给出几个重要数据表的表结构。供应商信息表供应商信息表的名称为tb_gysinfo,主要用于存储供应商的详细信息,结构如表3.1所示。表3.1供应商信息表字段名称数据类型字段大小是否主键说明idvarchar32主键供货商编号namevarchar50供货商名称jcvarchar20供货商简称addressvarchar100供货商地址bianmavarchar10邮政编码telvarchar15电话faxvarchar15传真lianvarchar8联系人ltelvarchar15联系电话yhvarchar50开户银行mailvarchar30电子邮箱商品信息表商品信息表的名称为tb_spinfo,主要用于存储商品的详细信息,结构如表3.2所示。表3.2商品信息表字段名称数据类型字段大小是否主键说明idvarchar32主键商品编号spnamevarchar50商品名称jcvarchar30商品简称cdvarchar50产地dwvarchar10商品计量单位ggvarchar10商品规格bzvarchar20包装phvarchar32批号pzwhvarchar50批准文号memovarchar100备注gysnamevarchar50供应商名称入库主表入库主表的名称为tb_ru_main,主要用于存储入库单据信息,其结构如表3.3所示。表3.3入库主表字段名称数据类型字段大小是否主键说明rkIDvarchar32主键入库编号pzsfloat8品种数量jemoney8总计金额ysjlvarchar50验收结论gysnamevarchar100供货商名称rkdatedatetime8入库时间czyvarchar30操作员jsrvarchar30经手人jsfsvarchar10结算方式入库明细表入库明细表的名称为tb_ruku_detail,主要用于存储入库的详细信息,结构如表3.4所示。表3.4入库明细表字段名称数据类型字段大小是否主键说明idvarchar50主键流水号rkIDvarchar0入库编号spidvarchar50商品编号djvarchar8单价s1float8数量销售主表销售主表的名称为tb_sell_main,主要用于存储销售单据的信息,结构如表3.5所示。表3.5销售主表字段名称数据类型字段大小是否主键说明sellIDvarchar30主键销售编号pzsfloat8销售品种数jemoney8总计金额ysjlvarchar50验收结论khnamevarchar100客户名称xsdatedatetime8销售日期czyvarchar30操作员jsrvarchar30经手人jsfsvarchar10结算方式销售明细表销售明细表的名称为tb_sell_detail,主要用于存储销售的详细信息,结构如表3.6所示。表3.6销售明细表字段名称数据类型字段大小是否主键说明idvarchar50主键流水号sellIDvarchar50销售编号spidvarchar50产品编号djmoney8销售单价slfloat8销售数量客户信息表客户信息表的名称为tb_khinfo,主要用于存储客户的信息,结构如表3.7所示。表3.7客户信息表字段名称数据类型长度是否主键说明idvarchar50主键客户编号khnamevarchar50客户名称jianvarchar50客户简称addressvarchar100客户地址bianmavarchar50邮政编码telvarchar50客户电话faxvarchar50客户传真lianvarchar50联系人ltelvarchar50联系人电话mailvarchar50E-mail地址xinhangvarchar60开户行haovarchar60账号4.2系统功能模块设计4.2.1公共类设计(1)Item公共类Item公共类是对数据表最常用的id和name属性的封装,用于Swing列表、表格、下拉列表框等组件的复制,该类重写了toString()方法,在该类方法中只输出那么属性,所以Item类在Swing组件现实文本时只包含名称信息,不会连带着id属性。但是在获取组件的内容时,获取的是Item类的对象,从该对象中可以很容易的获取id属性,然后通过该属性到数据库中获取唯一的数据。(2)数据模型公共类数据模型公共类对应于数据库中的不同数据表,将被访问数据库的dao类以及程序中的每个模块甚至组件使用。与使用项公共类类似,数据模型封装数据表中的所有字段(属性),但数据类型是纯模型。它不但需要重写父类的toString()方法,还要重写hashCode()方法和equals()方法(这两个方法分别用于生成模型对象的哈希代码和判断模型对象是否相同)。模型类主要用于存储数据,并通过想要的getXXX()方法和setXXX()实现不同属性的访问原则。(3)Dao类Dao的全称是DataAccessObject,即数据库访问对象。在此项目中,将应用数据库访问类的名称。在这个类中,实现了驱动、连接、关闭数据库和操作多个数据库的方法。这些方法包括不同数据表的操作方法。其关键代码如下:packagecom.lzw.dao;importJAVA.sql.*;importJAVA.sql.Date;importJAVA.util.*;importJAVAx.swing.JOptionPane;importcom.lzw.Item;importcom.lzw.dao.model.*;publicclassDao{ protectedstaticStringdbClassName="net.sourceforge.jtds.jdbc.Driver"; protectedstaticStringdbUrl="jdbc:jtds:sqlserver://localhost:1433/" +"db_database28;SelectMethod=Cursor"; protectedstaticStringdbUser="sa"; protectedstaticStringdbPwd=""; protectedstaticStringsecond=null; publicstaticConnectionconn=null; static{ try{ if(conn==null){ Class.forName(dbClassName).newInstance(); conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd); } }catch(ClassNotFoundExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null, "请将MySQL的JDBC驱动包复制到lib文件夹中。"); System.exit(-1); }catch(Exceptione){ e.printStackTrace(); } }4.2.2系统登录模块设计系统登录也是项目必须开发的模块,主要由两部分组成,一部分是登录窗体,另一部分是窗体中带背景图片的内容面板。它是系统的安全门,只有提供正确的用户名和登录口令之后,才能进入企业进销存管理系统进行进销存管理工作。系统登录模块如图4.5所示。图4.5系统登录界面创建内容面板所有组件都要布置在窗体的内容面板上,而登陆模块的内容使用了背景图片来美化窗体界面,这就需要继承Swing的Jpanel类编写自己的面板类,然后将面板类作为窗体的内容面板。创建登录窗体创建LoginDialog类,该类继承Jframe类,成为一个窗体。设置窗体的标题为“系统登录”,设置内容面板为LoginPanel类的对象。该窗体用于不知各种组件,来实现系统登录的界面。“密码”文本框的回车事件一个击键事件监听器被添加到系统登录表单的“密码”文本框中。当它获得在“密码”文本框中输入的返回字符时,它将执行登录事件。也就是说,在“password”文本框中输入密码后,按enter键将执行与单个“login”按钮相同的业务逻辑。“登录”按钮的事件“登录”按钮用于执行用户名和密码的验证工作,如果验证用户名和密码有效,则启动系统,否则禁止进入系统。在“登录”按钮的动作事件监听器种,首先获取用户输入的用户名与密码信息,然后调用Dao类的checkLogin()方法,如果该方法返回true则登陆成功,否则禁止用户登录,并提示输入的用户名与密码无法登录系统。4.2.3系统主窗体设计主窗体是人际交互的本体,用户通过主窗体中提供的各种菜单、表格、文本框、子窗体等组件进行管理操作。本系统主界面采用的是MID(即“多文档界面”),类似于Word的应用程序,可以同时打开多个子窗体,并对打开的功能窗体进行各种操作。系统主窗体界面如图4.6所示。图4.6系统主窗体界面4.2.4进货单模块设计进货单模块负责添加企业的进货信息,他根据进货人员提供的单据,将采购商品的名称、编号、产地、规格、单价和数量等信息记录到数据的库存表中。进货单模块窗体界面如图4.9所示。图4.9进货单窗体界面设计进货单窗体在Eclipse中选择“文件”/“新建”/VisualClass命令,在弹出的NewJAVAVisualClass对话框中创建InternalFrame内部窗体类,命名为JinHuoDan_Iframe。添加进货商品在进货单船体点击“添加”按钮,会在表格中添加一个空行可以再该空行的第一个字段选择商品名称,其他的字段信息会根据选择的商品自动填充。这就需要为“添加”按钮编写ActionListener动作监听器,在该监听器中实现相应的操作。“添加”按钮的初始化由getTiButton()方法完成,该方法在初始化“添加”按钮时,为按钮添加了动作事件监听器。其关键代码如下: 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; }进货统计在bottomPanel面板中布置了多个文本框,用于统计品种数量、货品总数、合计金额等商品信息,在添加货品之后,要实现商品信息的自动统计,既要在table表格的PropertyChangeListener事件监听器编写统计代码。这里将统计代码编写在ComputeInfo()方法,然后在事件监听器中调用。当table表格发生属性改变事件是,事件监听器首先会检测发生的事件类型,也就是判断发生了那种更改属性的事件,如果事件类型是tableCellEditor则说明术语表格编辑事件,这时应该针对表格的修改事件去调用ComputeInfo()方法执行产品进货的统计业务并将结果显示在相应的组件上。商品入库再添加了进货单中的所有商品后,单机“入库”按钮可以将这些商品添加到数据库中。这需要在“入库”按钮的初始化方法中,为按钮添加ActionListener动作监听器,在监听器中实现商品入库的业务逻辑。getRukuButton()方法是“入库”按钮的初始化方法,该方法将判断“入库”按钮对象是否初始化,如果已经初始化就直接将按钮对象返回给方法调用者,否者现对按钮进行初始胡,然后返回该按钮对象。在初始化“入库”按钮的过程中为按钮添加了事件监听器,在该事件监听器中首先调用stopTableCellEditing()方法停止正在编辑的表格单元,然后获取进货单的品种数量,结算方式、合计金额、经手人、操作员、进票号、验证结论等信息,并对关键信息进行判断,防止用户忘记填写这些关键信息。最后,创建进货主表的模型对象、进货详细表的模型对象和库存表的模型对象,使用进货单窗体中的信息初始化这些模型对象,并把他们通过Dao公共类的insertRukuInfo()方法保存到数据库中。其关键代码如下:privateJButtongetRukuButton(){ if(rukuButton==null){ rukuButton=newJButton(); rukuButton.setText("入库"); rukuButton.addActionListener(newJAVA.awt.event.ActionListener(){ publicvoidactionPerformed(JAVA.awt.event.ActionEvente){ stopTableCellEditing();//结束表格中没有编写的单元 StringpzsStr=pzslField.getText();//品种数 StringjeStr=hjjeField.getText();//合计金额 StringjsfsStr=jsfsComboBox.getSelectedItem().toString();//结算方式 StringjsrStr=jsrComboBox.getSelectedItem()+"";//经手人 StringczyStr=jsrComboBox.getSelectedItem()+"";//操作员 StringrkDate=jhsjField.getText();//入库时间 StringysjlStr=ysjlField.getText().trim();//验收结论 Stringid=idField.getText();//票号 StringgysName=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; } TbRukuMainruMain=newTbRukuMain(id,pzsStr,jeStr, ysjlStr,gysName,rkDate,czyStr,jsrStr,jsfsStr); Set<TbRukuDetail>set=ruMain.getTabRukuDetails(); introws=table.getRowCount(); for(inti=0;i<rows;i++){ TbSpinfospinfo=(TbSpinfo)table.getValueAt(i,0); if(spinfo==null||spinfo.getId()==null ||spinfo.getId().isEmpty()) continue; StringdjStr=(String)table.getValueAt(i,6); StringslStr=(String)table.getValueAt(i,7); Doubledj=Double.valueOf(djStr); Integersl=Integer.valueOf(slStr); TbRukuDetaildetail=newTbRukuDetail(); detail.setTabSpinfo(spinfo.getId()); detail.setTabRukuMain(ruMain.getRkId()); detail.setDj(dj); detail.setSl(sl); set.add(detail); } booleanrs=Dao.insertRukuInfo(ruMain); if(rs){ JOptionPane.showMessageDialog(JinHuoDan_IFrame.this, "入库完成"); DefaultTableModeldftm=newDefaultTableModel(); table.setModel(dftm); pzslField.setText("0"); hpzsField.setText("0"); hjjeField.setText("0"); } } }); } returnrukuButton; }4.2.5销售单模块设计商品销售时进销存管理中的重要环节之一,进货商在入库之后就可以开始销售。销售单模块主要负责根据经手人的销售单据,操作进销存管理系统的库存商品和记录销售信息,方便以后查询和统计。其窗体界面如图4.10所示。图4.10销售单窗体界面设计销售单窗体创建Internalframe内部窗体类,命名为XiaoShouDan。该窗体主要用于处理商品销售的业务逻辑添加销售商品在销售单窗体中单击“添加”,将向table表格中添加新的空行,操作员可以在空行的第一列字段的商品下来列表中选择销售的商品,这儿下拉列表框和进货单窗体的不同,它不是根据供货商字段确定选择框内容,而是包含了数据库中所欲可以销售的商品。要实现添加商品的功能,需要为“添加”按钮添加动作监听器,在监听器种实现相应的业务逻辑。在该监听器中调用了initPiaoHao()方法初始化销售票号,该票号就是销售单在数据库中的id编号。initPiaoHao()方法首先创建JAVA.sql包中Date类的对象,该对象包含当前日期;然后调用Dao累的getSellMainMaxId()方法获取数据库销售主表中的最大ID号;最后,将该ID编号更新到piaoHao文本框中。销售统计和进货单的统计功能类似,销售单也需要统计功能,统计的内容包括货品数量、品种数量、合计金额等信息,实现方式也是通过table表格的事件监听器来处理相应的统计业务,但是销售但船体使用不是PropertyChangeListener属性改变事件监听器,而是使用ContainerListener容器监听器。商品销售在销售单窗体中添加完销售商品之后,单击“销售”按钮,将完成本次销售单的销售业务。系统会记录本次销售信息,并从库存表中扣除销售的商品数量。这些业务处理都是在“销售”按钮的动作监听器中完成,该监听器需要获取销售单窗体中所有销售信息和商品信息,将所有商品信息封装为销售明细表的模型对象,并将这些模型对象放到一个集合中,然后调用Dao公共类的insertSellInfo()方法将集合与销售主表的模型对象保存到数据库中。其关键代码如下: //单击销售按钮保存进货信息 JButtonsellButton=newJButton("销售"); sellButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ stopTableCellEditing();//结束表格中没有编写的单元 clearEmptyRow();//清除空行 StringhpzsStr=hpzs.getText();//货品总数 StringpzsStr=pzs.getText();//品种数 StringjeStr=hjje.getText();//合计金额 StringjsfsStr=jsfs.getSelectedItem().toString();//结算方式 StringjsrStr=jsr.getSelectedItem()+"";//经手人 StringczyStr=czy.getText();//操作员 StringrkDate=jhsjDate.toLocaleString();//销售时间 StringysjlStr=ysjl.getText().trim();//验收结论 Stringid=piaoHao.getText();//票号 StringkehuName=kehu.getSelectedItem().toString();//供应商名字 if(jsrStr==null||jsrStr.isEmpty()){ JOptionPane.showMessageDialog(XiaoShouDan.this,"请填写经手人"); return; } if(ysjlStr==null||ysjlStr.isEmpty()){ JOptionPane.showMessageDialog(XiaoShouDan.this,"填写验收结论"); return; } if(table.getRowCount()<=0){ JOptionPane.showMessageDialog(XiaoShouDan.this,"填加销售商品"); return; } TbSellMainsellMain=newTbSellMain(id,pzsStr,jeStr, ysjlStr,kehuName,rkDate,czyStr,jsrStr,jsfsStr); Set<TbSellDetail>set=sellMain.getTbSellDetails(); introws=table.getRowCount(); for(inti=0;i<rows;i++){ TbSpinfospinfo=(TbSpinfo)table.getValueAt(i,0); StringdjStr=(String)table.getValueAt(i,6); StringslStr=(String)table.getValueAt(i,7); Doubledj=Double.valueOf(djStr); Integersl=Integer.valueOf(slStr); TbSellDetaildetail=newTbSellDetail(); detail.setSpid(spinfo.getId()); detail.setTbSellMain(sellMain.getSellId()); detail.setDj(dj); detail.setSl(sl); set.add(detail); } booleanrs=Dao.insertSellInfo(sellMain); if(rs){ JOptionPane.showMessageDialog(XiaoShouDan.this,"销售完成"); DefaultTableModeldftm=newDefaultTableModel(); table.setModel(dftm); initTable(); pzs.setText("0"); hpzs.setText("0"); hjje.setText("0"); } } });4.2.6库存盘点模块设计库存库存模块主要负责计算仓库管理人员的库存数量和库存数量的盈亏。程序界面提示当前日期的库存产品数量,并在表中显示所有库存产品。在表的“库存编号”列中输入库存产品的数量。“损益数量”字段将自动计算产品的剩余产品数量。如果数字是整数,则会显示库存数量。数量大于计数的数量。库存盘点窗体界面如图4.11所示。图4.11库存盘点窗体界面设计库存盘点窗体创建InternalFrame内部窗体类,命名为KuCunPanDian。该窗体主要用于计算库存管理中的损益结果。读取库存商品本模块窗体的商品表格table组件用于显示库存中的所有商品信息,这需要在initTable()方法中初始化表格字段名,并调用Dao类的getKucunInfos()方法读取库存数据总的所有商品列表,添加到table商品表格组件中。统计损益数量商品表格组件需要在用户输入盘点数量时,自动计算并更新损益单元的内容,也就是使用库存商品实际数量减去商品输入的盘点数量,实现自动计算功能的最好方式,就是为表格组件的“盘点数量”编辑器的编辑组添加按键监听器,使用该按键监听器可以限制用户只能输入数字信息同时还可以在按键事件发生时进行损益统计。其关键代码如下: //盘点字段的按键监听器 privateclassPanDianKeyAdapterextendsKeyAdapter{ privatefinalJTextFieldfield; privatePanDianKeyAdapter(JTextFieldfield){ this.field=field; } publicvoidkeyTyped(KeyEvente){ if(("0123456789"+(char)8).indexOf(e.getKeyChar()+"")<0){ e.consume(); } field.setEditable(true); } publicvoidkeyReleased(KeyEvente){ StringpdStr=field.getText(); StringkcStr="0"; introw=table.getSelectedRow(); if(row>=0){ kcStr=(String)table.getValueAt(row,7); } try{ intpdNum=Integer.parseInt(pdStr); intkcNum=Integer.parseInt(kcStr); if(row>=0){ table.setValueAt(kcNum-pdNum,row,10); } if(e.getKeyChar()!=8) field.setEditable(false); }catch(NumberFormatExceptione1){ field.setText("0"); } } }4.2.7数据库备份与恢复模块设计数据库备份与恢复模块可以增强系统安全性。及时备份数据,如果发生意外可以恢复最近时间段的数据库内容,将损失降低到最小程度。数据库备份与恢复窗体界面如图4.12所示。图4.12数据库备份与恢复窗体设计窗体创建InternalFrame内部窗体类,命名为BackupAndRestore,该窗体主要用于备份和恢复系统的数据库文件文件浏览数据的备份和恢复功能都需要使用“浏览”按钮选择数据库文件的位置。本模块的窗体界面中,有两个“浏览”按钮,分别用于选择数据库备份文件和数据库恢复文件的位置。这两个“浏览”按钮的ActionListener动作监听器实现方法是相同的,监听器中通过JfileChooser文件选择器组件打开文件选择对话框,选择数据库备份文件额位置。备份数据库选择“浏览”按钮或直接在文本框中输入数据库备份文件的路径,然后单击“备份”按钮,将系统当前数据库内容备份到文件中,并为数据库保留多个备份。“备份”按钮的动作监听器将通过Dao类的RestoreOrBackup()方法执行备份数据库的SQL语句。

5系统测试5.1系统软件测试软件测试是保证软件正确性及可靠性的重要环节。测试工作涉及到软件工程的各个开发阶段。5.1.1测试的原则在测试中我们遵守以下各项原则:(1)预先估计输出结果(2)编程人员不测试本人程序。(3)测试例题的设计兼顾有效与无效输入,正确与错误输入。(4)检查一个程序是否完成了所有的工作只是测试工作的一半,另一半是要检查程序是否还有预料之外的副作用。(5)在假设系统有错的情况下进行测试。5.1.2模块测试模块测试主要对软件产品的每个模块单独的进行测试。登录测试,如表5.1所示。表5.1登陆测试测试测试用例期望结果实际结果登录模块用户名:tsoft密码:111能以此账户登陆,并具有帐户所应有的权限能以此账户登陆,并进行相关操做进货单测试,如表5.2进货测试表所示。表5.2进货测试测试测试用例期望结果实际结果进货单模块测试添加商品名为:长亮台灯,数量:100,单价:50的进货信息并入库能使用上述能编辑信息进货单模块可以完成进货信息的添加销售单测试,如表5.3所示。表5.3销售单测试测试测试用例期望结果实际结果销售单模块测试向明日科技公司销售商品长亮台灯50台完成金额的核算,并完成相关信息的变动完成期望结果库存盘点测试,如表5.4所示。表5.4库存盘点测试测试测试用例期望结果实际结果库存盘点模块测试查看长亮台灯的库存信息长亮台灯库存50台与期望结果一致5.1.3集成测试集成测试即整体测试。在完成各模块测试的基础上,连接各模块进行测试,试图在设计阶段发现隐患,完成以下任务:将系统的所有功能和特性纳入测试计划并进行测试;数据库的装载等方面的测试;系统接口,包括内部接口与外部接口的测试;错误状态处理的测试;与特定资源分布的一致性测试;完全装载的系统的实际和模拟测试;检查系统安全性的测试。

温馨提示

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

评论

0/150

提交评论