数据库课程设计报告图书管理系统.docx
- 文档编号:10413866
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:38
- 大小:210.54KB
数据库课程设计报告图书管理系统.docx
《数据库课程设计报告图书管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告图书管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
数据库课程设计报告图书管理系统
《数据库原理概论》
数
据
库
课
程
设
计
报
告
系别:
计算机科学系
姓名:
崔玲玲
班级:
软件111班
学号:
201101014103
指导老师:
李志强
目录
1.课程设计任务描述1
1.1设计题目和功能1
1.2设计要求1
1.3设计目的1
1.3设计平台和环境2
2.总体设计方案2
2.1数据库的设计2
2.2系统的整体E-R图4
2.3系统的功能菜单4
2.4用户界面设计5
3.详细设计方案6
3.1新书入库6
3.2图书检索及销毁8
3.3证件管理11
3.4图书借还15
3.5图书预览22
3.6系统设置22
4.运行与调试25
4.1系统测试25
4.2问题与解决25
5.小结26
6.参考文献28
1.课程设计任务描述
1.1设计题目和功能
(1)图书新书的信息的录入和旧书的删除等;
(2)图书的检索(包括按作者姓名、出版时间、出版社名称、图书类别、书名、关键字等);
(3)图书的租借(包括借书登记、限借数量控制、还书登记、过期罚款计算等);
(4)借书证件的管理(包括办新证件,挂失、解除挂失、注销等)
(5)系统设置(主要是不同类型证件的可借书的总量和借书时间等)
(6)统计资料(包括惜出数量与库存数量的比例,各类图书数量与总数量的比例,热门图书统计数据等各种信息资料的统计);
(7)图书测览(包括对图书摘要的测览和新书测览);
(8)系统版本信息以及使用帮助。
1.2设计要求
(1)按照应用程序设计的4个阶段进行,熟悉每个阶段需要解决的问题以及解决的方法;
(2)使用SQLServer设计数据库和数据表,注意把握数据库的设计原则;
(3)要求应用程序有菜单栏,操作方便;
(4)必须完成功能1-5。
强调一点:
在借书输入证件ID时,首先检索是否在“黑名单”和“挂失表”中,后再校验证件的真伪。
在借、还书时要显示本证件已借书的量和图书信息;证件注销时数据的参照完整性问题。
在系统设置中可随机设置不同借书书证件(如教师和学生)的可借书数量和借书的时间。
(5)应用程序界面和风格不作具体要求,各人按照自己的思路去做,发挥自己的创造。
1.3设计目的
(1)培养综合应用PowerBuilder进行应用程序设计和解决实际问题的能力;
(2)加深对PowerBuilder编程环境和编程方法的理解;
(3)发挥各人的想像能力和分析能力,拓展思维空间;
(4)掌握应用程序设计的基本方法;
(5)巩固已经学到的编程技术,学会在编程中学习编程
1.3设计平台和环境
本次课程设计主要是使用powerbuilder9.0以及SQLSERVER,SQLSERVER主要用于创建数据库,设计表,存放数据以及控制实体完整性约束以及参照完整性约束等,powerbuilder是这次课设的主要软件,用于设计图书管理系统的用户界面以及数据逻辑控制结构。
2.总体设计方案
2.1数据库的设计
数据库中,部分表的结构见图1~图4。
存放图书信息的表BookInfo的结构见图1,图书信息表主要有图书编号,ISBN书号,书名,出版日期,作者,字数,印刷册数,定价,关键字,内容摘要,图书分类,借出标记这些属性。
其中图书编号具有惟一性,是表的主码,是用于检索图书,借书以及还书的主要属性,图书分类可用于图书按类型的检索,借出标志是用来标示此图书是否被借出。
图1BookInfo表
证件表CertificateInfo表(如图2所示),记录了借书证件的信息,主要包括借书证ID,证件名称.,证件号码,姓名,所在部门,类型标记,挂失标记。
其中借书证ID是唯一的,是表的主码,在此系统中主要用于图书的租借,类型标记表示不同的借书证类型,这里只有学生类(用0表示)和教师类(用1表示),挂失标记是用来标识证件的挂失状态,0为未挂失,1为挂失状态。
图2CertificateInfo表
图书租借表Loan表(如图3所示),记录了图书租借情况,借书证书ID与CertificateInfo表相关联。
主要有证件ID,图书编号,借书日期,还书日期,还书标记这些属性。
图3Loan表
系统设置表Systemset表(如图4所示),主要有证件类型标记,最大借书数量和最大借书时间这三个属性,为了提高此图书管理系统的灵活性,系统可能会根据不同的时间去设置不同借书证可借书的数量已经时间,所以它主要用来存放不同类型的借书证的最大借书数量和最大借书时间,每次系统设置的时候,就会更新此表,以达到动态设置的效果。
图4Systemset表
2.2系统的整体E-R图
E-R图可以很清晰的表达各实体之间的关系,此图书管理系统的E-R图如图5所示。
主要画出了图书与图书证之间的借阅关系以及系统设置单与图书证设置关系。
图5E_R图
2.3系统的功能菜单
系统的功能菜单展示了此图书管理系统的菜单栏,也即系统的主要功能,如图6所示。
有新图书的录入,图书的检索,旧书的销毁,借书证的管理,租借书管理,图书预览,系统设置等,系统的菜单栏展示如图7所示。
图7系统主菜单
图6系统的功能菜单
2.4用户界面设计
此次系统设计,我选择了主界面的最大化模式,各子窗口可根据菜单栏上菜单的去选择,主界面默认打开图书租借子窗口,其他各子窗口在详细设计里都有涉及到,这里就不一一展示了。
主界面如图8所示:
图8系统主界面
3.详细设计方案
3.1新书入库
新书入库功能为了把新书的信息存放到图书数据库中,便于借阅和阅读内容摘要,界面如图9所示,保存到数据库中的信息如图10所示。
图9新书入库
图10数据插入到数据库中
窗口的设计主要是由静态文本,单行编辑框,多行编辑框,下拉列表选框以及按钮等控件组成,各种控件的使用方法以及使用时的名称这里就不在详细解释,主要说一下其中的代码内容。
这里的下拉列表选框是为了选择数据库中已有的图书类型,选择代码格式是this.additem(""),引号里面写显示的选择内容,把所有的代码写到constructor事件中。
代码如下:
this.additem("计算机类")
this.additem("英语类")
this.additem("数学类")
this.additem("文学")
this.additem("小说")
this.additem("杂志")
保存按钮的click事件中的代码比较多,也是新书入库的关键,里面不仅要写把新书信息插入到数据库中,还要控制各属性的有效性以及数据库链接问题的提示。
信息的插入主要用到了SQL语言中的insertintovalues语句,具体代码和说明如下:
Longll_i,ls_bookid
datels_publish
doublels_price
stringls_isbn,ls_title,ls_author,ls_words,ls_number,ls_keyword,
ls_abstract,ls_classbook
integerls_flagbook//tinyint类型的定义
ifsle_bookid.text=""ORisNull(sle_bookid.text)then//数据格式检验
messagebox("缺少数据","请输入图书编号")
sle_bookid.setfocus()
return
endif
ls_bookid=long(sle_bookid.text)//给定义的各属性赋值
ls_isbn=trim(sle_isbn.text)
ls_title=trim(sle_title.text)
ls_publish=date(sle_publish.text)
ls_author=trim(sle_author.text)
ls_words=trim(sle_words.text)
ls_number=trim(sle_number.text)
ls_price=double(sle_price.text)
ls_keyword=trim(mle_keyword.text)
ls_abstract=trim(mle_abstract.text)
ls_classbook=trim(ddlb_classbook.text)
ls_flagbook=0
selectBookInfo.BookID
into:
ll_i
fromBookInfo
whereBookInfo.BookID=:
ls_bookid;
ifll_i<>0then
messagebox("信息错误","图书编号第"+string(ll_i)+"号重号!
请改正")
sle_bookid.setfocus()
return
endif
insertinto"BookInfo"("BookID",
"ISBN",
"Title",
"Publish",
"Author",
"Words",
"Number",
"Price",
"Keyword",
"Abstract",
"Classid")
values(:
ls_bookid,
:
ls_isbn,
:
ls_title,
:
ls_publish,
:
ls_author,
:
ls_words,
:
ls_number,
:
ls_price,
:
ls_keyword,
:
ls_abstract,
:
ls_classbook);
//数据库链接失败提示,能提示具体的错误信息,以便改正
ifsqlca.sqlcode<>0then
messagebox("信息错误:
数据库连接失败",sqlca.sqlerrtext)
rollback;
endif
在退出按钮中,点击退出可以实现按钮所在父窗口的关闭,其他功能窗口的退出按钮与此相同,以下不在介绍,都是在退出按钮click事件中写上close(parent).
3.2图书检索及销毁
图书检索功能为了把图书的信息检索出来,便于观查看,销毁功能是对错书旧书再数据库中的删除,界面如图11所示(这里展示的是按图书分类的查询)。
图11图书检索
图书的检索方式有很多,如按图书编号的查询,按作者姓名进行图书的模糊查询,查询某个时间段内的出版的图书,查询某个日期出版的图书,查询某个日期之前出版的图书,查询某个日期之后出版的图书,按图书分类进行图书的分类查询,按图书的名称进行图书的模糊查询,按图书的关键字进行图书的模糊查询等。
各种查询的方式虽然不同,但是在powerbuilder中的设计是大概相同的,只是检索时的检条件代码不同,所以,此系统只是实现了按图书编号查询以及销毁(这种销毁方式比较好,这样检索之后再销毁就比较确定销毁的信息是否正确),按作者姓名查询并销毁,按图书分类查询。
检索的窗口设计主要用到一个数据窗口datawindow,数据窗口的属性dataobject中要选择一个数据对象,所以要新建一个freeform或者grid,freeform用于对一个唯一元组的查询,grid是用于对多个符合条件的模糊查询,像按作者查询,按图书分类查询,会检索出一条或者多条符合条件的元组。
数据对象的设计很简单,主要的一点是对检索的主属性的选择和数据类型定义,这里一定要主要定义相符合的数据类型。
按作者姓名查询,如果编辑框里没有输入数据,就提示请输入作者姓名,如果输入的作者名在数据库中没有相关的作品就提示不存在作者信息,具体代码及说明如下:
stringls_author,ll_i//作者姓名的定义
ls_author=trim(sle_author.text)
ifnotsle_author.text=""then
dw_author.retrieve(ls_author)
else
MessageBox("数据不全","请输入查询的作者的姓名!
")
endif
sle_author.setFocus()
selectBookInfo.author
into:
ll_i
fromBookInfo
whereBookInfo.author=:
ls_author;
ifll_i<>ls_authorthen
MessageBox("数据错误","数据库中不存在此作者信息!
")
sle_author.setFocus()//光标定位到作者名的输入框
endif
按作者姓名的删除,主要用到了SQL语言中的delete语句,用于删除符合条件的整个元组,具体代码及说明如下:
stringls_author
ls_author=trim(sle_author.text)
ifsle_author.text=""then
MessageBox("数据不全","请输入作者名!
")
endif
delete
fromBookInfo
whereBookInfo.Author=:
ls_author;
MessageBox("提示信息","此书已成功删除!
")
sle_author.setFocus()
按图书分类查询,是根据ddlb_classbook.text下拉选框中选择的数据不同而检索出不同的数据,具体的代码及说明如下:
stringls_classbook
ls_classbook=trim(ddlb_classbook.text)
ifddlb_classbook.text=""orisnull(ddlb_classbook.text)then
MessageBox("数据不全","请选择图书分类")
else
dw_classbook.retrieve(ddlb_classbook.text)
endif
ddlb_classbook.setfocus()
按图书编号查询,具体的代码及说明如下:
longll_bookid,ll_i
ll_bookid=long(sle_bookid.text)
ifnotsle_bookid.text=""then
dw_querybook.retrieve(ll_bookid)
else
MessageBox("数据不全","请输入查询的图书编号!
")
endif
sle_bookid.setFocus()
按图书编号销毁,界面如图12所示,具体的代码及说明如下:
longll_bookid,ll_n
ll_bookid=long(sle_bookid.text)
ifsle_bookid.text=""then
MessageBox("数据不全","请输入图书编号!
")
endif
selectBookInfo.BookID//不存在图书的情况下,提示信息
into:
ll_n
fromBookInfo
whereBookInfo.BookID=:
ll_bookid;
ifll_n<>ll_bookidthen
MessageBox("信息错误","数据库中不存在此图书!
")
return
endif
delete
fromBookInfo
whereBookInfo.BookID=:
ll_bookid;
MessageBox("提示信息","此书已成功删除!
")
sle_bookid.setFocus()
图书检索的open事件代码如下:
tab_1.tabpage_author.dw_author.SetTransObject(SQLCA)
tab_1.tabpage_classbook.dw_classbook.SetTransObject(SQLCA)
tab_1.tabpage_1.dw_querybook.SetTransObject(SQLCA)
图12图书删除
3.3证件管理
证件管理功能有办理新证件的功能,证件信息查询,证件的挂失,解挂,注销功能。
证件的办理,如图13所示,展示的是证件办理界面;图14是数据插入到数据库中;具体的代码如下:
longll_certid,ll_certvalue,ll_i
stringls_certname,ls_name,ls_depart
integerls_flag,ls_flag1
ifsle_certid.text=""orisnull(sle_certid.text)then
MessageBox("缺少数据","请输入借书证书ID!
")
sle_certid.setfocus()
return
endif
ll_certid=long(sle_certid.text)
ll_certvalue=long(sle_certvalue.text)
ls_certname=trim(sle_certname.text)
ls_name=trim(sle_name.text)
ls_depart=trim(ddlb_depart.text)
ls_flag1=0
selectCertificateInfo.Certid
into:
ll_i
fromCertificateInfo
whereCertificateInfo.Certid=:
ll_certid;
ifll_i<>0then
MessageBox("数据错误","图书证件ID第"+string(ll_i)+"号重号!
请重新输入。
")
sle_certid.setfocus()
return
endif
ifddlb_certflag.text="学生类"then
ls_flag=0
else
ls_flag=1
endif
insertinto"CertificateInfo"
("Certid",
"Cername",
"Cervalue",
"Name",
"Depart",
"Flag",
"Flag1")
values(:
ll_certid,
:
ls_certname,
:
ll_certvalue,
:
ls_name,
:
ls_depart,
:
ls_flag,
:
ls_flag1);
图13证件办理
图14证件插入到数据库中
证件的检索和挂失以及解挂在同一个窗口中,一个编辑框,三个按钮,界面如图15所示,代码主要用到SQL中updateset语句,用于对数据的更新操作,证件的挂失也就是把CertificateInfo中的挂失标记Flag1置为1,具体代码如下:
longll_certid,ll_i
ll_certid=long(sle_certid2.text)
ifsle_certid2.text=""orisnull(sle_certid2.text)then
MessageBox("缺少数据","请输入借书证书ID!
")
sle_certid2.setfocus()
return
endif
selectCertificateInfo.Certid
into:
ll_i
fromCertificateInfo
whereCertificateInfo.Certid=:
ll_certid;
ifll_i<>ll_certidthen
MessageBox("数据错误","数据库中不存在此证件信息!
")
sle_certid2.setfocus()
return
endif
UpdateCertificateInfo
setFlag1=1
whereCertificateInfo.Certid=:
ll_certid;
dw_queryguashi.retrieve(ll_certid)
MessageBox("温馨提示:
","证件已挂失。
")
图15证件的挂失
图书证的注销也就是此证件的销毁,从数据库中把有关此证件的信息删除,窗口设计如图16所示,具体代码如下:
图16证件注销
longll_certid,ll_i
ll_certid=long(sle_certid3.text)
ifsle_certid3.text=""orisnull(sle_certid3.text)then
MessageBox("缺少数据","请输入借书证书ID!
")
sle_certid3.setfocus()
return
endif
delete
fromCertificateInfo
whereCertificateInfo.Certid=:
ll_certid;
dw_querydestroy.retrieve(ll_certid)
MessageBox("温馨提示:
","证件已注销。
")
sle_certid3.text=""
3.4图书借还
图书租借窗口有三个选项卡,分别是借书,还书,历史借书记录。
在借书选项卡中,可查询此借书证可借多少本,已借多少本,还可借多少本,可检索出此借书证借过并且未还的书的信息,此查询有别于其他的查询,因为查询条件有两个,一个是借书证ID,一个是还书的标记,所以,在创建数据对象的时候,要再添加一个查询属性选项,当此借书证没有借过并未还的书的记录时会提示没有借书信息,提示如图17所示,如果借书已超过最大借书量,系统会提示一超出多少本,请先还书,如图18所示;可输入图书编号并借书,借书时提示信息有很多,像图书编号是否存在,证件是否存在,证件是否有效,图书是否已被借走,所借图书本数是否已超过最大借书量,借书界面如图19所示,具体的代码如下:
查询按钮
longll_certid,ll_bookid,ll_fg,ll_cid,ll_f2,ll_v,ll_f
stringls_num
integerll_flag2
ll_certid=long(sle_certid1.text)
ll_flag2=0
ifsle_certid1.text=""then
MessageBox("缺少数据","请输入借书证号!
")
sle_certid1.setFocus()
return
endif
selectLoan.Certid
into:
ll_cid
fromLoan
whereLoan.Certid=:
ll_certid;
ifll_cid<>ll_certidthen
MessageBox("信息提示","该借书证没有借书信息!
")
return
endif
selectLoan.Certid
into:
ll_v
fromLoan
whereLoan.Certid=:
ll_certidandLoan.Flag2=:
ll_flag2;
selectLoan.Flag2
into:
ll_f
fromLoan
whereLoan.Certid=:
ll_certidandLoan.Flag2=:
ll_flag2;
ifll_f=0and
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 报告 图书 管理 系统