CS图书销售管理系统毕业设计与实现_第1页
CS图书销售管理系统毕业设计与实现_第2页
CS图书销售管理系统毕业设计与实现_第3页
CS图书销售管理系统毕业设计与实现_第4页
CS图书销售管理系统毕业设计与实现_第5页
已阅读5页,还剩158页未读 继续免费阅读

下载本文档

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

文档简介

年4月19日CS图书销售管理系统毕业设计与实现文档仅供参考北京邮电大学毕业设计(论文)任务书毕业设计(论文)题目:C-S图书销售管理系统毕业设计(论文)要求及原始数据(资料):1.综述编写目的程序的缘由及其所带来的方便性;2.实地了解大中型书店在日常营业中对图书的销售、管理等方式;3.精确分析系统流程,同时构建程序框架;4.熟练掌握C/S程序的编写技术,训练利用Java编写客户端程序的能力;5.熟练掌握GUI等技术,完成客户端程序与数据库之间信息的传递;6.训练数据封装能力,减少程序中的冗余代码;7.深入了解测试程序所用的黑盒法以及白盒法;8.训练检索文献资料和利用文献资料的能力;9.训练撰写技术文档与学位论文的能力。毕业设计(论文)主要内容:1.综述图书销售管理系统在大中型书店应用的前景;2.了解编写C/S程序需要的相关技术;3.熟练运用编写C/S程序的开发环境;4.精确掌握程序开发需求并设计系统流程图;5.深入分析系统流程,完成程序概要设计及划分程序模块;6.熟练运用多种Java技术实现程序中的各个模块并将其整合;7.熟练掌握测试用例的编写,完成测试,生成测试报告。学生应交出的设计文件(论文):1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。主要参考文献(资料):[1]葛欣,孟凡荣.使用cU/GUI开发图形用户界面[J].计算机工程与设计,[2]陈一明.SQLServer数据库应用技巧探讨[J].科学技术与工程,[3]张军峰.如何使软件测试更有效[J].电脑知识与技术,[4]王世峰.MVC设计模式的研究与应用[D].中国海洋大学,[5]赵淑菊.JavaGUI事件处理机制之探究[J].济南职业学院学报,[6]吕校春,李玲莉.基于Swing的JavaGUI组件开发[J].机械工程师,.[7]潘红改,李国贞.JavaGUI布局管理方法探讨[J].漯河职业学院学报,.[8]Crosby,PhilipB.QualityisFree.NewYork:NewAmericanLibrary,MentorBooks,1979.[9]Chelf,BenandRaoulJetley.“DiagnosingMedicalDeviceSoftwareDefectsUsingStaticAnalysis.”CoverityTechnicalReport.SanFrancisco:.[10]W.Clay,Richardson,Donald,“Avondolio.TheJavahighclassweavesadistance:JDK5”[11]AndreaAdamoli,DmtrijsZaparanuks,MilanJovic,MatthiasHauswirth.AutomatedGUIperformacetesting.SoftwareQualityJournal,专业班级软件1007班学生于健要求设计(论文)工作起止日期3月17日~6月27日指导教师签字日期3月17日教研室主任审查签字日期系主任批准签字日期C-S图书销售管理系统摘要随着时代的进步,科技的发展,计算机不但逐渐步入寻常百姓家庭,成为人们日常生活中不可或缺的一部分,而且在工业、农业、商业等多领域起着巨大作用。计算机的广泛应用对提高经济效益、生活效率、实现管理现代化、科学化、智能化等方面起到了举足轻重的作用,而且取得了显著效果。基于C/S的图书销售管理系统是专为图书销售单位而设计,它取代了过去会计、出纳的“账本式”记录与管理,在给工作人员带来方便快捷的同时也大大提高了她们的工作效率,加快了管理步伐,避免了账目混乱,任务繁重等问题,符合现代办公的需求。本系统主要使用Java中的GUI(图形用户界面)和AWT编程,开发环境为Eclipse,数据库采用MySQL5.0。整体框架采用三层架构模式,即显示层、业务层、数据层,大大降低了程序的耦合性。系统的主要功能包括:销售管理、库存管理、书本管理、种类管理、出版社管理五大功能模块,方便快捷地帮助书店管理人员实现了对图书进、存、销三方面的管理。关键词:图书;销售管理系统;C/S结构

