thisform.dataenvironment.cursor3.filter='借书证编号='+\
thisform.dataenvironment.cursor4.filter='借书证编号='+\this.value+\归还日期=0' thisform.refresh
(3)“图书类型选择”组合的属性:
Rowsource属性——typer.图书类别
(4)显示姓名的文本框:
Controlsource——reader.读者姓名
(5)显示电话号码的文本:
Controlsource——reader.电话号码
(6)表单上半部分的表格对象,由表格对象生成器生成即可,该表格对象以booker.dbf表为数据源。
(7) 表单下半部分的表格对象,由表格对象生成器生成即可,该表格对象以brower.dbf表为数据源。
(8)“借书”按钮的click事件代码如下:
if booker.图书编号=trim(thisform.combo2.value)
replace booker.在库数量 with booker.在库数量-1 endif
if used(\select brower go bottom append blank endif
if booker.图书编号=trim(thisform.combo2.value) replace brower.图书编号 with booker.图书编号 replace brower.借阅日期 with data() endif
if used(\select reader
replace brower.借书证编号 with reader.借书证编号 endif
thisform.refresh return
3) 还书登记表单的设计:
该表单共涉及reader.dbf,brower.dbf和booker.dbf等三个数据表,当用户在借书证编号的组合框内选择一个借书证编号后,系统会自动在后面的文本框中现实与该编号对应的读者姓名和联系电话,并在表格对象中显示该读者尚未归还的书,然后由用户在表格中用鼠标选择其要归还的书,选中后单击“还书”按钮。
有关对象的属性及代码说明如下:
(1)数据环境。该数据环境包含三个表,数据环境中cursor对象与表的对应关系是:
Cursor1——reader.dbf
Cursor2——brower.dbf Cursor3——booker.dbf
- 6 -
(2)“借书证编号”组合框的属性和事件代码: Rowsource属性——reader.借书证编号
Gotfocus事件代码:
Thisform.dataenvironment.cursor1.filter=\thisform.refresh
Interactivechange代码:
thisform.dataenvironment.cursor1.filter='借书证编号='+\
thisform.dataenvironment.cursor2.filter='借书证编号='+\归还日期=0' thisform.refresh
(3)读者姓名文本框属性。 Control属性——reader.读者姓名 Enable属性——.F.
4)读者电话文本框属性。 Control属性——reader.电话号码 Enable属性——.F.
(5)表格对象。表格对象由表格生成器生成,数据源为brower. Dbf表,并在生成后表格的列对象的enabled属性设为.F. (6)“还书”按钮的click事件代码: tdbf=alias()
select(thisform.dataenvironment.cursor2.alias) replace 归还日期 with data()
select(thisform.dataenvironment.cursor3.alias) replace 在库数量 with 在库数量+1 select &tdbf thisform.refresh return
4)“图书入库与报废”表单的设计:
该表单左上角的“图书编号”文本框供用户输入要登记入库和要报废的图书编号,后面的册数文本框输入对应的或报废的图书册数,如果所输入的图书编号是一个booker.dbf表中已存在的编号(这表示是进行图书报废登记),下面的表格对象中会显示该图书的其他信息,反之,表示一种新书要入库登记,实质是要将这种图书信息添加到booker.dbf数据表中。 对表单中有关对象的属性与代码说明如下: (1) 数据环境。表单中只包含一个booker.dbf表。
(2) “图书编号”与“册数”文本框。Name属性分别为text1和text2。 (3) 表格对象,由表格生成器生成。
(4)“新书入库登记”按钮click事件代码: thisform.dataenvironment.cursor1.filter='图书编号='+\if eof()
append blank
replace 图书编号 with thisform.text.value thisform.refresh
- 7 -
thisform.grid1.column1.enable=.t. thisform.grid1.column2.enable=.t. thisform.grid1.column3.enable=.t. thisform.grid1.column4.enable=.t. thisform.grid1.column5.enable=.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
(5)“图书报废登记”按钮的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 3、“催还图书通知”报表设计:
“催还图书通知”报表的设计过程说明如下:
报表数据源 brower.vue视图,该视图已在前面做了说明。 报表分组条件 reader.读者姓名 报表排序条件 reader.借书证编号
该报表由向导程序生成,其后进行了一些格式美化的调整修改工作,关键问题是要先定义好作为数据源的试图文件。
六、总结:
任何一个社会组织和企业公司在发展过程中都会产生大量的数据,这些数据的组织存储、分析统计有利于提高企业的发展,有利于提高企业的效率。这些数据的组织和存储就是数据模型,就是数据库应用系统开发的任务。
数据库应用系统开发的过程一般包括可行性研究、需求分析、系统设计、程序编码、程序调试和系统维护六个阶段。根据数据库应用系统的复杂程度,不一定完全刻板地遵守上述步骤,但是,可行性研究、需求分析、系统设计、程序编码、程序调试是不可缺少的。
本次课程设计制作了一个简单的图书馆管理系统,实现了一些图书管理和借阅功能,但与实际系统还是有很大差别的。首先是对应用情况做了简单的理想化处理,因而难以反映实际工作中可能遇到的实际问题;其次,未考虑用户操作中可能出现的错误的处理,而实际上这种错误的处理程序可能占应用系统的很大一部分。如本系统在需求分析和程序健全性方面均存在一些问题,为了解决这些不
- 8 -
完善之处,需要在今后的进一步学习中,逐步深入,不断积累经验,不但提高。
- 9 -