大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx

上传人:b****5 文档编号:8401135 上传时间:2023-01-31 格式:DOCX 页数:36 大小:819.52KB
下载 相关 举报
大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx_第1页
第1页 / 共36页
大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx_第2页
第2页 / 共36页
大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx_第3页
第3页 / 共36页
大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx_第4页
第4页 / 共36页
大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx

《大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。

大学信息系C#windows应用程序设计图书管理系统课程设计报告.docx

大学信息系大学信息系C#windows应用程序设计图书管理系统课程应用程序设计图书管理系统课程设计报告设计报告基于C#的Windows应用程序设计课程设计报告班级:

计科xxx1班序号:

05学号:

xxx姓名:

xxx指导老师:

xxx第一部分第一部分系统概述系统概述1.1系统设计背景系统设计背景随着社会信息量的与日俱增,职场竞争的日趋激烈,越来越多的人更关注知识的积累、能力的培养。

作为信息存储的主要媒体之一图书、数量、规模比以往任何时候都大的多。

不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。

随着计算机及网络技术的飞速发展Internet/Intranet应用在全球范围内日益普及,当今社会正快速向信息化社会前进信息系统的作用也越来越大。

图书馆在正常运营中总是面对大量的读者信、书籍信息以及由两者相互作用产生的借书信息、还书信息。

因此图书管理信息化是发展的必然趋势。

用结构化系统分析与设计的方法,建立一套有效的图书信息管理系统,可以减轻工作将工作科学化、规范化,提高了图书馆信息管理的工作质量。

因此根据图书馆目前实际的管理情况开发一套图书管理系统是十分必要的。

图书馆管理信息系统是对学校图书进行全面信息管理的系统。

该管理系统可以有效地管理图书资源。

1.2系统设计目的系统设计目的通过对图书管理系统的系统分析、系统设计、编码和调试等工作的实践,熟悉管理信息系统的开发过程、设计方法及相关编程技术,熟练掌握数据库设计的基本理论及方法。

提高学生C#语言编程和调试动手能力,培养学生使用面向对象程序设计、数据结构、数据库原理和软件工程等相关课程知识解决实际问题的能力的目的。

1.3系统设计任务系统设计任务要求完成一个具有一定实用价值的图书管理系统,主要任务包括:

在Mysql5.6开源数据库环境下建立图书管理系统所使用的数据库,利用企业管理器或查询分析器建立各种数据库对象,包括:

数据表、视图、约束、存储过程和触发器等;掌握ADO.NET编程技术,对Mysql数据库进行连接和操纵;掌握使用C#语言开发一个数据库应用系统的基本方法和步骤,熟悉一些基础功能的实现方法,如:

数据维护(插删改等操作),数据查询、浏览和Excel导出,统计与报表,用户登录和权限管理等。

了解C/S或B/S应用程序的多层体系结构及三层架构方案设计思想。

(1)开发环境与目标:

C#、Mysql,基于C/S结构的Windows应用程序。

(2)仅给出了部分功能的设计与实现,以说明面向对象分析与设计的一般方法以及关键编程技术,其它功能部分需要自己完成。

1.4.设计准备设计准备1.4.1系统准备系统准备操作系统:

Windowsxp/7/8数据库系统:

SQLServer2005/2008/2012客户端开发工具:

VisualStudio2005/2008/2010/20121.4.2知识准备知识准备熟悉SQLServer的使用;熟悉C#语言及其数据库编程技术。

了解图书馆相关业务知识第二部分第二部分需求分析需求分析2.1需求概要需求概要

(1)图书管理系统的基本功能需求包括:

读者管理、图书管理、借阅管理、用户登录与用户管理等;其它功能需求包括:

预约借书、统计与报表、数据备份、书架管理、期刊管理、期刊借阅、论文管理、论文借阅等。

(2)相关领域概念:

借书证(读者)、图书、借还书记录。

(3)系统主要用户:

将图书馆工作人员划分为读者以及管理员,读者能够进行系统登录、图书查询、图书借阅记录查询、图书借阅等;管理员能够进行系统登录、读者管理、图书管理、借阅管理、用户管理;。

