基于C#图书管理系统的设计与实现

更新时间:2024-05-30 07:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

图书分类号: 密 级:

毕业论文(设计)

基于C#图书管理系统的设计与实现 C# for library management system design and

implementation

姓 名 学 号 专 业 指导教师

计算机科学与技术

2014年 3月 22日

9

摘要

随着科技的发展和社会的进步,计算机已成为人们生活和工作中的得力助手。设计一个现代的图书管理系统势在必得。

图书管理系统是常用的信息管理系统之一,它的实现主要由两部分组成:数据库建立与维护和前台应用程序的开发。数据库要求非常强的一致性与完整性以及安全性,而前台应用程序则要求功能完善,简单易用。SQL Server 2005具有比较完善的功能,而Visual C# .NET是专门针对Microsoft的.NET战略而推出的语言,它对.NET Framework有最为全面的支持。综合各个方面选择C#作为程序设计语言和SQL Server 2005数据库。通过对中小型图书馆的需求分析,实现了对图书馆管理系统的功能模块划分,数据库模式分析,并设计了数据库结构和应用程序。由此得到了一个基本满足读者、图书馆管理员和高级管理者需求的图书管理系统。

关键词 图书馆管理系统;C#;.NET;SQL Server 2005

I

Abstract

Along with the technical development and society's progress, the computer has become the people to live with the work in primary assistant. Designs for a modern age library management system imperative.

Library management system is one of the common information management system, The Library Management System of which development mainly contains two aspects that one is the establishment and maintenance of the backstage database and the other is the development of the foreground application procedures, is a typical Management Information System. The Database which must has data consistency, integrality, security as well. And the foreground application requires the function is perfect, easy to use. All above these, I chose the C# programming language and SQL Server 2005 database. The reason why I chose to use the MS SQL Server 2005 as a development tool is that it can handle strong data completely and exactly. And I chose Visual C# .NET among many would be languages, because it is the best language in developing the application procedure. According the analysis of requirement min or small library, carved up the module of function, analyzed the mode of database and designed its structure and application. By that the book management system can satisfy the basical need of the reader, the administrators of the library and the high-level administrators.

Keywords: Library management system C# .NET SQL Server 2005

II

目 录

1 绪论 ........................................................................................................................................ 1 1.1 课题研究的背景和意义 ................................................................................................. 1 1.2 系统介绍 ......................................................................................................................... 1 1.3 开发工具及运行环境 ..................................................................................................... 1 2 系统分析 ................................................................................................................................ 3 2.1 需求分析的目的 ............................................................................................................. 3 2.2 需求分析 ......................................................................................................................... 3 2.3 可行性分析 ..................................................................................................................... 3 3 系统设计 ................................................................................................................................ 4 3.1 设计目标 ......................................................................................................................... 4 3.2 数据库设计 ..................................................................................................................... 4 3.2.1 概念结构设计 .......................................................................................................... 4 3.2.2 逻辑结构设计 .......................................................................................................... 5 3.3 总体设计 ......................................................................................................................... 7 3.3.1 项目规划 .................................................................................................................. 7 3.3.2 系统功能结构图 ...................................................................................................... 7 4 系统主要功能模块实现 ........................................................................................................ 9 4.1 登录界面 ......................................................................................................................... 9 4.2 主控制界面 ..................................................................................................................... 9 4.3 用户信息维护 ............................................................................................................... 10 4.4 读者信息维护 ............................................................................................................... 11 4.5 图书信息维护 ............................................................................................................... 12 4.6 出版社信息维护 ........................................................................................................... 13 4.7 借阅图书 ....................................................................................................................... 14 4.8 归还图书 ....................................................................................................................... 14 4.9 在库图书查询 ............................................................................................................... 15 4.10 个人借还情况 ............................................................................................................. 15 5 系统测试 .............................................................................................................................. 16 结论 .......................................................................................................................................... 18 致谢 .......................................................................................................................................... 19 参考文献 .................................................................................................................................. 20 附录 .......................................................................................................................................... 21 附录1 .................................................................................................................................... 21 附录2 .................................................................................................................................... 33

I

1 绪论

1.1 课题研究的背景和意义

随着社会的进步与发展,资源高效利用提高效率越来越受到人们的关注.图书管理也提出这样的要求,因此图书管理的数字化越来越受到大众的青睐.

传统图书管理方式存在一些弊端,比如需要人员较多,工作量很大,管理资料保存查询不方便等.图书管理系统是现代图书管理工具中的重要组成部分.现代化的图书管理需要有现代化的管理系统,采用计算机管理信息系统已成为图书管理科学化和现代化的一个重要特征,给图书管理带来极大的便利.近年来图书事业的发展,以及软件开发的逐步成熟,图书管理系统使得原来繁重而易出错的图书管理变得简单而有条理,我所开发这一图书管理系统的目的在于能够节省大量的人员成本,使得管理变得方便可靠。它广泛应用于图书馆管理,力求开发出一套严谨、可靠、功能完整的管理系统。使用图书管理系统能够很好的解决了传统图书管理的问题.人员需求能够减少,工作效率明显提高,管理更加便利.

1.2 系统介绍

此图书管理系统主要采用的是VisualStudio2008做为前台开发工具以及SQL Server 2005做为后台支持。以操作便捷、界面友好、灵活、实用为出发点,设计采用了模块化设计方法。系统实现了以下基本功能:

