WEB课程设计图书借阅信息管理系统Word格式文档下载.docx
《WEB课程设计图书借阅信息管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《WEB课程设计图书借阅信息管理系统Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
2.2.1实体列表
实
体
描
述
用户
所有借阅者,查阅者,以及系统管理员,由用户ID标识
图书
图书馆所有图书,由图书ID标识
借
阅
图书ID、借阅ID、借书日期、借阅证号等属性,由借阅ID标识
2.2.2系统的E-R模型
该图书管理系统的E-R模型,如图2-2所示
2-2系统的E-R模型
2.3设计数据库
2.3.1创建数据库
(1)在服务器资源管理器中的任一节点右击。
(2)执行快捷菜单中的“新建数据库”命令,并在打开的“创建数据库”对话框中输入数据库名BookManage,其他可采用默认值。
(3)单击“确定”按钮,则新建的数据库就会出现在服务器上。
2.3.2创建数据表
创建数据库后,为BookManage数据库添加数据表,步骤如下。
(1)在服务器资源管理器中右击数据库BookManage下的“表”文件夹在弹出的快捷菜单中执行“新建表”命令。
(2)添加表的字段和其他详细资料。
各表数据结构如下表所示。
表2-1用户信息(userinfo)
列
名
含义
数据类型
说明
UID
用户ID
int
自动,主键
UName
用户名
vchar(50)
不为空
UPwd
密码
UState
用户权限,管理员=1,普通用户=2
不为空,默认值为2
UBookID
借阅证号
bigint
可以为空
表2-2图书信息(bookinfo)
主
键
BookID
图书ID
BookName
图书名称
Varchar(50)
BookType
类别
Varchar(100)
BookAuthor
作者
BookPrice
价格
smallmoney
BookPic
封面
Varchar(200)
允许为空
BookContent
内容简介
text
BookIssue
图书制定访问码
表2-3借阅信息(issueinfo)
IssID
借阅ID
外键
IssBookID
IssDateTime
借书日期
datetime
2.4数据库中表的关系
在数据库中新建BookManage数据库的数据库关系图如图2-4所示
图2-4数据库关系图
3界面设计
3.1主界面
进入VisualStudio2008,创建一个新的“Windows应用程序”类型的项目,名为“图书馆管理”。
将默认创建的窗体命名为“图书馆管理系统”,把“图书馆管理系统”作为本系统中的主界面。
在窗体中添加一个菜单(MenuStrip)控件,一个工具栏(ToolStrip)控件。
MenuStrip中的菜单项,子菜单项如图3-1所示
图3-1主界面
3.2用户登录界面
本系统的用户非为普通用户和管理用户,管理用户具有系统提供的所有权限,普通用户可以查询图书、借阅图书。
在窗体中添加3个标签(Label)控件,2个按钮(Button)控件,1个组合框(ComboBox)控件,2个文本框(TextBox)控件。
用户类型分为管理用户和普通用户,在组合窗口中添加这两项。
3.3图书查询界面
图书查询提供组合查询的方式,界面窗体名称为“frmSearchBook.cs”,图书类别组合框中的项是从数据库中获取的,在设计时不需要添加内容。
在条件组合框中输入“or”和“and”,来动态实现条件组合。
在窗体中添加2个分组框(GroupBox)控件:
搜索条件、搜索结果,各种控件的添加如图3-3所示
图3-3图书查询界面
在右边的分组框中添加DataGridView控件,单击右上角的黑色三角,选择“在父容器中停靠”选项。
3.4图书入库界面
管理员有权限将图书添加到数据库中,图书入库界面的设计如图3-4所示
图3-4图书入库界面
在窗体的左边的分组框中添加标签和文本框,用来接收管理员输入的图书信息,以便保存到数据库中。
在右边的分组框中添加DataGridView控件,可以显示数据库中的图书信息,新添加的图书信息也可以显示出来。
3.5图书更新界面
图书更新界面用于方便管理员管理图书信息,实现图书信息修改、删除等操作。
界面设计如图3-5所示
图3-5图书更新界面
管理员可以在DataGridView控件中直接修改数据,也可以通过右边的分组框实现图书信息的修改。
3.6图书借阅界面
根据图书馆中已有的图书信息,用户可以通过图书证号实现借阅。
界面设计如图3-6所示
图3-6图书借阅界面
4通用类的生成
本系统的主要操作都需要与数据库发生交互,为了提高代码的重用性和规范性,把与数据库交互的功能单独放在一个类中,在该类中实现数据库的增加、删除、修改、查询等通用功能。
连接数据库;
(1)定义数据库连接字符串,代码如下:
PrivatestaticstringConnectString="
DataSource=(local)\\sqlexpress;
DataBase=BookManage.mdf"
;
(2)创建Connection对象,代码如下:
SqlConnectioncon=newSqlConnection(ConnectString);
(3)打开连接,代码如下:
con.Open();
(4)关闭连接,代码如下:
con.Close();
5连接数据库
为数据库BookManage和本系统之间建立一个数据连接。
(1)在服务器资源管理器中右击“数据连接”节点(VS2008中操作)。
在弹出的快捷菜单中执行“添加连接”命令,打开DataLinkProperties对话框。
切换到Provider选项卡,选中列表框中的MicrosoftOLEDBProviderforSQLServer项。
单击“下一步”切换到Connection选项卡。
(2)在其中的第一个下拉列表框中选择数据库所在服务器名称。
输入登录服务器信息后选择数据库BookManage,然后单击测试按钮。
如果测试成功,单击“确定”按钮。
6系统测试
6.1运行主窗口
运行程序后首先显示主窗体,如图6-1所示
单击“登录”按钮,就会弹出登录窗体,管理用户具有系统提供的所有权限,普通用户可以查询图书、借阅图书。
图6-1主窗口
在登录对话框中输入用户姓名和密码,单击“确认”按钮,就会对用户身份进行认证,如果认证通过,那么就会弹出如图6.2所示的图书馆管理系统的界面:
管理员和普通用户进入此窗体后,系统所提供的操作权限是不同的
6.2图书查询功能
图书查询可以实现组合查询,将查询结果显示在DataGridView控件中。
窗体载入时,对图书类别组合框中的项进行了初始化,通过查询语句“selectdistinctBookTypefrombookinfo”,调用DataAccess类中的GetDataSetBySql方法获取数据库Bookinfo表中的图书类别,使用distinct关键字去掉重复项。
使用查询功能示例如图6-2所示
图6-2图书查询
6.3图书更新功能
图书更新分为两种,第一种通过更改DataGridView控件中的数据直接更改,第二种可以通过修改各字段值进行更改。
单击“保存修改”按钮,将DataGridView控件中修改的数据保存到数据库中。
如图6-3所示
图6-3图书更新
6.4图书入库功能
管理员登录系统后,可以为数据库添加新的图书信息。
如图6-4所示
如图6-4图书入库
6.5图书借阅功能
用户登录系统后,可以借阅不同的书籍,通过选择组合框中的书名,该书的图书访问代码和作者将显示在文本框中。
如图6-5所示
图6-5图书借阅
7问题分析与解决方法
7.1定义连接数据库字符串的技巧
(1)string
conString
=
"
provider=sqloledb.1;
data
source=.;
initial
catalog=capucivar;
user
id=sa;
pwd="
(2)
privatestaticstringConnectString=
server=(local)\\sqlexpress;
database=Book_Data;
user=sa;
pwd=1234"
(3)
7.2图书更新中删除功能的约束性
在图书馆管理员管理图示信息时,有时需要不断地增添新的图书和删除旧的图书信息,但是当有一本图书正在被借阅当中,则不能删除,针对这一问题,该系统应该提供有关对管理员显示提醒的功能.
下面在删除功能代码中用C#语句提供相应的解法.
DataSetds=DataAccess.GetDataSetBySql("
select*fromIssueInfowhereBookID="
+Convert.ToInt32(this.txtbID.Text)+"
);
if(ds.Tables[0].Rows.Count>
0)
{
MessageBox.Show("
此书有借阅,不能删除"
return;
}
7.3图书查询功能的友好交互性
对于一个藏书量很大的图书馆,一本图书可能有好几种版本,即作者不同、出版社不同、价格不同;
或者同一类型的书:
如计算机类的书有很多本。
这时不同的用户就需要查询自己所需的书,在查询时就需要同时根据多项图书的信息进行关联性的查找,所以在查询功能这一块要用相应的算法解决这一问题,如下面的代码所示,已经实现了图书的关联性查找:
privatevoidbtnSerch_Click(objectsender,EventArgse)
stringcbo1=this.cboOR.Text;
stringcbo2=this.cboAnd.Text;
stringbooktype=cboType.Text;
stringbookname=this.txtName.Text;
stringbookcontent=this.txtContent.Text;
stringsql="
select*frombookInfowhereBookType='
+booktype+"
'
"
+cbo1+"
BookNamelike'
%"
+bookname+"
%'
+cbo2+"
BookContentlike'
+bookcontent+"
DataSetMyds=DataAccess.GetDataSetBySql(sql);
DataTabletable=Myds.Tables[0];
this.dgvSearchBook.DataSource=table;
图7-1关联查找
如图7-1所示若要查询“爱情情感”类中的“明晓溪”著作的《心之萌》这本书就要同时对图书类别和图书名称这两个信息进行关联查找:
在图书类别下的组合框中选中“and”,图书类别中输入爱情情感,图书名称中输入心之萌。
附录
操作数据库中的数据实现代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceBookManage
{
classDataAccess
privatestaticstringConnectString=@"
DataSource=A20\SQLEXPRESS;
AttachDbFilename=F:
\BookManage\data\BookManage.mdf;
IntegratedSecurity=False"
publicstaticDataTableGetDataSetByTableName(stringtable)
using(SqlConnectioncon=newSqlConnection(ConnectString))
{
stringsql="
select*from"
+table+"
try
{SqlDataAdapteradapter=newSqlDataAdapter(sql,con);
DataSetds=newDataSet();
adapter.Fill(ds,"
table"
returnds.Tables[0];
catch(SqlExceptionex)
thrownewException(ex.Message);
;
}}}
publicstaticDataSetGetDataSetBySql(stringsql)
using(SqlConnectioncon=newSqlConnection(ConnectString))
SqlDataAdapteradapter=newSqlDataAdapter(sql,con);
try
{adapter.Fill(ds);
returnds;
catch(SqlExceptionex)
thrownewException(ex.Message)}}
publicstaticSqlDataReaderGetDataReaderByID(intid)
using(SqlConnectioncon=newSqlConnection(ConnectString))
select*frombookinfowherebookid="
+id;
SqlCommandcomm=newSqlCommand(sql,con);
con.Open();
SqlDataReaderreader=comm.ExecuteReader();
reader.Read()
returnreader;
}
{thrownewException(ex.Message);
}}
publicstaticboolUpdateDataTable(stringsql)
{try
{con.Open();
SqlCommandcomm=newSqlCommand(sql,con);
/if(comm.ExecuteNonQuery()>
{returntrue;
else
{returnfalse;
}}
publicstaticvoidUpdateDataSet(DataSetds,stringsql)
{using(SqlConnectioncon=newSqlConnection(ConnectString))
{try
{SqlDataAdapteradapter=newSqlDataAdapter(sql,con);
SqlCommandBuilderbuilder=newSqlCommandBuilder(adapter);
adapter.Update(ds,"
catch(SqlExceptionex)
{thrownewException(ex.Message);
}}}}}
主窗口实现代码
usingSystem.ComponentModel;
usingSystem.Drawing;
usingSystem.Windows.Forms;
{publicpartialclassFrmMain:
Form
{publicstaticDialogResultresult;
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)
frmLoginuser=newfrmLogin();
user.ShowDialog();
if(result==DialogResult.OK)
{this.tsbtnAddBook.Enabled=true;
this.mnuUpdateBook.Enabled=true;
this.mnuAddBook.Enabled=true;
privatevoidtsbtnLogin_Click(objectsender,EventArgse)
{if(this.checkchildfrm("
user.ShowDialog();
privatevoidtsbtn