Booksales&managementsystembasedonC/SAbstractWiththerapiddevelopmentofscienceandtechnology,thecomputernotonlygraduallyintotheordinarypeoplefamily,becomeanindispensablepartofPeople'sDailylife,andinmanyfieldssuchasindustry,agriculture,businessplaysabigrole.Computeriswidelyusedtoimprovetheeconomicbenefit,thelifeofefficiency,realizemodernizationmanagement,scientific,intelligent,etchasplayedapivotalrole,andachievedsignificanteffect.Booksales&managementsystembasedonC/Sisspeciallydesignedforbooksalesunit,ithasreplacedthepastrecordofaccountantandcashier"books"andthemanagement,thestafftobringconvenientatthesametimealsogreatlyimprovetheirworkefficiency,quickenthestepsofthemanagement,toavoidthechaosaccounts,theproblemsuchasonerous,meetingtheneedsofthemodernoffice.ThissystemismainlyusedinJavaGUI(graphicaluserinterface)andAWTprogramming,developmentenvironmentforEclipse,usingMySQL5.0database.OverallframeworkUSESthethree-tierarchitecturemodel,namelythedisplaylayer,businesslayer,datalayer,greatlyreducesthecouplingoftheprogram.System'smainfeaturesinclude:salesmanagement,inventorymanagement,booksmanagement,categorymanagement,pressfivebigfunctionmodule,convenientandquicktohelpbookstoremanagersrealizethebooksintomanagement,saveandpin.Keywords:Book;Sales&Management;C/Sstructure目录摘要 iAbstract ii1绪论 11.1课题背景 11.2目的和意义 11.3开发工具及技术 11.3.1开发工具 11.3.2开发语言 21.3.3开发结构及模式 31.4软硬件需求 31.4.1硬件需求 31.4.2软件需求 32需求分析 42.1可行性分析 42.1.1技术可行性 42.1.2经济可行性 42.1.3操作可行性 42.1.4法律可行性 42.2系统流程图 42.3系统用户用例图 52.4功能模块需求分析 52.5设计的基本思路 62.6性能需求 62.6.1系统的易操作性 62.6.2数据的正确性和完整性 72.6.3数据的安全性 72.7界面需求 73系统分析与设计 83.1数据库的分析与设计 83.1.1数据库的需求分析 83.1.2数据库的概念结构设计 83.1.3数据库的逻辑结构设计 113.2连接数据库的前期准备工作 143.2.1编写配置读取类 143.2.2编写JDBC操作类 163.2.3创立数据转换工具类 174系统功能的实现 194.1创立数据库对象 194.2管理员登陆页面 204.3设计父类 214.4出版社管理模块 234.5书本管理模块 284.6销售管理模块 355系统测试 435.1系统测试目的与意义 435.2测试过程 435.2.1登录模块测试 435.2.2销售管理模块测试 445.2.3库存管理模块测试 445.2.4书本管理模块测试 44结论 46参考文献 47致谢 48英文文献原文 49中文译文 551绪论1.1课题背景改革开放以来,中国经济迅速发展,科技日益更新,计算机以迅雷不及掩耳之势覆盖全球,大量实用软件更是伴随计算机语言产生而受到众多领域的青睐。好的管理软件能够把大量的工作人员从繁重的手工工作中解脱出来,提高工作效率并减少错误的发生。调查发现,当前中国中小型书店仍采用手工方式对图书进行管理记录,不但工作量大、效率低,而且还容易出现数量不清、账目混乱等问题,与现代办公要求格格不入。中小型书店最繁重的工作就是图书进、存、销三方面的工作,因此只需要设计一款简单而实用的软件,帮助书店工作人员轻松实现这三方面的工作。混乱的界面,繁琐的操作不但难以达到轻松管理的目的,还容易使工作人员情绪暴躁,影响书店效益。因此,我的目标是做一款界面清晰,操作方便的简单管理软件。1.2目的和意义图书销售管理系统开发的目的是为图书销售单位提供图书信息管理和提高图书销售管理工作的效率。

图书销售管理系统是一个图书销售单位不可缺少的部分,它的内容对于图书销售单位的决策者和管理者来说都至关重要,因此图书销售管理系统应该能够为用户提供充分的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理数据信息,这种管理方式存在着许多缺点,如:效率低、工作量大,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

作为计算机应用的一部分,使用计算机对图书销售信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、寿命长、成本低等。这些优点能够极大地提高图书销售管理工作的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。1.3开发工具及技术本系统基于C/S结构设计,采用三层架构体系,编写系统主要用到Java中的GUI(图形用户界面)和AWT编程,开发环境为Eclipse,数据库采用MySQL5.0并以NavicatforMySQL作为辅助工具。下面分别对C/S模型、三层架构模式、GUI、AWT编程、Eclipse、MySQL5.0数据库和NavicatforMySQL进行简要介绍。1.3.1开发工具(1)EclipseEclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,经过安装不同的插件Eclipse能够支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,可是众多插件的支持使得Eclipse拥有其它功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE.Eclipse最初由OTI和IBM两家公司的IDE产品开发组创立,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一个开放源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都能够免费得到,并能够在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。(2)MySQL5.0MySQL5.0是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,当前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常见标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,特别是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。(3)NavicatforMySQLNavicatforMySQL是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户依然易于学习。NavicatforMySQL基于Windows平台,为MySQL量身订作,提供类似于MySQL的用管理界面工具。此解决方案的出现,将解放PHP、J2EE等程序员以及数据库设计者、管理者的大脑,降低开发成本,为用户带来更高的开发效率。NavicatforMySQL使用了极好的图形用户界面(GUI),能够用一种安全和更为容易的方式快速和容易地创立、组织、存取和共享信息。用户可完全控制MySQL数据库和显示不同的管理资料,包括一个多功能的图形化管理用户和访问权限的管理工具,方便将数据从一个数据库转移到另一个数据库中(LocaltoRemote、RemotetoRemote、RemotetoLocal),进行档案备份。NavicatforMySQL支援Unicode,以及本地或远程MySQL服务器多连线,用户可浏览数据库、建立和删除数据库、编辑数据、建立或执行SQLqueries、管理用户权限(安全设定)、将数据库备份/复原、汇入/汇出数据(支援CSV,TXT,DBF和XML档案种类)等。软件与任何MySQL5.0.x伺服器版本兼容,支援Triggers,以及BINARYVARBINARY/BIT数据种类等的规范。1.3.2开发语言主要使用Java语言中的GUI(图形用户界面)和AWT(抽象窗口工具包)编程。(1)GUI图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口),即人机交互图形化用户界面设计,是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。(2)AWT抽象窗口工具包(AbstractWindowingToolkit,缩写为AWT)是Java的平台独立的窗口系统图形和用户界面器件工具包。AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。AWT提供了JavaApplet和JavaApplication中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观。1.3.3开发结构及模式(1)C/S结构C/S结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,经过它能够充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。当前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都能够进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都能够访问新的和现有的应用系统,经过现有应用系统中的逻辑能够扩展出新的应用系统。这也就是当前应用系统的发展方向。(2)三层架构模式三层架构模式即显示层、业务逻辑层、数据层。其工作模式:显示层往往面向操作者,主要用来接受数据、传递数据和显示数据;业务逻辑层主要是用来处理显示层接收到的数据和数据库中的数据;数据层主要用来对数据库进行操作,其中包括常见的增、删、改、查等操作。采用三层架构模式能够大大降低了程序的耦合性,符合现代软件的标准。1.4软硬件需求1.4.1硬件需求电脑:笔记本电脑或台式电脑CPU:Pentium以上内存:512M以上1.4.2软件需求操作系统版本:WindowsXP/vista/Win7开发工具:Eclipse开发语言:Java

