数据库课程设计1215副本.docx

上传人:b****5 文档编号:8029615 上传时间:2023-01-28 格式:DOCX 页数:32 大小:378.19KB
下载 相关 举报
数据库课程设计1215副本.docx_第1页
第1页 / 共32页
数据库课程设计1215副本.docx_第2页
第2页 / 共32页
数据库课程设计1215副本.docx_第3页
第3页 / 共32页
数据库课程设计1215副本.docx_第4页
第4页 / 共32页
数据库课程设计1215副本.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

数据库课程设计1215副本.docx

《数据库课程设计1215副本.docx》由会员分享,可在线阅读,更多相关《数据库课程设计1215副本.docx(32页珍藏版)》请在冰豆网上搜索。

数据库课程设计1215副本.docx

数据库课程设计1215副本

 

 

数据库课程设计

 

题目图书管理系统

院系计算机学院

专业名称教育方向

年级2009级

学生彭洪伟(0950310006)

周发洋(0950310012)

指导教师邱长春

二〇一一年十二月

目录

数据库创建部分1

一、创建数据库(SQLServer2008)1

(1)图书管理数据库相关信息1

(2)创建图书管理数据库。

1

二、图书管理系统E-R图2

三、图书管理系统基本表3

(1)读者信息表3

(2)图书信息表4

(3)借阅表6

四、视图6

(1)实现功能7

五、存储过程7

六、触发器11

连接数据库部分12

一、主窗口12

二、图书查询13

三、借书15

四、还书16

五、读者管理17

六、图书管理22

七、关于25

数据库创建部分

一、创建数据库(SQLServer2008)

(1)图书管理数据库相关信息。

数据库名:

MBOOK

数据文件名:

MBOOK

日志文件名:

MBOOK_Log

图书管理系统的数据库为MBOOK,改数据库由读者(Treader)、图书(TBook)、借阅(TLend)、3个表构成,依托3个基本表创建视图、触发器、和存储过程。

(2)创建图书管理数据库。

创建数据库MBOOK的T-SQL语句如下。

CREATEDATABASEMBOOK

创建数据库MBOOK的界面如下图所示。

二、图书管理系统E-R图

 

三、图书管理系统基本表

(1)读者信息表

1、读者信息表结构

创建读者信息表,表名为“TReader”,表结构如下:

项目

字段名

类型与宽度

是否主键

是否允许空值

说明

借书证号

ReaderID

char(8)

×

姓名

Name

char(8)

×

×

性别

Sex

bit

×

×

1:

男,0:

出生时间

Born

date

×

×

专业

Spec

char(12)

×

×

借书量

Num

Int

×

×

小于等于5,默认为0

照片

Photo

varbinary(MAX)

×

联系方式

Addr

xml

×

2、创建读者信息表

界面方式创建读者信息表。

界面如下:

3、读者信息表样本数据

 

(2)图书信息表

创建图书信息表,创建方式同上。

表名为“TBook”,表结构如下:

项目

字段名

类型与宽度

是否主键

是否允许为空

说明

IBSN

ISBN

char(8)

×

出版物的代码

书名

BookName

char(40)

×

×

作译者

Author

char(16)

×

×

出版社

Publisher

char(30)

×

×

价格

Price

float

×

×

复本量

CNum

int

×

×

库存量

SNum

int

复本量=库存量+已经借阅的统计。

当借一本书时,book的库存量减1;还一本书书事加1

内容提要

Summary

varchar(200)

×

封面照片

Photo

varbinary(MAX)

×

图书信息表样本数据:

 

(3)借阅表

1、借阅表结构

创建借阅表,创建方式同上。

表名为“TLend”,表结构如下所示:

项目

字段名

类型与宽度

是否主键

是否允许为空

说明

图书ID

BookID

char(10)

×

借书证号

ReaderID

char(8)

×

×

ISBN

ISBN

char(18)

×

×

借书时间

LTime

datetime

×

×

2、借阅表样本数据

四、视图

创建“读者借阅图书”视图,名称为RBL。

