《基于C#的图书馆管理系统(共28页).doc》由会员分享,可在线阅读,更多相关《基于C#的图书馆管理系统(共28页).doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上基于C#的图书馆管理系统专心-专注-专业摘要随着社会的发展,人们生活水平的不断提高,物质文化的发展已经远远满足不了人们的需求,精神文明有了飞速的发展,因此图书事业的发展就成为了精神文明进步的一个动力。在迈入二十一世纪的今天,对图书馆的管理显得极其重要,合理的管理不但反映了一个国家的科技水平,而且影响人们对知识掌握的速度和质量。在知识经济时代到来的今天,用计算机管理图书馆的工作由自动化系统运行而完成。这不仅节省了人力,还提高了工作效率和服务质量,而且还加速了图书的流通。本图书馆管理系统是按基本图书馆系统结构开发的,本文重点描述图书添加、图书信息更新、删除图书、图书查询等
2、功能。前言部分论述了图书馆系统的发展以及图书馆用计算机自动化管理的前景。正文论述了图书馆管理系统的特点及图书馆自动化管理的重要性和图书馆管理系统软件需要实现的主要功能,分析图书馆管理系统以及实现软件开发的系统要求,简述了实现图书馆管理系统设计需要,图书馆系统数据库的设计,程序流程图以及详细设计,并陈列了改系统开发所应用的主要参考文献。关键词:管理信息系统 图书馆 C# 数据库表 SQL Server2000目录第一章 系统开发环境和开发工具1.1 C#语言简介 C#是美国微软公司推出的Windows操作系统下的应用程序开发平台VisualStudio.NET(简称VS.NET)家族中的一员C#
3、是对C+进行了很大改进的一种完全面向对象的可视化程序设计语言。由于C#采用了类似于Visual Basic 的较易使用的程序设计界面,从而成为了一种更加简单易学、功能强大的应用程序开发工具。C#是一种先进的、面向对象的语言,使用C#语言可以让开发人员快速的建立大范围的基于MS网络平台的应用,并且提供大量的开发工具和服务,帮助开发人员开发机基于计算和通信的各种应用。由于C#是一种面向对象的开发语言,所以C#可以大范围地适用于高层商业应用和底层系统的开发。即使是通过简单的C#构造,也可以让各种组件方便的转变为基于Web的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用调用。
4、1.2 开发背景图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息。现有的人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。因此需要对书籍资源、读者资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利用管理效率的提高。目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息,图书管理系统也是有了很大的发展,商业化的图书信息管理软件也不少。但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。1.3 开发环境本文所采用的开发环境主要是基于数据库系统的SQL Server 2000 和
5、基于面向对象程序设计的C#。利用SQL Server 2000创建图书馆管理各信息表用户信息表、图书信息表。利用C#和数据库建立连接之后,利用C#中的控件按钮以及一些程序代码实现一些特定的功能,例如用户图书信息查询、书库借出查询、密码修改、查找图书、个人信息查询、添加用户等,极大地提高了图书馆管理的效率。第二章 图书馆管理系统的析与设计2.1 系统需求分析 随着经济全球化的推进以及企业激烈的竞争,各大高校的图书管理系统已经越来越不能够适应读者和图书信息剧增的局面了,所以我们现在需要一个检索迅速、查找方便、易修改功能齐全方便的系统来适应我们的需求。系统采用先进的两层体系结构,Client(客户端
6、)负责提供表达逻辑、显示用户界面信息、基本操作;Server(服务器端)负责实现数据服务。问题的提出:为了减少人工工作量,提高工作效率,使图书馆管理员的工作更加有效地进行。2.2 系统总体设计2.2.1 系统设计目该图书管管理系统的核心思想是实现对图书信息增、删、改、查的管理。根据图书馆日常图书管理工作的需求和图书借阅的管理流程,该系统实施后,应该达到以下目标:1. 充分了解用户需求及当前形式,功能齐备,能完成图书处理;2. 要有详细的设计说明书;3. 每一模块的流程图要很清晰;4. 系统能够正常的运行,能较好的完成预定的功能;5. 系统要有完整的帮助文件,供前台操作员能方便的操作本系统。6.
7、 系统应该具备管理用户的信息,对用户的信息进行管理,实现用户图书的借阅功能。2.2.2 开发设计思想基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想:(1)采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。(2)尽量达到操作过程中的直观、方便、实用、安全等要求。(3)系统采用C/S体系结构,Clinet(客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器;Server(服务器端)则用于提供数据服务。三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据
8、库进行交互,而是中间层向外提供接口,通过COM/DCOM通讯或者Http等方式与中间层建立连接,再经由中间层与数据库进行交互。当然数据通过中间层的中转无疑是降低了效率,但是它脱离于界面与数据库的完美封装,使得它的缺点显然不值得一提。典型的三层结构分为表示(presentation)层, 领域(domain)层, 以及基础架构(infrastructure)层,而微软的DNA架构定义了三个层:表示层(presentation),业务层(business),和数据存储层(data access)。(4)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、
9、维护。(5)系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。2.2.3 系统功能模块设计本系统分为普通用户(读者)和管理员,普通用户的职能模块包括查询图书、借阅图书和查询已借图书信息,管理员职能模块包括用户管理、图书管理、借阅管理、登录管理,得到如图系统功能模块:第三章 数据库设计3.1 引入背景图书馆管理系统是一个数据库应用系统,用户及图书的所有信息都保存在数据库中。数据库结构设计是图书馆管理信息系统数据库应用系统开发过程中一个非常重要的环节,设计的好坏将直接对所开发的图书馆管理信息系统的效率以及实现的效果产生影响。好的数据库结构设计会减少数据库的存储量,数
10、据的完整性和一致性比较高,系统具有较快的响应速度,简化基于此数据库的应用程序的实现等等。数据库结构设计主要就是要设计好数据库中各个表的结构,包括信息保存在哪些表格中、各个表的结构如何以及各个表之间的关系。由于数据库设计的重要性,人们提出了许多数据库结构设计的技术。3.2 数据库需求分析数据库需求分析是数据库结构设计的第一个阶段,也是非常重要的一个阶段。在这个阶段主要工作是收集基本数据以及数据处理的流程,为以后进一步设计一打下基础。需求分析主要解决两个问题:(1)内容要求。调查应用系统用户所需要操作的数据,决定在数据库中存储什么数据。(2)处理要求。调查应用系统用户要求对数据库进行什么样的处理,
11、理清数据库中各种数据之间的关系。在数据库需求分析后,得到一个数据字典文档,包括3方面内容:(1)数据项。包括名称、含义、类型、取值范围、长度以及和其他数据项之间的逻辑关系。(2)数据结构。若干个数据项的有意义的集合,包括名称、含义以及组成数据结构的数据项。(3)数据流。指数据中数据的处理过程,包括输入、处理和输出。本系统数据项和数据结构设计如下:(1)图书基本情况。包括的数据项有图书ID、图书名称、图书类别类别、作者、价格、出版社、内容简介、图书指定访问码。(2)图书借阅信息。包括的数据项有图书指定访问码、图书ID、图书名称、图书类别、作者、出版社、借阅者权限、借出时间、用户编号。(3)用户登
12、录信息。包括用户ID、用户名、密码、借阅者权限。3.3 数据库概念结构设计数据库概念结构设计是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。用E-R图是描述数据实体关系的一种直观描述工具,所以本系统采用了E-R图的方法进行数据库概念结构设计。用户实体E-R图:图书实体E-R图:图书借阅实体E-R图:3.4 数据库逻辑结构设计概念结构是独立于实际数据模型的信息结构,必须将其转化为逻辑结构后才能进行数据库应用的设计。也就是要将概念上的结构转化为BP数据库系统所支持的实际数据模型。根据需求分析进行数据库设计,数据库名称为 BookManage
13、 ,共需要三张表:用户表(UserInfo)、 图书信息表(BookInfo)、图书借阅信息表(BookOut)。用户表存放用户账号的信息,一个用户可以对应一个账户,包括用户名、密码、借阅证号和用户权限。通过用户表查阅用户权限和借阅证号,判断是否是管理员,是否拥有修改图书和用户信息的权限。图书信息表里每条记录都是一本书,包括图书名称、图书类别、作者、价格、内容简介和图书的访问码。通过图书信息表可以获取图书信息。 图书借阅表记录用户借阅图书的信息,包括借阅的图书、借阅时间、借阅人。通过图书借阅信息表可以获取图书借阅的信息。图书借阅情况表:在此三个表的基础上输入数据完成表的创建。第四章 系统详细设
14、计与实现 为实现该系统,建立名为Book的解决方案,建立三层架构,用户访问层(BookUI)、数据访问层(BookDAL)、逻辑业务层(BookBLL)4.1 公共类设计与实现用户访问层用户访问层(BookUI),位于最外层,离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。本系统创建窗口,实现图书信息和用户信息的增、删、改、查操作。实体类Model:Book.cs、User.cs、BookOut.cs, 是关系数据库和对象之间架起一座桥梁,帮助我们完成传递参数功能,实现按某一字段进行查询。如图所示: 4.2 数据访问层类设计与实现 数据访问层(BookDAL):该
15、层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。本实例系统的主要操作都需要与数据库发生交互,操作数据库是必不可少的,为了减少 重复代码提高代码的重用性和规范性,把与数据库交互的功能单独放在一个类中,在该类中 实现数据库的增加、删除、修改、查询等通用功能。因此创建databa.cs类,放在BookUtility方案下,实现对数据库的操作,代码如下:namespace BookUtility public class Database private static string _connStr = Data Source=.;Initial Catalog=BookManag
16、e;Integrated Security=True; private static SqlConnection sqlcon = null; private static void CreateConnection() if (sqlcon = null) sqlcon = new SqlConnection(_connStr); sqlcon.Open(); else if (sqlcon.State = ConnectionState.Closed | sqlcon.State = ConnectionState.Broken) sqlcon.Close(); sqlcon.Open()
17、; public static SqlCommand Querry(string strsql) try CreateConnection(); SqlCommand sqlcmd = new SqlCommand(strsql, sqlcon); sqlcmd.CommandText = strsql; return sqlcmd; catch return null; /执行Insert/update/delete,不带参数 public static int ExecuteNoQuery(string strsql) int i; try CreateConnection(); SqlC
18、ommand sqlcmd = new SqlCommand(strsql, sqlcon); i = sqlcmd.ExecuteNonQuery(); sqlcon.Close(); return i; catch return -1; /执行Insert/update/delete,带参数 public static int ExecuteNoQuery(string strsql, params SqlParameter param) int i; try CreateConnection(); SqlCommand sqlcmd = new SqlCommand(strsql, sq
19、lcon); /sqlcmd.Parameters.Add(param); foreach (SqlParameter par in param) /遍历数组将参数对象添加到操作命令中 sqlcmd.Parameters.Add(par); i = sqlcmd.ExecuteNonQuery(); return i; catch return -1; public static DataSet GetDataSet(string strsql) CreateConnection(); SqlDataAdapter sda = new SqlDataAdapter(strsql, sqlcon
20、); DataSet ds = new DataSet(); try sda.Fill(ds); return ds; catch return null; public static DataSet GetDataSet(string strsql, params SqlParameter param) CreateConnection(); SqlDataAdapter sda = new SqlDataAdapter(strsql, sqlcon); DataSet ds = new DataSet(); foreach (SqlParameter par in param) sda.S
21、electCommand.Parameters.Add(par); try sda.Fill(ds); return ds; catch return null; public static DataTable GetTable(string strsql) try CreateConnection(); SqlDataAdapter sda = new SqlDataAdapter(strsql, sqlcon); DataSet ds = new DataSet(); sda.Fill(ds, temp); sqlcon.Close(); return ds.Tablestemp; cat
22、ch return null; public static DataTable GetTable(string strsql, params SqlParameter param) try CreateConnection(); string str = strsql; SqlDataAdapter sda = new SqlDataAdapter(strsql, sqlcon); foreach (SqlParameter par in param) sda.SelectCommand.Parameters.Add(par); DataSet ds = new DataSet(); sda.
23、Fill(ds, temp); sqlcon.Close(); return ds.Tablestemp; catch return null; 数据访问层创建了两个类,BookAccess.cs和UserAccess.cs,分别实现访问存放书籍和用户的信息的功能,代码如下:namespace BookDAL public class BookAccess public DataTable BookQuarry(Book b) string str = select * from BookInfo where BookType= + b.Booktype + or BookName like%
24、 + b.Bookname + % or BookAuthor=% + b.Bookauthor + %or BookID= + b.Bookid + ; return Database.GetTable(str); public DataTable QuarryAll() string str = select * from BookInfo; return Database.GetTable(str); public DataTable QuarryMyBook(string id) SqlParameter param = new SqlParameter new SqlParamete
25、r(UID,id); string str = select BookIssue,BookID,BookName,BookType,BookAuthor,BookPub,BookOutTime from BookOut where UID=UID; return Database.GetTable(str,param); public DataTable QuarryAllOut() string str = select * from BookOut; return Database.GetTable(str); public SqlCommand QuarryByID(string id)
26、 string str = select * from BookInfo where BookID= + id + ; return Database.Querry(str); public int AddBook(Book b) SqlParameter parm = new SqlParameter new SqlParameter(BookID, b.Bookid), new SqlParameter(BookName, b.Bookname), new SqlParameter(BookType, b.Booktype), new SqlParameter(BookAuthor, b.
27、Bookauthor), new SqlParameter(BookPrice, b.Bookprice), new SqlParameter(BookPub, b.Bookpub), new SqlParameter(BookContent, b.Bookcontent), new SqlParameter(BookIssue, b.Bookissue) ; string str = insert into BookInfo values(BookID,BookName,BookType,BookAuthor,BookPrice,BookPub,BookContent,BookIssue);
28、 int i = Database.ExecuteNoQuery(str, parm); return i; public int BookOut(Bookout bo) SqlParameter parm = new SqlParameter new SqlParameter(BookIssue, bo.Bookissue), new SqlParameter(BookID, bo.Bookid), new SqlParameter(BookName, bo.Bookname), new SqlParameter(BookType, bo.Booktype), new SqlParamete
29、r(BookAuthor, bo.Bookauthor), new SqlParameter(BookPub, bo.Bookpub), new SqlParameter(UIdentify, bo.Uidentify), new SqlParameter(BookOutTime, bo.Bookouttime),new SqlParameter(UID, bo.Uid) ; string str = insert into BookOut values(BookIssue,BookID,BookName,BookType,BookAuthor,BookPub,UIdentify,BookOu
30、tTime,UID); int i = Database.ExecuteNoQuery(str, parm); return i; public int UpdateBook(Book b) SqlParameter parm = new SqlParameter new SqlParameter(BookID, b.Bookid), new SqlParameter(BookName, b.Bookname), new SqlParameter(BookType, b.Booktype), new SqlParameter(BookAuthor, b.Bookauthor), new Sql
31、Parameter(BookPrice, b.Bookprice), new SqlParameter(BookPub, b.Bookpub), new SqlParameter(BookContent, b.Bookcontent), new SqlParameter(BookIssue, b.Bookissue) ; string str = update BookInfo set BookName=BookName,BookType=BookType,BookAuthor=BookAuthor,BookPrice=BookPrice,BookPub=BookPub,BookContent
32、=BookContent,BookIssue=BookIssue where BookID=BookID; int i = Database.ExecuteNoQuery(str, parm); return i; public int DeleteBook(string bookid) string str = delete BookInfo where BookID= + bookid + ; int i = Database.ExecuteNoQuery(str); return i; public DataTable DeleteMybook(string bookissue) Sql
33、Parameter param = new SqlParameter new SqlParameter(BookIssue, bookissue) ; string str = delete BookOut where BookIssue=BookIssue; return Database.GetTable(str, param); 4.3 业务逻辑层类设计与实现 业务逻辑层(BookBLL)在体系架构中的位置很关键,负责关键业务的处理和数据传递,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变
34、上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。 本管理系统创建BookMessage、UserMessage两个类,实现数据访问层和用户访问层之间的数据传递。4.4 界面设计及实现4.4.1 登录界面及代码本系统的用户分为普通用户(读者)和管理员用户,管理员用户具有系
35、统提供的所有权限,普通用户可以查询图书、借阅图书、查询个人借阅信息。系统登录界面是判断用户身份的一个交互窗体,在其中输入正确的用户名和密码后,单击“确定”按钮,可根据用户角色在主界面中拥有相应的权限。登录界面如图所示:4.4.2 主界面及代码 菜单界面,添加MenuStrip菜单控件,实现各操作界面的连接,本图书馆管理系统有两个菜单界面,管理员窗口和读者窗口,完成不同权限用户的交互操作界面。图书管理窗口,浏览图书信息,实现管理员对图书的增删改查操作。添加图书窗口:完成图书的入库操作管理员有权限可以将图书添加到数据库中,图书入库界面如上图所示。在分组框中添加标签和文本框,用来接收管理员输人的图书
36、信息,以便保存到数据库中。代码如下:public partial class AddBook : Form public AddBook() InitializeComponent(); BookMessage bm = new BookMessage(); Book books = new Book(); private void button1_Click(object sender, EventArgs e) if (textBox1.Text.Trim() = | textBox2.Text.Trim() = | textBox3.Text.Trim() = | textBox4.Te
37、xt.Trim() = | textBox5.Text.Trim() = | textBox6.Text.Trim() = | textBox7.Text.Trim() = | comboBox1.Text.Trim() = ) MessageBox.Show(信息输入不完整,请重新输入, 确定); else books.Bookid = textBox1.Text.Trim(); books.Bookname = textBox2.Text.Trim(); books.Booktype = comboBox1.Text.Trim(); books.Bookauthor = textBox5.Text.Trim(); books.Bookprice = textBox4.Text.Trim(); books.Bookpub = textBox3.Text.Trim(); books.Bookcontent = textBox7.Text.Trim(); books.Bookissue =