2需求分析2.1可行性分析可行性研究主要内容是要求以全面、系统的分析为主要方法,经济效益为核心,围绕影响项目的各种因素,运用大量的数据资料论证拟建项目是否可行。对整个可行性研究提出综合分析评价,指出优缺点和建议以确定该项目是否可行。2.1.1本系统开发工具是Eclipse和MySQL数据库,开发语言是Java,java是一种面向对象编程语言,简单易学而且灵活方便。数据库的设计和操作是本系统设计的核心,但在NavicatforMySQL的帮助下能够轻松便捷的对数据库进行操作。另外,大学期间学习过数据库操作语言,软件测试,UML统一建模语言等课程使系统分析、设计和测试不再成为难题。因此,完成系统实现在技术上完全具有可行性。2.1.2经济可行性开发此项目用到的软件都是开源的,为开发软件节省了大量的金钱,达到了低成本的目的。另外,本系统对计算机配置的要求不高,几乎每个家庭中可使用的电脑都能满足。因此,开发该系统在经济上是完全可行的。2.1.3操作可行性该系统是本着界面简洁、操作方便的目的进行开发,主要目的是帮助图书销售商对图书进行进、存、销三方面管理。因此该系统在操作上具有功能简单,操作简洁的优势,完全可行。2.1.4法律可行性由于在开发过程中所使用的软件都是开源软件,不存在侵权问题。另外,开发该系统的目的仅仅是作为一款管理软件应用于图书销售单位,不存在与国家法律不符的目的综上所述,该系统的开发在法律方面也是可行的。2.2系统流程图图2.1系统流程图如图2.1所示,由于系统是C/S模式,因此无需注册等操作,只需要在编程时将用户名和密码设定,如客户对用户名和密码有特殊要求,由编程人员将客户要求的用户名和密码事先输入程序当中,如本系统的用户名和密码都为yujian,该数据已经在数据库的T_USER表事先存好。如果客户输入错误,则要重新回到登录页面输入正确的账号密码。如果输入正确,则能够进入用户操作页面进行相应的操作。在进一系列的操作之后然后点击关闭按钮,即可退出系统。2.3系统用户用例图系统只涉及图书的进、存、销三方面的功能,其所对应的功能模块分别是图书管理模块、库存管理模块、销售管理模块。另外,为方便用户在这三方面的操作更加简洁增加了出版社管理模块,种类管理模块,这样做一方面能够使用户界面简单易用,另一方面能够使用户在主要使用的三个重要界面有更多的选择而不是去输入,减少了错误发生的概率。管理员即能够正确输入用户名和密码的操作人员,且其享有全部权限。因此管理员用例图十分清晰明了,如图2.2。图2.2管理员用例图图2.2清晰明了的告诉我们用户登录是前提,只有用户经过正确的身份验证才能够操作本系统几个最重要的操作页面。2.4功能模块需求分析本系统本着界面简洁大方,操作简单的原则实现以下功能:1.系统界面清晰分明、简单易用,管理人员能够在短时间内熟练操作。2.管理员享有销售管理、库存管理、图书管理、出版社管理、种类管理五大权限。3.尽可能的让用户去选择,而不是输入,减少错误发生的概率。4.增加主要功能的快捷键,增加操作的简易性。系统的功能结构图,如图2.3。图2.3系统功能模块图从图2.3中能够看到,系统分为六个模块,分别是管理人员登录模块,销售管理模块,入库管理模块,图书管理模块,种类管理模块和出版社管理模块,其中登录模块并不与其它模块相平行,登录模块只是决定操作人员是否有权限去操作其它五大模块。2.5设计的基本思路设计思路遵循以下几点:1.考虑到图书销售单位只是简单的对图书进行管理、记录,因此软件采用C/S结构,C/S结构的优点是客户端响应速度快,能充分发挥客户端PC的处理能力,很多工作能够在客户端处理后再提交给服务器。2.采用三层架构模式。一方面能够使开发人员的逻辑思维清晰,提高软件开发效率,另一方面降低了程序的耦合性,例如本程序如果要开发成为B/S结构只需要改动业务逻辑层即可。3.模块化设计。模块化设计要求将整个系统划分成基于小的模块,有利于代码的重载,简化设计和实现过程。4.效率第一。设计该系统的目的是让大量工作人员从繁琐的工作中解脱出来,因此本系统必须达到提高工作效率的目的。5.界面清晰明了,操作简单。方便用户使用,让用户能够在最短时间轻松方便的适应系统的操作。7.系统设计不但要功能完善还要突出重点。要符合设计需求,在有可能改进的地方进行扩充,使系统更适应用户的需要。2.6性能需求2.6.1系统的易操作性为使工作人员能够轻松操作该系统,需做到以下要求:1.操作界面不涉及跳转,要操作的界面覆盖已显示的界面。2.主要功能界面尽可能的让用户去选择,而不是输入。3.部分系统设计加入自动计算功能,且不可更改。4.在操作发生错误时出现友好提示。2.6.2数据的正确性和完整性1.数据库设计过程中明确哪些数据能够为空,哪些数据不能为空。2.关系表中的相关数据必须明确统一。3.具有自动判断功能,如销售数量大于库存数量时应给出友好的错误提示。4.具有自动加、减、乘功能,保证单价、总量等数据的正确性。5.交易日期根据系统时间而显示、记录,且不可更改。2.6.3数据的安全性只有被授权的管理人员,即知道账户和密码的人才可进入系统。2.7界面需求界面设计是整个设计很重要的一部分,好的界面不但方便管理人员操作,还能够使操作人员有一个阳光的心情,提高工作人员工作效率,因此界面的设计必须满足以下几点要求:1.简易性界面的简洁是让用户便于了解,便于使用,并能减少用户发生错误选择的可能性。2.用户语言界面中要使用能反应用户本身的语言,而不是程序员的语言。3.记忆负担最小化人脑不是电脑,在设计界面时必须要考虑大脑处理信息的限度。人类的短期记忆极不稳定,且有限,24小时内存在25%的遗忘率。因此对用户来说,浏览信息要比记忆更加重要。4.一致性一致性是每个优秀界面都具备的特点。界面的结构必须清晰且一致,与客户的需求一致。5.清楚视觉上便于理解与使用。6.用户熟悉程度用户可经过已掌握的知识来使用界面,但不应超出一般常识。7.人性化高效率和用户满意度是人性化的体现。想用户所想,做用户所做,用户总是按照她们自己的方法理解和使用。8.安全性用户做出危险的选择使有信息介入系统的提示。

