图书馆管理系统详细有图片的插入.docx
《图书馆管理系统详细有图片的插入.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统详细有图片的插入.docx(51页珍藏版)》请在冰豆网上搜索。
图书馆管理系统详细有图片的插入
北京联合大学
实验(实习、实训)报告
课程(项目)名称:
图书馆管理系统
学院:
特殊教育学院专业:
计算机应用技术
班级:
09年级学号:
2009061243109
姓名:
许华杰成绩:
2011年12月29日
图书馆管理系统
——09计应许华杰
系统资料室的藏书量较小,一般从几千册到几万册不等,读者人数也较少,大多数单位都没有购买了昂贵的大型管理软件,往往又很难充分应用其所有功能,从而造成经济与资源上的浪费。
因此,我利用VFP数据库管理系统软件设计一套适合资料的图书馆管理系统。
1、需求分析
需求分析是数据库设计的第一步,是整个设计的基础,准确了了解和分析用户的需求,用户包括图书管理员及读者,想要设计出功能强大的图书馆管理系统。
2、概念结构设计阶段
概念结构设计就是现实世界具体数据的首次抽象,是对用户的需求和功能的要求来完成的,因此,我采用了Xmind软件来建立图书馆管理系统概念模型的E-R图——联系模型
补,模块结构:
3、逻辑结构设计阶段
将概念结构转化为DBMS(数据库管理系统)支持的数据模型,概念结构模型可转换网状模型,层次模型,关系模型。
目前,数据库系统普通采用关系模型。
将概念设计阶段得到的概念模型转换成关系模型,如表1,2,3所示:
表1,读者信息
姓名
读者证号
借书状态
当前借量
失效日期
表2,借阅信息
读者证号
书号
还书日期
表3,图书信息
书号
书名
作者
出版社
出版日期
价格
注销
4、数据库物理设计阶段
一)、表与数据库的具体设计
1、表的设计
读者信息表:
读者信息:
索引:
读者证号——主索引
表4,读者信息表
借阅信息表:
借阅信息:
索引:
书号——普通索引;读者证号——普通索引
表5,借阅信息表
图书信息表:
图书信息:
索引:
书号——主索引
表6,图书信息
④用户表:
2、数据库的设计
建立“图书馆管理系统数据库”,添加表,并建立表间的关联,如图:
3、目录设计
建立“图书馆管理系统”文件夹,在文件夹内建立form、database、images、report、menu、bak子文件夹,分别用于存放表单、数据库和表、图像、报表、菜单、备份文件。
4、读者信息管理设计
读者查询
表单的init事件:
thisform.Label1.visible=.f.
thisform.text1.visible=.f.
thisform.text1.setfocus()
mand1.visible=.f.
thisform.grid1.readonly=.t.
选项按钮组(optiongroup1)的click事件:
docase
casethis.value=1
thisform.text1.visible=.t.
thisform.label1.visible=.t.
mand1.visible=.t.
thisform.label1.caption="请输入按读者证号查询:
"
thisform.text1.value=""
thisform.text1.setfocus()
casethis.value=2
thisform.text1.visible=.t.
thisform.label1.visible=.t.
mand1.visible=.t.
thisform.label1.caption="请输入按姓名查询:
"
casethis.value=3
thisform.text1.visible=.f.
thisform.label1.visible=.f.
mand1.visible=.f.
setfilterto
gotop
thisform.grid1.refresh
Endcase
“查看”按钮(command1)的click事件:
docase
casethisform.optiongroup1.value=1
setfilterto读者证号=alltrim(thisform.text1.value)
casethisform.optiongroup1.value=2
setfilterto姓名=alltrim(thisform.text1.value)
endcase
thisform.grid1.refresh
“查询打印”按钮(command3)的click事件:
reportformreport\读者信息.frxpreview
设计“读者信息”报表,样式如图下:
“退出”按钮(command2)的click事件:
thisform.release。
读者信息编辑
功能要求:
图书管理员向系统数据库中录入读者信息,删除或修改读者信息。
表单界面如图下:
Form1的init事件:
thisform.text1.value=读者信息.读者证号
thisform.text2.value=读者信息.姓名
thisform.text3.value=读者信息.借书状态
thisform.text4.value=读者信息.当前借量
thisform.text5.value=读者信息.失效日期
第一个按钮组包括第一个,上一个,下一个,最后一个,它们的代码和“用户管理”的代码是一样。
第二个按钮组里有四个,分别是添加,修改,删除,退出。
“添加”按钮(command1)的click事件:
ifalltrim(mand1.caption)='添加'
mand1.caption='保存'
mand2.caption='取消'
mand3.enabled=.f.
mand1.enabled=.t.
mand2.enabled=.t.
store''tothisform.text1.value,thisform.text2.value,thisform.text3.value,thisform.text4.value,thisform.text5.value
thisform.text1.setfocus
else
mand1.caption='添加'
mand2.caption='修改'
mand3.enabled=.t.
a1=alltrim(thisform.text1.value)
a2=alltrim(thisform.text2.value)
a3=alltrim(thisform.text3.value)
a4=alltrim(thisform.text4.value)
a5=alltrim(thisform.text5.value)
select*from读者信息where读者证号==a1orderby读者证号intocursortt1
ifreccount()=0
insertinto读者信息values(a1,a2,a3,a4,a5)
messagebox('数据保存完毕!
',48,'操作成功!
')
else
nAnswer=messagebox('信息已修改,确定要保存吗?
',4+32,"重要提示")
docase
casenAnswer=6
update读者信息set读者证号=a1,姓名=a2,借书状态=a3,当前借量=a4,失效日期=a5where读者证号==a1
messagebox('数据保存完毕!
',48,'操作成功!
')
endcase
endif
select读者信息
thisform.init
endif
“修改”按钮的代码和“用户管理”的代码一样
ifalltrim(mand2.caption)='修改'
mand1.caption='保存'
mand2.caption='取消'
mand3.enabled=.f.
thisform.text1.setfocus
else
mand1.caption='添加'
mand2.caption='修改'
mand3.enabled=.t.
thisform.init
endif
“删除”按钮(command3)的click事件:
j1=recno()
a1=alltrim(thisform.text1.value)
nAnswer=messagebox('确定要删除吗?
',4+32,"重要提示")
ifnAnswer=6
deletefrom读者信息where读者证号==a1
usedatabase\读者信息exclusive
pack
ifj1<=reccount()
goj1
else
gobottom
endif
thisform.init
messagebox('删除完毕',48,'操作成功!
')
thisform.refresh
endif
“退出”按钮(command4)的click事件:
thisform.release。
读者统计
功能要求:
根据按选择的统计类别,对读者信息进行分类统计。
如图下:
此图片里有一个选项按钮组(optiongroup1)里有两个按钮,分别是借书状态和全部显示。
按钮组里的”借书状态“按钮(option1)的click事件:
thisform.grid1.recordsourcetype=4
thisform.grid1.recordsource="sele借书状态,count(*)as人数from读者信息groupby借书状态intocursp1"
按钮组里的”全部显示“按钮(option2)的click事件:
thisform.grid1.recordsourcetype=4
thisform.grid1.recordsource="sele*from读者信息intocursp2"
还有”退出“按钮(command1)的click事件:
thisform.release
5、图书信息管理设计
图书查询:
功能要求:
从系统中检查出相关图书,实现图书的快速检索,查询,表单界面如图下:
Form1的load事件:
publica
a=0
Optingroup1的init事件:
this.value=0
Ojption1的click事件:
a=1
Option2的click事件:
a=2
Command1的click事件:
closeall
usedatabase\图书信息
bh=trim(thisform.text1.value)
docase
casea=1
browseforat(bh,书名)<>0
casea=2
browseforat(bh,作者)<>0
endcase
Use
Command2的click事件:
thisform.release
图书编辑:
功能要求:
图书管理人员向系统数据库中录入新图书和删除已丢失的图书。
表单界面如图下:
Form1的init事件:
thisform.text1.value=图书信息.书号
thisform.text2.value=图书信息.书名
thisform.text3.value=图书信息.作者
thisform.text4.value=图书信息.出版社
thisform.text5.value=图书信息.出版日期
thisform.text6.value=图书信息.价格
第一个按钮组包括第一个,上一个,下一个,最后一个,它们的代码和“用户管理”的代码是一样。
第二个按钮组里有四个,分别是添加,修改,删除,退出。
“添加”按钮(command1)的click事件:
ifalltrim(mand1.caption)='添加'
mand1.caption='保存'
mand2.caption='取消'
mand3.enabled=.f.
mand1.enabled=.t.
mand2.enabled=.t.
store''tothisform.text1.value,thisform.text2.value,thisform.text3.value,thisform.text4.value,thisform.text5.value,thisform.text6.value
thisform.text1.setfocus
else
mand1.caption='添加'
mand2.caption='修改'
mand3.enabled=.t.
a1=alltrim(thisform.text1.value)
a2=alltrim(thisform.text2.value)
a3=alltrim(thisform.text3.value)
a4=alltrim(thisform.text4.value)
a5=alltrim(thisform.text5.value)
a6=alltrim(thisform.text6.value)
select*from图书信息where书号==a1orderby书号intocursortt1
ifreccount()=0
insertinto图书信息values(a1,a2,a3,a4,a5,a6)
messagebox('数据保存完毕!
',48,'操作成功!
')
else
nAnswer=messagebox('信息已修改,确定要保存吗?
',4+32,"重要提示")
docase
casenAnswer=6
update图书信息set书号=a1,书名=a2,作者=a3,出版社=a4,出版日期=a5where书号==a1
messagebox('数据保存完毕!
',48,'操作成功!
')
endcase
endif
select图书信息
thisform.init
endif
“修改”按钮的代码和“用户管理”的代码一样
ifalltrim(mand2.caption)='修改'
mand1.caption='保存'
mand2.caption='取消'
mand3.enabled=.f.
thisform.text1.setfocus
else
mand1.caption='添加'
mand2.caption='修改'
mand3.enabled=.t.
thisform.init
endif
“删除”按钮(command3)的click事件:
j1=recno()
a1=alltrim(thisform.text1.value)
nAnswer=messagebox('确定要删除吗?
',4+32,"重要提示")
ifnAnswer=6
deletefrom图书信息where书号==a1
usedatabase\图书信息exclusive
pack
ifj1<=reccount()
goj1
else
gobottom
endif
thisform.init
messagebox('删除完毕',48,'操作成功!
')
thisform.refresh
Endif
“删除”按钮(command3)的click事件:
j1=recno()
a1=alltrim(thisform.text1.value)
nAnswer=messagebox('确定要删除吗?
',4+32,"重要提示")
ifnAnswer=6
deletefrom图书信息where书号==a1
usedatabase\图书信息exclusive
pack
ifj1<=reccount()
goj1
else
gobottom
endif
thisform.init
messagebox('删除完毕',48,'操作成功!
')
thisform.refresh
endif
“退出”按钮(command4)的click事件:
thisform.release。
图书统计:
功能要求,对图书信息来按分类进行统计,如图下:
选项按钮组的“读者情况”(option1)的click事件:
thisform.grid1.recordsourcetype=4
thisform.grid1.recordsource="select读者信息.读者证号,姓名,count(*)as借书数量from读者信息,借阅信息where读者信息.读者证号=借阅信息.读者证号groupby借阅信息.读者证号orderby借阅信息.读者证号intocursg1"
“出版社”按钮(option2)的click事件:
thisform.grid1.recordsourcetype=4
thisform.grid1.recordsource="select出版社,count(*)as数量from图书信息groupby出版社intocursg2"
“显示图书信息”按钮(option3)的click事件:
thisform.grid1.recordsourcetype=4
thisform.grid1.recordsource="select借阅信息.读者证号,读者信息.姓名,图书信息.书名,读者信息.当前借量from借阅信息,读者信息,图书信息where读者信息.读者证号=借阅信息.读者证号and图书信息.书号=借阅信息.书号orderby读者信息.读者证号intocursg3"
“退出”按钮(command1)的click事件:
thisform.release。
6、图书服务设计
图书归还:
功能要求:
图书管理人员能够方便的实现删除图书等记。
表单界面如图下:
“还书”按钮的click事件:
zh=trim(thisform.text1.value)
tm=trim(thisform.text2.value)
iflen(zh)>2
usedatabase\读者信息
locateforalltrim(读者证号)==zh
iffound()
num=当前借量-1
replace当前借量withnum
usedatabase\借阅信息
locateforalltrim(读者证号)==zhandalltrim(书号)==tm
iffound()
deleforalltrim(读者证号)==zhandalltrim(书号)==tm
pack
use
messagebox("还书成功!
")
else
messagebox("图书号输入错误,请重新输入!
")
thisform.text2.setfocus
return
endif
else
messagebox("读者证号错误,请重新输入!
")
thisform.text1.setfocus
return
endif
endif
图书借阅:
功能要求:
图书管理人员能够方便的实现图书借出登记。
表单界面如图下:
“借阅”按钮的click事件:
zh=trim(thisform.text1.value)
sh=trim(thisform.text2.value)
usedatabase\读者信息
iffound()
locateforalltrim(读者证号)==zh
ifreccount()=0
insertintodatabase\借阅信息values(zh,sh,date()+30)
messagebox("借阅成功!
")
return
else
messagebox("当前借量必须小于5")
return
endif
else
messagebox("借阅失败,请查看借书证号是否合法!
")
return
Endif
7、系统帮助功能
用户管理设计:
Form1的init事件:
thisform.text1.value=用户表.用户名称
thisform.text2.value=用户表.用户密码
thisform.list1.value=用户表.用户权限
第一个命令按钮组(commandgroup2)里有四个,分别是第一个,上一个,下一个,最后一个。
按钮组里的“第一个”按钮(command1)的click事件:
gotop
mand1.enabled=.f.
mand2.enabled=.f.
mand3.enabled=.t.
mand4.enabled=.t.
thisform.init
Thisform.refresh
按钮组里的“上一个”按钮(command2)的click事件:
skip-1
thisfor