通过“借书证号(ReaderID)”将读者表(TReader)和借阅表(TLend)联系起来,通过“ISBN”将借阅表(TLend)和图书信息表(TBook)联系起来,视图包含借书证号、图书ID、ISBN、书名、出版社、价格、借书时间等列。

(1)实现功能

把三个基本表联系起来,方便需要3个表关联的功能使用,如图所示:

五、存储过程

共有两个存储过程,分别为:

Book_Borrow、Book_Return

1、Book_Borrow

参数:

借书证号(in_ReaderID)、ISBN(in_ISBN)、图书ID(in_BookID)、执行信息(out_str)。

实现功能:

根据存储过程前三个参数,实现读者图书“借阅”。

第四个参数为输出参数,将存储过程的执行情况以字符串形式赋予此参数。

“借阅”存储过程代码:

USE[MBOOK]

GO

/******Object:

StoredProcedure[dbo].[Book_Borrow]******/

/******ScriptDate:

12/13/201116:

34:

06******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATEPROCEDURE[dbo].[Book_Borrow]@in_ReaderIDchar(8),@in_ISBNchar(18),@in_BookIDchar(10),@out_strchar(30)OUTPUT

AS

BEGIN

IFNOTEXISTS(SELECT*FROMTReaderWHEREReaderID=@in_ReaderID)

BEGIN

SET@out_str='该读者不存在'

RETURN0

END

IFNOTEXISTS(SELECT*FROMTBookWHEREISBN=@in_ISBN)

BEGIN

SET@out_str='该图书不存在'

RETURN0

END

IF(SELECTNumFROMTReaderWHEREReaderID=@in_ReaderID)=5

BEGIN

SET@out_str='读者借书量不能大于5'

RETURN0

END

IF(SELECTSNumFROMTBookWHEREISBN=@in_ISBN)=0

BEGIN

SET@out_str='图书库存量为0'

RETURN0

END

IF@in_ISBNIN(SELECTISBNFROMTLendWHEREReaderID=@in_ReaderID)

BEGIN

SET@out_str='读者已经借过该书'

RETURN0

END

IFEXISTS(SELECT*FROMTLendWHEREBookID=@in_BookID)

BEGIN

--SET@out_str='该图书ID已存在'

set@out_str='该图书已借出'

RETURN0

END

BEGINTRAN/*开始一个事务*/

INSERTINTOTLendVALUES(@in_BookID,@in_ReaderID,@in_ISBN,GETDATE())

IF@@ERROR>0/*如果前面一条SQL语句出错则回滚事务并返回*/

BEGIN

ROLLBACKTRAN

SET@out_str='执行过程中遇到错误'

RETURN0

END

UPDATETReaderSETNum=Num+1WHEREReaderID=@in_ReaderID

IF@@ERROR>0/*如果前面一条SQL语句出错则回滚事务并返回*/

BEGIN

ROLLBACKTRAN

SET@out_str='执行过程中遇到错误'

RETURN0

END

UPDATETBookSETSNum=SNum-1WHEREISBN=@in_ISBN

IF@@ERROR=0/*如果所有语句都不出错则结束事务并返回*/

BEGIN

COMMITTRAN

SET@out_str='借书成功'

RETURN1

END

ELSE/*如果执行出错则回滚所有操作并返回*/

BEGIN

ROLLBACKTRAN

SET@out_str='执行过程中遇到错误'

RETURN0

END

END

2、Book_Return

参数:

借书证号(in_ReaderID)、ISBN(in_ISBN)、图书ID(in_BookID)、执行信息(out_str)。

实现功能:

根据存储过程前三个参数,实现读者图书“还书”。

第四个参数为输出参数,将存储过程的执行情况以字符串形式赋予此参数。

“还书”存储过程代码:

USE[MBOOK]

GO

/******Object:

StoredProcedure[dbo].[Book_Return]******/