3系统分析与设计3.1数据库的分析与设计数据库是整个系统的各个部分能否紧密地结合在一起以及如何结合的关键所在,因此数据库是系统的核心和基础。的计算机信息系统以数据库为核心,在数据库管理系统的支持下,进行信息的收集、整理、存储、检索、更新、加工、统计和传播等操作。数据库设计的好坏直接影响到整个系统的质量和效率。数据库的设计一般经过需求分析、概念设计、逻辑设计、物理设计4个步骤。3.1.1首先能够确定需要一个用户表,其中储存的数据有用户名和密码,以作验证之用。其次,系统相关的表,从最基础开始,有出版社表、书的类型表、书表、入库记录表和销售记录表,其中,一条入库记录中涉及多本书,一条销售记录也涉及多本书,因此还需要书的入库记录表和书的销售记录表,一条书的入库记录对应一本书,该条书的入库记录属于某一条入库记录,能够理解成这是书与入库记录的关系表,同样地,书的销售记录与书的入库记录一样。3.1.2概念设计是指在数据分析的基础上自底向上的建立整个系统的数据库概念结构,从用户的角度进行视图设计,然后将视图集成,最后对集成的结构分析优化得到最后结果。数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型用E-R图表示,E-R模型法的组成元素有:实体、属性、联系。下面简单介绍这三种组成元素:1.实体(Entity):客观存在并可相互区别的事物称为实体。实体能够是具体的人、事、物,例如一名学生,一门课程等;也能够是抽象的概念或联系,例如一次选课,一场竞赛等。2.属性(Attribute):每个实体都有自己的一组特征或性质,这种用来描述实体的特征或性质称为实体的属性。例如,学生实体具有学号、姓名、性别等属性。不同实体的属性是不同的。实体属性的某一组特定的取值(称为属性值)确定了一个特定的实体。例如,学号是0611001、姓名是王冬、性别是女等等,这些属性值综合起来就确定了“王冬”这名同学。属性的可能取值范围称为属性域,也称为属性的值域。例如,学号的域为8位整数,姓名的域为字符串集合,性别的域为(男,女)。实体的属性值是数据库中存储的主要数据。3.联系(Relation):现实世界中,事物内部以及事物之间不是孤立的,是有联系的,这些联系反映在信息世界中表现为实体内部的联系和实体之间的联系。概念设计的目标是产生反映企业组织信息要求的数据库概念结构,即概念模式。概念模式独立于数据库逻辑结构,独立于数据库的DBMS,不依赖于计算机系统的,根据以上对数据库的需求分析,并结合系统概念模型的特点及建立方法,建立E-R模型图,其中用矩形表示实体,椭圆形表示属性,棱形表示实体间关系。本系统概念设计图有:图3.1管理员实体E-R图图3.1所示为管理员信息的E-R图,其中包括的信息有ID、用户名和密码,ID是隐藏列,作为主键。用户名和密码作为是否有权操作系统的验证信息储存在数据库当中。图3.2出版社实体E-R图图3.2是出版社信息的E-R图,主要包括出版社名称、联系人、联系电话、简介四方面,存储这些信息的主要目的是方便图书管理人员联系出版社以进行进退货的协商。图3.3书本信息实体E-R图图3.3为书本信息的E-R图,主要包括的信息有书名、作者、单价、缩略图和库存数量。书名、单价和作者是由操作人员输入并储存在数据库当中的。库存数量是当前书本的数目,当数目发生改变时,数据会自动更新。图3.4种类信息实体E-R图图3.4是种类信息的E-R图,主要包括种类名称、简介两部分信息。由于种类管理页面是作为图书管理页面的辅助页面设计的,其数据库中的信息也是为图书管理信息设计的。图3.5入库信息实体E-R图图3.5是入库信息的E-R图,因为库存管理页面有个按日期查询入库信息的功能,为此,需要设计一个记录入库日期的数据库。图3.6交易信息实体E-R图图3.6是交易信息的E-R图,设计这样一个数据的目的同设计入库信息的目的是一样的,都是为了方面管理人员进行查询。图3.7书的入库信息实体E-R图如图3.7,书的入库信息不同于入库信息,书的入库信息包括入库书本的名称、入库数量和相关的入库记录三方面的信息。入库管理信息页面中按日期查询入库记录所查询到的内容正是此数据中记录的相关信息。图3.8销售信息实体E-R图图3.8是销售信息的E-R图,与图3.7相似,这个数据库的设计主要是保存销售的书本、数量和当天的销售记录信息,其主要目的一方面是记录,另一方面是方便管路人员查询。3.1.3数据库的逻辑结构设计由于数据库概念模型独立于任何特定的数据库管理系统,因此,需要根据具体使用的数据库管理系统的特点进行转换。即转化为按计算机观点处理的逻辑关系模型,E-R模型向关系数据库模型转换应遵循下列原则:1.每一个实体要转换成一个关系2.所有的主键必须定义非空(NOTNULL)3.对于二元联系应按照一对多、弱对实、一对一、多对多等联系来定义外键。根据E-R模型,图书管理系统建立了以下逻辑数据结构,下面是各数据表的详细说明:1.管理员信息表只记录账户与密码,以便登录用。表结构如表3.1所示。表3.1管理员信息表(t_user)列名数据类型长度允许空是否主键说明IDint自增否是主键USER_NAMEvarchar20是否用户名USER_PASSWORDvarchar20是否密码2.种类信息表主要是记录了书的种类的基本信息,表结构如表3.2所示。表3.2书的种类信息表(t_book_type)列名数据类型长度允许空是否主键说明IDint自增否是主键TYPE_NAMEvarchar50是否类别名称TYPE_INTROvarchar200否否种类简介3.出版社信息表主要是记录了出版社的相关信息,表结构如图3.3所示。表3.3出版社信息表(t_publisher)列名数据类型长度允许空是否主键说明IDInt自增否是主键PUB_NAMEvarchar50是否出版社名称PUB_TELvarchar50是否联系电话PUB_LINK_MANvarchar50是否联系人PUB_INTROvarchar200是否简介4.书本信息表主要记录了与书相关的所有内容,表结构如表3.4示。表3.4书本信息表(t_book)列名数据类型长度允许空是否主键说明IDint自增否是编号BOOK_NAMEvarchar50是否书名BOOK_INTROvarchar50是否简介BOOK_PRICEdouble50是否单价TYPE_ID_FKint100否否种类外键PUB_ID_FKint100否否出版社外键IMAGE_URLvarchar200是否缩略图URLAUTHORvarchar200是否作者REPERTORY_SIZEbigint10是否库存数量5.交易记录表,一个交易记录包括多个书的销售记录,一次交易可能有多本书,表结构如表3.5示。表3.5书本交易信息表(t_sale_record)列名数据类型长度允许空是否主键说明IDint自增否是编号RECORD_DATEdatetime是否交易日期6.书的销售记录,一条记录对应一本书,表结构如表3.6示。表3.6书本信息表(t_book_sale_record)列名数据类型长度允许空是否主键说明IDint自增否是编号BOOK_ID_FKint100是否交易日期T_SALE_RECORD_ID_FKint100是否销售记录所对应的交易记录TRADE_SUMint10是否销售数量7.入库记录表,一次入库会入多本书,表结构如表3.7所示。表3.7入库记录表表(t_book_sale_record)列名数据类型长度允许空是否主键说明IDint自增否是编号RECORD_DATEdatetime是否交易日期8.书的入库记录表,其中包括入库的书、对应的入库记录、入库数量等信息,表结构如表3.8所示。表3.8入库记录表表(t_book_in_record)列名数据类型长度允许空是否主键说明IDint自动增长否是主键BOOK_ID_FKint100是否入库的书T_SALE_RECORD_ID_FKint100是否对应的入库记录TRADE_SUMint10是否销售数量3.2连接数据库的前期准备工作数据库中的表已经建好,在系统功能实现时只需要建立每个表相对应的类即可,要使客户对书本的管理信息存入数据库就必须将数据库与程序联系起来。为此,需要做一些工作将数据库“嵌入”系统之中。3.2.1编写配置读取类连接数据库就要先做数据库相关的一些配置,例如对应数据库的相关驱动、数据库地址、用户名和密码,然后能够放到配置文件中,如果需要更换数据库或者地址,只需要修改这份配置文件即可。建立配置文件perties,内容如下://JDBC驱动jdbc.driver=com.mysql.jdbc.Driver//连接地址jdbc.url=jdbc:mysql://localhost:3306/book_system//数据库用户名jdbc.user=yujian//密码jdbc.pass=yujian建立好该文件后,再编写类去读取该文件,获得所需要的值即可。用于读取配置的PropertiesUtil类,代码如下:publicclassPropertiesUtil{//该记录所对应的书的销售数量 privatestaticPropertiesproperties=newProperties(); privatestaticStringCONFIG="/cfg/perties";//配置文件的路径 //读取资源文件,设置输入流 privatestaitcInputStreamis=propertiesUtil.class.getResourceAsStream(CONFIG); publicstaticStringJDBC_DRIVER;//数据库驱动 publicstaticStringJDBC_URL;//jdbc连接url publicstaticStringJDBC_USER;//数据库用户名 publicstaticStringJDBC_PASS;//数据库密码 static{ properties.load(is);//加载输入流 //获得配置的各个属性 JDBC_DRIVER=properties.getProperty("jdbc.driver"); JDBC_URL=properties.getProperty("jdbc.url"); JDBC_USER=properties.getProperty("jdbc.user"); JDBC_PASS=properties.getProperty("jdbc.pass"); }}publicclassPropertiesUtil{//该记录所对应的书的销售数量 privatestaticPropertiesproperties=newProperties(); privatestaticStringCONFIG="/cfg/perties";//配置文件的路径 //读取资源文件,设置输入流 privatestaitcInputStreamis=propertiesUtil.class.getResourceAsStream(CONFIG); publicstaticStringJDBC_DRIVER;//数据库驱动 publicstaticStringJDBC_URL;//jdbc连接url publicstaticStringJDBC_USER;//数据库用户名 publicstaticStringJDBC_PASS;//数据库密码 static{ properties.load(is);//加载输入流 //获得配置的各个属性 JDBC_DRIVER=properties.getProperty("jdbc.driver"); JDBC_URL=properties.getProperty("jdbc.url"); JDBC_USER=properties.getProperty("jdbc.user"); JDBC_PASS=properties.getProperty("jdbc.pass"); }}3.2.2编写JDBC操作类JDBC是JavaDataBaseConnectivity的简称,是Java中进行数据库连接的技术。JDBC的API提供了标准统一的SQL数据存取接口,能够让程序员不需要关心如何去连接不同的数据库,只需为不同的数据库提供不同的驱动,就能够达到连接不同数据库的要求。配置好了之后,开始着手编写数据库的操作类,首先肯定是帮我们进行数据库连接,我们之前配置了连接的相关属性,接着我们需要这个类帮我们提供查询、执行SQL等功能。确定好目标后,开始编写。新建JDBCExecutor类,该类具有属性如下:privatestaticStringDRIVER=PropertiesUtil.JDBC_DRIVER;//获得驱动privatestaticStringURL=PropertiesUtil.JDBC_URL;//获得url//获得连接数据库的用户名 privatestaticStringUSER=PropertiesUtil.JDBC_USER;//获得连接数据库的密码 privatestaticStringPASS=PropertiesUtil.JDBC_PASS; privateConnectionconnection;//连接对象 privatestaticJDBCExecutorjdbcExecutor;//维护一个本类型的对象 privateStatementstmt;//维护一个本类型的对象 privatestaticStringDRIVER=PropertiesUtil.JDBC_DRIVER;//获得驱动 privatestaticStringURL=PropertiesUtil.JDBC_URL;//获得url//获得连接数据库的用户名 privatestaticStringUSER=PropertiesUtil.JDBC_USER;//获得连接数据库的密码 privateConnectionconnection;//连接对象 privatestaticStringPASS=PropertiesUtil.JDBC_PASS; privatestaticJDBCExecutorjdbcExecutor;//维护一个本类型的对象 privateStatementstmt;//维护一个本类型的对象注:由于创立一个Connection对象需要耗费很大的资源,因此使用单态模式,让JDBCExecutor类维护一个JDBCExecutor对象,能够在构造器中创立Connection,由于JDBCExecutor是单态的,因此能够保证在应用中只创立一个Connection。然后在JDBCExecutor的构造器中创立各个对象,再提供一个方法返回JDBCExecutor的实例。privateJDBCExecutor(){ //初始化JDBC驱动并让驱动加载到jvm中 Class.forName(DRIVER); //创立数据库连接 connection=DriverManager.getConnection(URL,USER,PASS); //创立Statement对象 stmt=connection.createStatement();}publicstaticJDBCExecutorgetJDBCExecutor(){ //如果本类所维护jdbcExecutor属性为空,则调用私有的构造器获得实例 if(jdbcExecutor==null)jdbcExecutor=newJDBCExecutor(); returnjdbcExecutor;}privateJDBCExecutor(){ //初始化JDBC驱动并让驱动加载到jvm中 Class.forName(DRIVER); //创立数据库连接 connection=DriverManager.getConnection(URL,USER,PASS); //创立Statement对象 stmt=connection.createStatement();}publicstaticJDBCExecutorgetJDBCExecutor(){ //如果本类所维护jdbcExecutor属性为空,则调用私有的构造器获得实例 if(jdbcExecutor==null)jdbcExecutor=newJDBCExecutor(); returnjdbcExecutor;}最后只需要编写一些简单查询功能,并把查询后的结果保存在一个对象中即可:publicResultSetexecuteQuery(Stringsql){ //利用Statement对象执行参数的sql ResultSetresult=stmt.executeQuery(sql); returnresult; }publicintexecuteUpdate(Stringsql){ intresult=-1; //执行SQL语句 stmt.executeUpdate(sql); //获得主键 ResultSetrs=stmt.getGeneratedKeys(); while(rs.next())result=rs.getInt(1);//返回最后一个主键 rs.close(); returnresult;}3.2.3创立数据转换工具类DBCExecutor中提供了一个executeQuery方法,该方法返回ResultSet对象,需要对该结果集进行一些封装。因此需要创立一个工具类,对该结果集进行封装,并返回对应的集合。具体的代码如下。publicstaticCollectiongetDatas(Collectionresult,ResultSetrs,Classclazz){ while(rs.next()){ //创立类的实例 Objectvo=clazz.newInstance(); //获取本对象的属性 Field[]fields=clazz.getDeclaredFields();Field[]allFields=addFields(superFields,fields); //遍历所有的属性 for(Fieldfield:allFields){ //获得setter方法的方法名 StringsetterMethodName=getSetterMethodName(field.getName()); //获得setter方法 MethodsetterMethodName=clazz.getMethod(setterMethodName,field.getType()); invokeMethod(rs,field,vo,setterMethod); } result.add(vo); } rs.close(); returnresult;}privatestaticvoidinvokeMethod(ResultSetrs,Fieldfield,Objectvo,MethodsetterMethod){ Stringvalue=rs.getString(field.getName()); //从ResultSet中获取与该对象属性名一致的字段,并执行setter方法 setterMethod.invoke(vo,value);} privatestaticStringgetSetterMethodName(StringfieldName){ Stringbegin=fieldName.substring(0,1).toUpperCase(); Stringend=fieldName.substring(1,fieldName.length()); StringmethodName="set"+begin+end; returnmethodName;}privatestaticField[]addFields(Field[]f1,Field[]f2){ List<Field>l=newArrayList<Field>(); for(Fieldf:f1)l.add(f); for(Fieldf:f2)l.add(f); returnl.toArray(newField[f1.length+f2.length]);}至此,已经完成了前期所有准备工作,接下来就能够按照客户的需求,得到的数据以及之前的设计来实现系统的功能。

