【正文】
if len(session(user_name)=0 then //如果是非管理員 導(dǎo)向管理員登陸界面 end if 在進(jìn)入口令維護(hù)的主界面后,進(jìn)一步判斷是哪種權(quán)限的管理員,如果是普通管理員,則在顯示修改的用戶(hù)名稱(chēng)中只顯示當(dāng)前登錄的管理員的用戶(hù)名,且只讀狀態(tài),以此提醒用戶(hù),只能本人的密碼;如果管理員權(quán)限為最高,則顯示修改的用戶(hù)名稱(chēng)是可以選擇所有的管理員名稱(chēng)的: if session(“userclass”)=2 then //如果是最權(quán)限的管理員 以下拉框的形式顯示所有管理員名稱(chēng) else 僅顯示當(dāng)前登錄的管理員名稱(chēng) end if 在 界 面 中 的“ 刪 除管 理 員” 和 “ 注冊(cè) 管 理員 ” 的 按扭 也 只能 是session(“userclass”)=2 時(shí)才可用,否則設(shè)置它們的屬性為“ disabled” button name=”b1” if session(“userclass”)2 then%disabled %end if% 。程序流程圖如下: 第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 38 圖 管理員口令維護(hù)程序流程圖 (a) 圖 管理員口令維護(hù)程序流程圖 (b) 算法描述如下: 湖南師 范大學(xué)本科畢業(yè)論文 39 變量說(shuō)明: spwd //舊密碼 respwd //新密碼 renewspwd //確認(rèn)新密碼 username //用戶(hù)名 userpassword //數(shù)據(jù)表中的用戶(hù)密碼 這個(gè)模塊的所有操作本身只針對(duì)管理員開(kāi)放,而且不同身份的管理員限制不同程度的操作。$ //在當(dāng)前路徑中加入系統(tǒng)自定義的備份文名 , 即路徑 +數(shù)據(jù)庫(kù)名(此時(shí)為“ $1”) +“ .bak” end if end if bak_file = replace(bak_file,$1,databasename) //將“ $1”替換成當(dāng)前備份的數(shù)據(jù)庫(kù) act = 當(dāng)前的操作類(lèi)型(備份或恢復(fù)) if databasename = then //提示用戶(hù)“首先,請(qǐng)輸入要備份或恢 復(fù)的數(shù)據(jù)庫(kù)名稱(chēng)” else if act = backup then //如果當(dāng)前操作是備份 定義一個(gè) SQLDMO 對(duì)象 定義這個(gè)對(duì)象的鏈接和超時(shí)設(shè)定 定義 SQLDMO 中 Backup 屬性的對(duì)象 bak 利用 bak這個(gè)對(duì)象 ,進(jìn)一步定義其數(shù)據(jù)庫(kù) Database, Devices, Files 執(zhí)行 bak的 SQLBackup 事件 if 0 then //如果在執(zhí)行中發(fā)生錯(cuò)誤 第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 36 顯示系統(tǒng) 錯(cuò)誤信息 end if 如果未發(fā)生錯(cuò)誤 ,則顯示“備份成功 !” elseif act = restore then //如果當(dāng)前操作是恢復(fù) //恢復(fù)時(shí)要在沒(méi)有使用數(shù)據(jù)庫(kù)時(shí)進(jìn)行! 定義一個(gè) SQLDMO 對(duì)象 定義這個(gè)對(duì)象的鏈接和超時(shí)設(shè)定 定義 SQLDMO 中 restore 屬性的對(duì)象 rest 針對(duì) rest 對(duì)象,設(shè)置它的恢復(fù)屬性( database, device, files),另外設(shè)置它的 action 為 0,即全數(shù)據(jù)庫(kù)恢復(fù) =True //強(qiáng)調(diào)覆蓋已存在的數(shù)據(jù)庫(kù) srv //執(zhí)行 rest 的恢復(fù)事件 if 0 then //如果發(fā)生錯(cuò)誤 顯示系統(tǒng)錯(cuò)誤信息 end if 如果沒(méi)有發(fā)生錯(cuò)誤,則顯示恢復(fù)成功 ! else //如果既不是備份,也不恢復(fù) 提示用戶(hù)“沒(méi)有選擇操作” end if end if 管理員口令維護(hù)的具體實(shí)現(xiàn) 由于圖書(shū)管理 系統(tǒng)中的借書(shū)、還書(shū)還有備份、恢復(fù)等功能 ,都是只能由管理員來(lái)操作的 ,一般的用戶(hù),只能瀏覽網(wǎng)頁(yè)的前臺(tái)部分和進(jìn)行一些查詢(xún),所以系統(tǒng)中必須要有管理員權(quán)限方面的維護(hù),所以在這個(gè)管理員口令維護(hù)模塊中,如果是普通管理員,可以修改自己的密碼,如果是最高權(quán)限的管理員,則可以修改所有的管理員密碼,當(dāng)然也可以為注冊(cè)新的管理員和刪除管理員。如果沒(méi)有備份文件是不能進(jìn)行恢復(fù)的,恢復(fù)時(shí)一定要在數(shù)據(jù)庫(kù)沒(méi)有被使用時(shí)才能運(yùn)行。在本系統(tǒng)中,數(shù)據(jù)的備份與恢復(fù)只能是最高權(quán)限的管理員才能進(jìn)行的操作,備份的路徑由管理員指定,但是文件名由系統(tǒng)定義,備份是全數(shù)據(jù)庫(kù)的備份,文件名是數(shù)據(jù)庫(kù)名加“ .bak”的后綴,而且備份的文件是存儲(chǔ)在數(shù)據(jù)庫(kù)所在的機(jī)子上,而不是用戶(hù)隨機(jī)操作的機(jī)子上。 系統(tǒng)維護(hù)模塊的具體實(shí)現(xiàn) 在圖書(shū)管理這樣的系統(tǒng)中,基本上是對(duì)圖書(shū)資料的管理 ,因此圖書(shū)資料和讀者資料的正確性也就尤為重要,更不能丟失,所以我們?cè)谙到y(tǒng)中加入了數(shù)據(jù)據(jù)備份與恢復(fù)的功能。當(dāng)執(zhí)行查詢(xún)以后 ,判斷 value值是否為空,如果不為空,則把它的值放入 sqlstr,在翻頁(yè)的過(guò)程中傳遞的sqlstr 值便能始終會(huì)是最近查詢(xún)的值,這一點(diǎn)在 中也用到了。在查詢(xún)過(guò)程中,為了方便在轉(zhuǎn)頁(yè)時(shí)仍顯示的是當(dāng)前查詢(xún)的結(jié)果 ,而不是開(kāi)始顯示的記錄頁(yè)面,在程序員中用到了 value 這個(gè)變量來(lái)存儲(chǔ)當(dāng)前查詢(xún)的 SQL 語(yǔ)句。如果要取消掛失,則只要在首頁(yè)面查找要進(jìn)行取消的讀者信息,此時(shí)也會(huì)調(diào)用 ,進(jìn)入查找界面,查找完畢后,在主界面顯示出查找結(jié)果,然后點(diǎn)選要辦理取消的讀者,取消掛失。讀者可以通過(guò)像遺失書(shū)籍處理中一樣,點(diǎn)選需要掛失或需要 取消掛失的讀者信息,來(lái)完成操作。) end if 提交表單 end sub 表單提交 后: % readerno=獲得當(dāng)前的讀者證號(hào) if flag=set then //如果現(xiàn)在是掛失操作 varb=request(varb) 修改庫(kù)記錄 end if 第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 30 讀者證掛失處理的具體實(shí)現(xiàn) 因?yàn)橛凶x者證的辦理 ,所以讀者遺失讀者證也就必須有掛失處理,在本系統(tǒng)中讀者證的掛失也是異常處理的一個(gè)項(xiàng)目。 where book_no in (amp。amp。39。) else //如果現(xiàn)在就交費(fèi) //還掉該書(shū),并將書(shū)籍加上遺失標(biāo)志,借書(shū)者的借書(shū)信息中不再有此書(shū) : varb=update book_input set book_state=2,loaner=39。 where book_no in(amp。 sub //此段程序可以放在讀者證號(hào)查詢(xún)的單擊事件( sub) 第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 28 if readerno = then msgbox 請(qǐng)輸入讀者證號(hào)! exit sub end if end sub 表單提交后, 查詢(xún)當(dāng)前的讀者證號(hào) if 0 then 顯示讀者個(gè)人信息 查詢(xún)?cè)撟x者的借書(shū)信息 if 0 then 顯示所有借書(shū)記錄 size=當(dāng)前借書(shū)記錄數(shù) else 顯示沒(méi)有借書(shū)記錄 end if else 顯示 沒(méi)有相應(yīng)的讀者 顯示 沒(méi)有相應(yīng)的借書(shū)記錄 end if sub setlost(n) //此段程序是掛失的單擊事件 flag =set //當(dāng)前處于掛失狀態(tài) if n=0 then msgbox 沒(méi)有要掛失的書(shū)籍 ! exit sub end if 湖南師 范大學(xué)本科畢業(yè)論文 29 for i=1 to n loststr1=所有要掛失的記錄的書(shū)籍編號(hào) end if next if loststr1= then msgbox 請(qǐng)選擇要掛失的記錄 exit sub end if if 您確實(shí)要掛失這些記錄 then //提示遺失書(shū)籍要罰款,如果現(xiàn)在不交費(fèi) if msgbox(遺失書(shū)籍要以?xún)杀秵蝺r(jià)罰款 ,交費(fèi)否? ,1)1 then //僅更改當(dāng)前遺失書(shū)籍的狀態(tài)為“遺失”,并不為借書(shū)者還掉此書(shū), 以便能下次還書(shū)提醒交費(fèi) varb=update book_input set book_state=2,book_memo=39。239。 amp。具體 程序流程如下: 湖南師 范大學(xué)本科畢業(yè)論文 25 圖 遺失書(shū)籍處理程序流程圖 第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 26 算法描述如下: 首先當(dāng)然還是打開(kāi)數(shù)據(jù)庫(kù)連接: ! include file= 在驗(yàn)證了管理員身份后,可以進(jìn)行遺失處理了 //變量說(shuō)明 //flag 判斷當(dāng)前操作(取消遺失,辦理遺失,查詢(xún)) //n 當(dāng)前選擇的取消遺失書(shū)籍的記錄數(shù) //loststr 所有要取消遺失的書(shū)籍的圖書(shū)編號(hào) if flag =select_book //如果當(dāng)前操作為查詢(xún) 轉(zhuǎn)入查詢(xún)頁(yè)面 //查詢(xún)算法在前面已描述,不再重復(fù) if 查詢(xún)的條件不為空 then select * from book_input where book_state=39。這塊功能的實(shí)現(xiàn)總共由三個(gè)程序 共同來(lái)完成,分別為 , 。如果經(jīng)過(guò)查詢(xún),有借閱記錄,則在選擇要辦理遺失的書(shū)籍后(在每條借書(shū)記錄后有 checkbox 多選框),點(diǎn)擊“掛失“即可。 if 查詢(xún)記錄數(shù) 0 then for i=1 to 查詢(xún)記錄數(shù) //查找在還了當(dāng)前所要還的書(shū)以后是否還有過(guò)期未還的書(shū) if 當(dāng)前 借閱日期 60 then count=count+1 end if next if count=0 then 將當(dāng)前的還書(shū)者的狀態(tài) reader_state 還原為 0 end if else //如果已經(jīng)沒(méi)有要還的書(shū)籍 將當(dāng)前的還書(shū)者的狀態(tài) reader_state 還原為 0 end if end if 異常處理 在圖書(shū)管理系統(tǒng)中,讀者遺失書(shū)籍的狀況是極有可能發(fā)生的,所以系統(tǒng)一定要有相應(yīng)的處理措施,方便工作人員對(duì)書(shū)籍的管理。reader_noamp。 //再一次查找當(dāng)前還書(shū)者的所有借書(shū)情況 sqlstr3=select * from book_input where isloan=1 and 湖南師 范大學(xué)本科畢業(yè)論文 23 loaner=39。39。amp。當(dāng)查到該編號(hào)的圖書(shū) ,而且確實(shí)是未還圖書(shū) ,則將顯示還書(shū)者的讀者信息和所有他 (她 )的已借書(shū)目信息 .我們要實(shí)現(xiàn)的目標(biāo)是盡 可能方便能的操作和盡可能直觀的反潰 !所以我們采用輸入圖書(shū)編號(hào)來(lái)還書(shū)的同時(shí) ,查閱出借該書(shū)的讀者的所有借書(shū)記錄 ,只要點(diǎn)擊所列出的該讀者借書(shū)記錄中的某一條 ,就可以還這本書(shū) .還有一點(diǎn)是還書(shū)需要處理的,那就是續(xù)借,如果讀者想要續(xù)借,應(yīng)該很方便的進(jìn)行,與還書(shū)一樣,只要點(diǎn)擊要續(xù)借的書(shū)按“續(xù)借”即可,但是要考慮如果該書(shū)已過(guò)期,則不能續(xù)借。還書(shū)以后,也要即時(shí)的反潰當(dāng)前的借書(shū)狀況,以便讀者和工作人員知道“還書(shū)”是否操作成功。這里可以放在讀者證“查詢(xún)”的單擊事件中: sub readerno_onclick //讀者證“查詢(xún)”的單擊事件 if readerno= then //如果讀者證號(hào)為空,提示要求輸入 顯示 請(qǐng)輸入讀者證號(hào) ! 將光標(biāo)定位于讀者證號(hào)的輸入框 end if clickselect =1 //已查詢(xún)讀者信息 booknumber =0 //借閱書(shū)目初始化為 0 提交當(dāng)前表單的信息 end sub 查詢(xún)了讀者信息后,如果該讀者在數(shù)據(jù)庫(kù)中有記錄,而且已借書(shū)籍沒(méi)有超過(guò)去 3本,則可以借書(shū),如果沒(méi)有記錄,則屏蔽“借書(shū)”的功能,要求用戶(hù)輸入正第 3 章 圖書(shū)借閱管理系統(tǒng)的具體實(shí)現(xiàn) 16 確的讀者證號(hào): If readerno then 根據(jù) readerno 查詢(xún)讀者信息數(shù)據(jù)庫(kù) readerinformation if 查詢(xún)的記錄數(shù) =0 then 提示用戶(hù)“無(wú)相應(yīng)記錄”