/******ScriptDate:

12/13/201116:

39:

08******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATEPROCEDURE[dbo].[Book_Return]@in_ReaderIDchar(8),@in_ISBNchar(18),@in_BookIDchar(10),@out_strchar(30)OUTPUT

AS

BEGIN

IFNOTEXISTS(SELECT*FROMTReaderWHEREReaderID=@in_ReaderID)

BEGIN

SET@out_str='该读者不存在'

RETURN0

END

IFnotexists(SELECT*FROMTLendWHEREReaderID=@in_ReaderID)

BEGIN

SET@out_str='该读者未借书'

RETURN0

END

IFNOTEXISTS(SELECT*FROMTBookWHEREISBN=@in_ISBN)

BEGIN

SET@out_str='该图书非馆内书籍'

RETURN0

END

BEGINTRAN/*开始一个事务*/

deletefromTLendwhereBookID=@in_BookID

IF@@ERROR>0/*如果前面一条SQL语句出错则回滚事务并返回*/

BEGIN

ROLLBACKTRAN

SET@out_str='删除TLend表中的记录时出错了'

RETURN0

END

IF@@ERROR=0/*如果所有语句都不出错则结束事务并返回*/

BEGIN

COMMITTRAN

SET@out_str='还书成功'

RETURN1

END

ELSE/*如果执行出错则回滚所有操作并返回*/

BEGIN

ROLLBACKTRAN

SET@out_str='删除TLend表中的记录时出错了'

RETURN0

END

END

六、触发器

1、实现功能

当用户“还书”时,要删除借阅表(TLend)中的一条借书记录,读者信息表(TReader)中该读者的借书量减1;图书信息表(TBook)中该图书记录的库存量加1.

2、实现方法

次功能可以通过创建借阅表(TLend)的DELETE触发器实现,触发器名称为:

TLend_delete。

创建触发器代码如下:

USE[MBOOK]

GO

/******Object:

Trigger[dbo].[TLend_delete]******/

/******ScriptDate:

12/13/201116:

44:

51******/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

CREATETRIGGER[dbo].[TLend_delete]ON[dbo].[TLend]

AFTERDELETE

AS

BEGIN

UPDATETReaderSETNum=Num-1WHEREReaderID=(SELECTReaderIDFROMdeleted)

UPDATETBookSETSNum=SNum+1WHEREISBN=(SELECTISBNFROMdeleted)

END

连接数据库部分

这一部分用到VisualStudio2008开发环境,利用C#语言构建图书管理系统窗口。

共有七个窗口,分别为:

主窗口、图书查询、借书、还书、读者管理、图书管理、关于。

下面分别介绍各个窗口实现的方法及关键代码。

一、主窗口

“主窗口”是所有子窗口的父窗体,因此主要功能是创建各个子窗体,下面是创建“读者管理”窗口的关键代码,其他窗口代码基本相似。

privatevoid读者管理ToolStripMenuItem_Click(objectsender,EventArgse)

{

Form1form1=newForm1();

form1.MdiParent=this;

form1.Show();

}

“主窗口”截图如下:

二、图书查询

实现功能:

查询图书信息。

可以按照四种方式查询,分别为ISBN、书名、作者、出版社。

点击不同按钮,实现不同的查询方式,并且支持模糊查询,在“图书信息”框中显示图书信息。

图书查询窗口如下所示:

实现代码如下(只贴出关键部分代码):

publicpartialclassForm4:

Form

{

stringstrcon="DataSource=PENGHONGWEI\\SQL2008;InitialCatalog=MBOOK;IntegratedSecurity=True;ConnectTimeout=10;NetworkLibrary=dbnmpntw";

privatevoidForm4_Load(objectsender,EventArgse)

{

//TODO:

这行代码将数据加载到表“mBOOKDataSet3.TBook”中。

您可以根据需要移动或移除它。

this.tBookTableAdapter.Fill(this.mBOOKDataSet3.TBook);

}

privatevoidbutton1_Click(objectsender,EventArgse)

{

SqlConnectionconn=newSqlConnection(strcon);

stringsqlStrSelect="select*fromTBook";

switch(tabControl1.SelectedIndex)

{

case0:

sqlStrSelect="select[ISBN],[BookName],[Author],[Publisher],[Price],[CNum],[SNum]fromTBookwhere[ISBN]='"+textBox1.Text.Trim()+"'";

break;

case1:

sqlStrSelect="select[ISBN],[BookName],[Author],[Publisher],[Price],[CNum],[SNum]fromTBookwhere[Author]like'%"+textBox2.Text.Trim()+"%'";

break;

case2:

sqlStrSelect="select[ISBN],[BookName],[Author],[Publisher],[Price],[CNum],[SNum]fromTBookwhere[BookName]like'%"+textBox3.Text.Trim()+"%'";

break;

case3:

sqlStrSelect="select[ISBN],[BookName],[Author],[Publisher],[Price],[CNum],[SNum]fromTBookwhere[Publisher]like'%"+textBox4.Text.Trim()+"%'";

break;

}

try

{

SqlDataAdapteradapter=newSqlDataAdapter(sqlStrSelect,conn);

DataSetdstable=newDataSet();

adapter.Fill(dstable,"testTable");

dataGridView1.DataSource=dstable.Tables["testTable"];

dataGridView1.Show();

}

catch(Exceptionex)

{

MessageBox.Show(ex.Message);

}

finally

{

conn.Close();

}

}

}