4系统功能的实现数据库设计完成后,就开始进入具体的应用程序的分析与设计阶段。应用程序的分析与设计主要包括了应用程序各个功能模块的总体规划和分析、应用程序界面的选择与设计以及应用程序结构的选择等部分,而系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶。4.1创立数据库对象已经设计了系统所需要的各个表,包括出版社表、书种类表、书表等,接着需要为这些表建立相应的对象,每一个表能够对应一个对象。首先新建出版社所对应的实体Concern类,一个Concern对象代表一个出版社,该类继承于ValueObject,另外,出版社表中有的字段,都需要在这个类中反应出来。Concern类:publicclassConcernextendsValueObject{ privateStringPUB_NAME;//出版社名称 privateStringPUB_TEL;//出版社电话 privateStringPUB_LINK_MAN;//联系人 privateStringPUB_INTRO;//简介}Type类:publicclassTypeextendsValueObject{ privateStringTYPE_NAME;//名称 privateStringTYPE_INTRO;//简介}User类:publicclassUserextendsValueObject{ privateStringUSER_NAME;//对应书的外键,从数据库查出来时有值 privateStringUSER_PASSWORD;//对应销售记录外键}Book类:publicclassBookextendsValueObject{ privateStringBOOK_NAME;//书本名称 privateStringBOOK_INTRO;//简介 privateStringBOOK_PRICE;//书的单价 privateStringTYPE_ID_FK;//种类外键 privateStringPUB_ID_FK;//出版社外键 privateStringREPERTORY_SIZE;//存储量 privateStringIMAGE_URL;//图片url}InRecord类:publicclassInRecordextendsValueObject{ privateStringRECORD_DATE;//入库日期}BookInRecord类:publicclassBookInRecordextendsValueObject{ privateStringBOOK_ID_FK;//对应书的外键,从数据库查出来时有值 privateStringT_IN_RECORD_ID_FK;//对应销售记录外键 privateStringIN_SUM;//入库数量}SaleRecord类:publicclassSaleRecordextendsValueObject{ privateStringRECORD_DATE;//交易日期}BookSaleRecord类:publicclassBookSaleRecordextendsValueObject{ privateStringBOOK_ID_FK;//该记录对应的书的外键 privateStringT_SALE_RECORD_ID_FK;//该记录对应的销售记录的外键 privateStringTRADE_SUM;//该记录所对应的书的销售数量}4.2管理员登陆页面1.描述:为了保证系统的安全性,要使用本系统必须先登陆到系统中。2.程序运行效果图如图4.1所示。图4.1管理员登陆页面设计3.在登陆页面输入用户名和密码以,点击登录按钮,跳转到登录的service中,在该service中会对用户名,密码进行判断,如果正确则进入到管理界面,如果错误则提示“用户名或密码不正确”,页面重新调转到登陆页。首先编写用户业务接口:关键代码:publicinterfaceextendsUserService{/***用户登录的方法,如果登录失败,则抛出BusinessException */Voidlogin(Stringname,Stringpassword)}BusinessException异常实现代码:publicclassBusinessExceptionextendsRuntimeException{publicBusinessException(Stringm){ super(m); }}实现用户业务层接口关键代码:publicclassUserServiceImplimplementsUserService{ privateUserDaouserDao; publicUserServiceImpl(UserDaouserDao){ this.userDao=userDao; } publicvoidlogin(Stringname,Stringpassword){ Useruser=userDao.getUser(name,password); if(user==null){ thrownewBusinessException("用户名或密码错误"); } }}在完成登录界面以后我们就能够继续编写其它主要功能界面,在编写开始之前我们要将系统分为三层:表现层、业务层、数据访问层,这样分层的好处在于,如果视图层发生变化,例如不再使用swing作为表现层,使用jsp的话,那么,业务层、数据访问层的代码将不需要改变,达到重用的目的。业务层与数据访问层分别提供各自的接口,在表现层中使用业务层的接口,业务层中使用数据访问层的接口,就算实现发生了改变,也能够不用去更改调用者的代码,当需要更改某一部分实现的时候,直接更换实现类即可。4.3设计父类由于每个表中都有ID一列因此能够为每个表的对象先建立一个父类,提供ID字段。父类主要代码: publicclassValueObject{ privateStringID;}除了管理员登录界面,其它各个界面几乎都大同小异,界面上面部分是一个列表,下面是一个表单,因此能够把几个界面的共同部分提取出来作为每个界面对象(JPanel)的父类,将一些能够重用的代码提升至父类。这样做不但能够使我们的逻辑思维更加清晰,还能够减少代码量,提高开发效率。首先,在数据访问层建立一个父类,给该层各个DAO实现类去继续,提供一些可能每个DAO都会使用到的方法:publicclassCommonDaoImpl{ //返回JDBCExecutor对象 publicJDBCExecutorgetJDBCExecutor(){ returnJDBCExecutor.getJDBCExecutor(); } //根据参数的SQL,存放结果的集合对象,和具体的数据库映射对象返回一个集合 publicCollectiongetDatas(Stringsql,Collection<ValueObject>result, Classclazz){ //执行SQL返回ResultSet对象 ResultSetrs=getJDBCExecutor().executeQuery(sql); //对ResultSet进行封装并返回集合 returnDataUtil.getDatas(result,rs,clazz); }}其次,创立各个界面对象的父类并提供一些抽象方法让子类去实现:privateJTabletable;//存放数据的tableprotectedVector<Vector>datas;//列表数据publicvoidsetJTable(JTabletable){this.table=table;}publicJTablegetJTable(){returnthis.table;}publicVector<Vector>getDatas(){returndatas;}publicvoidsetDatas(Vector<Vector>datas){this.datas=datas;}//将数据设置进JTable中publicvoidinitData(){if(this.table==null)return;DefaultTableModeltableModel=(DefaultTableModel)this.table.getModel();//将数据设入表格Model中tableModel.setDataVector(getDatas(),getColumns());//设置表格样式setTableFace();}//刷新列表的方法publicvoidrefreshTable(){initData();getJTable().repaint();}//获取表列集合,由子类去实现publicabstractVector<String>getColumns();//设置列表的样式,由子类去实现publicabstractvoidsetTableFace();//设置数据列表的方法,由子类去实现publicabstractvoidsetViewDatas();//清空界面下边的列表publicabstractvoidclear();//给子类使用的方法,用于获取一个列表的id列值publicStringgetSelectId(JTabletable){introw=table.getSelectedRow();intcolumn=table.getColumn("id").getModelIndex();Stringid=(String)table.getValueAt(row,column);returnid;}4.4出版社管理模块出版社管理模块主要功能是记录图书销售单位供货商,即出版社的相关信息,其中有出版社名称,联系人,联系电话,出版社简介四大信息。该模块一方面能够帮助管理人员记录为本单位供货的出版社的信息,另一方面能够在图书管理模块作为被调用对象来显示。程序运行效果图如图4.2所示。图4.2出版社主页面分步骤实现以下功能1.获取全部出版社功能数据访问层接口关键代码如下:publicinterfaceConcernDao{ Collection<Concern>findAll();} 实现接口方法的类关键代码如下:publicclassConcernDaoImplextendsCommonDaoImplimplementsConcernDao{ publicCollection<Concern>findAll(){ Stringsql="SELECT*FROMT_PUBLISHERpubORDERBYpub.IDDESC"; returngetDatas(sql,newVector(),Concern.class); }}业务层接口代码如下关键代码如下:publicinterfaceConcernService{ Collection<Concern>getAll();}实现业务层接口方法的类关键代码如下:publicclassConcernServiceImplimplementsConcernService{ //数据访问对象 privateConcernDaodao; //在构造器中设置ConcernDao publicConcernServiceImpl(ConcernDaodao){ this.dao=

温馨提示

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

评论

0/150

提交评论