图书借阅:此功能实现图书的借阅。 图书查询:可以实现图书的查询。 归还图书:实现图书的归还。 系统管理:实现了对读者的管理。 出版社管理:完成对出版社的管理。 图书管理系统具有如下一些特点:

方便性:读者以及工作人员能够及时了解图书情况,以便完成需要的工作。 稳定性:系统性能稳定。

操作性强:由于系统及面简洁,使用容易很便于用户操作。

1.3 开发工具及运行环境

所用到的开发工具有:Microsoft Visual Studio2008(C#) 和SQL Server 2005。 Visual C#是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此Visual C#又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。

Visual C#具有的优点:提供了面向对象的应用程序框架MFC(Microsoft Foundation

1

Class),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具Visual Studio等,实现了直观、可视的程序设计风格,方便地编写和管理各种类,维护程序的源代码。

Visual C#中可用的数据访问对象接口有三种:ODBC(Open Database Connectity,开发数据库连接)、DAO(Data Access

Objects,数据访问对象)及OLE DB(OLE data Base,OLE数据库)。

1.ODBC(Open Database Connectivity,开放数据库连接)

ODBC提供了应用程序接口(API),使得任何一个数据库都可以通过ODBC驱动器与指定DBMC相联,用户的程序就可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。作为今。

2.DAO(Data Access Objects,数据访问对象)

DAO 提供了一种通过程序代码创建和操纵数据库的机制。多个DAO 对象构成了一个体系结构,在这个结构里,各个DAO对象协同工作,通过 Microsoft Jet 数据库访问数据库中的数据和数据库的结构定义。可以访问的数据库类型主要有:Microsoft Jet 数据库、ODBC 数据源、可安装的ISAM数据库。

DAO 是我们可以通过程序访问和操纵本地的或远程的数据和数据定义,管理数据库中的对象或结构。DAO 支持两种不同的数据库环境——称为工作区(Workspace). Microsoft Jet Workspace ——这是一种使用Microsoft Jet 数据库引擎来访问数据源的工作区。

ODBC Direct Workspace ——这是一种使用 ODBC Direct 来直接访问一个ODBC 数据源,并绕过Microsoft Jet 数据库引擎的工作区。可通过ODBC访问数据库服务器,而无须安装Microsoft Jet 数据库引擎。

3.OLE DB(OLE data Base,OLE数据库)。

OLE DB试图提高一种统一的数据访问接口,并能处理除了标准的关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(Directory Services),以及主机系统中的IMS和VSAM数据。OLE DB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健壮性和灵活性要高的多。但是,由于OLE DB的程序比较复杂,因而对于一般用户来说使用ODBC和DAO方式已能满足一般数据库处理的需要。

Microsoft Windows Open Standards

Architecture(WOSA,Windows开放式服务体系结构)的主要组成部分,ODBC一直沿用至

2

2 系统分析

2.1 需求分析的目的

软件的需求分析必须要有对原业务的一个深入了解、提取、抽象、升华的过程,管理软件需求分析尤其如此。

软件的需求分析是从用户的业务中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出我们的软件产品。这个步骤是对用户业务需求的一个升华,是一个把用户业务管理流程优化,转化为软件产品,从而提升管理而实现的质的飞跃,这一步是否成功,直接关系到开发出来的软件产品能否得到用户认可,顺利交付给客户,客户能否真正运用我们的产品帮助他解决业务或管理问题。

按照软件工程对软件开发过程的描述,需求阶段我们可以细分为需求调研和需求分析两个小阶段,需求调研需要充分细致的了解客户目标,用户业务内容、流程等,这是一个对需求的采集过程,是进行需求分析的基础准备。当我们已经了解、理解了用户的业务,于是可以开始分析需求了。

2.2 需求分析

通过调查,要求系统需要有以下功能: 系统登录 人员信息管理 图书信息管理 借阅管理 综合信息查询 帮助 系统退出。

2.3 可行性分析

图书管理系统使图书管理走上了科学化、系统化管理道路。

(1)经济可行性 使用图书管理系统能够极大的节约图书管理工作的运行成本。主要体现在:使用图书管理系统能够减少

工作人员数量,从而降低人力成本;实用图书管理系统可以减少对管理资料维护的成本

(2)技术可行性 目前国内外软硬件产品和技术发展迅速.服务器,操作系统等相关资源技术容易获得并有较大的选择余地,而且在本系统软硬件要求适中,因此现有条件在技术层面上完全可以满足要求。

3

3 系统设计

3.1 设计目标

本系统是针对图书管理工作过程进行设计的,主要实现如下目标: 合法用户可以登录此系统;

读者可以查询、借阅、归还图书等; 工作人员可以对读者、图书进行管理。

3.2 数据库设计

3.2.1 概念结构设计

将从需求分析中得到的数据信息抽象为概念模型,经分析可得到数据库的E-R模型。见图3-1、3-2、3-3、3-4。

名称

作者 编号

种类 出版社 图书 出版日期 价格 种类

图3-1 图书实体E-R图

电话 电子邮件 出版社

图3-2 出版社实体E-R图

4

地址 名称

密码 姓名 编号 院系 读者 专业

图3-3 实体读者E-R图

性别 年龄 借书量 状态

密码 用户

类型 编号 图3-4 用户实体E-R图

3.2.2 逻辑结构设计

把上面的概念结构转化为关系模型,我们可以得到各实体的关系模式(关系的码用下划线标出):

