《图书馆管理系统c#课程设计报告(共32页).doc》由会员分享,可在线阅读,更多相关《图书馆管理系统c#课程设计报告(共32页).doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上理 工 学 院课 程 设 计 报 告 课程名称 C#课程设计 设计题目 图书馆管理系统 专 业 计算机科学与技术 班 级 学 号 姓 名 完成日期 2013年1月3 日 课 程 设 计 任 务 书设计题目: 图书馆管理系统 设计内容:图书管理系统需要实现的功能主要有:查询:图书资料查询、读者资料查询、借阅历史记录查询、罚款历史记录查询。基本资料维护:包括图书资料维护(包括新书的入库,以及现有书籍资料的修改和删除)、读者资料维护(包括新读者资料的录入,以及现有读者资料的修改和删除)。日常管理:包括借书管理(记录借阅证编号、图书编号、借出日期、还书期限)、还书管理(销去借
2、阅记录)、缴纳罚金(图书超期,将按每天0.05元进行罚款)。用户管理:记录各类用户(教师、学生)的详细信息(借书证、姓名、编号、系等)。设计要求:(1) 按照面向对象程序设计分析要求进行类抽象和设计,所有界面必须具有良好的人机交互,布局合理,菜单和工具栏条图标清晰、直观;(2) 所有功能必须同时具备菜单和工具条;(3) 采用C#语言开发,源代码必须添加必要注释,函数和变量命名规范,具有可读性;(4) 设计完成后,需要写成一份课程设计报告(打印出来),表达课程设计所做工作。 指导教师: 2013 年 1 月 3 日课 程 设 计 评 语 成绩: 指导教师:_ 年 月 日专心-专注-专业目录557
3、1111131314141414154 运行结果测试164.1登录窗体164.2管理员功能界面192123254.6修改密码界面255 设计总结276 体会与收获287参考文献291 概述1.1 系统设计的背景随着社会信息量的与日俱增,职场竞争的日趋激烈,越来越多的人更关注知识的积累、能力的培养。作为信息存储的主要媒体之一图书,数量、规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大。图书馆在正常运营中
4、总是面对大量的读者信息,书籍信息以及由两者相互作用产生的借书信息,还书信息。因此图书管理信息化是发展的必然趋势。用结构化系统分析与设计的方法,建立一套有效的图书信息管理系统,可以减轻工作,将工作科学化、规范化,提高了图书馆信息管理的工作质量因此根据图书馆目前实际的管理情况开发一套图书管理系统是十分必要的图书馆管理信息系统是对学校图书进行全面信息管理的系统。该管理系统可以有效地管理图书资源。本文以高校图书管理系统开发过程为背景,记录学校与读者之间的使用书籍的情况。此外,根据读者的要求,实现书籍基本信息的输入,查询等几个方面的功能。本系统可以作为独立的系统使用,它包括借阅信息管理、书籍信息管理、读
5、者信息管理、系统管理四个主要功能模块。该管理系统力求给读者方便快捷的途径去及时了解书籍信息。针对各个模块的数据表实现添加记录、修改记录、删除记录、以及查询显示记录等各个功能,所有的操作方便而快捷,并全面实现了图书管理系统的各项功能呢。1.2 系统设计的目的面向对象程序设计课程设计是面向对象程序设计课程的实践环节。通过课程设计实践,使学生进一步加深理解和掌握面向对象的基本概念、面向对象程序开发的基本思路和方法、windows Form设计原则和方法以及它们在软件开发过程中的使用方法,达到提高学生C#语言编程和调试动手能力,培养学生使用面向对象程序设计、数据结构、数据库原理和软件工程等相关课程知识
6、解决实际问题的能力的目的。通过该课程设计,应达到下列基本要求:1熟练掌握C#的基本知识和技能;2基本掌握面向对象程序开发的基本思路和方法,熟悉面向对象软件开发过程,并初步具备利用面向对象的编程思想来完成系统设计的能力;3初步具备学生自学参考书籍及查阅手册、图表和文献资料的能力;4初步养成重视软件测试、重视文档写作、重视界面设计的程序开发习惯;5初步养成学生团队协作能力。1.3 系统功能设计要求系统实现图书馆日常管理事务最主要的功能,包括图书的借出于还回,图书信息的录入、修改和查询,读者信息的录入、修改和查询,员工信息的录入、修改和查询。实现这些基本功能,组建了图书管理系统的基本框架,根据功能的
7、关联关系和集中分组的原则,将系统细化如图1-1所示的结构图。图书馆信息管理系统还书处理借书处理借阅处理信息查询图书信息管理读者信息管理员工信息系统设置读者信息查询借阅信息查询图书信息查询图书入库修改图书信息删除图书信息添加读者信息修改读者信息删除读者信息添加员工信息修改员工信息删除员工信息用户密码修改登录处理 图1-1 系统功能图1.4 开发工具的选择开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与运行环境的选择如下:开发环境:Windows XP开发语言呢:c#程序语言语言开发环境:visual studio 2008数据库系统:sql server 2005图1-2 C
8、#语言开发工具visual studio 20082 系统数据库的设计2.1 数据库概念结构设计1 系统核心实体属性图 如下为全体核心E-R 图2-1 核心E-R图2 图书信息实体属性图书籍图书编号图书名称书库编号单价作者出版社标志字段图2-2图书信息实体属性图3 读者信息实体属性图读者读者编号读者密码性别年龄姓名系别专业标志字段图2-3 读者信息实体属性图4 管理员信息实体属性图管理员管理员编号密码住址电话性别权限年龄姓名标志字段图2-4 管理员信息实体属性图5 借阅信息实体属性图当前借阅图书标志读者标志借阅日期归还日期:图2-5 借阅信息实体属性图6 馆藏地址信息实体属性图馆室书库标志书库
9、名称书库编号管理员标志图2-6 馆藏地址信息实体属性图7 书籍类型信息实体属性图书籍类型书库标志类型名称图2-7 书籍类型信息实体属性图8罚款信息实体属性图罚款信息罚款编号书籍标志实际归还日期读者标志归还日期罚款金额图2-8 罚款信息实体属性图2.2 数据库物理结构设计数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,根据图书信息管理系统E-R图设计系统数据库。该图书管理系统的数据库名称是libraryManager。其中包括7个数据信息表,分别是读者信息、管理员信息、图书信息、借阅信息、管室信息、罚款信息和书籍类型信息。1读者信息表的建立:create table r
10、eader(id int not null identity primary key,loginNum char(4) not null unique,pwd varchar(20) not null,rName varchar(12) not null,age tinyint not null,sex char(2) not null,dept varchar(12) not null,major varchar(12) not null,) 2管理员信息表的建立:create table manager(id tinyint not null identity primary key,lo
11、ginNum char(4) not null,pwd varchar(25) not null,mName varchar(12) not null,sex char(2) not null,age tinyint not null,addres varchar(25) not null,tel char(6) not null,powers tinyint default 1,)3图书信息表的建立:create table books(id int not null identity primary key,bNum char(4) not null unique, bName varch
12、ar(200) not null,writer varchar(200),publish varchar(200) not null,price smallint not null,lid tinyint not null,bType smallint not null,foreign key (lid) references storeLibrary(id),foreign key (bType) references book_type(id),) 4. 借阅信息表的建立:create table borrow(id int not null identity primary key,Bo
13、rrowDate date not null,ReturnDate date not null,BorrowCount tinyint, fId int,bId int not null,rId int not null,foreign key (bId) refereneces books(id),foreign key (rId) refereneces reader(id),foreign key (fineId) references fine(id),)5. 馆室信息表的建立:create table storeLibrary(id tinyint not null primary
14、key,storeName char(2) not null,storeType varchar(20) not null,managerId tinyint not null,foreign key (managerId) references Manager(id),)6.罚款信息表create table fine(id int not null identity primary key,money float(2) not null,returnS DATETIME not null,returnR DATETIME not null,rid int not null,bid int
15、not null,foreign key (rid) references reader(id),)7.书籍类型信息表create table book_type(id samllint identity primary key,bookType varchar(20) not null,)3 程序结构设计此处设计须符合面向对象思维,因此在本次课程设计中本小组采用了MVC三层架构模式设计程序,但是由于本组成员所学并非擅长C#语言,因此对于如何使用企业级框架(如javaEE的spring,ejb等等)来搭建MVC所知有限,因此只能在这次实验中只能使用类实现于接口的方法来实现对各层之间的解耦。MV
16、C架构的设计使得各层之间所注重完成的功能各不相同,由此使得代码条理更为清晰,修改便捷。但是由于本人能力所限,而且正如前言所述,并非擅长C#编程语言,又长时间未做MVC设计程序,且时间过于仓促,由此种种原因,因此本小组所设计的MVC架构尚有许多不合理之处。3.1 程序设计总体概况根据前面所述,由于代码依据三层架构进行设计,将以三层逻辑结构描述代码,即根据界面层、业务逻辑层、数据库DAO层来描述。程序总体功能设计分布如下图所示: 图3-1 程序设计总体分布图DBUtil文件,此文件为数据库连接操作,以及sql语句执行文件,具体内容如下图所示: 图3-2 程序DAO层图其中DbHelper内含有查询
17、语句的操作函数,以及增删改等(简单起见此处只写了一个函数)操作函数的执行。view文件所在,即为系统的界面层,包含各个界面,如登陆界面,借阅、查询书籍等界面。具体如下图所示 图3-3 程序界面层图serviceInter文件,即为界面层与业务逻辑层解耦的接口,具体接口如下图所示: 图3-4 程序接口图serviceImpl文件,即业务逻辑层代码,具体如图所示: 图3-5 程序业务逻辑层图UserServiceImpl:参与用户登录、用户修改密码等(用户即涵盖读者和管理员)ReaderServiceImpl:借阅书籍、查找书籍、归还书籍ManagerServiceImpl:添加书籍domain文
18、件,此文件为封装类,对将数据库中的关系模型封装为对象模型,在程序功能实现过程中,加以对类对象的引用传递,以便各个界面联系操作。此类根据数据库对象涉及,具体如下图所示: 图3-6 程序domain类图3.2 程序流程图根据上述描述,以及所实现功能,做出以下概括本次设计的图书馆管理系统的总体功能流程图,如下图所示 图3-7 总体功能流程图3.3 程序设计框架图根据前文所述,此处为简易理解程序流程,此处画出本次设计所所有涵盖信息的框架图设计。 图3-8 程序类图架构设计图3.4 程序设计关键思想由于代码很多方面具有相似性,因此在此处不予以全部列出,仅仅列出具有代表性的内容。但是由于时间仓促,有些地方
19、尚有不合理之处,诸如,有些不必要的操作,如对于在某些跳转页面中直接未有相应便预先从数据库中提取内容,其时尚未详加考虑。3.4.1 数据库查询代码在此处代码查询设计中,为了使得DAO层与业务逻辑层之间减少耦合,所使用函数如下定义:public static List selectQuery(string sql ,string param)第一个参数为执行sql语句,第二个string数组为sql语句中所传递的参数内容。所返回的数据以List封装,其中object数组为查询出的一条记录,object数组对象为记录中的数据项。业务逻辑层代码可根据实际情况对List集合中的object进行再次封装,
20、使其具有实际意义。3.4.2 登陆代码部分由于在各个界面的联系中均已domain类对象传递引用,并且在登陆中,仅仅使用登陆账号和密码,而此两者为Reader和Manager所共有,因此使得Reader和Manager共同继承与User对象。当是读者登陆时,需要同时查询该读者所借阅的书籍信息,并加以封装在Reader类内部以List集合形式封装,以便后来使用。3.4.3 查询书籍部分当查询书籍时,当使查询出的书籍暂时保留在某List集合中,以方便以后代码的使用。由于书籍是根据书籍编号唯一确认,因此在确认书籍库存量时便增加了一些逻辑判断操作,由于判断的简单性,此处不予列举。及如下函数:public
21、 List queryAllBook(); /3.4.4 借阅书籍关键部分对于书籍借阅,此处需要注意的有三个地方,其一,因为对于书籍而言,即使是同名书籍在数据库中也是对应不同的记录,因此,在操作数据库时需要以其具有唯一性的书籍编号加以操作;其二,当书籍借阅成功后,需要记得,在读者所拥有的书籍的List集合中,加入此书籍,以便实现时效性,方便后来使用,并且修改当前书籍所在List集合中的书籍状态为已借出;其三由于同时修改两张表的内容,因此该当加以回滚断点的操作,但是由于本人未学习过这点,因此在本次代码中并未实现这个地方。如下代码 /borrowBook为所要借出书籍, borrowBook.St
22、atus = 0; /改变书籍状态 reader.Books.Add(borrowBook); /在读者中添加此书籍4 主要功能模块设计和运行结果测试4.1 登录窗体登录窗体作为系统的启动窗体,用于核对用户和密码,只有图书馆工作管理人员才能登录到本系统进行操作。登录窗体的设计比较灵活,只要能实现用户和密码的验证即可,本系统将其设计成为一个小窗体,其运行界面如图所示。图 4-1登陆界面界面层代码实现:private void button1_Click(object sender, EventArgs e) string loginNum = textBox1.Text;string passw
23、ord = textBox2.Text; if (loginNum.Equals()|password.Equals()|loginNum = null|password =null) MessageBox.Show(登录号或密码错误!); return; UserServiceInter userService = new UserServiceImpl(); /*读者响应界面*/ if (comboBox1.SelectedIndex = 0) Reader user = new Reader(); user.Login_Num = loginNum; user.Passwd = pass
24、word; Reader reader =(Reader)userService.checkUser(user, 0); if ( reader != null) MainManagement mm = new MainManagement(this, 0, reader); this.Hide(); return; /*管理员响应界面*/ else if (comboBox1.SelectedIndex = 1 | comboBox1.SelectedIndex = 2) Manager user = new Manager(); user.Login_Num = loginNum; use
25、r.Passwd = password; if (userService.checkUser(user,1) != null) MainManagement mm = new MainManagement(this, 1, user); this.Hide(); return; else MessageBox.Show(请选择类型!); return; MessageBox.Show(密码或账号错误!); 业务逻辑层代码实现:public User checkUser(User user, int type) string param = new string2; if (!this.chec
26、kType(type) return null;string commandString = SELECT * FROM + tableName + where loginNum= param0 and pwd=param1; try param0 = user.Login_Num; param1 = user.Passwd; List al = (List)DbHelper.selectQuery(commandString, param); if (al.Count != 0) foreach (object obj in al) if (tableName = reader) /封装 R
27、eader reader = new Reader(); reader.Id = obj0.ToString(); reader.Login_Num = obj1.ToString(); reader.Passwd = obj2.ToString(); reader.Books = new List(); /查询读者书籍 paramBooks0 = 1; List booksList = (List) DbHelper.selectQuery(sqlBooks, paramBooks); if (booksList.Count != 0) foreach (object bookObj in
28、booksList) Book book = new Book(); book.Id = bookObj0.ToString(); book.BookNum = bookObj1.ToString(); book.BookName = bookObj2.ToString(); book.Writer = bookObj3.ToString(); book.Publish = bookObj4.ToString(); book.Price = bookObj5.ToString(); book.BookType = bookObj6.ToString(); book.BookLibrary =
29、bookObj7.ToString(); reader.Books.Add(book); else if (tableName = manager) /user = (Manager)user; /封装 else return null; catch (SqlException e) MessageBox.Show(e.Message); return null return user; 4.2管理员功能界面图 4-2图书管理系统界面图 4-3管理员添加图书界面添加图书代码界面层代码如下:private void button1_Click(object sender, EventArgs e
30、) if (textBox1.Text=|textBox2.Text=|textBox3.Text=|textBox4.Text= | textBox5.Text = | textBox6.Text = | textBox7.Text=) MessageBox.Show(请将书籍信息添加完整!); else if (Convert.ToInt32(textBox6.Text) = 0) MessageBox.Show(价格不能小于等于零!); else ManagerServiceInter managerService = new ManagerServiceImpl(); Book boo
31、k = new Book(); book.BookNum = textBox1.Text; book.BookName = textBox2.Text; book.Writer = textBox3.Text; book.Publish = textBox4.Text; book.BookType = textBox5.Text; book.Price = textBox6.Text; book.Status = 1; book.BookLibrary = textBox7.Text; if (managerService.addBook(book) MessageBox.Show(添加成功)
32、; else MessageBox.Show(添加失败); 业务逻辑层代码如下: public bool addBook(Book book) string param = new string8; string sql = insert into books(bNum,bName,writer,publish, price,bType,bLibrary,status) values(param0,param1,param2,param3, param4,param5,param6,param7); param0 = book.BookNum; param1 = book.BookName;
33、param2 = book.Writer; param3 = book.Publish; param4 = book.Price; param5 = book.BookType; param6 = book.BookLibrary; param7 = 1; if (DbHelper.addSql(sql, param) != 0) return true; else return false; 4.3读者搜索书籍界面图 4-4搜索图书界面查询图书代码实现部分:界面层:this.typeBooks = readService.queryClearBooks();逻辑层的查询代码如下: publi
34、c List queryClearBooks() List typeBooks = new List(); try string selBookMes = SELECT bNum,bName,writer,publish, bType,bLibrary,status,id FROM books; lists = DbHelper.selectQuery(selBookMes, null); if (lists != null) foreach (object obj in lists) /判断集合是否有数据,即是否是第一次加入书籍。 if (typeBooks.Count != 0) foreach (Book bk in typeBooks) if (bk.BookName = (string)obj1) & obj6.ToString() = 1) bk.BookCount = bk.BookCount + 1; isRepeat = true; break; else if (obj6.ToString() = 0) isRepeat = true; else isRepeat = false; el