【正文】
添加“圖書編號(hào)”列的“Text1”的DblClick事件代碼如下:(見附表)表單中的“借書”按鈕的作用是調(diào)用并向“輸入”表單傳遞兩個(gè)參數(shù),使“輸入”表單退出時(shí)向“讀者借書記錄”表單返回一值,然后單擊“借書”按鈕,在“圖書信息”(Book)數(shù)據(jù)表中查找“輸入”表單返回的數(shù)據(jù)值,如果沒有找到則彈出出錯(cuò)信息對(duì)話框,如果找到則判斷圖書的狀態(tài),如果沒有借出再判斷當(dāng)前讀者的已經(jīng)借出的圖書數(shù)目(系統(tǒng)中設(shè)為7本),如果借出將該。 重新顯示表單上各對(duì)象的數(shù)據(jù)SET EXACT OFF當(dāng)在表單中的選項(xiàng)按鈕組中選擇的“已借出”按鈕時(shí)雙擊表格控件中某條記錄的“圖書編號(hào)”列就可以還書,所以還需添加“圖書編號(hào)”列的DblClick事件代碼。 回到原記錄 ENDIFENDIF() amp。 表示找不到時(shí) MESSAGEBOX(無此學(xué)號(hào),16,信息窗口) GO amp。表示有輸入學(xué)號(hào) SELECT Student LOCATE FOR 學(xué)號(hào)=StuNO IF NOT FOUND() amp。改為精確比較IF StuNO amp。調(diào)用輸入表單SET EXACT ON amp。將記錄編號(hào)儲(chǔ)存DO FORM Input WITH 輸入學(xué)號(hào),999999 TO StuNO amp。添加“...”(Cmddown)按鈕的Click事件代碼如下: SELECT StudentSET FILTER TO= RECNO() amp。這其中用另外一種在兩個(gè)表單中傳遞參數(shù)的方法。當(dāng)用戶單擊“已借出”按鈕時(shí),表單中只是顯示當(dāng)前讀者的未歸還的圖書的列表。在進(jìn)入表單時(shí),要顯示全局變量“StudentNO”傳遞過來的學(xué)號(hào)的學(xué)生的借書記錄,而且表單設(shè)定進(jìn)入時(shí)顯示已經(jīng)借出的圖書的列表。設(shè)置好表格控件后在表單中添加1個(gè)標(biāo)簽控件、1個(gè)按鈕控件、1個(gè)選項(xiàng)按鈕組控件、1個(gè)命令按鈕組控件。調(diào)整列的排列順序,然后再打開“表格生成器”,應(yīng)用其中的某一種樣式即可將表格中的所有列應(yīng)用VFP提供的某一種樣式,達(dá)到風(fēng)格的統(tǒng)一。首先利用“表格生成器”將“讀者借書記錄”數(shù)據(jù)表中除了“學(xué)號(hào)”外的3個(gè)字段添加到表格控件中,并在“表格生成器”的“關(guān)系”選項(xiàng)卡中,將在“父表中的關(guān)鍵字段”下拉列表中選擇“”。利用“表格生成器”時(shí)要注意,用“表格生成器”生成的表格控件中只能出現(xiàn)一個(gè)數(shù)據(jù)表中數(shù)據(jù),而本表單中的表格控件要求出現(xiàn)兩個(gè)表中數(shù)據(jù),所以在經(jīng)過“表格控件”生成后還要采用手工的方式向表格控件中添加列?!白x者借書記錄”(JyRec)。用“系別信息”(Xibie)數(shù)據(jù)表的“系編號(hào)”字段和“學(xué)生信息”(Student)數(shù)據(jù)表的“系別”索引建立關(guān)系;用“學(xué)生信息”(Student)數(shù)據(jù)表的“學(xué)號(hào)”字段和“讀者借書記錄”(JyRec)數(shù)據(jù)表的“學(xué)號(hào)”索引建立關(guān)系;用“讀者借書記錄”(JyRec) 數(shù)據(jù)表的“圖書編號(hào)”和“圖書信息”(Book) 數(shù)據(jù)表“圖書編號(hào)”索引建立關(guān)系。 創(chuàng)建主表單界面在“表單設(shè)計(jì)器”中創(chuàng)建一個(gè)表單作為“讀者借書記錄”表單 , 命名為“JyRec”,創(chuàng)建好的表單效果如下圖所示。單擊“排行”按鈕可以查看系統(tǒng)中借出次數(shù)最多的 10 本書的列表。另外,當(dāng)表單中的表格控件中顯示的是當(dāng)前讀者的“已借出”圖書記錄時(shí),可以通過雙擊列表中的某本書的“圖書編號(hào)”欄來快速還書。單擊“借書”按鈕,可以調(diào)用“輸入”表單用來輸入要借的圖書編號(hào),如果該圖書在庫中 , 而且當(dāng)前讀者所借的圖書的數(shù)目沒有到達(dá)規(guī)定的數(shù)目(這里設(shè)定為7本),則借書成功,否則借書失敗。 主表單的功能“讀者借書記錄”表單首先用來顯示讀者借書的情況,可以顯示讀者當(dāng)前已經(jīng)借出并且尚未歸還的圖書的記錄,還可以顯示讀者所有的借書記錄。添加“打印”(Cmdpri)按鈕的Click事件代碼如下: IF DbfName=StuDbf IF =1 REPORT FORM StuInfo FOR 學(xué)號(hào)=StuNO PREVIEW ELSE REPORT FORM StuInfo PREVIEW ENDIFELSE IF =1 REPORT FORM BookInfo FOR 圖書編號(hào)=BookNO PREVIEW ELSE REPORT FORM BookInfo PREVIEW ENDIFENDIF() “退出”(CmdExt)按鈕的作用是退出當(dāng)前表單,其Click事件代碼如下:()至此,系統(tǒng)主表單已經(jīng)創(chuàng)建完成。該表單比較簡(jiǎn)單,僅由1個(gè)選項(xiàng)按鈕控件和2個(gè)按鈕控件組成。彈出來供用戶選擇是打印全部記錄還是只打印當(dāng)前記錄,用戶選擇后單擊“打印”按鈕可以用預(yù)覽的方式查看打印結(jié)果。BookTJ PREVIEW表單中“退出”按鈕的作用是彈出確認(rèn)對(duì)話框,如果確認(rèn)則退出當(dāng)前表單并且將在表單初始化時(shí)設(shè)置的過慮條件取消。表單中“打印”按鈕的作用是將表單中查詢結(jié)果以報(bào)表的形式輸出,并且以瀏覽的方式查看打印結(jié)果。表格控件可以使用“表格控件生成器”采用可視化的方法生成一個(gè)表格控件。創(chuàng)建好的表單效果如右圖所示。ENDIF()DO FORM BookSerout “退出”(Cmdext)按鈕的作用是退出當(dāng)前表單,其Click事件代碼如下:()(2) 創(chuàng)建“圖書信息查詢結(jié)果”表單“圖書信息查詢結(jié)果”表單用來顯示“圖書信息”數(shù)據(jù)表中符合查詢條件的記錄。如果出版社欄非空 BookTJ=BookTJ+AND 圖書作者=39。ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果圖書作者欄非空 BookTJ=BookTJ+AND 圖書作者=39。ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果圖書名稱欄非空 BookTJ=BookTJ+AND 圖書名稱=39。ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果圖書編號(hào)欄非空 BookTJ=BookTJ+AND 圖書編號(hào)=39?!安樵儭保–mdSer)按鈕的Click事件代碼如下: BookTJ=.T.IF NOT EMPTY(ALLTRIM()) amp。表單的屬性以及控件的屬性與“學(xué)生信息”頁面的查詢模塊中的“輸入查詢條件”表單基本相同,這里不再重復(fù)介紹。在“表單設(shè)計(jì)器”中創(chuàng)建一個(gè)表單作為“輸入查詢條件”表單,命名為“BookSer”,創(chuàng)建好的表單效果如右圖所示?!巴顺觥保–mdExt)按鈕的Click事件代碼如下: YN=MESSAGEBOX(確定退出,4+32,考勤系統(tǒng)信息)IF YN=6 SELECT Student SET FILTER TO ()ENDIF 創(chuàng)建“書籍信息”頁面查詢功能 “書籍信息”頁面的查詢功能由“輸入查詢條件”表單和“圖書信息查詢結(jié)果”表單組成。添加“打印”(Cmdpri)按鈕的Click事件代碼如下:REPORT FORM StuInfo FORamp。StuTJCOUNT FOR amp。表格的屬性與“輸入查詢添加”的表單屬性大體相同,這里不再重復(fù)列舉。在表單中添加1個(gè)標(biāo)簽控件、1個(gè)表格控件和2個(gè)按鈕控件。創(chuàng)建好的表單效果如右圖所示。$地址ENDIF()DO FORM StuSerout “退出”(Cmdext)按鈕的作用是退出當(dāng)前表單,其Click事件代碼如下:()(2) 創(chuàng)建“學(xué)生信息查詢結(jié)果”表單“學(xué)生信息查詢結(jié)果”表單用來顯示“學(xué)生信息”數(shù)據(jù)表中符合查詢條件的記錄。如果地址欄非空 StuTJ=StuTJ+AND+39。$郵件ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果郵件欄非空 StuTJ=StuTJ+AND+39。$姓名ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果姓名欄非空 StuTJ=StuTJ+AND+39。$學(xué)號(hào)ENDIFIF NOT EMPTY(ALLTRIM()) amp。如果學(xué)號(hào)欄非空 StuTJ=39?!安樵儭保–mdSer)按鈕的Click事件代碼如下: StuTJ=.T.IF NOT EMPTY(ALLTRIM()) amp。在表單中添加4個(gè)標(biāo)簽控件、4個(gè)文本框控件和2個(gè)按鈕控件。在“表單設(shè)計(jì)器”中創(chuàng)建一個(gè)表單作為“輸入查詢條件”表單,命名為“StuSer”。下面介紹這兩個(gè)表單的創(chuàng)建過程?!巴顺觥保–mdexit)按鈕的Click事件代碼如下: YN=MESSAGEBOX(確定退出,4+32,圖書管理系統(tǒng))IF YN=6 () CLEAR QUITENDIF 創(chuàng)建系統(tǒng)主表單輔助表單系統(tǒng)主表單的輔助表單主要包括“學(xué)生信息”頁面和“圖書信息”頁面的查詢功能和一個(gè)“選擇打印類型”表單。“取消”(CmdCancel)按鈕的Click事件代碼如下:YN=MESSAGEBOX(確定取消,4+32,系統(tǒng)消息)IF YN=6 TABLEREVERT(.F.) IF =cadd GO ENDIF =cbrowse () =.T. ()ENDIF “命令按鈕工具欄”中“打印”(Cmdpri)按鈕的作用是將全局變量“DbfName”賦值,并調(diào)用“選擇打印類型”表單。amp。amp。amp。amp。amp。amp。amp。amp。amp。amp。amp。amp。amp。“刪除成功”對(duì)話框 SET EXACT OFF () ENDIFENDIF “命令按鈕工具欄”中“查詢”(CmdSer)按鈕的作用是調(diào)用“輸入查詢條件”表單,該按鈕的Click事件代碼如下:DO FORM BookSer“命令按鈕工具欄”中“保存”(CmdSave)按鈕的作用是在單擊按鈕時(shí),檢查頁面中數(shù)據(jù)的輸入情況,如果無誤則保存數(shù)據(jù),并彈出“保存成功”對(duì)話框,否則指出錯(cuò)誤,并將光標(biāo)定位在錯(cuò)誤處,等待用戶修改。刪除圖書記錄 GO DELETE PACK MESSAGEBOX(刪除成功,64,圖書管理系統(tǒng))amp。刪除所有與要?jiǎng)h除的圖書有關(guān)的記錄 IF 圖書編號(hào)=ALLTRIM() DELETE PACK ENDIF SKIP ENDDO SELECT Book amp。到數(shù)據(jù)表的頂部 DO WHILE NOT EOF() amp。精確比較 GO TOP amp。對(duì)圖書借閱記錄表進(jìn)行修改 SET EXACT ON amp。如果在庫中 SELECT JyRec amp。不能刪除 ELSE amp。如果該圖書不在庫中 MESSAGEBOX(該圖書尚未歸還,48,圖書管理系統(tǒng)) amp。保存記錄號(hào) IF =借出中 amp。如果確認(rèn) =RECNO() amp。確認(rèn)對(duì)話框IF YN=6 amp?!皠h除”(Cmddel)按鈕的Click事件代碼如下: YN=MESSAGEBOX(確定刪除,4+32,圖書管理系統(tǒng)) amp。添加“...”(Cmdrq)按鈕的Click事件代碼如下:=.T. “命令按鈕工具欄”中“增加”(Cmdadd)按鈕的作用是保存頁面中數(shù)據(jù)記錄的指針位置,將頁面的狀態(tài)標(biāo)記為新增狀態(tài),再在表單事件緩沖區(qū)內(nèi)新建一條記錄,并使頁面進(jìn)入非瀏覽狀態(tài)。“借還書”(Cmdjh)按鈕的Click事件代碼如下:StudentNO=ALLTRIM()DO FORM JyRec 添加“書籍信息”頁面代碼在“書籍信息”(BookPage)頁面被激活時(shí),表單中的當(dāng)前數(shù)據(jù)工作期應(yīng)該變?yōu)椤皥D書信息”數(shù)據(jù)表所在的工作期,將可能由其他表單對(duì)該數(shù)據(jù)表設(shè)置的過慮條件去掉,同時(shí)要使該頁面進(jìn)入瀏覽狀態(tài)?!按蛴 保–mdPri)按鈕的Click事件代碼如下:DbfName=”StuDbf”DO FORM PrintLX“命令按鈕工具欄”中“退出”(Cmdexit)按鈕的作用是彈出確認(rèn)對(duì)話框,如果確認(rèn)則是退出當(dāng)前表單,清除事件循環(huán)并退出系統(tǒng)。如果保存成功 MESSAGEBOX(保存成功,64,圖書管理系統(tǒng)) () IF =cmod GO ELSE =.T. ENDIF ENDIF