图书馆管理系统.docx
- 文档编号:9035588
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:39
- 大小:820.66KB
图书馆管理系统.docx
《图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统.docx(39页珍藏版)》请在冰点文库上搜索。
图书馆管理系统
图书馆管理系统
摘要:
随着科技的发展和社会的进步,计算机已成为人们生活和工作中的得力助手。
特别是现代Internet的Web技术的发展大大地推动了社会各个方面的发展。
设计一个现代的图书馆管理系统势在必行。
图书馆管理系统是常用的信息管理系统之一,它的实现主要由两部分组成:
数据库建立与维护和前台应用程序的开发。
数据库要求非常强的一致性与完整性以及安全性,而前台应用程序则要求功能实现完善,简单易用。
SQLserver2000具有比较完善的功能。
而VisualC#.NET是专门针对Microsoft的.NET战略而推出的语言,它对.NETFramework和ASP.NET具有最为全面的支持。
综合各个方面选择C#作为程序设计语言和SQLserver2000数据库。
通过对中小型图书馆的需求分析,实现了对图书馆管理系统的功能模块划分,数据库模式分析,并进一步设计了数据库结构和应用程序。
由此得到了一个基本满足读者,图书馆管理员和普通用户需求的图书馆系统。
关键词:
图书馆管理系统,C#,SQLserver2000数据库
一.需求分析
二.实现功能简介
图书馆管理系统利用vs2008集成开发环境进行程序的编辑和调试,数据库采用SQLServer2005。
图书馆管理系统框图如图所示。
普通用户模块具有以下功能:
⏹图书查询:
根据输入条件进行查询,可以选择多项,也可以查询所有图书。
⏹图书借阅:
提供图书借阅证号,可以进行图书借阅。
管理员登录成功后,具有以下功能:
⏹添加图书:
添加新图书。
⏹删除图书:
删除过时的、不能借阅的图书。
⏹修改图书:
对图书信息进行修改。
查询图书:
查询图书信息。
E-R图;
用户信息属性图
内容简介
图书属性图
借阅信息属性图
开发与运行环境
开发环境:
Windowsxp
开发工具:
vs2005和SQLserver2000
运行环境:
Windowsxp
三.数据库设计
数据库设计是系统建设中非常重要的环节,合理有效的数据库设计对系统的性能至关重要,也是创建系统的基础。
1数据库结构设计
根据需求分析进行数据库设计,数据库名称为BookManage,共需要三张表:
用户表、图书信息表、图书借阅信息表。
用户表的结构如表16.1所示,图书信息表结构如表16.2所示,图书借阅信息表结构如表16.3所示
用户表存放用户账号的信息,一个用户可以对应一个账户,包括用户名、密码、借阅证号和用户权限。
通过用户表查阅用户权限和借阅证号,判断是否是管理员,是否拥有借书的权限。
图书信息表里每条记录都是一本书,包括图书名称、图书类别、作者、价格、图书封面、
内容简介和图书的访问码。
通过图书信息表可以获取图书信息。
图书借阅表记录用户借阅图书的信息,包括借阅的图书、借阅时间、借阅人。
通过图书借阅信息表可以获取图书借阅的信息。
2.创建数据库和表
四.界面设计
数据库设计好之后,接下来就是设计界面,有了界面就知道要实现什么功能,对系统也就有了一个直观的印象。
1主界面
图16.7是一个比较简单的界面,主要作用是根据用户的不同选择,在该窗体中打开不同的子窗体。
主界面设计如图所示。
普通用户只能查询图书信息,借阅图书;管理员拥有窗体中的所有功能。
窗体的最上边是菜单栏,下面是工具栏,该窗体是所有子窗体的父窗体。
2.用户登录界面
本系统的用户分为普通用户和管理员用户,管理员用户具有系统提供的所有权限,普通用户可以查询图书、借阅图书。
系统登录界面是判断用户身份的一个交互窗体,在其中输入正确的用户名和密码后,单击“登录”按钮,可根据用户角色在主界面中拥有相应的权限。
用户登录界面如图所示。
用户类型分为管理员和普通用户,在组合框中添加这两项。
其他按照界面设计即可。
3.图书查询界面
系统中的图书查询提供组合查询的方式,界面设计如图所示。
此窗体名称为"frmSearchBook.cs",Text属性设置为“图书管理”。
图书类别组合框中的项是从数据库中获取,在设计时不需要添加内容。
在条件组合框中输人“or”和“and”,来动态实现条件组合。
在右边的分组框中添加DataGridView控件,单击右上角的黑色三角,选择“在父容器中停靠”选项,单击“编辑列”选项,打开“编辑列”选项卡,设计如图16.10所示内容,将列BookID设置为不可见。
4.图书入库界面
管理员有权限可以将图书添加到数据库中,图书入库界面如图16.11所示。
在左边的分组框中添加标签和文本框,用来接收管理员输人的图书信息,以便保存到数据库中。
在右边的分组框中添加DataGridView控件,可以显示数据库中的图书信息,新添加的图书信息也可以显示出来。
说明:
DataGridview控件的设计方式和图书查询界面基本相同,可参照设计,这里不再详述。
5.图书更新界面
图书更新界面用于方便管理员管理图书信息,实现图书信息修改、删除等操作。
界面设计如图所示。
在左边分组框中添加DataGridView控件用来显示当前数据库中的图书信息,单击任一列的表头,都可以重新排序。
管理员可以在DataGridView控件中直接修改数据,添加图书信息,也可通过右边的分组框实现图书信息的修改。
6.图书借阅界面
根据图书馆中已有的图书信息,用户可以通过图书证号实现图书借阅。
界面设计如图所示。
左边书名组合框中的项来自数据库中的书名,只有数据库中存有的书,才可以借阅,选择该组合框中的书名,该书的图书访问码、作者会显示在文本框中。
输入借阅证号和姓名,可实现图书借阅,借阅信息显示在右边的DataGridview控件中。
七.系统帮助
五.通用类的生成
本实例系统的主要操作都需要与数据库发生交互,操作数据库是必不可少的,为了减少重复代码提高代码的重用性和规范性,把与数据库交互的功能单独放在一个类中,在该类中实现数据库的增加、删除、修改、查询等通用功能。
1连接数据库
数据库的连接是数据库操作首先要实现的。
本实例采用的数据库是MicrosoftSQLServerExPress版本,所以要引人命名空间SqlClient。
回顾前面学习的连接数据库的步骤如下:
(l)定义数据库连接字符串,代码如下:
privatestaticstringConnectString="server=(local);database=BookManage;uid=sa;pwd=";
(2)创建Connection对象,代码如下:
SqlConnectioncon=newSqlConnection(ConnectString);
(3)打开连接,代码如下:
con.Open();
(4)关闭连接,代码如下:
con.Close();
2操作数据库中的数据
在通用类中实现了数据库的增加、删除、修改、查询功能。
示例代码如代码所示。
通用类完整代码
usingSystem;
usingSystem.Collections.Generic;
//usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceBookManage
{
classDataAccess
{
privatestaticstringConnectString="server=(local);database=BookManage;user=sa;pwd=";//数据库连接字符串
///
///根据表名获取数据集的表
///
///
///
publicstaticDataTableGetDataSetByTableName(stringtable)
{
using(SqlConnectioncon=newSqlConnection(ConnectString))//创建数据库连接对象
{
stringsql="select*from"+table+"";//查询sql语句
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sql,con);//创建适配器对象
DataSetds=newDataSet();//创建数据集对象
adapter.Fill(ds,"table");//填充数据集
returnds.Tables[0];//返回数据表
}
catch(SqlExceptionex)
{
//异常处理
thrownewException(ex.Message);;
}
}
}
//publicstaticDataSetGetDataSetBySql(stringsql,stringtable)
//{
//using(SqlConnectioncon=newSqlConnection(ConnectString))
//{
//SqlDataAdapteradapter=newSqlDataAdapter(sql,con);
//DataSetds=newDataSet();
//adapter.Fill(ds,"table");
//returnds;
//}
//}
///
///根据Sql语句获取数据集对象
///
///
///
publicstaticDataSetGetDataSetBySql(stringsql)
{
using(SqlConnectioncon=newSqlConnection(ConnectString))//创建数据库连接对象
{
SqlDataAdapteradapter=newSqlDataAdapter(sql,con);//创建适配器对象
DataSetds=newDataSet();//创建数据集对象
try
{
adapter.Fill(ds);//填充数据集
returnds;//返回数据集
}
catch(SqlExceptionex)
{
thrownewException(ex.Message);
}
}
}
///
///根据id值获取DataReader对象
///
///
///
publicstaticSqlDataReaderGetDataReaderByID(intid)
{
using(SqlConnectioncon=newSqlConnection(ConnectString))
{
stringsql="select*frombookinfowherebookid="+id;//sql语句
try
{
SqlCommandcomm=newSqlCommand(sql,con);//创建Command对象
con.Open();//打开连接
SqlDataReaderreader=comm.ExecuteReader();//创建DataReader对象
reader.Read();//读取数据
returnreader;//返回DataReader
}
catch(SqlExceptionex)
{
thrownewException(ex.Message);
}
}
}
///
///更新数据
///
///
///
publicstaticboolUpdateDataTable(stringsql)
{
using(SqlConnectioncon=newSqlConnection(ConnectString))
{
try
{
con.Open();//打开连接
SqlCommandcomm=newSqlCommand(sql,con);//创建Command对象
if(comm.ExecuteNonQuery()>0)//执行更新
{
returntrue;
}
else
{
returnfalse;
}
}
catch(SqlExceptionex)
{
returnfalse;
//thrownewException(ex.Message);
}
}
}
///
///根据数据集和sql语句更新数据库
///
///
///
publicstaticvoidUpdateDataSet(DataSetds,stringsql)
{
using(SqlConnectioncon=newSqlConnection(ConnectString))
{
try
{
SqlDataAdapteradapter=newSqlDataAdapter(sql,con);//创建适配器
SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);//根据适配器自动生成表单
//adapter.Update(ds,"Table");//更新数据库
}
catch(SqlExceptionex)
{
thrownewException(ex.Message);
}
}
}
}
}
此类主要实现了数据库操作的一些通用方法,把对数据库操作的代码放在using语句块中,using关键字在此处的作用与以前学习的不同。
这里using的作用是作为一个临时对象的生存区域,因为.NET是托管代码的机制,在程序中有时要求非托管资源,如文件句柄或SQL连接。
将使用此类资源的代码放在using语句块中,可以确保这些资源的释放。
using块可以分为获取、使用和释放3个部分。
(l)获取表示创建变量并将其初始化,以便引用系统资源。
(2)使用资源并执行操作。
using{}之间的语句代表资源的使用过程。
(3)调用Dispose方法释放资源。
本例把创建数据连接对象放在using()中,using{}中的代码执行完毕即自动释放数据库连接对象,可以节约内存使用。
六.代码实现和分析
在通用类中已经实现了与数据库的交互,界面中的功能实现就不需要直接访问数据库,只需要调用通用类中的相关方法即可。
1主窗口代码实现和分析
主窗口主要实现其他界面的管理和导航,如果是普通用户,图书入库和图书更新的功能不可用。
管理员登录后拥有所有权限。
单击每一个菜单或者按钮,都可打开相应的子窗口。
为了避免打开已经存在的窗口,下面设计了一个检测窗口是否存在的方法,如果存在返回true,不存在返回false。
该方法示例代码如下:
//查询子窗体是否存在
publicboolcheckchildfrm(stringchildfrmname)
{
foreach(FormchildFrminthis.MdiChildren)
{
if(childFrm.Name==childfrmname)
{
if(childFrm.WindowState==FormWindowState.Minimized)
childFrm.WindowState=FormWindowState.Normal;
childFrm.Activate();
returntrue;
}
}
returnfalse;
}
主窗体载人时,首先设定图书人库和图书更新的菜单和按钮不可用,示例代码如下:
privatevoidFrmMain_Load(objectsender,EventArgse)
{
this.tsbtnAddBook.Enabled=false;
this.mnuAddBook.Enabled=false;
this.mnuUpdateBook.Enabled=false;
}
单击每一个按钮或者菜单,打开相应的窗体。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
//usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceBookManage
{
publicpartialclassfrmMain:
Form
{
publicstaticDialogResultresult;
publicstaticintflag;
publicfrmMain()
{
InitializeComponent();
}
//查询子窗体是否存在
publicboolcheckchildfrm(stringchildfrmname)
{
foreach(FormchildFrminthis.MdiChildren)
{
if(childFrm.Name==childfrmname)
{
if(childFrm.WindowState==FormWindowState.Minimized)
childFrm.WindowState=FormWindowState.Normal;
childFrm.Activate();
returntrue;
}
}
returnfalse;
}
//用户登录菜单的事件处理
privatevoid用户登录ToolStripMenuItem_Click(objectsender,EventArgse)
{
//检测该窗口是否处于打开状态
if(this.checkchildfrm("frmLogin")==true)
return;//窗口已经打开,返回
frmLoginuser=newfrmLogin();//实例化登录窗体
user.ShowDialog();//登录窗体以模式对话框的方式的打开
//判断是否登录成功,登录成功则启用相应的菜单和按钮
if(result==DialogResult.OK&&flag==2)
{
this.tsbtnAddBook.Enabled=true;
this.mnuUpdateBook.Enabled=true;
this.mnuAddBook.Enabled=true;
this.tsbtnIssue.Enabled=true;
}
else
{
this.tsbtnIssue.Enabled=true;
}
}
//登录按钮事件处理
privatevoidtsbtnLogin_Click(objectsender,EventArgse)
{
if(this.checkchildfrm("frmLogin")==true)
return;
frmLoginuser=newfrmLogin();
user.ShowDialog();
if(result==DialogResult.OK&&flag==2)
{
this.tsbtnAddBook.Enabled=true;
this.mnuUpdateBook.Enabled=true;
this.mnuAddBook.Enabled=true;
this.tsbtnIssue.Enabled=true;
}
else
{
this.tsbtnIssue.Enabled=true;
}
}
//图书查询按钮Click事件处理
privatevoidtsbtnSerach_Click(objectsender,EventArgse)
{
if(this.checkchildfrm("frmSearchBook")==true)
return;
frmSearchBookbook=newfrmSearchBook();
//book.MdiParent=this;//设置为当前窗体的子窗体
book.Show();
}
//图书检索菜单Click事件处理
privatevoid图书检索ToolStripMenuItem_Click(objectsender,EventArgse)
{
if(this.checkchildfrm("frmSearchBook")==true)
return;
frmSearchBookbook=newfrmSearchBook();
//book.MdiParent=this;
book.Show();
}
//图书入库菜单Click事件处理
privatevoid图书入库ToolStripMenuItem_Click(objectsender,EventArgse)
{
if(this.checkchildfrm("frmAddBook")==true)
return;
frmAddBookobjbook=newfrmAddBook();
//objbook.MdiParent=this;
objbook.Show();
}
//图书入库按钮Click事件处理
privatevoidtsbtnAddBook_C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 管理 系统