ANDDATE()-Brower.ghrq=0;
ORDERBYReader.dzbh
3.总体模块设计
该系统的全部功能由一个主控界面(两个表单),一个表单以及相关的四个表单组成,其总体总体模块框图如图所示:
总体框图
四.模块设计
1.主控界面表单设计
图书馆管理信息系统的主界面由“动画欢迎表单”和“主控表单”组成,主控表单上安排六个命令按钮,分别实现总体框图中的五部分功能和退出系统模块。
每个命令按钮触发的结果均执行一条命令,运行一个表单,或者启动一个报表文件运行,或者退回到Visualfoxpro系统状态。
主控表单设计代码如下:
“借书证管理”按钮的click事件代码:
doform借书证管理.scx
“借书登记”按钮的click事件代码:
doform借书登记.scx
“还书登记”按钮的click事件代码:
doform还书登记.scx
“图书入库与报废”按钮的click事件代码:
doform图书入库与报废.scx
“催还通知书”按钮的click事件代码:
reportform催还通知书.frxpreview
“退出系统”按钮的click事件代码:
Releasethisform
Closeall
Quit
2.其他表单的设计
(1)借书证表单设计
这个表单的数据源是reader.dbf表,在其支持下完成用户所要进行的图书证发放和退回工作,其运行界面如下图所示。
用户从“借书证编号”文本框中输入一个借书证编号,如果该借书证在reader.dbf表中已经存在,系统会在下面表格对象中显示与之对应的读者情况,否则显示为空。
但单击“办理借书证”按钮后,系统会在变个对象中添加一行空记录,等待用户输入新读者资料,并自动把办证日期赋值为系统当前日期,用户退出表单时系统将新数据存入与表单对应的reader.dbf表中;当用户单击“退还借书证”按钮后,系统把当前日期赋值给换证日期字段,表示该读者已归还借书证。
与表单相对应的各种对象的属性值及事件代码说明如下:
(1)“借书证编号”文本框的属性和事件代码:
Name属性——text1
Fomat属性——‘*******’
Interactivechange事件代码:
thisform.dataenvironment.cursor1.filter='dzbh='+"'"+trim(this.value)+"'"
thisform.refresh
return
lostfocus事件代码:
thisform.dataenvironment.cursor1.filter='dzbh='+"'"+trim(this.value)+"'"
thisform.refresh
return
(2)办理借书证按钮的click事件代码:
appendblank
replacedzbhwiththisform.text1.value,bzrqwithdate()
thisform.dataenvironment.cursor1.filter='dzbh='+"'"+;
trim(thisform.text1.value)+"'"
thisform.refresh
return
(3)“退还借书证”
thisform.grid1.column7.text1.value=date()
return
(4)“退出”按钮click事件代码:
Closeall
Thisform.release
其他表单的“退出”按钮的代码都完全相同,后面不再进行说明。
3.借书证表单的设计
这个表单是整个系统的一个主要表单,共涉及到reader.dbf,book.dbf,brower.dbf,typer.dbf等四个表,其运行界面如下图所示,用户在左上角的组合框对象中选择“借书证编号”,文本框中“读者姓名”与“电话号码”是系统自动显示的。
在“选择图书类型”组合框中选择要借阅的图书类型,表单中上面的表格显示图书的库存信息,在单击“借阅”按钮后,系统自动进行借阅登记(同种类图书每次只能借一本),表单下半部分的表格中显示该读者现在未归还的图书及借阅日期。
借书按钮的click代码:
ifbooker.tsbh=trim(bo2.value)
replacebooker.zkswithbooker.zks-1
endif
ifused("brower")
selectbrower
gobottom
appendblank
endif
ifbooker.tsbh=trim(bo2.value)
replacebrower.tsbhwithbooker.tsbh
replacebrower.jyrqwithdate()
endif
ifused("reader")
selectreader
replacebrower.dzbhwithreader.dzbh
endif
thisform.refresh
return
退出的按钮的click代码:
releasethisform
4.还书登记表单的设计:
还书登记表单的运行界面如图所示,该表单共涉及reader.dbf,brower.dbf和book.dbf等三个数据表,当用户在借书证编号的组合框中选择一个借书证编号后,系统自动在后面的文本框中显示与该编号对应的读者姓名和联系方式,并在表格中显示该读者尚未归还的图书,然后由用户在表格中用鼠标选择要归还的图书,选中后单击“还书”按钮。
程序进行两项工作,其一,将系统日期赋值给brower.dbf表的当前记录的对应字段,表示其已于当日归还所借图书;其二,在book.dbf表中修改与所还图书对应的“在库数zks字段”的数量。
还书的click事件代码:
tdbf=alias()
select(thisform.dataenvironment.cursor2.alias)
replaceghrqwithdate()
select(thisform.dataenvironment.cursor3.alias)
replacezkswithzks+1
select&tdbf
thisform.refresh
return
退出按钮的click事件代码:
selectoperating
locateforoperating.操作员姓名=alltrim(operating.操作员姓名)
ifalltrim(thisform.text1.value)=alltrim(operating.口令)
ifthisform.text2.value=thisform.text3.value
replaceoperating.口令withthisform.text2.value
releasethisform
else
messagebox("口令不一致!
")
thisform.text2.setfocus()
endif
else
messagebox("原口令错误!
")
thisform.text1.setfocus()
endif
5.图书的入库与报废表单设计:
该表单的运行界面如上图所示,左上角的“借书编号”文本框供用户输入要登记入库或报废的图书编号,后面的册数文本框输入对应的入库或报废的图书册数,如果所输入的图书编号是一个booker.dbf表中存在的图书编号(这表示是进行图书报废登记),下面的表格中显示该图书的其他信息。
反之,表示是一种新书要进行入库登记,实质是将这种图书信息添加到booker.dbf数据表中。
“新书入库登记”按钮的click事件:
thisform.dataenvironment.cursor1.filter='tsbh='+"'"+trim(thisform.text1.value)+"'"
ifeof()
appendblank
replacetsbhwiththisform.text1.value
thisform.refresh
thisform.grid1.column1.enabled=.t.
thisform.grid1.column2.enabled=.t.
thisform.grid1.column3.enabled=.t.
thisform.grid1.column4.enabled=.t.
thisform.grid1.column5.enabled=.t.
endif
thisform.grid1.column8.text1.value=thisform.grid1.column8.text1.value+val(thisform.text2.value)
thisform.grid1.column9.text1.value=thisform.grid1.column9.text1.value+val(thisform.text2.value)
thisform.refresh
return
“图书报废登记”按钮的click事件代码:
thisform.grid1.column8.text1.value=thisform.grid1.column8.text1.value-val(thisform.text2.value)
thisform.grid1.column9.text1.value=thisform.grid1.column9.text1.value-val(thisform.text2.value)
thisform.refresh
return
6.密码设定表单的设计:
“确认”按钮的click事件代码:
selectoperating
locateforoperating.操作员姓名=alltrim(operating.操作员姓名)
Ifalltrim(thisform.text1.value)=alltrim(operating.口令)
ifthisform.text2.value=thisform.text3.value
replaceoperating.口令withthisform.text2.value
releasethisform
else
messagebox("口令不一致!
")
thisform.text2.setfocus()
endif
else
messagebox("原口令错误!
")
thisform.text1.setfocus()
endif
“退出”按钮事件代码:
Releasethisform
7.系统日志表单的设计:
“清除”按钮的click事件代码:
selectlog
zap
thisform.grid1.recordsource="log"
thisform.refresh
“退出”按钮的click事件的代码:
Releasethisform
“zhu”程序代码:
CLEAR&&清屏
CLEARALL&&从内存中释放所有的内存变量
CLOSEALL&&关闭各种类型的文件
SETESCAPEOFF&&禁止运行的程序和命令在按Esc键后被中断
SETSAFETYOFF&&指定在改写已有文件时不显示对话框
SETDELETEON&&使用范围子句处理记录的命令忽略标有删除标记的记录
SETSYSMENUOFF&&在程序执行期间废止VisualFoxPro主菜单栏
RELEASEWINDOW"常用"&&关闭常用工具栏
SETCENTURYON&&年份以四位显示
SETDATETOymd&&日期格式为年、月、日
SETMARKTO"-"&&指定日期分隔字符
SETHOURSTO24&&指定为24-小时时间格式
DOFORM.\动画欢迎表单.scx&&调用登录界面表单
OnShutDowndoOnShutdown&&退出系统时调用函数onshutdown()
READEVENTS&&建立事件循环
OnShutDown&&释放当前的OnShutDown命令
*按菜单的“关闭”按钮退出时,出现的提示框
FUNCTIONOnShutdown()
sel=MESSAGEBOX("真的要退出吗?
",4+32+256,"提示")
IFsel=6
SELECT0
USELOG
GOBOTTOM
REPLACE离开时间WITHDATETIME()&&退出系统时记录操作员退出时间
CLOSEALL
CLEAREVENTS&&退出事件循环
QUIT&&结束当前VisualFoxPro工作期,并将控制权返回给操作系统
ENDIF
ENDFUNC
五实验总结
通过这次实验,我们主要充分的使用数据库,表单,等各种控件,特别是报表,使系统变得更为实用.同时自己也加入了很多的图片,这使得我的系统有锦上添花的效果。
如:
登陆界面的设计,同时也使字体设为动态的等.
实验做了很长时间,第一次我做的超市管理系统总是连编后有错误,不能很好的运行,后来也解决了,但是showwindow的顶层表单设置总是不合适。
后来我就只有做了图书管理系统,做的不完善,但是系统工作正常。
学习我们应该学会大家相互讨论的学习方法,不能闭门造车,不能一个人一直研究,那样学习效率太低。
大家讨论学习学到的东西就会更多,解决问题的方法也就多,做事效率也就高。
通过本系统我们能够基本的进行图书的管理,虽然本系统做的不够完美,但是通过做本系统确实收获不少,同时懂得了系统维护的重要性。
通过以后的学习能够做的更加完善。