2.2读者管理读者管理读者管理即借书证管理,包括的操作有:

办理借书证、借书证变更、借书证挂失、解除挂失、补办借书证、注销借书证。

读者=借书证号、姓名、性别、所在单位、读者类别、办证日期、照片等。

(另可加:

电话、邮箱等)读者类别=读者类别号、类别名称、可借书本数、可借书天数、可续借次数。

2.3图书管理图书管理包括业务(用例):

新书入库、图书信息维护、图书变卖与销毁处理等。

图书信息=书号、书名、作者、出版社、出版日期、ISBN、分类号、语言、页数、单价、内容简介、图书封面、图书状态等;(图书状态包括:

在馆、借出、遗失、变卖、销毁)2.4借阅管理借阅管理包括业务用例:

借书、续借、还书等。

还书过程涉及超期罚款、遗失图书罚款等业务规则。

罚款规则:

(1)超期罚款规则应罚款金额=超期天数*罚款率,罚款率=0.05元/天,罚款率可能随时间或读者类别而变化;实际罚款金额“新建”-“项目”,在新建项目窗口中,选择“C#”-“Windows”-“Windows窗口应用程序”,选择项目文件的存储位置,并输入项目名称:

BookManage,如图3。

项目BookManage即为UI层,该项目在VS.NET编译后产生BookManage.exe文件。

图7新建项目BookManage3.4.2添加新项目添加新项目BookManage.ModelMSVS菜单:

“文件”-“添加”-“新建项目”,选择“类库”,输入项目名称,如图4。

VS.NET编译后产生BookManage.Model.dll文件(.DLL后缀文件称为动态链接库)。

图8添加新建项目BookManage.Model3.4.3添加新项目添加新项目BookManage.DAL操作与BookManage.Model类似,项目名称设置为:

BookManage.DAL。

VS.NET编译后产生BookManage.DAL.dll文件。

3.4.4添加新项目添加新项目BookManage.BLL操作与BookManage.Model类似,项目名称设置为:

BookManage.BLL。

VS.NET编译后产生BookManage.BLL.dll文件。

至此,解决方案参见图5。

图9图书管理项目解决方案3.4.4设置启动项目和项目引用关系设置启动项目和项目引用关系在解决方案中设置BookManage为启动项目(“BookManage”右键菜单“设为启动项目”)。

项目引用关系如表2所示。

如BookManage.BLL项目引用DAL和Model,其设置方法:

解决方案中项目“BookManage.BLL”的右键菜单“添加引用”,并按图6进行设置。

表2项目引用关系。

