《图书管理系统-C#课程设计(共30页).docx》由会员分享,可在线阅读,更多相关《图书管理系统-C#课程设计(共30页).docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上目录一绪论1.1 设计背景及意义图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。由于图书馆主要从事大量的图书资料的储存和流通,因此图书馆的图书管理是至关重要的。随着社会的进步,信息技术的广泛应用,数字化管理的优势日趋显著。图书管理系统也以方便、快捷的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底的解脱出来,提高效率,减轻工作人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息、掌握信息。该图书管理的开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。采用SQL Serv
2、er2005数据库作为后台数据库、Visual C#编程语言作为前台开发工具,通过对数据库技术进行了较深入的学习和应用,主要完成书目检索、读者管理、借阅管理、图书管理、用户维护等系统功能。系统运行结果证明,本文所设计的图书管理系统可以满足用户、图书管理员两方面的需要,达到了设计要求。1.2系统开发工具系统开发环境:Microsoft Visual Studio 2008系统开发语言: C#运行平台:Windows XP/7/Vista数据库:SQL Server 2005Microsoft Visual Studio 2008特点:1、面向对象设计不再是单纯的从代码的第一行一直编到最后一行,而
3、是考虑如何创建类和对象,利用类和对象来简化程序设计,并提供代码的封装和可重用性,便于程序的维护与扩展。2、所谓的对象是一种抽象的名称,用来对应实现世界存在的“东西”。一个窗口、一个按钮、一个菜单都可视为一个对象,而按钮对象、菜单对象、又会出现在窗口对象中,因此按钮对象、菜单对象便是窗口的组件之一。对象内部的数据是不能随意更改的,必须由外部向其传递信息,再由对象按其方法加以处理。用户无需知道其任何细节,操作是封闭的,对象之间能通过函数调用相互通信。3、类可视为一个产品模具、一个模块。在面向对象设计中,类是对象的原型,是对象的制作器。类的概念是面向对象程序设计最重要的特征。所谓类,是指由数据结构及
4、其相关操作所形成的集合,描述该类任一对象的共同的行为特征,是对一组性质相同的对象的程序描述,概括了对象的共同性质和数据。4、面向对象设计的核心是类的设计。例如:可以定义一个“成绩查询”类,该类中可以定义查询的姓名、学号、班级等信息,则以此类为原型可以设计出众多的“成绩查询”类的对象实例,这些实体都具有类中所定义的特征。二系统需求分析2.1 系统功能要求为了满足不同用户对图书管理的不同需求,根据实际分析图书管理系统,从而总结出该图书管理系统的主要功能要求。2.1.1系统功能要求该系统主要分为两部分:读者部分和管理员部分。系统针对读者和管理员分别有不同的需求划分。读者的主要功能(1)查询功能:读者
5、登录系统后可以查询本人信息,查询图书信息。(2)修改功能:读者可以修改自己的信息。(3)预约功能:读者可以对在馆的图书进行预约。(4)注销功能:读者可以注销自己的信息。管理员的主要功能(1)管理员管理:管理员可以对自身信息进行管理,包括查询,修改,删除自身信息,还可以添加新的管理员,对系统进行管理。(2)读者管理:管理员可以对已注册的读者信息进行管理,包括查询,修改,删除和添加读者。(3)图书管理:管理员可以对图书进行管理,包括查询,修改,删除和添加新的图书信息。 (4)借阅图书:管理员可以给读者借书。(5)归还图书:管理员可以给读者还书。2.1.2系统安全性要求安全方面,系统管理员可以对用户
6、、管理员和用户注册的基本信息进行操作,可以修改用户的一些信息,可以添加和删除用户。用户可以更改自己的密码,其基本原则是用户只能添加、修改、查询自己权限范围内的数据。而用户的上一级即系统管理员则可以查看用户所有的数据。系统是在网络上运行的多用户系统,采用了数据库安全性、操作系统安全性、程序安全性三重安全性管理来达到系统要求的安全性。2.1.3系统运行要求支持系统运行的系统需要在Windows xp/7/vista下,数据库管理系统需要安装Microsoft SQL Server 2005 。界面、标准页面要求格式清晰、易操作。硬件方面要求建立维护和使用制度,在硬件选择时要充分考虑硬件的负载和应用
7、环境要求。软件方面则要求能对系统进行定期地维护,尽量能够预防各种故障的发生。2.2可行性分析可行性分析也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。本系统的可行性分析包括以下几个方面的内容:1)经济可行性:经济可行性主要是对项目的经济效益进行评价,该系统的设计与开发不需要特殊硬件,只要拥有一台电脑并在电脑上安装SQL Server 2005,Visual Studio 2008即可,使用的软件全部是开源免费,不会产生任何技术专利的问题,同时也不会产生任何经费。 2)技术
8、可行性:技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足开发者的需要等。本系统采用C#语言开发,代码安全可靠,可维护性强,后台数据库采用数据库管理系统SQL,轻便且功能强大。系统处理速度快、权限的设置准确,数据的安全性高。 三系统概要设计系统总体设计即概要设计。本节主要介绍本系统各功能模块的设计,数据库结构及各数据表的设计,以及本系统的安全设计等内容。3.1系统总体架构根据对本系统的分析,系统分为以下八个模块:书籍信息管理、预约图书、个人信息查询修改、读者信息管理、书籍信息管理、借阅信息管理、归还信息管理、读者注册。系统框架图如下:图书管理系统书籍信息浏览预约图书读者信
9、息管理书籍信息管理借阅信息管理用户登录管理员登录归还信息管理个人信息查询修改读者注册管理员信息管理 图3-1 系统框架图(1) 书籍信息浏览:读者登录成功后可浏览在馆图书。(2) 个人信息查询修改:读者登录成功后可查询修改个人信息。(3) 预约图书:读者登录后可预约在馆图书。(4) 读者信息管理:管理员对读者进行管理,包括添加、删除、修改读者信息。(5) 书籍信息管理:管理员对图书进行管理,包括添加、删除、修改图书信息。(6) 借阅信息管理:管理员实现对图书的借阅,并管理相关图书。(7) 归还信息管理:管理员实现对图书的归还,并管理相关图书。(8) 读者注册:为注册的读者无法进入本系统,因此,
10、在登录前需注册成用户。3.2 系统流程图图书预约图书信息查询图书借阅图书信息读者信息图书归还开始登录判断身份管理员读者否四数据库设计4.1概念结构设计数据库的的概念结构设计就是将需求分析得到的用户需求抽象为信息结构,即概念模型。概念模型作为概念结构设计的表达工具,为数据库提供一个说明性结构,是设计数据库逻辑结构即逻辑模型的基础。数据库的的概念结构设计就是将需求分析得到的用户需求抽象为信息结构,即概念模型。概念模型的种类很多,其中最著名、最实用的一种是ER(实体联系)模型,它将现实世界的信息结构统一用属性、实体以及他们之间的联系来描述。下图为本数据库系统E-R模型:用户图书管理员管理2借还管理1
11、ID修改删除添加ID。姓名借阅号借还时间ID名称。增加修改姓名删除图3-4 全局E-R图4.2逻辑结构设计4.2.1数据表数据库的逻辑设计即把得到的满足第三范式的关系转化为特定的数据库管理系统下的数据表。针对本系统,为满足系统需要,我们设计了T_admin(管理员)表,T_book(图书)表,T_borrowcategory(图书借阅信息)表,T_preoder(图书预约)表,T_reader(用户)表,T_returncategory(图书归还信息)表,T_status(图书状态)表。1):T_admin管理员信息表:管理员编号,姓名,密码,性别,年龄。2)T_book 图书信息表:图书编号
12、,名称,价格,出版社,作者。3)T_borrowcategory 图书借阅信息表:借阅编号,图书编号,图书名称,借阅人编号,借阅人姓名,应还时间。4)T_preoder图书预约表:预约编号,图书编号,图书名称,预约人编号,预约人姓名,图书状态。5)T_reader用户表:用户编号,姓名,年龄,性别,密码,系部,专业。6)T_returncategory图书归还信息表:归还编号,图书编号,图书名称,借阅人编号,借阅人姓名,借阅时间,归还时间,是否超期。7)T_status图书状态表:状态编号,图书编号,图书名称,图书状态。4.2.2关系模型根据以上各实体图和学生信息管理的E-R图,经过转换,可以
13、导出各个关系。首先每个实体转化为一个关系,需要给出每个关系的关键字:T_admin表(管理员编号、姓名、密码、性别、年龄)管理员编号为关键字。T_book表(图书编号、名称、价格、出版社、作者)图书编号为关键字。T_reader表(用户编号、姓名、年龄、性别、密码、系部、专业)用户编号为关键字。有属性的联系也应转化为一个关系,需要给出每个关系的关键字:管理1:(用户编号、用户姓名)关键字是用户编号。管理2:(图书编号、图书名称)关键字是图书编号。借还:(借阅编号、归还编号、图书编号)关键字是借阅编号,归还编号。4.3物理结构设计完成数据库的逻辑设计后,接下来就是对数据库的物理设计。本例采用Mi
14、crosoft SQL Server 2005系统来设计图书管理系统的数据库。4.3.1数据表的物理设计建立数据库前,应先对数据进行分析,包括类型、长度等,然后开始着手建立数据库。本系统数据库中用到的7个数据表,其具体结构如表4.14.7所示。1)管理员信息表:本表有五个字段,admin_id是主键。列名数据类型长度完整性约束说明admin_idint4Not Null,主键管理员编号admin_namevarchar50Not Null管理员姓名admin _pwdvarchar50Not Null管理员密码admin_sexvarchar50Null管理员性别admin _ageint10
15、Null管理员年龄 表4-1 管理员信息表2)图书信息表:本表有五个字段,book_id是主键。列名数据类型长度完整性约束说明book_idint4Not Null,主键书籍IDbook_namevarchar50Not Null书籍名book_writervarchar50Not Null作者book_publishervarchar50Not Null出版社book_priceint4Not Null价格book_stylevarchar50Not Null类型book_timedatetime8Not Null入馆时间book_numint4Not Null 书籍存量 表4-2 图书信息
16、表3) 用户信息表:本表有七个字段,reader_id 是主键。列名数据类型长度完整性约束说明reader_idint4Not Null,主键读者编号reader_namevarchar50Not Null读者姓名reader_pwdvarchar50Not Null读者密码reader_sexvarchar50Null读者性别reader _ageint10Null读者年龄reader_profvarchar50Null读者专业reader_deptvarchar50Null读者系部 表4-3 用户信息表4)借阅信息表:本表有六个字段,borrow_id是主键。列名数据类型长度完整性约束说明
17、borrow_idint4Not Null,主键借阅编号book_idint50Not Null书籍编号book_namevarchar50Not Null书籍名reader _idint50Not Null借阅者编号reader_namevarchar4Not Null借阅者姓名borrow_timedatetime8Not Null借阅时间admin_idint4Not Null 操作员编号 表4-4 借阅信息表5)预约信息表:本表有六个字段,preoder_id是主键。列名数据类型长度完整性控制含义说明Preorder_idInt4Not Null主键预约编号Book_idInt4Not
18、 null图书编号Book_namevarchar20Not null图书名称Reader_idInt4Not null用户编号Reader_nameVarchar20Not null用户姓名StatusVarchar20Not null图书状态 表4-5 预约信息表6)归还信息表:本表有8个字段,return_id是主键。列名数据类型长度完整性控制含义说明Returnr_idInt4Not null主键归还编号Book_idInt4Not null图书编号Book_namevarchar20Not null图书名称Reader_idInt4Not null用户编号Reader_nameVar
19、char20Not null用户姓名Borrow_timeDatetimeNot null借书时间Return_timeDatetimeNot null归还时间IfexceedDatetimeNot null是否超期 表4-6 归还信息表7)图书状态表:本表共四个字段,status_id是主键。列名数据类型长度完整性约束说明status_idint4Not Null,主键编号book_idInt4Not Null书籍编号book_namevarchar50Not Null书籍名statusvarchar50Not Null书籍状态 表4-7 图书状态表4.3.2数据表实体关系图五系统详细设计5
20、.1 主窗体的设计上面的SQL语句在SQL Server 2000中查询分析器执行后,将自动产生需要的所有表。有关数据库结构的所有后台工作已经完成。现在将通过学生管理系统中各个功能模块的实现,来编写数据库系统的客户端程序。1. 创建空白解决方案为了在Visual Studio.NET 2003中创建应用程序,应当先创建一个空白解决方案,它包括: 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。(.sln)。 记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含您所做的自定义设置。(.suo)。启动这个空白解决方案后,单击 文件|新建|项目 菜单,
21、在新建项目中选择Visual C#项目 ,在模块中选择Windows 应用程序 ,并命名为Adminform,美化后:图 5-1 Admin-form5.2创建公用模块在VS.NET中可以使用类库模板快速创建能够与其他项目共享的可再次使用的类和组件。整个工程项目中的任何地方都可以调用公用类库的类和组件,这样可以极大地提高代码的效率。在项目资源管理器中为项目添加一个类,保存为xjDataBase.cs。下面就可以开始添加需要的代码。以下为database中SQL HELP.cs 的辅助代码: public class sqlhelp SqlConnection conn = null; SqlC
22、ommand cmd = null; SqlDataAdapter da = null; SqlDataReader dr = null; DataTable dt = new DataTable(); public sqlhelp() conn = new SqlConnection(server=lenovo-2a4b0b4csqlexpress;database=D_library;trusted_connection=yes); / / executereader以表显示 / / sql语句 / 表 public DataTable ExecuteReader(string sql)
23、conn.Open(); cmd = new SqlCommand(sql, conn); dr = cmd.ExecuteReader(); dt.Load(dr); return dt; / / 执行插入、删除、修改SQL语句 / / SQL语句 / 传入的值 / 受影响的行数 public int ExecuteNonQuery(string sql, SqlParameter para) conn.Open(); int count; cmd = new SqlCommand(sql,conn ); cmd.Parameters.AddRange(para ); count = cmd
24、.ExecuteNonQuery(); return count; / / 用dataset执行查询 / / sql语句 / 执行表名 / 传入的值 / 数据 public DataSet sdu(string sql, string table) da = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet(); da.Fill(ds, table); return ds; / / 用dataset执行条件查询、插入、删除、更新操作 / / sql语句 / 执行表名 / 传入的值 / 数据 public DataSet udu(st
25、ring sql, string table, SqlParameter para) da = new SqlDataAdapter(sql, conn); da.SelectCommand.Parameters.AddRange(para); DataSet ds = new DataSet(); da.Fill(ds, table); return ds; /两个表查询 public DataSet select_borrowbookid(string book_id) try SqlDataAdapter da = new SqlDataAdapter(select T_book.boo
26、k_id as 编号,T_book.book_name as 书名,status as 状态 from T_book,T_status where T_book.book_id=T_status.book_id and T_book.book_name=T_status.book_name, conn); SqlParameter para = new SqlParameter(id, book_id ) ; da.SelectCommand.Parameters.AddRange(para); DataSet ds = new DataSet(); da.Fill(ds, T_book);
27、return ds; catch (SqlException ww) throw ww; finally conn.Close(); 代码实现与数据库的连接,查询数据库信息代码以及对数据库中的数据进行添加、删除、更新操作。在database中插入T_book 类,代码如下:public class T_book sqlhelp help = null; DataTable dt = new DataTable(); public T_book() help = new sqlhelp(); /显示全部图书 public DataTable selectallbooks() string sql
28、 = select book_id as 书编号,book_name as 书名,book_writer as 作者,book_publisher as 出版社,book_price as 价格 from T_book; dt = help.ExecuteReader(sql); return dt; /按编号查询图书 public DataSet select_bookid(string book_id) string sql = select book_id as 书编号,book_name as 书名,book_writer as 作者,book_publisher as 出版社,boo
29、k_price as 价格 from T_book where book_id=id ; string table = T_book; SqlParameter para = new SqlParameter(id, book_id) ; DataSet ds = new sqlhelp().udu(sql, table, para); return ds; /按书名查询图书 public DataSet select_bookname(string book_name) string sql = select book_id as 书编号,book_name as 书名,book_write
30、r as 作者,book_publisher as 出版社,book_price as 价格 from T_book where book_name=name; string table = T_book; SqlParameter para = new SqlParameter(name, book_name) ; DataSet ds = new sqlhelp().udu(sql, table, para); return ds; /根据书号查询图书是否存在 public bool exit_bookid(string book_id) bool flag = false; string
31、 sql = select * from T_book where book_id=id; string table = T_book; SqlParameter para = new SqlParameter(id, book_id) ; DataSet ds = help.udu(sql, table, para); if (ds.TablesT_book.Rows.Count 0) flag = true; else flag = false; return flag; /根据书名查询图书是否存在 public bool exit_bookname(string book_name) b
32、ool flag = false; string sql = select * where book_name=name; string table = T_book; SqlParameter para = new SqlParameter(name, book_name) ; DataSet ds = help.udu(sql, table, para); if (ds.TablesT_book.Rows.Count 0) flag = true; else flag = false; return flag; T_book 类中实现结束操作对T_book表的所有操作,包括查询所有图书,按
33、编号查询图书,按名称查询图书等。5.3 借书模块的创建借书模块实现的主要功能有:(1):按编号、书名查询图书。(2):借阅在馆图书。(3):借阅已预约图书。借书模块的设计:管理员在登录成功后,进入图书借阅板块,可以为读者借阅图书,以下为窗体:图5-2 Book-borrow 在窗体上设置多个文本框及下拉文本框,用于条件选择查询条件,录入借书信息,在combox中选择查询条件(书名或编号),然后再在txtbox中输入内容点击查询按钮则所要查询的内容将以表格的形式显示在下面的datagridview中。代码如下:public partial class borrow : Form public b
34、orrow() InitializeComponent(); private void button1_Click(object sender, EventArgs e) this.Close(); private void borrow_Load(object sender, EventArgs e) comboBox1.Items.Add(编号); comboBox1.Items.Add(书名); comboBox1.SelectedIndex = 0; private void button2_Click(object sender, EventArgs e) if (comboBox1
35、.Text = 编号) string book_id = textBox1.Text; bool f = false; f = new T_book().exit_bookid(book_id); if (f = true) dataGridView1.DataSource = new T_borrowbook().select_borrowbookid(book_id).TablesT_borrowselect; txt_id.Text = textBox1.Text; else MessageBox.Show(该用户不存在!); if (comboBox1.Text = 书名) string book_name = textBox1.Text; bool f = false; f = new T_book().exit_bookname(book_name); if (f = true) dataGridView1.DataSource = new T_borrowbook().select_borrowbookid(book_name).TablesT_borrowselect; else MessageBox.Show(该用户不存在!); private void button3_Click(object sender, EventArgs e)