三、借书

实现功能:

输入借书证号、ISBN以及要借的图书ID,点击“借书”按钮实现借书功能。

此窗体主要操作数据库的“RBL”视图和调用Book_Borrow存储过程。

点击“查询”按钮时,可以查询当前借书证号的借书记录。

“借书”按钮实现代码如下:

privatevoidbutton2_Click(objectsender,EventArgse)//借书

{

if(textBox1.Text.Trim()==""||textBox2.Text.Trim()==""||textBox3.Text.Trim()=="")

{

MessageBox.Show("借书证号,ISBN,图书ID输入完整!

");

return;

}

SqlConnectionconn=newSqlConnection(strcon);

SqlCommandcmd=newSqlCommand("Book_Borrow",conn);

cmd.CommandType=CommandType.StoredProcedure;

SqlParameterinReaderID=newSqlParameter("@in_ReaderID",SqlDbType.Char,8);

inReaderID.Direction=ParameterDirection.Input;

inReaderID.Value=textBox1.Text.Trim();

cmd.Parameters.Add(inReaderID);

SqlParameterinISBN=newSqlParameter("@in_ISBN",SqlDbType.Char,18);

inISBN.Direction=ParameterDirection.Input;

inISBN.Value=textBox2.Text.Trim();

cmd.Parameters.Add(inISBN);

SqlParameterinBookID=newSqlParameter("@in_BookID",SqlDbType.Char,8);

inBookID.Direction=ParameterDirection.Input;

inBookID.Value=textBox3.Text.Trim();

cmd.Parameters.Add(inBookID);

SqlParameteroutReturn=newSqlParameter("@out_str",SqlDbType.Char,30);

outReturn.Direction=ParameterDirection.Output;

cmd.Parameters.Add(outReturn);

try

{

onn.Open();

cmd.ExecuteNonQuery();

MessageBox.Show(outReturn.Value.ToString());

}

catch

{

MessageBox.Show("借书出错!

");

}

finally

{

conn.Close();

button1_Click(null,null);

}

}

四、还书

实现功能:

与“借书”功能相反,窗口大体相似。

此窗体主要操作数据库的“RBL”视图和调用Book_Return存储过程并激发TLend_delete触发器。

点击“还书”按钮实现还书功能。

窗口如下:

“还书”按钮的单击事件关键代码如下:

privatevoidbutton2_Click(objectsender,EventArgse)//还书

{

if(textBox1.Text.Trim()==""||textBox2.Text.Trim()==""||textBox3.Text.Trim()=="")

{

MessageBox.Show("借书证号,ISBN,图书ID输入完整!

");

return;

}

SqlConnectionconn=newSqlConnection(strcon);

SqlCommandcmd=newSqlCommand("Book_Return",conn);

cmd.CommandType=CommandType.StoredProcedure;

SqlParameterinReaderID=newSqlParameter("@in_ReaderID",SqlDbType.Char,8);

inReaderID.Direction=ParameterDirection.Input;

inReaderID.Value=textBox1.Text.Trim();

cmd.Para

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

当前位置:首页 > 高等教育 > 艺术

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

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