图书(图书编号,图书名称,图书作者,出版社,出版日期,图书价格,图书种类) 出版社(出版社编号,出版社地址,出版社电话,电子邮件) 读者(读者编号,读者名称,密码,读者电话,电子邮件,借书数量) 用户(用户编号,用户密码,用户类型) 以下关系模式为读者——图书的关系模式:

借阅图书(读者编号,图书编号,借阅日期,应还日期,归还日期,是否归还) 从以上的关系模式我们可以得到数据库的逻辑结构设计(二维表)。每个表格表示数据库中的一个数据表。为了优化数据表结构,部分字段采用代码形式,以便与数据库中的数据表对应起来。根据以上分析,需要设计五个数据表来存放数据信息,这些表分别为图书表,出版社表,读者表,用户表,借阅表。以下五个表分别是这五个表的结构设计。见表3-1、3-2、3-3、3-4、3-5。

5

表3-1 图书表 编号 1 2 3 4 5 6 7 字段名 BookID BookWriter BookName BookPublish BookPublishDate BookPrice BookSort 数据类型 Char(10) Varchar(30) Varchar(20) Varchar(50) Datetime Float Varchar(20) 表3-2 出版社表 编号 1 2 3 4 字段名 PublishName PublishAddress PublishPhoneNO PublishEmail 数据类型 Varchar(50) Varchar(50) Varchar(15) Varchar(30) 表3-3 读者表 编号 1 2 3 4 5 6 字段名 ReaderID ReaderName ReaderPassword ReaderSex ReaderAge ReaderDept 数据类型 Char(9) Varchar(20) Varchar(10) Varchar(2) Varchar(3) Varchar(30) 说 明 读者编号 读者名称 读者密码 读者性别 读者年龄 读者系别 备 注 主键 说 明 出版社名称 出版社地址 出版社电话 电子邮件 备 注 主键 说 明 图书编号 图书作者 图书名称 出版社 出版日期 图书价格 图书类型 备 注 主键 6

7 8

ReaderPro BorrowingAmount Varchar(30) int 读者专业 借阅数量 表3-4 用户表 编号 1 2 3 字段名 UserID UserPassword UserSort 数据类型 Char(9) Char(10) Varchar(10)

说 明 用户编号 用户密码 用户类型 备 注 主键 表3-5 借阅表 编号 1 2 3 4 5 字段名 ReaderID BookID BorrowDate ReturnDate outTime 数据类型 Char(6) Char(10) Datetime Datetime Varchar(2) 说 明 读者编号 图书编号 借书日期 应还日期 是否归还 备 注 外键 外键 3.3 总体设计

3.3.1 项目规划

图书管理系统是一个典型的数据库应用程序,由应用程序和后台数据库两部分构成。

应用程序

应用程序主要包括登录,用户信息,读者信息,图书信息管理,借阅图书,综合查询,出版社信息,退出系统几个部分组成。

数据库 数据库负责对图书信息,用户信息等数据的管理。

3.3.2 系统功能结构图

系统功能结构见图3-5。

7

图3-5 系统功能结构图

8

4 系统主要功能模块实现

4.1 登录界面

进入系统必须经过登录,用户输入用户名和密码后,系统会查询数据表Users,如果用户存在且密码正确,则根据用户的类型决定用户可以进行的操作。如果用户类行为”管理员”,此时用户类型为系统用户,那么用户可以使用系统所有的功能。如果用户类型为“普通用户”,此时用户为普通用户,那么登录后用户不能进行用户信息管理等操作。如果用户不存在或密码错误则提示用户名或密码错误,并要求用户重新输入。见图4-1。

图4-1 用户登录

4.2 主控制界面

此界面是进入相应功能模块的入口,相应功能是否可用取决于用户的类型。每个窗口打开时,系统会自动判断该窗口是否为初次打开还是已经打开,保证一个窗口只打开一次。通过this.MdiChildren获取父窗口的所有子窗体对象,并与即将打开的窗体对象做对比,即可确定该子窗体是否已经打开。

除此之外,界面下方还有当前登录的用户组和用户名显示,还有系统当前时间显示。见图4-2。

9

图4-2 系统主界面

4.3 用户信息维护

在用户信息维护界面可以对用户进行维护操作,包含用户新增、修改、查询、删除等。用户添加时用户名为系统自动生成,保证了唯一性和规律性。生成规则:日期(yymmdd)+序号(001开始递增)。用户修改可以修改用户的用户组。查询界面可以查询目前所有用户的信息,通过dataGridView展示出来,并可以直接选择某个用户进行删除操作。见图4-3、4-4。

图4-3 用户信息维护1

10

图4-4 用户信息维护2

4.4 读者信息维护

在读者信息维护界面可以对读者的信息进行管理。具体包含读者信息的添加、修改、查询、删除等。借阅号为系统自动生成,保证规律性和唯一性。生成规则日期(yymmdd)+序号(001开始递增),修改信息可以修改除借阅号外的任何信息。查询界面可以查询所有读者的信息,通过dataGridView展示出来,并可选择某个读者删除读者信息。见图4-5、4-6。

图 4-5 读者信息维护1

11

图4-6 读者信息维护2

4.5 图书信息维护

在图书信息维护界面可以对图书信息进行管理。具体包含图书信息的添加、修改、查询、删除等。点击新增单选按钮,自动生成图书号。图书号为系统自动生成,号码唯一,并保证了规律性。生成规则日期(yymmdd)+‘-’+序号(001开始递增),出版社为下拉列表框选择,只能选择系统中已有的出版社信息(出版社信息维护界面维护),保证了出版社信息一致,简化了操作。修改信息可以修改除图书号外的任何信息。查询界面可以查询所有图书的信息,通过dataGridView展示出来,并选择图书进行删除操作。见图4-7、4-8。