BookManageBookManage.BLLBookManage.DALBookManage.ModelBookManageBookManage.BLLBookManage.DALBookManage.Model图10给BookManage.BLL项目添加引用3.5类总体设计(迭代类总体设计(迭代1)实体类、数据访问层类、业务逻辑层类、表示层窗口类的初步设计如表3。

表3实体类、数据访问层、业务逻辑层的类设计层类名说明实体类模块(Model)ReaderType读者类型实体类Reader读者实体类Book图书实体类Borrow借阅记录实体类数据访问层(DAL)ReaderTypeDAL读者类型数据表访问类(插、删、改、查、存储过程等)ReaderDAL读者数据表访问类(插、删、改、查、存储过程等)BookDAL图书数据表访问类(插、删、改、查、存储过程等)BorrowDAL借阅数据表访问类(插、删、改、查、存储过程等)SQLHelper对SQLServer数据库进行访问的通用类业务逻辑层(BLL)ReaderTypeAdmin读者类型管理类,实现插、删、改、查等信息维护操作。

ReaderAdmin读者管理类,实现借书证办理、变更、补办、挂失、解除挂失、注销等用例中的各种系统操作。

BookAdmin图书管理类,实现图书管理各用例中的系统操作BorrowAdmin借阅管理类,实现借书、还书、续借等用例中的系统操作。

UserAdmin用户管理类,表示层(UI)frmLogin登录窗口类frmMain程序主窗口类,含菜单、工具栏、状态栏等frmReader读者管理窗口类3.5.1Model层实体类设计层实体类设计在BookManage.Model项目中添加4个实体类:

ReaderType、Reader、Book、Borrow,分别对应4个数据库表。

实体类的属性与数据库表结构保持一致(名称、类型);实体类应尽量简单,除了实体对象的复制与比较等方法外,不宜添加过多方法。

其实实体类就是实现ORM。

ORMObjectRelationalMapping对象关系映射,是为了解决面向对象的类,与关系数据库的表之间,存在的不匹配的现象,通过使用描述对象和关系之间映射的元数据,在程序中的类对象,与关系数据库的表之间建立持久的关系,用于在程序中描述数据库表。

本质上就是将数据从一种形式转换到另外一种形式。

ORM是一个广义的概念,适应于关系数据库与应用程序之间的各类数据转换,目前有许多自动转换工具可用,如codesmith等,也可手工书写实体类代码来实现ORM。

1.ReaderType类在Model项目中添加新建项:

C#代码类ReaderType.cs,如图7所示。

图11添加C#代码类文件ReaderType.cs表字段映射为实体类属性的基本方法(VS2005及以上版本)如下:

privatestring_rdTypeName;publicstringrdTypeNamegetreturn_rdTypeName;set_rdTypeName=value;而在VS2008及以上版本中可简化为:

publicstringrdTypeNameget;set;表4SQL字段类型与实体类属性类型的映射关系SQLServer字段类型DataTable中类型C#实体类设计属性nchar,nvarchar,textSystem.Stringstringint,smallintSystem.Int32,System.Int16intnumeric(12,0)System.DecimallongdatetimeSystem.DateTimeDateTimeFloat,moneySystem.Single,System.DecimalfloatbitSystem.BooleanboolimageSystem.ByteByte在VS2008及以上版本中ReaderType类的实现代码如下:

另外,可添加复制构造函数,如下:

publicReaderType(ReaderTypert)this.rdType=rt.rdType;this.rdTypeName=rt.rdTypeName;this.CanLendQty=rt.CanLendQty;this.CanLendDay=rt.CanLendDay;this.CanContinueTimes=rt.CanContinueTimes;this.PunishRate=rt.PunishRate;this.DateValid=rt.DateValid;3.5.2DAL层类设计层类设计除SqlHelper外,每个数据库表对应一个DAL层类,主要实现该表的插删改查操作。

1.SqlHelper类在BookManage.DAL项目中添加SqlHelper.cs文件,该类是微软SqlHelper类(参见文件“参考资料03微软的SQLHelper类(含完整中文注释).cs”)的简化版(有源码提供)。

SqlHelper类主要包括的成员函数有:

打开数据库连接、关闭数据库连接、执行SQL语句、执行存储过程等。

表5SqlHelper类(简化版)成员1#privatestaticstring_strConnection=DataSource=LSH-SL400SQLSERVER;InitialCatalog=Library;UserID=BookManage;Password=123;-连接SQLServer的字符串(常量)。

-LSH-SL400SQLSERVER为服务器名称,可在SQLServerManagementStudio的“已注册服务器”中查看(菜单:

“视图”-“已注册服务器”)。

-需修改为自己的连接。

可手动修改,或可采用MSVS的服务器资源管理器得到(菜单:

“视图”-“服务器资源管理器”,“数据连接”-“添加连接”)。

2#privatestaticSqlConnectionconn=newSqlConnection(_strConnection);-SQLServer数据库连接对象(常量);3#privatestaticvoidOpenConn()-打开数据库连接4#privatestaticvoidCloseConn()-关闭数据库连接5publicstaticintExecuteNonQuery(stringsql)-执行非查询的SQL语句,返回受影响的行数-sql指定要执行的SQL语句,-例:

sql=deletefromTB_ReaderTypewhererdType=12;6#publicstaticintExecuteNonQuery(stringsql,SqlParameterparameters)-执行非查询的SQL语句(带参数),返回受影响的行数-参见:

6.6-2中的ReaderTypeDAL.Add()函数代码7publicstaticobjectExecuteScalar(stringsql)-执行查询语句,返回查询结果中的首行首列8#publicstaticobjectExecuteScalar(stringsql,SqlParameterparameters)-执行查询语句(带参数),返回查询结果中的首行首列9#publicstaticDataTableGetDataTable(stringsql,SqlParameterparameters,stringTableName)-执行查询语句(带参数),返回查询结果记录集(DataTable对象)-参见:

6.6-2中的ReaderTypeDAL.GetDRByID()函数代码10#publicstaticSqlDataReaderGetDataReader(stringsql)-执行查询语句,返回查询结果记录集。

SqlDataReader为只读对象,它占用的内存空间比DataTable小的多。

11#publicstaticintExecuteStoredProc(stringstoredProcName,SqlParameterparameters)-执行非查询的存储过程,返回受影响的行数-parameters指定存储过程的函数实参-参见:

12#publicstaticDataTableExecuteStoredProc(stringstoredPrecName,SqlParameterparameters,stringTableName)-执行查询的存储过程,返回查询结果记录集-参见:

表中标注#为必要的类成员,成员5、7可分别被6、8替代,大家可以试试将成员10改写为带参数的函数。

ADO.NET类与相关组件的用法参见“参考资料02ADO.NET用法.cs”。

2.ReaderTypeDAL类DAL层的类主要实现对应数据表的插、删、改、查等操作,以及存储过程的调用。

首先,在DAL项目中添加C#代码类文件-ReaderTypeDAL.cs,并在文件中添加引用:

usingSystem.Data.SqlClient;usingSystem.Data;usingBookManage.Model;然后,在ReaderTypeDAL类中添加对表TB_ReaderType记录的插入Add()、删除Delete()、修改Update()等3个方法。

注:

带参数SqlParameterparameters的SqlHelper.ExecuteNonQuery(sql,parameters)方法,支持带image列的插入和修改SQL语句。

然后,在ReaderTypeDAL类中添加根据关键字查询ReaderType实体类对象的方法GetObjectByID(),这里提取出了另一个方法GetDRByID()。

有2个常用的通用转换方法,采用C#的泛型和反射技术分别实现DataTable和DataRow到实体类对象的转换;算法要求:

表记录(DataTable或DataRow)包含了实体类T的所有属性,并且表字段名与T的属性名相同。

可以另建一个C#工程BookManage.Common(公用模块,可被DAL、BLL、UI各层引用,在三层架构图中地位如同Model模块),并将这2个方法放入其中;本例采用的是放入SqlHelper类中。

这2个方法的代码如而其它查询方法可在每个用例的UI层设计与实现过程中去发现和完成。

3.ReaderDAL类在ReaderDAL类中添加对表TB_Reader记录的插入Add()、删除Delete()、修改Update()、根据关键字查询Reader实体类对象GetObjectByID()等方法。

函数原型如下:

publicstaticintAdd(Readerreader)publicstaticintUpdate(Readerreader)publicstaticintDelete(Readerreader)publicstaticReaderGetObjectByID(intrdID)而其它查询方法可在每个用例的UI层设计与实现过程中去发现和完成。

添加表TB_Borrow的插入Add()、删除Delete()、修改Update()等3个方法;不必添加GetObjectByID()方法,该表的查询一般是通过书号或读者号(参看借还书等用例)。

3.5.3BLL层类设计层类设计BLL层类的成员函数设计,可在实现用例的过程中去发现和完成,用例实现主要包括UI层窗口类、BLL层类、DAL层类等方法的设计与实现。

参见6.8节。

3.6UI层窗体设计与用例的实现层窗体设计与用例的实现除主窗体要考虑整体功能结构外,其它功能都是按用例逐一进行设计和实现的。

部分用例的事件流相似且相关,可集中在同一个窗体内实现,如:

借书证挂失、解除、补办与注销。

3.6.1用例:

用户登录用例:

用户登录-frmLogin窗体窗体用例:

用户登录,参见5.4

(1)节。

(1)登录窗体设计如下:

图12登录界面图登录关键代码如下:

3.6.2frmMain主窗体界面主窗体界面

(1)主窗体界面如下图13主界面效果图

(2)根据登录用户的权限,确定菜单是否可用,并显示登录用户信息,有3个问题:

A.获取登录窗口frmLogin中的读者对象reader。

而进入主窗口时,登录窗口对象已经释放,故只能通过类名(而不是类对象)访问,申明reader为静态publicstatic。

在frmLogin类中:

publicstaticReaderreader=null;在frmMain等其它类中的访问方法:

frmLogin.readerB.读者对象reader权限的判断方法,分配在BLL层/Model层Model层代码如下:

C.根据登录用户权限,在frmMain类中初始化菜单。

添加InitMenu()方法:

3.6.3frmReader窗体窗体借书证相关用例有:

办理借书证、变更借书证、挂失借书证、解除挂失、补办借书证、注销借书证等。

分析发现第一个步骤都相同,即借书证查询操作;办理新借书证、变更借书证有界面操作,然后再分别做插入和修改操作;而其它的挂失、解除挂失、补办、注销等没有界面操作,可以直接进行各自的业务操作。

方案一设计3个窗口:

(1)查询窗口,并设计6个按钮控件:

办理新证、变更、挂失、解除挂失、补办、注销等。

其中办理新证、变更在点击后分别转入下面2个窗口;另外4个按钮可调用相应业务逻辑方法直接完成。

(2)办理新借书证窗口,从查询窗口传入相关的信息(参见其用例),完成读者表记录的插入操作。

(3)变更借书证窗口,从查询窗口传入原借书证对象,完成读者表记录的修改操作。

此方案的设计与实现比较简单,用户操作简易、流畅。

设计改变了系统主菜单,frmMain类及其窗体的修改工作如下:

将主窗体菜单(6.8.2节)中的4个菜单项“2.1办理借书证”至“2.4注销借书证”去掉3个,仅保留一个菜单项,改其名为“借书证管理”,并添加其点击事件,事件的实现代码为:

方案二设计1个窗口,如下:

图14Reader窗体界面此操作界面的控制较复杂,下面详细介绍其设计思想与实现技术。

(1)窗口界面设计将界面设计成3个部分:

查询条件工具栏(ToolStriptoolStrip1),其中控件:

查找(ToolStripButtonbtnQuery),Excel(ToolStripButtonbtnToExcel)。

查询结果组控件(GroupBoxgroupBox1),其中控件:

网格控件(DataGridViewdgvReader,设置ReadOnly=true),办理借书证(ButtonbtnNewDoc)、变更借书证(ButtonbtnChangeDoc)、挂失(ButtonbtnLossDoc)、解除挂失(ButtonbtnUnlossDoc)、注销(ButtonbtnCancelDoc)、退出(ButtonbtnClose);另外,借阅信息(LabellblBorrowInfo)可用于显示读者的历史借阅记录数和未归还图书数量。

读者信息组控件(GroupBoxgroupBox2),其中控件:

确认办证(ButtonbtnAddReader)、确认变更(ButtonbtnUpdateReader)、撤销(ButtonbtnCancelChange);另外,图片控件(PictureBoxpicboxPhoto,设置BorderStyle=FixedSingle,SizeMode=StretchImage)、打开图片文件(ButtonbtnLoadPictureFile)。

(2)界面操作状态的控制添加枚举类型opStatus,表示3种窗口操作状态,参见下列代码。

并在frmReader类中添加成员对象,其中:

DataTabledt-存放查询结果,并给DataGridViewdgvReader提供数据。

Readerreader存放读者信息,与读者信息组控件内的各控件进行数据交换,并与BLL、Model层进行数据传递。

opStatusops记录当前操作状态。

代码如下:

然后添加窗口类成员函数SetStatus(),代码如下:

在几个需要进行状态切换的按钮Click点击事件中调用此函数,如下:

办理借书证(ButtonbtnNewDoc)调用SetStatus(opStatus.inNew);变更借书证(ButtonbtnChangeDoc)调用SetStatus(opStatus.inChange);撤销(ButtonbtnCancelChange)调用SetStatus(opStatus.inSelect);(在frmReader窗口工具栏中,给按钮“Excel”添加Click事件

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1