摘 要随着现代科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用愈来愈重要,我国图书馆计算机等信息技术的应用起步于20世纪70年代末期,随着改革开放的步伐得迅速发展,特别是90年代以后,我国图书馆信息网络建设取得了较大发展图书馆信息化建设迈向了一个新台阶。图书馆管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强.数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。因此本人结合开入式图书馆的要求,对SQL Server数据库、SQL语言原理、Visual Basic.net应用程序设计,数据库技术进行了较深入的学习和应用,主要完成对图书管理系统的需求分析、功能模块划分、数据库模式分析,并由此设计了数据库结构和应用程序。系统运行结果证明,本文所设计的图书管理系统可以满足借阅者、操做员(user)、图书馆工作人员(osa)和高级管理员(admini)三方面的需要。关键词:SQL语言;数据库组件;图书管理;窗体AbstractAlong with the technical advance in modern science, mankind society head for gradually the information turns, the library owns the abundant cultural heritage information resources, using the importance of the social system to constitute the part, in information society the function is more and more important, our country technical and applied start in information in etc. in calculator in library in 20 centuries 70's last phase, is liberal to develop quickly along with the step that reform, especially 90's hereafter, our country library information network developments obtained the big development library information turns developments headed into a new step.The book management system is a typical information management system (MIS), its development mainly includes the application procedure of establishment and maintenance and head of backstage database to develop two aspects. Start to build up the data consistency and the integrity to the former request strong, the data safety good database .But then request applying procedure function is complete to the latter, easy usage etc. characteristics. So oneself combine to open into the request of type library, apply program design to the SQL server databaseVisual Basic.netdatabase technique carried on more thorough study and application, mainly completing the need to manage the system to book analysis, function mold piece divide the line, database mode analysis, and designed database structure from here and applied procedure. he system circulates a result certificate, the book designed by this text management the system can satisfy to borrow to read, hold to do a member(user), library of staff member(osa) and deluxe managing person(admini)'s three aspects.Keywords: SQLlanguage; databasemodule; bookmanagement; win-dowbody.目录 TOC \o "1-3" \z \u HYPERLINK \l "_Toc200045875" 摘 要 200045875 I HYPERLINK \l "_Toc200045876" Abstract 200045876 II HYPERLINK \l "_Toc200045877" 第一章 绪论 200045877 1 HYPERLINK \l "_Toc200045878" 1.1课题背景 200045878 1 HYPERLINK \l "_Toc200045879" 1.2 图书馆信息化管理 200045879 1 HYPERLINK \l "_Toc200045880" 第2章 开发工具简介 200045880 1 HYPERLINK \l "_Toc200045881" 2.1 VB简介 200045881 1 HYPERLINK \l "_Toc200045882" 2.2 VB发展 200045882 2 HYPERLINK \l "_Toc200045883" 第3章 图书馆管理系统需求分析 200045883 3 HYPERLINK \l "_Toc200045884" 3.1可行性分析 200045884 3 HYPERLINK \l "_Toc200045885" 3.2系统目标 200045885 3 HYPERLINK \l "_Toc200045886" 3.3基础信息维护 200045886 3 HYPERLINK \l "_Toc200045887" 3.4读者管理 200045887 4 HYPERLINK \l "_Toc200045888" 3.5 图书管理 200045888 5 HYPERLINK \l "_Toc200045889" 第4章 图书馆管理系统数据库分析 200045889 6 HYPERLINK \l "_Toc200045890" 4.1 数据库 200045890 6 HYPERLINK \l "_Toc200045891" 4.1.1 用户数据 200045891 6 HYPERLINK \l "_Toc200045892" 4.1.2 元数据 200045892 6 HYPERLINK \l "_Toc200045893" 4.1.3 索引 200045893 6 HYPERLINK \l "_Toc200045894" 4.1.4 应用元数据 200045894 7 HYPERLINK \l "_Toc200045895" 4.2 创建数据库 200045895 7 HYPERLINK \l "_Toc200045896" 4.3 图书管理系统 200045896 7 HYPERLINK \l "_Toc200045897" 4.4图书馆管理系统E-R 200045897 8 HYPERLINK \l "_Toc200045898" 4.5 图书馆管理系统数据表清单 200045898 9 HYPERLINK \l "_Toc200045899" 第5章 实例制作介绍 200045899 10 HYPERLINK \l "_Toc200045900" 5.1实例功能图书馆 200045900 10 HYPERLINK \l "_Toc200045901" 5.2 系统流程图 200045901 11 HYPERLINK \l "_Toc200045902" 第6章 图书馆管理系统数据库设计 200045902 12 HYPERLINK \l "_Toc200045903" 6.1 创建数据库 200045903 13 HYPERLINK \l "_Toc200045904" 6.2 创建读者信息数据表 200045904 13 HYPERLINK \l "_Toc200045905" 6.3 创建图书信息数据表 200045905 13 HYPERLINK \l "_Toc200045906" 6.4 创建图书借阅数据表 200045906 14 HYPERLINK \l "_Toc200045907" 6.5 创建其他关键数据表 200045907 15 HYPERLINK \l "_Toc200045908" 6.6创建主键及外键等表的约束 200045908 15 HYPERLINK \l "_Toc200045909" 6.6 创建存储过程 200045909 17 HYPERLINK \l "_Toc200045910" 第7章 程序开发 200045910 20 HYPERLINK \l "_Toc200045911" 7.1程序运行结果 200045911 20 HYPERLINK \l "_Toc200045912" 7.2 创建工程 200045912 28 HYPERLINK \l "_Toc200045913" 7.3创建系统主窗体 200045913 28 HYPERLINK \l "_Toc200045914" 7.4完成的读者类别设置功能 200045914 28 HYPERLINK \l "_Toc200045915" 7.5完成读者档案管理功能 200045915 30 HYPERLINK \l "_Toc200045916" 7.6完成图书类别功能 200045916 31 HYPERLINK \l "_Toc200045917" 7.7完成图书档案管理功能 200045917 31 HYPERLINK \l "_Toc200045918" 7.8完成图书征订功能 200045918 32 HYPERLINK \l "_Toc200045919" 7.9完成图书借阅功能 200045919 33 HYPERLINK \l "_Toc200045920" 7.10 完成图书归还功能 200045920 34 HYPERLINK \l "_Toc200045921" 7.11完成图书罚款功能 200045921 35 HYPERLINK \l "_Toc200045922" 7.12 编译并运行系统 200045922 35 HYPERLINK \l "_Toc200045923" 结论 200045923 36 HYPERLINK \l "_Toc200045924" 致谢 200045924 37 HYPERLINK \l "_Toc200045925" 参考文献 200045925 38 HYPERLINK \l "_Toc200045926" 附录 200045926 39第一章 绪论1.1课题背景随着现代科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用愈来愈重要,我国图书馆计算机等信息技术的应用起步于20世纪70年代末期,随着改革开放的步伐得迅速发展,特别是90年代以后,我国图书馆信息网络建设取得了较大发展图书馆信息化建设迈向了一个新台阶。1.2 图书馆信息化管理图书馆的信息化从最初的对图书馆业务管理实行信息化发展到对图书馆各个业务流程进行系统和网络话化管理,并建立大规模以个体文献目录联机查询为主的资源共享系统。进入21世纪,充分利用计算机网络和信息技术,逐步实现不同载体的实体文献的信息化管理和多方位的联机查询。图书馆的计算机信息化管理,就是将传统图书馆业务的手工操作转变成由计算机管理,既图书馆的图书期刊、音像资料等各种载体文献的采编、典藏、流通、检索及常规业务管理等工作,利用计算机技术,进行高效、准确的信息化管理。其根本目的是实现区域内及地区、国家、国家间的资源共享。要达到资源共享的目的,必须制定一定的标准,只有各个系统都遵循这些标准,不同的系统间才可以实现联机查询、资源共享的效果。第2章 开发工具简介2.1 VB简介Basic是指BASIC(Beginner All-purpose Symbolic Instruction Code初学者通用符号指令代码),具有面向普通使用者,易学易用的优点。它作为一个古老的程序设计语言对计算机的普及、推广起到了不可估量的作用。目前Basic语言可能拥有用户最多的计算机语言。Visual的英文原意是“可视的”“视觉的”。在这里指开发图形用户界面的方法,既“可视化程序设计”。这种方法不需要编写大量代码去描述界面的外观和位置,而只要把预先建立的控件,像使用的“画图”之类的绘图程序那样“画”到屏幕即可。2.2 VB发展Visual Basic 是 Microsoft公司与1991年推出的Windows 应用程序开发工具。Visual Basic 与传统的语言不同,它使用可视化、交互式的方法来开发Windows 下的应用程序,由于Visual Basic 的交互特性,因此可以一边运行着应用程序,一边进行界面的调整和程序代码的调试。通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后。自从 Visual Basic 5.0版之后,Microsoft 公司将OCX技术和其他的一些关键技术组合到了一起,制定出了新的技术规范,并且称之为ActiveX(TM)技术。ActiveX(TM)技术仍然遵从OLE2.0的规范,故而继续可以像原来的OLE应用那样使用其它应用程序提供的功能,例如Microsoft Word字处理器,Microsoft Excel电子数据表及其它Windows应用程序。甚至可直接使用VBP或VBE创建的应用程序和对象。Visual Basic 具有强大的数据库访问能力,在Visual Basic内部具有内嵌的DAO对象,在进行远程访问的时候,还可以使用RDO对象。Visual Basic在进行数据库对象编程时,是将数据库系统作为一个特殊的对象来进行处理的。利用ODBC,Visual Basic的数据库对象可以非常方便地访问无论是本地的还是远程的数据库。对于具有安全性设置的数据库系统,Visual Basic可以充分利用其安全机制,对于有事务和日志的大型数据库系统,Visual Basic可以方便地实现分布式的数据库处理,例如数据访问的并发问题、批量数据的更新的恢复等问题。第3章 图书馆管理系统需求分析3.1可行性分析 1.技术可行性随着国内软件开发的日益发展壮大,各种中小企事业单位已具备独立开发各种类型的软件的能力,能够满足不同行业的特别的需求。现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有:Microsoft公司的Visual BasicMicrosoft公司的Visual CBorland公司的Delphi Powersoft公司的PowerBuliderJava等等,这些大大提高了数据库应用软件开发的效率。2.经济可行性对于整个系统而言,在系统未运行之前,初期投资比较大,花费相对而言比较多。各部门必须配置电脑、服务器、打印机、传真机及相关的网络设备,但是在整个系统投入运行之后,将会给该企业带来前所未有的方便和快捷,减少不必要的中间环节以及不必要的开支,而且可以给其带来更大的利润。总之,这个系统的经济效益远远大于开发成本,而同时又减少了数据的流通环节,不必要花费那么多的时间,也就是说最重要的是就是提高了效率,而又保证了各项数据的准确性,也避免了工作人员的流动造成的收据丢失等问题,适应了当前的发展形式。3.管理可行性随着时代的发展,人员素质己逐步提高,不论是对于电脑系统的基本操作还是对于系统的维护都有了一定的基础。同时还可以配置专业的电脑维护人员来维护电脑,不必担心电脑故障问题。4.开发环境可行性采用Visual Basic开发工具。它首先是一个开放的协作式系统之外,可以和多种PC产品集成,并可以通过专用接口或ODBC接口连接许多比较常用的数据库。其次它具有可视化的开发环境,使代码的编写更为直观,并且在可视化环境下的调试和维护也相对容易。再次它随身携带的Sybase SQL Anywhere本身就是个功能强大的DBMS,对小型应用来说,直接使用这个数据库就是个质优价廉的选择。而为方便用户界面的开发,Visual Basic提供了大量控件,这既丰富了应用程序的表达能力,也加快了项目的开发速度。同时,它拥有多平台的开发环境,如果要把一个平台上开发的代码移植到另外一个平台上,只要重新编译就可以了。3.2系统目标我们一般设计系统都要完成以下的几个要求,以便于用户进行操作,这样才能使系统易学易用。其中应该合理的设计数据库,设计出友好的界面,实现基本功能和一些特殊功能的操作。3.3基础信息维护“基础信息维护”用于对图书馆信息、书籍信息、常用词库等项目进行初始化设置,这些设置一般不轻易改动,包含的功能模块如图3-2所示。“图书馆信息”用于设置本图书馆的基础信息,包括图书馆名称、馆长、负责人、电话、说明等。“系统参数设置”用于设置系统运行所需的参数,包括办证费用、证件有效期、图书超期罚款金额、期刊超期罚款金额等。 SHAPE \* MERGEFORMAT 图3-2 基础信息维护功能模块“书架设置”用于设置书架的基础信息,内容包括书架编号、书架名称等。“管理员设置”用于设置使用的人员及权限。“图书期刊词库设置”用于设置系统常用的词库,内容包括供应商、分级、附件、尺寸、语系、印刷等信息的预先设定数值。3.4读者管理“读者管理“用于管理读者相关的信息,包括的功能模块如图3-3所示。 SHAPE \* MERGEFORMAT 图3-3 读者管理功能模块“读者类型设置”用于设置读者的类型及相关的信息,内容包括类型、图书册数、期刊册数、续借次数、限制图书、限制期刊等。“读者档案管理”用于设置读者相关的信息,内容包括编号、条形码、姓名、性别、类型、出生日期、有效证件、证件号码、联系方式、登记日期、有效期至、操作员、备注、图书借阅次数、期刊借阅次数、是否挂失等。“借书证挂失与恢复”用于挂失和恢复读者的借书证,挂失后该编号的读者不能在借书。“过期续证管理”用于延续已过期的借书证。“读者档案词库设置”用于设置读者档案常用的词库。3.5 图书管理“图书管理”用于管理图书相关的信息,包含的功能模块入图3-4所示。“图书类型设置”用于设置图书的类型及相关的信息,内容包括类型名称,可借天数等。“出版社管理”用于设置图书所属出版社的基础信息,内容包括出版社编号,ISBN、出版社名称等。 SHAPE \* MERGEFORMAT 图3-4 图书管理功能模块“图书档案管理”用于设置图书相关的信息,内容包括编号、条形码、书名、类型、作者、译者、ISBN、出版社、价格、页码、书架名称、现存量、库存总量、入库时间、操作员、简介、借出次数、是否注销等。“图书注销”用于注销、报废图书,将图书档案的“是否注销”字段设置为1,被注销的图书不可以再借出。“图书征订”用于订购新书,内容包括征订编号、书名、类型、ISBN、出版社、作者、译者、订购者、订购者联系方式、订购数量、订购单价、订购日期、是否验收、实际数量、实际金额、验收日期、操作员等。“图书验收”用于征订的图书到货后验收,增加图书的库存。“图书盘点”打印图书的在库清单供盘点使用。 第4章 图书馆管理系统数据库分析4.1 数据库数据库由DBMS(数据库管理系统)处理,DBMS则由开发人员和用户通过应用程序直接或间接地使用。它主要包括四个要素:用户数据、元数据、索引和应用元数据。4.1.1 用户数据目前,大多数主流数据库管理系统把用户数据表示为关系。现在把关系看作数据表。表的列包含域或属性,表的行包含对应业务环境中的实体的记录。并非所有的关系都同样符合要求,有些关系比其它关系更结构化一些。第二章描述了一个用以产生良好结构关系的过程,称作规范化。4.1.2 元数据数据库是自描述的,这就意味着它自身包含了它的结构的描述,这种结构的描述称作元数据。因为DBMS产品是用来存储和操纵表的,以大多数产品把元数据以表的形式存储,有时称作系统表。这些系统表存储了数据库中表的情况,指出每一个表中有多少列,那一列是主关键字,每一列的数据类型的描述也存储索引、关键字、规则和数据库结构的其他部分。在表中存储元数据不仅对DBMS是有效的,对用户也是方便的,因为他们可以使用与查询用户数据同样的查询工具来查询元数据。4.1.3 索引第三种类型的数据改进了数据库的性能和可访问性,这种数据经常称作开销数据,尽管有时也采用其他类型的数据结构,如链表,但它主要还是索引。索引可以用来排序和快速访问数据。4.1.4 应用元数据存储在数据库中的第四种数据是应用元数据,它用来存储用户窗体、报表、查询和其他形式的查询组件。并非所有的DBMS都支持应用组件,支持组件的DBMS也不一定把全部组件的结构作为应用元数据存储在数据库中。然而,大多数现代的DBMS产品存储这种数据作为数据库的一部分。一般来说,数据库开发人员和用户都不直接访问应用元数据,想反,他们通过DBMS中的工具来处理这些数据。4.2 创建数据库数据库模式定义了数据库的结构、表、关系、域和业务规则。数据库模式是一种设计,数据库和应用正是建立在此基础上的。域是一列可能拥有的值的集合。必须为每一个表的每一列确定域。除了数据的物理格式外,还需要确定是否有些域对表来说是唯一的。数据库模式的最后一个要素是业务规则,它是对需要反映在数据库和数据库应用程序中的业务活动的约束。业务规则是模式的一个重要部分,因为他们指定了无论什么数据变化到达DBMS引擎,允许的数据值必须满足的约束。不管无效的数据变化请求是来自窗体的用户、查询/修改请求还是应用程序DBMS都应该拒绝。遗憾的是,不同的DBMS产品用不同的方法实施业务规则。在某些情况下,DBMS产品不具备实施必要业务规则的能力,必须以代码形式把它们编入应用程序。4.3 图书管理系统当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。4.4图书馆管理系统E-R 因为整个系统涉及的实体和属性较多,限于篇幅不能也没有必要一一列举。图4-1为图书馆管理系统关键实体的E-R 图。其他实体与基本信息表间的对应关系都是类似的。图4-1 系统E-R图4.5 图书馆管理系统数据表清单 下面我们仅列出一些重要表的名称及其用途供参考。如表4-1所示。其中每张表所包含的字段读者可以自己查看建库脚本和前面的需求分析。表4-1 图书馆管理系统数据表清单数据表名称数据表用途出版社保存图书对应出版社的基础信息读者类型保存读者类型及相关信息读者信息保存读者的各种信息供应商保存图书供应商信息管理员保存用户信息期刊丢失保存期刊丢失记录期刊罚款保存期刊罚款记录期刊归还保存期刊归还记录期刊借阅保存期刊借阅记录期刊类型保存期刊类型及相关信息期刊信息保存期刊信息期刊征订保存期刊征订入库记录期刊注销保存期刊注销记录书架保存馆内数据的基础信息图书丢失保存图书丢失记录图书罚款保存图书罚款记录图书馆保存图书馆的基础信息图书归还保存图书归还记录图书借阅保存图书借阅记录图书类型保存图书类型及相关信息图书信息保存图书信息图书征订保存图书征订入库记录图书注销保存图书注销记录文献尺寸保存文献的尺寸基础信息文献等级保存文献的等级基础信息文献附件保存文献的附件基础信息文献印刷保存文献的印刷基础信息文献语系保存文献的语系基础信息第5章 实例制作介绍基于以上需求分析和数据分析,对于一个标准的图书馆管理系统应该有了一个全面的认识。下面我们将实例说明如何利用Microsoft VisualBasic.net完成系统的开发。5.1实例功能图书馆需要强调的是,由于用户登录和权限管理的功能各个系统实现的方法是一致的,详细介绍的功能模块如图5-1所示图5-1 详细介绍的功能模5.2 系统流程图 系统流程图如图5-2所示。图5-2 系统流程图第6章 图书馆管理系统数据库设计读者信息和图书信息是系统关键的表,其他各表均通过“编号“字段与之相对应进行多对一的关联。系统共需要8张表,用途分别如表6-1所示。表6-1 数据库表及其用途数据表名称数据表用途读者类型保存读者类型及其相关信息读者信息保存读者的各种信息图书类型保存图书类型及其相关信息图书信息保存图书信息书架保存图书馆内数据的基础信息出版社保存图书对应出版社的基础信息图书罚款保存图书罚款记录图书归还保存图书归还记录图书借阅保存图书借阅记录图书征订保存图书征订入库记录6.1 创建数据库打开SQL server企业管理器,新建一个数据库,名称为libbook。完成数据库的设计。6.2 创建读者信息数据表创建读者信息数据表的 sql脚本如下:CREATE TABLE [dbo].[读者信息] ( [条形码] [varchar] (40) NULL , [编号] [varchar] (20) NOT NULL , [姓名] [varchar] (20) NULL , [性别] [varchar] (8) NULL , [类型] [varchar] (20) NOT NULL , [出生日期] [smalldatetime] NULL , [有效证件] [varchar] (60) NULL , [证件号码] [varchar] (60) NULL , [联系方式] [varchar] (100) NULL , [登记日期] [smalldatetime] NULL , [有限期至] [smalldatetime] NULL , [操作员] [varchar] (20) NULL , [备注] [varchar] (100) NULL , [图书借阅次数] [int] NULL , [期刊借阅次数] [int] NULL , [是否挂失] [bit] NULL ) ON [PRIMARY]GO6.3 创建图书信息数据表创建图书信息数据表的SQL脚本如下:CREATE TABLE [dbo].[图书信息] ( [条形码] [varchar] (40) NULL , [编号] [varchar] (50) NOT NULL , [书名] [varchar] (200) NULL , [类型] [varchar] (100) NULL , [作者] [varchar] (100) NULL , [译者] [varchar] (100) NULL , [ISBN] [varchar] (40) NULL , [出版社] [varchar] (100) NULL , [价格] [money] NULL , [页码] [int] NULL , [书架名称] [varchar] (200) NULL , [现存量] [int] NULL , [库存总量] [int] NULL , [入库时间] [smalldatetime] NULL , [操作员] [varchar] (20) NULL , [简介] [varchar] (100) NULL , [借出次数] [int] NULL , [是否注销] [bit] NOT NULL ) ON [PRIMARY]GO6.4 创建图书借阅数据表创建“图书借阅数据表的SQL脚本如下:CREATE TABLE [dbo].[图书借阅] ( [借阅编号] [int] IDENTITY (1, 1) NOT NULL , [图书编号] [varchar] (50) NULL , [读者编号] [varchar] (40) NULL , [借阅时间] [smalldatetime] NULL , [应还时间] [smalldatetime] NULL , [续借次数] [int] NULL , [操作员] [varchar] (20) NULL , [状态] [varchar] (10) NULL ) ON [PRIMARY]GO6.5 创建其他关键数据表以下是其他数据表的创建脚本:CREATE TABLE [dbo].[图书归还] ( [归还编号] [int] IDENTITY (1, 1) NOT NULL , [图书编号] [varchar] (50) NULL , [读者编号] [varchar] (40) NULL , [退还押金] [money] NULL , [归还时间] [smalldatetime] NULL , [操作员] [varchar] (20) NULL , [确定归还] [bit] NULL ) ON [PRIMARY]GOCREATE TABLE [dbo].[图书征订] ( [征订编号] [varchar] (50) NOT NULL , [图书编号] [varchar] (50) NOT NULL , [订购者] [varchar] (100) NULL , [订购者联系方式] [varchar] (100) NULL , [订购数量] [int] NULL , [订购单价] [money] NULL , [订购日期] [smalldatetime] NULL , [是否验收] [bit] NULL , [验收日期] [smalldatetime] NULL , [操作员] [varchar] (20) NULL ) ON [PRIMARY]GO6.6创建主键及外键等表的约束在查询分析器中通过如下代码创建数据表的主键及外键等约束。ALTER TABLE [dbo].[图书信息] WITH NOCHECK ADD CONSTRAINT [PK_图书信息] PRIMARY KEY CLUSTERED ( [编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书借阅] WITH NOCHECK ADD CONSTRAINT [PK_图书借阅] PRIMARY KEY CLUSTERED ( [借阅编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书归还] WITH NOCHECK ADD CONSTRAINT [PK_图书归还] PRIMARY KEY CLUSTERED ( [归还编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书征订] WITH NOCHECK ADD CONSTRAINT [PK_图书征订] PRIMARY KEY CLUSTERED ( [征订编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书注销] WITH NOCHECK ADD CONSTRAINT [PK_图书注销] PRIMARY KEY CLUSTERED ( [注销编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书类型] WITH NOCHECK ADD CONSTRAINT [PK_图书类型] PRIMARY KEY CLUSTERED ( [类型编号] ) ON [PRIMARY] GOALTER TABLE [dbo].[图书罚款] WITH NOCHECK ADD CONSTRAINT [PK_图书罚款] PRIMARY KEY CLUSTERED ( [罚款编号] ) ON [PRIMARY] GOSET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GO6.6 创建存储过程系统使用了“sl_图书征订”,“sf_图书借阅”,“sf_图书归还”三个存储过程,实现的功能分别为征订图书入库、借阅图书出库和归还图书入库,产生罚款信息等功能。具体计算方法在下面的脚本中有详细的注释。create proc sf_图书借阅asbegin tran --借书出库,减少图书库存量 update 图书信息 set 现存量 = isnull(现存量,0) - 1 from 图书信息 as a, 图书借阅 as b where a.编号=b.图书编号 and b.状态='新借' --设置借阅状态 update 图书借阅 set 续借次数=0,状态='未还' where 状态='新借'commitGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOcreate proc sf_图书归还 @借阅编号 int, @罚款金额 moneyasbegin tran --借书出库,减少图书库存量 update 图书信息 set 现存量 = isnull(现存量,0) + 1 from 图书信息 as a, 图书借阅 as b where a.编号=b.图书编号 and b.借阅编号=@借阅编号 -- 如果罚金不是0, 在 图书罚款 中产生记录 if @罚款金额<> 0 insert into 图书罚款(图书编号,读者编号,罚款日期,应罚金额,是否交款) select 图书编号,读者编号,getdate(), @罚款金额, 0 from 图书借阅 where 借阅编号=@借阅编号 -- 插入图书归还表 insert into 图书归还(图书编号,读者编号,归还时间) select 图书编号,读者编号,getdate() from 图书借阅 where 借阅编号=@借阅编号 --设置借阅状态 update 图书借阅 set 状态='已还' where 借阅编号=@借阅编号commitGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOcreate proc sf_图书征订asbegin tran --验收入库,增加图书库存量 update 图书信息 set 库存总量 = isnull(库存总量,0) + b.订购数量, 现存量 = isnull(现存量,0) + b.订购数量, 入库时间 = b.验收日期图书信息 as a, 图书征订 as bwhere a.编号=b.图书编号 and b.是否验收=0 --设置图书征订记录的标志,标志为已验收 update 图书征订 set 验收日期=getdate(), 是否验收=1 where 是否验收=0commitGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO第7章 程序开发程序结构仍然为MDI 模式,这种开发模式结构清楚简单,容易理解,每一个功能对应一个窗体7.1程序运行结果本程序运行后的效果如图7-1所示。选择主窗体上的菜单中的[读者管理]菜单选项可以进入[读者类别设置]和[读者档案管理]功能窗体,选择[图书管理]菜单选项可以进入图书类别设置和图书档案管理功能窗体,而选择流通管理菜单选项可以进入图书征订,图书借阅和图书归还等子窗体。图7-1 实例运行效果1.选择[读者管理]读者类别设置菜单命令,进入读者类别设置功能窗体,在其中管理读者的类别信息,如图7-2所示。该表中显示的是读者的各个类别的类别名称,可以借阅的图书册数和期刊册数,续借次数,以及是否有借阅限制的图书与期刊。这和我们在实际中遇到的图书馆的管理制度是非常类似的。需要添加新的读者类别或者是修改原有读者的信息只须单击工具栏上的新增按钮或修改按钮即可。单击删除按钮并选确定按钮,即可删除某条记录。在插入新信息或修改原有记录时,选中限制期刊复选框表示允许读者拥有对限制期刊的使用权,选中限制图书复选框表示允许该类别读者拥有对限制图书的使用权。图7-2 读者类型设置功能窗体2.在完成对读者类别的设置后,选择读者管理读者档案管理菜单命令,即可进入读者档案管理子窗体,该窗体主要完成对各个读者基本信息的设定,如下图7-3所示。图7-3 读者档案管理功能窗体该模块可以根据条形码,编号和姓名对读者的基本信息进行查询,并可以对读者的信息进行修改,添加等操作。在编辑状态下,可以从窗体下方的面板中修改读者的饿一些信息。3.单击类型下拉列表框,可以从中更改读者的类别,这些类别信息都是在窗体显示时从数据库中动态查询并添加到列表中的。在单击工具栏中的新增按钮后,软件会根据当前数据中的读者的编号情况自动生成一个4位的新编号,以免编号重复,此时即可编辑要新增的读者的信息,需要注意的是,该编号并不显示在窗体中,而是自动保存在数据表中,该功能和SQL server数据表的自动增量选项有关。4.在设置好读者的信息之后,就可以开始对图书的类别和信息进行管理。选择图书管理图书类别设置菜单命令,就可以进入图书类别设置功能窗体,该窗体的基本功能和读者类别设置窗体类似,只不过设置的是图书的类别信息。如下图7.4所示。图7-4 图书类别设置功能窗体5.选择图书管理图书信息管理菜单命令,则可以进入图书信息的设置和管理窗口,见图7-5,在这个窗口中,可以对图书馆所藏有的所有图书的信息进行管理。如下图所示,在对图书信息进行修改时,在类型,出版社和书架名称三个下拉列表中个选项都是动态从数据库中查询生成的,如果使用过程中其他窗体对数据库中的数据,例如图书类型进行了修改,那么在单击类型下拉列表框,就会从选项中看到数据已经有所不同了。图7-5 图书信息管理功能6.完成了读者信息的管理和图书信息的管理之后,就可以实际进行图书的借阅,归还罚款等一系列了。选择流通管理图书征订菜单命令,就进入图书征订功能窗口,可以在这里进行图书的征订工作。单击工具栏中的新增按钮,系统将自动计算新的征订编号以免新增加的图书增订编号与原有的征订图书定单重复,在单击窗体下部选区中的有放大镜标志的按钮,即可弹出一个新的窗体,在其中选择要征订的图书名,双击字段即可将该图书的编号和书名添加到图书征订窗体下部选区的编辑框中。从图中可以看到,新增的的征订图书的是否验收字段都是False,这表示图书尚未完成征订工作,此时,需要调用我们预先在数据库中设置好的存储过程完成图书的征订工作,单击提交征订验收按钮,执行存储过程,先将图书验收入库,增加图书库存量,然后设置图书征订记录的标志,标志为已验收。整个过程如下图7-6和图7-7所示。图7-6 图书征订功能窗体图7-7 图书征订过程中选择图书窗体7.完成图书的征订工作后,可以选择流通管理图书借阅菜单命令,进入我们平时使用图书馆时接触最多的图书借阅共能,在实际的图书馆使用中,一般都使用扫描仪或者电子枪将读者借阅证上的条纹码扫描输入到系统中,或者是用读卡器从读者的 IC卡中直接读入读者编号。我们在程序使用中使用从文本框中手工输入读者条纹码或者编号并回车的方法来模拟上述的过程,如图7-8所示。图7-8 图书借阅功能窗体在窗体上部的文本框中输入读者的编号或条纹码并回车,如果输入正确,则会在右边显示读者的基本信息并在下面的表格中显示读者已经借出的图书,此时光标将直接跳到借阅图书信息栏的文本框中,在其中输入读者要借阅的图书编号或者条形码并回车,如果输入正确,则该图书的信息将被自动添加到读者已借出出的图书列表的下方,并在左方的一栏中用“新借”来表示这是新借的图书,借书时间为当前系统时间,而应还时间则由图书类型中的可借天数来自动计算确定。窗体下方则将显示读者已借出的数量和本次借书数量,如果两者相加大于读者所能允许借书的数量,软件将提示已达到借书极限并拒绝将新书的记录添加到表中,如果读者试图借一本他已经借出的书,软件同样也将作出提示。如果确定借书,则单击窗体上方工具栏中的确定借书按钮,此时将会调用数据库中的图书借阅存储过程,将借书出库,减少图书库存量并将图书的借阅信息保存到数据库中的图书借阅数据表中。8.选择流通管理图书归还菜单命令,将显示如图7-9所示,完成归还图书的功能。在窗体,单击归还选中图书按钮先判断所选择的记录是否已经过期,如果过期则提示输入罚款金额,罚款金额默认为根据其过期时间计算得到的一个值,然后调用存储过程,完成图书归还的功能。图7-9 图书归还功能窗体9.选择流通管理逾期清单菜单命令,将显示所有逾期未还的图书清单。如图7-10所示。实际图书馆工作中,可以通过查询逾期图书信息通知借阅这些图书的读者归还图书。图7-10图书逾期清单功能窗体10.选择流通管理图书罚款菜单命令,将显示所有被罚款的读者的清单和他们被罚款的过期图书的信息。单击窗体下方的收回罚款按钮,将收取读者的罚金并将实付金额放入数据库中,并将罚款的是否交滞纳状态设置已经加纳。如图7-11所示图7-11 图书罚款功能窗体7.2 创建工程启动Microsoft VisualBasic.net2003,在主菜单中选择[文件]|[新建]|[项目]命令,弹出[新建项目]对话框,在[项目类型]列表框中选择[Visual.Basic项目]选项,然后在[模板]列表框中选择[Window应用程序]。在[名称]文本框中输入一个合适的方案文件名,选择要存放的位置,然后[单击]确定按钮完成新项目的开启。 7.3创建系统主窗体利用系统默认生成的窗体作为主窗体,并为其添加一个主菜单(MainMenu)控件和一个状态栏(StatusBar)控件,各个控件的布局如图7-12窗体。 图7-12 系统主窗体7.4完成的读者类别设置功能这里将完成读者类别设置功能。在该子窗体中,可以实现对图书馆管理系统中读者类别数据的插入,编辑,删除,浏览和查询等各项操作。1.在解决方案资源管理器中,右键单击图书馆管理系统项,在弹出的快捷菜单中选择添加添加windows窗体菜单命令,在弹出的对话框中的模版栏内选中“windows 窗体”,并将名称文本框中的名称改为readerClassify.cs,这将新建一个窗体,在其上放置如图7-13所示控件。图7-13 读者类别设置窗体2.放置一个sqlDataAdapter控件,并命名为da1,在数据适配器选项的第一步选择libbook,然后在其设置的第四步生成SQL 语句窗口中的编辑框中分别输入如下带码。数据适配器da1的 SQL语句:Select * from 读者类型 where(类型like?)然后选择da1,在右边的属性窗口中单击生成数据集选项,将生成的数据集生成到DataSet1中,此后在托盘中将出现dataset1的图标。3.在解决方案资源管理器中,双击dataset1,xsd ,在一个新窗口中将显示数据集中各个数据表的架构,选中读者类型表中的限制图书和限制期刊两个字段,在右边的属性栏中的default属性栏中添入false,这样做的目的是为这两个数据库中的bool字段在新增数据时添加默认值,以便在程序中使用与数据集连接的CurrencyManager实现新增数据时自动聚焦到新增的数据条目之上。如图7-14所示。图7-14 设置数据集中bool字段默认值7.5完成读者档案管理功能在该子窗体中,可实现对财务管理系统中会计科目表中的数据插入、编辑、删除和浏览、查询等各项操作。在解决方案资源管理器中,添加一个新的窗体,并将名称改为readerinfo.cs,在其上放置如图7-15所示控件。图7-15 读者信息设置窗体7.6完成图书类别功能这里将完成图书类别设置功能。在解决方案资源管理器中,添加一个新的窗体,并将名称改为bookclassify.cs,在其上放置控件如图7-16所示图7-16 图书类别设置窗体7.7完成图书档案管理功能1.在解决方案资源管理器中,添加一个新的窗体,并将名称改为”bookinfo.cs”在其上放置控件7-17所示。图7-17 图书档案管理窗体2.放置一个sqldataadapter控件ad1,在其设置的第四步生成sql语句窗口中的编辑框中输入如下代码,并生成数据集dataset11。数据适配器da1的sql语句:Select * from 图书信息where (条形码 like?)and (编号like?) and(书名 like?)3.在解决方案资源管理器中,双击dataset1.xsd,在数据集窗口中选中“图书信息”表中的“是否注销”字段,并在右边的属性栏中的defualt属性栏中填写false .7.8完成图书征订功能1.在解决方案资源管理器中,添加一个新的窗体,并将名称改为booksubscrbie.cs,在其上放置控件如图7-18所示图7-18 图书征订窗体2.放置一个sqldataadapter控件da1,在其设置的第四步生成sql语句窗口中的编辑框中输入如下代码,并生成数据集dataset11。数据适配器da1的sql语句:Select * where (是否验收=0) and (征订编号like?) and (图书编号?)3.在解决方案管理器中,双击dataset1.xsd,在数据集窗口中中图书征订表中的是否验收字段,并在右边的属性栏中的defualt属性栏中添入4.在解决方案资源管理器中,添加一个新的窗体,并将名称改为selectbook.cs,在其上放置控件如图7-19所示。5.在这个窗体上放置一个sqldataadapter控件da1,在其设置的第四步生成sql语句窗口中的编辑框中输入如下代码,并在高级选项中取消选中生成更新插入删除语句。配置完成数据适配器后,生成数据集。7.9完成图书借阅功能在解决方案资源管理器中,添加一个新的窗体,并将名称改为bookborrow.cs,在其上放置控件如图7-20所示图7-20 图书借阅窗体7.10 完成图书归还功能1.再解决方案资源管理器中,添加一个新的窗体,并将名称改为bookreturn,cs在其上放置控件如图7-21所示。图7-21 图书归还窗体2.放置一个sqldataadapter控件da1,在其设置的第四步 生成sql语句窗口中的编辑框中输入如下代码,并在高级选项中取消选择生成新增,删除,更新语句,然后生成到新数据集dataset2中,托盘中显示为dataset21.7.11完成图书罚款功能1.在解决方案资源管理器中,添加一个新的窗体,并将名称改为bookpenalty.cs在其上放置控件如图7-22所示。图7-22 图书罚款窗体2.放置一个sqldataadapter控件da1,在其设置的第四步生成sql语句窗口中的编辑框中输入如下代码,并在高级选项中取消选择生成新增,删除,更新语句,然后生成到新数据集dataset2中,托盘中显示为dataset21.7.12 编译并运行系统至此我们完成了整个系统的制作,选择run/run菜单命令或直接按F9键编译并运行程序,可以看到前面“程序运行结果”小节中介绍的程序。结论本系统是一个面向小型图书管理系统,具有一定实用性的数据库信息管理系统。它主要完成对图书馆的一系列管理,包括进入新书、借阅、信息查询管理。本系统采用当前流行的面向对象的开发工具—VB来完成整个系统的设计,在数据库的设计上利用了SQL的便利性和实用性。本系统具有相当的实用功能。在查询方面,系统实现了多条件任意字段的模糊查询,同时在分类查询上实现了动态生成。在管理方面,系统较好地实现了管理员注册和密码修改等各项功能。系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关VB许多细节问题都要靠自己去摸索,加之本人水平有限,并没有完全地理解VB和SQL的强大功能,而且还存在着许多不足之处。由于时间关系,系统功能实现不够完善,使用不是很方便。这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要我进行不断地补充和完善,有很多不完美的地方,有许多功能没有实现,借阅信息管理还不完善,没有将删除的信息进行库存管理,不便于日后的查询,并且没有为该系统的管理权限设置多个不同的角色,使每个角色都有其特有的功能范围,超越权限不可能操作。数据库内容不多。而且无法实现网络操作,细节之处不够完善。由于时间仓促,一些好的设计思想还没有实现,我将进一步完善本系统功能。本系统还有待需要进一步改正的地方,请提出宝贵意见。通过本次毕业设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。致谢在本次毕业设计中,我从指导老师身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢老师耐心的辅导。 另外,在系统开发过程中还有同班的同学同样给与我不少帮助,帮助解决了不少的难点,使得系统能及时开发完成,这里一并表示感谢。参考文献1 何斌,王运坚,冯峰等.VisualBasic.NET 应用指南.人民邮电出版社,1998:12-20.2 CurtiS Smith Michael Amundsen .Visual Basic 6.0数据库编程.清华大学出版社,2000:77-92.3 高智勇.中文版 Visual Basic 6.0 实例教程.航空工业出版社,2000:12-34.4 丁卫群.数据库系统概论.科学出版社,2001:63-79.5 邱彦博,林浩生.Visual Basic 6.0彻底研究.中国科学出版社,2001:67-70.6 骆娟,何旭洪. Visual Basic 6.0 数据库系统开发实例导航.人民邮电出版社,2002::25-45.7 牛又奇,孙建国.新编Visual Basic 6.0程序设计教程.苏州大学出版社,2002:110-135.8 李绍原.数据库原理及应用.科学出版社,2003::22-49.9 王晖.面向对象软件分析设计与测试.科学出版社,2004:21-3810 段 兴.Visual Basic 6.0 数据库实用程序设计100例.人民邮电出版社,2004:34-66.11 Chen, P.The Entity Relationship Mode-Toward a Unified View of Data.TODS,1976:102-130.12 Chin, F.Principles of Data Security .Plenum Press,1982:90-120.13 Robert A Schultheis.Mary Summer.Management Information System(Fourth Edition),McGraw-Hill Inc 2003:55-81.14 Kenneth C.laudon.Jane Price Laudon.Management Information Systems,Prenti-ce-Hall 2000:86-103.附录图书馆借书登录模块程序代码如下:Public Class frmBorrow Inherits System.Windows.Forms.Form Private dtData As DataTable#Region " Windows 窗体设计器生成的代码 " Public Sub New() MyBase.New() '该调用是 Windows 窗体设计器所必需的。 InitializeComponent() '在 InitializeComponent() 调用之后添加任何初始化 End Sub '窗体重写 dispose 以清理组件列表。 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose (disposing) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改此过程。 '不要使用代码编辑器修改它。 Me.dgdList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.dgdList.CaptionVisible = False Me.dgdList.DataMember = "" Me.dgdList.HeaderForeColor = System.Drawing.SystemColors.ControlText Me.dgdList.Location = New System.Drawing.Point(8, 80) Me.dgdList.Name = "dgdList" Me.dgdList.Size = New System.Drawing.Size(680, 72) Me.dgdList.TabIndex = 9 ' 'Label6 ' Me.Label6.Location = New System.Drawing.Point(280, 36) Me.Label6.Text = "说明:借阅数量不可超过可借数量,借阅日期取当前日期,应还日期根究借阅日期和图书类型中的可借天数自动计算。" ' 'Label5 ' Me.Label5.Location = New System.Drawing.Point(192, 44) Me.Label5.Name = "Label5" Me.Label5.Size = New System.Drawing.Size(80, 16) Me.Label5.TabIndex = 7 Me.Label5.Text = "回车确认输入" ' 'txbBook ' Me.txbBook.Location = New System.Drawing.Point(88, 40) Me.txbBook.Name = "txbBook" Me.txbBook.TabIndex = 6 Me.txbBook.Text = "" ' 'rbnCode ' Me.rbnCode.Location = New System.Drawing.Point(16, 52) Me.rbnCode.Name = "rbnCode" Me.rbnCode.Size = New System.Drawing.Size(64, 24) Me.rbnCode.TabIndex = 5 Me.rbnCode.Text = "条形码" ' 'rbnBookNumber ' Me.rbnBookNumber.Checked = True Me.rbnBookNumber.Location = New System.Drawing.Point(16, 24) Me.rbnBookNumber.Name = "rbnBookNumber" Me.rbnBookNumber.Size = New System.Drawing.Size(64, 24) Me.rbnBookNumber.TabIndex = 4 Me.rbnBookNumber.TabStop = True Me.rbnBookNumber.Text = "编号" ' 'txbReader ' Me.txbReader.Location = New System.Drawing.Point(88, 32) Me.txbReader.Name = "txbReader" Me.txbReader.TabIndex = 2 Me.txbReader.Text = "" ' 'frmBorrow ' Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) Me.ClientSize = New System.Drawing.Size(688, 273) Me.Controls.Add (Me.GroupBox2) Me.Controls.Add (Me.GroupBox1) Me.Controls.Add (Me.ToolBar1) Me.Icon = CType(Resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Name = "frmBorrow" Me.Text = "图书借阅" Me.GroupBox1.ResumeLayout (False) Me.GroupBox2.ResumeLayout (False) CType(Me.dgdList, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout (False) End Sub#End Region Private Sub txbBook_KeyDown(ByVal sender As Object, _ ByVal e As Windows.Forms.KeyEventArgs) Handles txbBook.KeyDown '判断输入的字符是否是回车 If e.KeyCode = Keys.Enter Then '判断读者的借阅数量是否超过可借数量 If dtData.Rows.Count >= CInt(Me.txbCount.Text.Trim) Then MessageBox.Show ("你借阅数量已经超过可借数量") End If Dim db As DataBase = New DataBase Dim strSQL As String = "" strSQL += "select 编号,书名,出版社,价格,b.可借天数 from" strSQL += " 图书信息 as a , 图书类型 as b " strSQL += "where a.类型 = b.类型名称" '判断输入的是编号,还是条形码 If rbnBookNumber.Checked = True Then strSQL += " and 编号='" + txbBook.Text.Trim + "'" Else strSQL += " and 条形码='" + txbBook.Text.Trim + "'" End If Dim dv As DataView = db.RunSelectSQL(strSQL) Dim strNumber, strName, strPress, strPrice, strDays As String If dv.Count <> 0 Then '判断该读者是否已经借过这本书 For Each tmpdr As DataRow In dtData.Rows If tmpdr("编号").ToString().Trim _ = dv(0)("编号").ToString.Trim Then MessageBox.Show ("图书已经借给该读者!") Exit Sub End If Next strNumber = dv(0)("编号").ToString.Trim strName = dv(0)("书名").ToString.Trim strPress = dv(0)("出版社").ToString.Trim strPrice = dv(0)("价格").ToString.Trim strDays = dv(0)("可借天数").ToString.Trim Dim dr As DataRow = dtData.NewRow dr("状态") = "新借" dr("编号") = strNumber dr("书名") = strName dr("借阅时间") = Date.Now.ToString("yyyy-MM-dd") dr("应还时间") = _ Date.Now.AddDays(CInt(strDays)).ToString("yyyy-MM-dd") dr("出版社") = strPress dr("价格") = strPrice dtData.Rows.Add (dr) dtData.DefaultView.AllowNew = False dtData.DefaultView.AllowEdit = False dtData.DefaultView.AllowDelete = False dgdList.DataSource = dtData.DefaultView End If db.Dispose() End If End Sub Private Sub txbReader_KeyDown(ByVal sender As System.Object, _ ByVal e As Windows.Forms.KeyEventArgs) Handles txbReader.KeyDown '判断输入的字符是否是回车 If e.KeyCode = Keys.Enter Then '判断是否有未保存数据 If dtData.Rows.Count <> 0 Then If MessageBox.Show("未保存数据", "提示", _ MessageBoxButtons.YesNo) = DialogResult.Yes Then '清空数据表 dtData.Rows.Clear() Else Return End If End If Dim db As DataBase = New DataBase Dim strSQL As String = "" strSQL += "select 姓名,编号,a.类型,图书册书 from 读者类型" strSQL += " as a , 读者信息 as b where a.类型 = b.类型" '判断输入的是编号,还是条形码 If rbnReaderNumber.Checked = True Then strSQL += " and 编号='" + txbReader.Text.Trim + "'" Else strSQL += " and 条形码='" + txbReader.Text.Trim + "'" End If Dim dv As DataView = db.RunSelectSQL(strSQL) '判断是否存在此读者 If dv.Count <> 0 Then '获得读者信息 txbName.Text = dv(0)("姓名").ToString.Trim txbType.Text = dv(0)("类型").ToString.Trim txbCount.Text = dv(0)("图书册书").ToString.Trim '查看此读者是否已经借阅了其它书 strSQL = "select 状态,编号,书名,借阅时间,应还时间,出版社," strSQL += "价格 from 图书信息 as a , 图书借阅 as b where" strSQL += " a.编号 = b.图书编号 and 状态 = '未还' and " strSQL += "读者编号 ='" + dv(0)("编号").ToString.Trim + "'" dv = db.RunSelectSQL(strSQL) If dv.Count <> 0 Then dv.AllowDelete = False dv.AllowEdit = False dv.AllowNew = False dtData = dv.Table Me.dgdList.DataSource = dv End If txbReader.ReadOnly = True txbBook.Focus() Else txbName.Text = "" txbType.Text = "" txbCount.Text = "" txbReader.Focus() End If db.Dispose() End If End Sub Private Sub SetTextBox(ByVal bState As Boolean) Me.txbName.ReadOnly = bState Me.txbCount.ReadOnly = bState Me.txbType.ReadOnly = bState End Sub Private Sub frmBorrow_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load SetTextBox (True) InitDataTable() End Sub Private Sub InitDataTable() '构造数据表 dtData = New DataTable dtData.Columns.Add ("状态") dtData.Columns.Add ("编号") dtData.Columns.Add ("书名") dtData.Columns.Add ("借阅时间") dtData.Columns.Add ("应还时间") dtData.Columns.Add ("出版社") dtData.Columns.Add ("价格") End Sub Private Sub frmBorrow_Closing(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) _ Handles MyBase.Closing If Me.dtData.Rows.Count <> 0 Then For Each tmpdr As DataRow In dtData.Rows If tmpdr("状态").ToString.Trim = "新借" Then If MessageBox.Show("未保存数据", "提示", _ MessageBoxButtons.YesNo)=DialogResult.No Then e.Cancel = True dtData.Dispose() End If End If Next End If End Sub Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) _ Handles ToolBar1.ButtonClick Select Case e.Button.Text Case "确定借书" If Me.dtData.Rows.Count <> 0 Then Dim strSQL As String = "" For Each tmpdr As DataRow In dtData.Rows '判断书是否是新借 If tmpdr("状态").ToString.Trim = "新借" Then '将新借的书插入到数据库中 strSQL = " insert into 图书借阅(图书编号," strSQL += "读者编号,借阅时间,应还时间," strSQL += "续借次数,操作员,状态) values('" strSQL += tmpdr("编号") + "','" strSQL += txbReader.Text.Trim strSQL += "','" + tmpdr("借阅时间") + "','" strSQL += tmpdr("应还时间") + "'" strSQL += ",0,'操作员','新借')" End If Next If strSQL.Length <> 0 Then Dim db As DataBase = New DataBase db.RunDelOrInsSQL (strSQL) db.RunDelOrInsSQL ("sf_图书借阅") db.Dispose() End If End If Case "退出" Me.Close() End Select '清空控件信息 txbName.Text = "" txbType.Text = "" txbCount.Text = "" txbBook.Text = "" txbReader.Text = "" '清空数据表 dtData.Clear() '设置数据源 dtData.DefaultView.AllowNew = False dtData.DefaultView.AllowEdit = False dtData.DefaultView.AllowDelete = False dgdList.DataSource = dtData.DefaultView Me.txbReader.ReadOnly = False Me.txbReader.Focus() End SubEnd Class哈尔滨金融高等专科学校计算机系毕业论文图书馆管理系统PAGE 38 PAGE V图书馆管理系统 PAGE I第1章 绪论 PAGE 1第2章 开发工具简介 PAGE 39第3章 图书馆管理系统需求分析第4章 书馆管理系统数据库分析第5章 实例制作介绍第5章 实例制作介绍第6章 图书馆管理系统数据库设计第7章 程序开发哈尔滨金融高等专科学校计算机系毕业论文罚款管理预约读借图书征订图书归还图书借阅图书信息流通管理读者信息图书管理管理员读者管理图书罚款逾期清单图书归还图书借阅图书征订 图书档案管理图书类别设置读者档案管理读者类别设置图书流通管理图书管理读者管理图书馆管理系统图书盘点图书验收图书征订图书注销图书档案管理出版社管理图书类型设置图书管理读者档案词库设置过期续证管理借书证挂失与恢复读者档案设置读者类型设置读者管理图书期刊词库管理员设置书架设置系统参数设置图书馆信息基础信息维护
温馨提示
请用电脑打开本网页,即可以免费获取你想要的了。