图4-7 图书信息维护1

12

图 4-8 图书信息维护2

4.6 出版社信息维护

在出版社信息维护界面可以对出版社的信息进行管理。具体包含出版社信息的添加、修改、查询、删除等。点击新增信息单选按钮可以添加出版社的信息,单击修改可以修改出版社信息。查询界面可以查询现有出版社信息,通过dataGridView展示出来,并可以对不需要的出版社信息进行删除操作。见图4-9、4-10。

图 4-9 出版社信息维护1

13

图4-10 出版社信息维护2

4.7 借阅图书

在借阅图书界面可以对图书进行借阅操作。输入图书号,点击查询,若该图书没有被借阅,则会在下方出现图书信息,确认无误后,选择归还日期,按借阅按钮完成借阅。借阅数据处理:①插入借阅信息表②更新读者的当前借阅数量③更新图书的状态为被借阅状态。见图4-11。

图 4-11 借阅图书

4.8 归还图书

归还图书界面可以对自己所借的图书行进归还操作。点击下拉列表框,系统会自动查询当前登录用户是否有借书未还的记录,若有则显示被借图书的图书号,选择图书号,瞎放将出现该图书的信息,确认无误后,点击归还按钮,进行图书归还。图书归还数据处理:①更新书籍状态为未被借阅状态②更新读者当前借书数量减少一本③更新借阅表对应记录为已经还书状态。见图4-12。

14

图 4-12 归还图书

4.9 在库图书查询

在库图书查询界面可以查询目前所有未被借阅的图书,方便读者寻找自己所需要的图书进行借阅。可以根据条件来快速锁定图书范围。通过dataGridView展示出来。见图4-13。

图 4-13 在库图书查询

4.10 个人借还情况

个人借还情况界面可以现实当前登录帐号对图书的借还的历史记录,管理员则可以查看所有读者的借还情况历史。通过dataGridView展示出来。见图4-14。

图4-14 个人借还情况

若当前登录帐号并无图书借阅记录,则系统提示“当前用户没有任何借阅历史信息!”

15

5 系统测试

软件工程的根本目标是开发出高质量的完全符合用户需要的软件。因此,通过测试发现错误之后还必须诊断并改正错误,这才是测试的目的。

软件测试的目标为:

? 测试是为了发现程序中的错误而执行程序的过程。 ? 好的测试方案是极可能发现迄今为止尚未发现的错误。 ? 成功的测试是发现了至今为止尚未发现的错误的测试。

测试方法:

白盒法 其测试的前提是把测试的对象看作一个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。

黑盒法 其测试前提是把测试的对象看作一个黑盒子,测试人员完全不考虑程序的内部结构和特性。只依据程序的需求分析规格说明,检查程序的功能是否符合它的功能说明。

软件测试按4个步骤进行,即单元测试、集成测试、确认测试、系统测试。软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它作必要的测试,模块的编写者和测试者是同一个人,编码和模块测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。

由于程序的编写由我一个人独立完成,程序的流程已经非常清楚。因此,我在系统的测试中主要采用的测试方法是“白盒测试”,在编写过程中也出现过很多错误,甚至根本无法运行下去,常采用在程序中的设置断点,逐步缩小范围并最终找到问题的解。在测试的过程中,我尽量站在用户的角度考虑问题,假如我是用户如何才能更方便,假如我在某一时刻进行某种操作会产生什么结果,大量进行假设。并请同学帮忙作为用户试使用系统并提出建议意见。在所有模块功能完成后,先测试了一个模块的功能,能够实现后,再对其它模块进行编写、测试,在这个过程中,往往又会返回到刚才的模块,再次改进。如此反复当所有模块测试完成后,便对子系统分别测试,输入大量数据并尽可能多的假设“非正常情况”以测试系统的健壮性。待这些测试都通过后就对整个系统进行测试。我所采用的测试方式属于集成测试中的渐增式测试,这种方法实际上同时完成单元测试和集成测试,其优点有:

1.利用已测试过的模块作为测试软件,开销小。

16

2.模块间的接口错误可以较早发现。

3.在测试时,如发现错误往往和最近加进来的那个模块有关。 4.已测试的模块可以在新的条件下再次检验,使测试更彻底。

17

结论

本文重点讨论了“图书管理系统”的设计方法和过程。全文共分以下几部分进行叙述:第一部分为绪论,简单的介绍了课题研究的背景和意义、系统介绍、开发工具及用到的一些理论知识;第二部分为系统分析,通过调查得出需求分析,从经济性和技术性两方面对系统的可行性进行了分析;第三部分系统设计,首先提出系统的设计目标,再对系统的数据库进行了具体设计,包括概念结构设计和逻辑结构设计,最后得出项目规划和系统功能结构图即总体设计;第四部分系统主要功能模块实现,介绍了主要模块的操作及实现的功能,加以少量的代码和界面图形,给读者一个清晰的认识;第五部分为系统测试;第六部分为设计总结,简要说明了该系统的实现过程,及自己在这次锻炼过程中的感受;第七部分为参考文献,列出了在做该系统过程中所参阅的主要文献;第八部分为致谢;最后是附录,列出了系统实现过程中用到的一些主要代码。

在本次设计的全过程中,我对所学的知识有了一个比较系统的认识和理解。在设计中我才知自己掌握的知识还远远不够,将理论知识应用到实践中去,总会出现各种问题,不是理论没掌握好,而是光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。把学到的知识应用到实践中去,多做多练,才可以把理论的精华发挥出来。知识不是知道,了解就好,一定让它在现实生活中得到充分的应用,从而解决一些问题,这才是学习的根本目的。而且计算机是一门非常复杂且庞大的学科,一项课题往往需要多项技术才可以完成的。在设计阶段,通过对课题的深入分析与研究,迫使我对技术有一定的了解。在遇到问题时,得到了指导老师与同学的悉心帮助,使我感受到集体的力量是无穷的。

我十分珍惜这次锻炼的机会,我按部就班的完成了自己的设计任务,但由于自己的知识水平有限,设计时间又较短,所以该系统还有许多不尽如人意的地方,比如用户界面不够美观等问题,都有待进一步改善。对于这些不足之处,恳请老师多多指教!当今的社会是竞争的社会,而人才的竞争则是竞争的焦点,课程设计对我们来说,是一次很好的锻炼,使我们各方面的能力都有了很大的提高,为我们将来踏出校门,走上社会增强了能力与自信!

18

致谢

在本次课程设计中,首先要感谢XXX老师的悉心指导,给予我许多新的思想和宝贵的意见。XXX老师严谨的治学态度、勤奋的工作作风和平易近人的处事风范,给我留下了深刻的印象,时时教育着我并使我终身受益!值此论文完稿之际,特此向XXX老师致以衷心的感谢!

同时,感谢我们计算机科学与技术系的领导和老师们给我提供的良好环境和学习机会,感谢老师和同学们对我的关心和帮助。

最后,感谢老师在百忙之中抽出宝贵时间来审阅我的论文,谢谢老师的指导。

19

参考文献

[1] 九州书源.SQLServer2005数据库管理与应用[M] .北京:清华大学出版社,2005 [2]宋昆,李严等.SQL Server数据库开发实例解析[M].北京:机械工业出版社.2006.1 [3]萨师煊,王珊.数据库系统概论(第三版)[M].北京:高等教育出版社.1999 [4]王辉,张大治.C#程序设计实用教程[M].北京:清华大学出版社. 2007.3

[5](美)James Huddleston等杨浩译.C#数据库入门经典[M].北京:清华大学出版社. 2006.4 [6](美) Paulraj Ponniah著,韩宏志译,数据库设计与开发教程[M].北京:清华大学出版社.2005.1 [7][美]James Foxall,陈秋萍译.VisualC#2005入门经典[M].北京:人民邮电出版社社.2007.3 [8]李维杰,孙乾君.SQLServer2005数据库原理与应用简明教程[M].北京:清华大学出版社.2007.5 [9](美)Gavin Powell著,王洪波,赵恒译. 数据库设计入门经典[M].北京:清华大学出版社.2007.3 [10]刘大玮,马传宝,孙颖洁.SQLServer数据库项目案例导航[M].北京:清华大学出版社.2005.7 [11](美)David M. Kroenke郭平译.数据库原理(第2版)[M].北京:清华大学出版社.2005.6 [12]李律松,陈少刚,沈刚.Visual C#数据库高级教程[M].北京:清华大学出版社.2005.6

20

附录

附录1

公共类代码 SQLHelper类:

class SQLHelper {

private static string source = \security=SSPI;database=library;uid=sa;pwd=123\;

static SqlConnection conn = new SqlConnection(source);

#region 返回DateSet数据集 ///

/// 返回DateSet数据集 ///

///

///

public static DataSet GetDataSet(string sql, params SqlParameter[] parameters) {

conn.Open();

SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.Clear();

foreach (SqlParameter parameter in parameters) {

cmd.Parameters.Add(parameter); }

DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter(cmd); try {

da.Fill(ds); }

catch (Exception e) {

string msg = e.Message; }

finally {

conn.Close(); da.Dispose(); }

return ds; }

#endregion

#region 返回首行首列 ///

/// 返回首行首列 ///

///

///

public string GetFirstRow(string sql, params SqlParameter[] parameters) {

string str = \;

21

conn.Open();

SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.Clear();

foreach (SqlParameter parameter in parameters) {

cmd.Parameters.Add(parameter); } try {

str = cmd.ExecuteScalar().ToString(); }

catch (Exception e) {

string msg = e.Message; }

finally {

conn.Close(); cmd.Dispose(); }

return str; }

#endregion

#region 执行SQL语句(增加 删除 修改) ///

/// 执行SQL语句(增加 删除 修改) ///

///

///

public static bool Execsql(string sql, params SqlParameter[] parameters) {

bool flag = false; conn.Open();

SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.Clear();

foreach (SqlParameter parameter in parameters) {

cmd.Parameters.Add(parameter); } try {

cmd.ExecuteNonQuery(); flag = true; }

catch (Exception e) {

string msg = e.Message; }

finally {

conn.Close(); cmd.Dispose(); }

return flag; }

#endregion

22

#region 生成SQL参数 ///

/// 生成SQL参数,参数名,值 ///

///

public static SqlParameter MakeParam(string ParamName, string Value) {

return new SqlParameter(ParamName, Value); }

#endregion

///

/// 获取用户组 ///

/// public DataSet GetGroup() {

string sql = \; DataSet ds = GetDataSet(sql); return ds; }

///

/// 获取用户名 ///

///

public DataSet GetUserID(string group) {

string sql = \; DataSet ds = GetDataSet(sql,MakeParam(\,group)); return ds; }

///

/// 检查用户名密码 ///

/// /// /// ///

public DataSet CheckUser(string username, string password,string group) {

string sql = \UserSort=@group\;

DataSet ds = GetDataSet(sql, MakeParam(\, username), MakeParam(\, password),MakeParam(\,group)); return ds; }

///

/// 查询用户信息 ///

/// /// /// /// ///

23

public DataSet SelectUser(bool ch1, bool ch2, string username, string group) {

string sql = \; if (ch1) {

sql += \; }

if (ch2) {

sql += \; }

DataSet ds = GetDataSet(sql,MakeParam(\,group),MakeParam(\,username)); return ds; }

///

/// 添加用户 ///

///

public bool InsertUsers(string username,string password,string group) {

string sql=\(@username,@password,@group)\; bool flag =

Execsql(sql,MakeParam(\,username),MakeParam(\,password),MakeParam(\,group)); return flag; }

///

/// 更新用户组 ///

///

public bool UpdateUserGroup(string username, string group1,string group2) {

string sql = \Users set UserSort=@group2 where UserID=@username and UserSort=@group1\; bool flag =

Execsql(sql,MakeParam(\,group2),MakeParam(\,username),MakeParam(\,group1)); return flag; }

///

/// 通过用户名获取用户组 ///

///

public DataSet GetGroup(string username) {

string sql = \; DataSet ds = GetDataSet(sql,MakeParam(\,username)); return ds; }

///

24

/// 根据用户名删除用户 ///

///

public bool DeleteUser(string username) {

string sql = \; bool flag = Execsql(sql,MakeParam(\,username)); return flag; }

///

/// 获取新用户名 ///

/// public string GetUserID() {

string sj = DateTime.Now.ToString(\);

string sql = \; int i =Convert.ToInt32(GetFirstRow(sql,MakeParam(\,sj+\)))+1; string userid = sj + i.ToString().PadLeft(3,'0'); return userid; }

///

/// 获取新用户名 ///

/// public string GetReaderID() {

string sj = DateTime.Now.ToString(\);

string sql = \; int i = Convert.ToInt32(GetFirstRow(sql, MakeParam(\, sj + \))) + 1; string readerid = sj + i.ToString().PadLeft(3, '0'); return readerid; }

///

/// 插入读者数据 ///

///

public bool InsertReader(string id, string name, string psw, string sex, string age, string dept, string pro) {

bool flag1,flag2;

string sql1 = @\

(ReaderID,ReaderName,ReaderPassword,ReaderSex,ReaderAge,ReaderDept,ReaderPro,BorrowingAmount,IsLost) values (@id,@name,@psw,@sex,@age,@dept,@pro,0,'否')\; flag1 =

Execsql(sql1,MakeParam(\,id),MakeParam(\,name),MakeParam(\,psw),MakeParam(\,sex),MakeParam(\,age),MakeParam(\,dept),MakeParam(\,pro));

string sql2 = \

25

(@userid,@userpassword,'普通用户')\;

flag2 = Execsql(sql2,MakeParam(\,id),MakeParam(\,psw)); return flag1 && flag2; }

///

/// 获取读者ID ///

///

public DataSet GetReaderID_1() {

string sql = \; DataSet ds = GetDataSet(sql); return ds; }

///

/// 根据读者ID获取信息 ///

///

public DataSet GetReader(string id) {

string sql = \; DataSet ds = GetDataSet(sql,MakeParam(\,id)); return ds; }

///

/// 更新读者信息 ///

///

public bool UpdateReader(string id, string name, string psw, string sex, string age, string dept, string pro) {

string sql=\

ReaderName=@name,ReaderPassword=@psw,ReaderSex=@sex,ReaderAge=@age,ReaderDept=@dept,ReaderPro=@pro where ReaderID=@id\; bool

flag=Execsql(sql,MakeParam(\,name),MakeParam(\,psw),MakeParam(\,sex),MakeParam(\,age),MakeParam(\,dept),MakeParam(\,pro),MakeParam(\,id)); return flag; }

///

/// 查询读者信息 ///

///

26

public DataSet SelectReader(bool ch1, bool ch2, string name, string sfcq) {

string sql = \; if (ch1) {

sql += \; }

if (ch2) {

sql += \; }

DataSet ds = GetDataSet(sql, MakeParam(\, name), MakeParam(\, sfcq)); return ds; }

///

/// 根据借阅号删除读者信息 ///

///

public bool DeleteReader(string id) {

bool flag1, flag2;

string sql1 = \; flag1 = Execsql(sql1, MakeParam(\, id));

string sql2 = \; flag2 = Execsql(sql2,MakeParam(\,id)); return flag1 && flag2; }

///

/// 获取新图书号 ///

/// public string GetBookID() {

string sj = DateTime.Now.ToString(\);

string sql = \; int i = Convert.ToInt32(GetFirstRow(sql, MakeParam(\, sj + \))) + 1; string bookid = sj +\+ i.ToString().PadLeft(3, '0'); return bookid; }

///

/// 添加图书信息 ///

///

/// public bool InsertBook(string id, string writer, string name, string publish, DateTime publishdate, string price, string sort) {

string sql = @\

(BookID,BookWriter,BookName,BookPublish,BookPublishDate,BookPrice,BookSort)

27

values (@id,@writer,@name,@publish,@publishdate,@price,@sort)\; bool flag = Execsql(sql, MakeParam(\, id), MakeParam(\, writer), MakeParam(\, name), MakeParam(\, publish), new SqlParameter(\, publishdate), MakeParam(\, price), MakeParam(\, sort)); return flag; }

///

/// 获取图书号 ///

///

public DataSet GetBookID_1() {

string sql = \; DataSet ds = GetDataSet(sql); return ds; }

///

/// 根据图书ID获取信息 ///

///

public DataSet GetBook(string id) {

string sql = \; DataSet ds = GetDataSet(sql, MakeParam(\, id)); return ds; }

///

/// 根据图书号更新图书信息 ///

///

/// public bool UpdateBook(string id, string writer, string name, string publish, DateTime publishdate, string price, string sort) {

string sql = \

BookWriter=@writer,BookName=@name,BookPublish=@publish,BookPublishDate=@publishdate,BookPrice=@price,BookSort=@sort where BookID=@id\;

bool flag = Execsql(sql, MakeParam(\, writer), MakeParam(\, name),

MakeParam(\, publish), new SqlParameter(\, publishdate), MakeParam(\, price), MakeParam(\, sort), MakeParam(\, id)); return flag; }

///

/// 查询图书信息 ///

///

28

///

///

public DataSet SelectBook(bool ch1, bool ch2, bool ch3,string bookname, string name,string publish) {

string sql = \; if (ch1) {

sql += \; }

if (ch2) {

sql += \; }

if (ch3) {

sql += \; }

DataSet ds = GetDataSet(sql,MakeParam(\,bookname+\), MakeParam(\, name+\), MakeParam(\, publish+\)); return ds; }

///

/// 通过图书号删除图书信息 ///

///

public bool DeleteBook(string id) {

string sql = \; bool flag = Execsql(sql, MakeParam(\, id)); return flag; }

///

/// 获取出版社名字 ///

///

public DataSet GetPublishName() {

string sql = \; DataSet ds = GetDataSet(sql); return ds; }

///

/// 添加出版社信息 ///

///

public bool InsertPublish(string name,string address,string phone,string email) {

29

string sql = @\

(PublishName,PublishAddress,PublishPhoneNO,PublishEmail)

values (@name,@address,@phone,@email)\; bool flag =

Execsql(sql,MakeParam(\,name),MakeParam(\,address),MakeParam(\,phone),MakeParam(\email\,email));

return flag; }

///

/// 通过出版社名获取出版社信息 ///

///

public DataSet GetPublish(string name) {

string sql = \; DataSet ds = GetDataSet(sql, MakeParam(\, name)); return ds; }

///

/// 更新出版社信息 ///

///

public bool UpdatePublish(string name, string address, string phone, string email) {

string sql = \

PublishAddress=@address,PublishPhoneNO=@phone,PublishEmail=@email where PublishName=@name\; bool flag =

Execsql(sql,MakeParam(\,address),MakeParam(\,phone),MakeParam(\,email),MakeParam(\,name));

return flag; }

///

/// 查询出版社信息 ///

///

public DataSet SelectPublish(string name) {

string sql = \; DataSet ds = GetDataSet(sql, MakeParam(\, \ + name + \)); return ds; }

///

/// 删除出版社信息 ///

///

public bool DeletePublish(string name) {

string sql = \;

30

bool flag = Execsql(sql, MakeParam(\,name )); return flag; }

///

/// 图书借阅处理 ///

///

///

public bool BorrowBook(string readerid,string bookid,DateTime borrowdate,DateTime returndate) {

bool flag1, flag2, flag3; //插入借阅信息表

string sql1 = @\ values (@readerid,@bookid,@borrowdate,@returndate,'否')\;

flag1 = Execsql(sql1, MakeParam(\, readerid), MakeParam(\, bookid),new SqlParameter(\,borrowdate),new SqlParameter(\,returndate)); //更新读者借阅图书数量

string sql2 = \; flag2 = Execsql(sql2,MakeParam(\,readerid)); //更新图书状态为被借阅

string sql3 = \是' where BookID=@id1\; flag3 = Execsql(sql3,MakeParam(\,bookid)); return flag1 && flag2 && flag3; }

///

/// 借阅管理根据图书ID获取信息 ///

///

public DataSet BorrowGetBook(string id) {

string sql = \否'\; DataSet ds = GetDataSet(sql, MakeParam(\, id)); return ds; }

///

/// 还书界面根据用户名获取还未还的信息 ///

///

public DataSet BorrowGetBookID(string username) {

string sql = \否' and ReaderID=@username\; DataSet ds = GetDataSet(sql,MakeParam(\,username)); return ds; }

///

/// 还书操作 ///

///

31

///

public bool ReturnBook(string username,string bookid) {

bool flag1, flag2, flag3; //更新书籍状况为未被借阅

string sql1 = \否' where BookID=@bookid\; flag1 = Execsql(sql1,MakeParam(\,bookid)); //更新读者借书量减少一

string sql2 = \ReaderID=@username\;

flag2 = Execsql(sql2,MakeParam(\,username));

string sql3 = \是' where BookID=@bookid1 \; flag3 = Execsql(sql3,MakeParam(\,bookid)); return flag1 && flag2 && flag3; }

///

/// 在库图书查询 ///

///

public DataSet SelectBook(bool a,bool b,bool c,bool d,string name, string publish, string writer, string sort) {

string sql = \否'\; if (a) {

sql += \; }

if (b) {

sql += \; }

if (c) {

sql += \; }

if (d) {

sql += \; }

DataSet ds =

GetDataSet(sql,MakeParam(\,name),MakeParam(\,publish),MakeParam(\,writer),MakeParam(\,sort));

return ds; }

///

/// 查询个人借阅信息 ///

///

32

public DataSet SelectBorrow(string username,string group) {

string sql = \; DataSet ds;

if (group == \管理员\) {

sql = @\

BorrowBook.ReaderID,BorrowBook.BookID,BorrowBook.BorrowDate,BorrowBook.ReturnDate,BorrowBook.OutTime,

book.BookName,book.BookWriter,book.BookPublish,book.BookPrice,book.BookSort

from BorrowBook left join book on BorrowBook.BookID=book.BookID \; ds = GetDataSet(sql); } else {

sql = @\

BorrowBook.ReaderID,BorrowBook.BookID,BorrowBook.BorrowDate,BorrowBook.ReturnDate,BorrowBook.OutTime,

book.BookName,book.BookWriter,book.BookPublish,book.BookPrice,book.BookSort

from BorrowBook left join book on BorrowBook.BookID=book.BookID where ReaderID=@username\;

ds = GetDataSet(sql, MakeParam(\, username)); }

return ds; }

}

公共类 Global类代码:

class Global {

///

/// 登录用户名 ///

public static string username { get; set; }

///

/// 登录用户组 ///

public static string usergroup { get; set; }

}

附录2

登录界面代码

public partial class Login : Form {

public Login() {

InitializeComponent();

}

33

SQLHelper sqlHelper = new SQLHelper();

private void button2_Click(object sender, EventArgs e) {

System.Diagnostics.Process.Start(\); //调用系统软键盘 }

private void button1_Click(object sender, EventArgs e) {

if (comboBox1.SelectedIndex == -1) {

MessageBox.Show(\请选择登录类别!\); return; }

if (comboBox2.SelectedIndex == -1 || textBox2.Text == string.Empty) {

MessageBox.Show(\请将用户名和密码输入完整!\); return; } try {

DataSet ds = sqlHelper.CheckUser(comboBox2.Text, textBox2.Text, comboBox1.Text); if (ds.Tables[0].Rows.Count > 0) {

Global.username = comboBox2.Text; Global.usergroup = comboBox1.Text; this.Hide();

Main main = new Main(); main.Show(); } else {

MessageBox.Show(\用户名或密码错误!\); return; } }

catch (Exception ex) {

MessageBox.Show(ex.Message); return; } }

private void comboBox1_MouseClick(object sender, MouseEventArgs e) {

try {

comboBox1.Items.Clear();

DataSet ds = sqlHelper.GetGroup(); if (ds.Tables[0].Rows.Count > 0) {

foreach (DataRow dr in ds.Tables[0].Rows) {

comboBox1.Items.Add(dr[\].ToString()); } } }

catch (Exception ex)

34

{

MessageBox.Show(ex.Message); return; } }

private void button3_Click(object sender, EventArgs e) {

this.Close();

Application.Exit(); }

private void comboBox2_MouseClick(object sender, MouseEventArgs e) {

try {

comboBox2.Items.Clear();

DataSet ds = sqlHelper.GetUserID(comboBox1.Text); if (ds.Tables[0].Rows.Count > 0) {

foreach (DataRow dr in ds.Tables[0].Rows) {

comboBox2.Items.Add(dr[\].ToString()); } } }

catch (Exception ex) {

MessageBox.Show(ex.Message); return; } }

private void textBox2_KeyDown(object sender, KeyEventArgs e) {

if (e.KeyCode == Keys.Enter) {

button1_Click(sender,e); } } }

主窗口代码:

public partial class Main : Form {

public Main() {

InitializeComponent(); }

///

/// 判断某个窗体是否已经打开 ///

/// /// ///

public bool OnlyOpen(string MdiChildrenClassName, string funtion) {

//遍历每一个MDI子窗体实例

35

foreach (Form childFrm in this.MdiChildren) {

//若子窗体的类型与实参相同,则存在该类的实例 if (childFrm.Name == MdiChildrenClassName) {

//若该窗体被最小化了,则显将其恢复到原来状态

if (childFrm.WindowState != FormWindowState.Maximized) {

childFrm.WindowState = FormWindowState.Maximized; }

childFrm.Activate(); return true; } }

return false; }

private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e) {

if (!OnlyOpen(\, \用户信息维护\)) {

UserManage usermanage = new UserManage(); usermanage.MdiParent = this; usermanage.Show();

usermanage.WindowState = FormWindowState.Maximized; } }

private void 退出系统ToolStripMenuItem_Click(object sender, EventArgs e) {

Application.Exit(); }

private void Main_Load(object sender, EventArgs e) {

toolStripStatusLabel1.Text += Global.usergroup; toolStripStatusLabel3.Text += Global.username; timer1.Enabled = true;

if (Global.usergroup != \管理员\) {

人员信息管理ToolStripMenuItem.Enabled = false; 图书信息管理ToolStripMenuItem.Enabled = false; } }

private void timer1_Tick(object sender, EventArgs e) {

toolStripStatusLabel6.Text = DateTime.Now.ToString(\); }

private void 读者管理ToolStripMenuItem_Click(object sender, EventArgs e) {

if (!OnlyOpen(\, \读者信息维护\)) {

ReaderManage readermanage = new ReaderManage(); readermanage.MdiParent = this; readermanage.Show();

readermanage.WindowState = FormWindowState.Maximized;

36

本文来源:https://www.bwwdw.com/article/g3c6.html

Top