【正文】
碼如下:Dim conn1 As New OleDbConnection(Provider=。 ())Dim s As Strings = Dim dli As DataListItem = (0)If = True And = True Then time = 星期一上午1,2節(jié) Call binddata() = 是 = False Dim strsql1 As String strsql1 = update time12 set monday=39。 where testroom=39。 s amp。 Dim cmd1 As New OleDbCommand(strsql1, conn1) () () ()End If要把預(yù)約信息寫到數(shù)據(jù)庫中的是實驗預(yù)約表中,則要對Datalist控件中的每個單選框進行判定,是否是選中,則同樣要對每個單選框進行重新定義。程序中要修改time12表中的信息,從數(shù)據(jù)庫中查詢實驗室為實驗室下拉列表框選定的項的記錄,將其星期一的字段內(nèi)容改為“是”,用到update語句進行更新。程序中也調(diào)用到了binddata()子程序,其代碼如下:Dim sname, tname, tplace, labname As Stringsname = tname = Session(usename)tplace = labname = labname amp。Data Source= amp。 amp。 39。 amp。 39。 amp。 39。 amp。 39。 amp。 39。 教師查詢頁面教師查詢頁面會顯示所有登陸教師已預(yù)約的有關(guān)信息。將數(shù)據(jù)對象綁定DataGrid控件后,它就會根據(jù)其中的字段自動產(chǎn)生每一列。在此讓其自動生成每一列。圖43 教師查詢頁面在Page_Load事件中主要代碼如下:Dim conn As New OleDbConnection(Provider=。 ())Dim adp As New OleDbDataAdapter(select * from classinformation where teacher=”’ amp。 ’”, conn)Dim ds As New DataSet()(ds, link) = (link).DefaultView()首先利用Connection對象建立和數(shù)據(jù)庫的連接,然后建立Command對象,執(zhí)行查詢語句命令“select * from classinformation where teacher=”’ amp。 ’””,利用登陸界面中session對象保存的用戶名,從數(shù)據(jù)庫實驗室項目表classinformation中查詢teacher字段為登陸名的記錄,把其賦值給DataGrid的數(shù)據(jù)源。語句“ = (link).DefaultView”是將DataSet對象的link表的默認(rèn)視圖綁定到DataGrid控件。此段程序中和前面的有關(guān)數(shù)據(jù)庫的操作不太一樣,它不需要明確打開和關(guān)閉數(shù)據(jù)庫連接,因為DataAdapter對象會自動打開和關(guān)閉數(shù)據(jù)庫鏈接。需要注意的是,學(xué)生登陸時用戶名為班級,密碼為一個班級所共用。其運行界面如圖44所示。Data source= amp。 amp。 39。 session(username) amp。 學(xué)生密碼修改該頁面的設(shè)計是為了方便用戶進行密碼修改而設(shè)計的。其運行界面如圖45所示。在此界面中也用到了一部分驗證控件如RequireFieldValidator必填控件和CompareValidator比較控件,分別綁定密碼框和新密碼、確認(rèn)密碼框。對于比較驗證控件,一般用于將一個控件的值和另一個控件的值進行比較,在此處是為了保證用戶輸入的新密碼和確認(rèn)密碼一致。頁面中確認(rèn)按鈕的部分代碼如下:If = True Thens = s()Dim dr As OleDbDataReader = ()If Then Call modify() Else = 舊密碼不正確,請重新輸入 () End IfEnd If首先要聲明一個全局變量s,用它來作為鑒別身份的標(biāo)志,令其等于“s”,表明是學(xué)生。如果頁面通過驗證,建立Connection對象,連接數(shù)據(jù)庫,建立Command對象,利用“select * from admin where account=39。 Session(usename) amp。 and mima=39。 amp。 and type=39。 s amp。”從數(shù)據(jù)庫用戶表中查詢符合信息的用戶,并調(diào)用子程序進行對其密碼更新。modify()子程序也是需要首先連接數(shù)據(jù)庫,然后書寫SQL語句“update [admin] set mima=39。 amp。where account=39。 amp?!?建立Command,();();()語句進行更新操作。界面運行出來時,要讓用戶名文本框自動為登陸時的用戶名,并且為灰色不可用,則需要在Page_Load事件中輸入以下代碼: = Session(usename) = False當(dāng)用戶單擊“退出重新登陸系統(tǒng)”菜單時,頁面會跳轉(zhuǎn)到登陸界面。因為用戶信息修改與實驗信息修改相似,比較簡單,但實驗信息的修改要保持和預(yù)約表的同步,所以在此介紹實驗信息修改。但是如果要刪除就要保持和預(yù)約表的信息同步,即如果要刪除某一條記錄,則要對其預(yù)約時間對應(yīng)的預(yù)約表內(nèi)的一個字段進行改寫,把其已預(yù)約狀態(tài)改為沒有預(yù)約的狀態(tài),要實現(xiàn)兩個表的同步。 圖46 實驗信息修改頁面首先界面運行時要把實驗信息表綁定到DataGrid控件上。在Page_Load事件中進行綁定,代碼如下:If Not Then Call binddata()End If程序Page_Load事件中“If Not Then”語句相當(dāng)于“If =False Then”,表示如果沒有提交頁面就調(diào)用數(shù)據(jù)綁定子程序。其中binddata()是被調(diào)用的子過程,對DataGrid控件進行綁定。其代碼如下:Dim conn As New OleDbConnection(Provider=。 ())Dim adp As New OleDbDataAdapter(select * from classinformation, conn)Dim ds As New DataSet()(ds, link) = (link).DefaultView()binddata()子程序中用到了DataSet對象來存儲信息,DataSet對象好比內(nèi)存中虛擬的數(shù)據(jù)庫,當(dāng)建立DataSet對象后,此時就和原有的數(shù)據(jù)庫斷開了,操作的只是內(nèi)存中的數(shù)據(jù)庫。其部分代碼如下:Dim txtclassname, txttestname, txttime, txtplace, txtteacher As TextBoxtxtclassname = (3).Controls(0)txttestname = (4).Controls(0)txttime = (5).Controls(0)txtplace = (6).Controls(0)txtteacher = (7).Controls(0)Dim strsql As Stringstrsql = update classinformation set classname=39。 amp。,testname=39。 amp。,appointtime=39。 amp。,place=39。 amp。,teacher=39。 amp。where id= amp。然后用Update語句去更新數(shù)據(jù)庫中相應(yīng)的記錄,打開數(shù)據(jù)庫,執(zhí)行三條語句“();();()”對數(shù)據(jù)庫進行更新操作。其中程序中的CInt()會返回選定的行號,然后將行號賦值給DataGrid控件的EditItemIndex屬性。這里需要注意的是獲取文本框的語句txtclassname = (3).Controls(0);;(3)會返回當(dāng)前的第3列對應(yīng)的單元格的對象;(3).Controls(0)就會返回該單元格中的第0個子控件,也就是班級名稱classname對應(yīng)的文本框控件。前面預(yù)約界面中的Datalist控件中的單選框也是一樣,所以每次引用其值時都要重新定義。DataGrid控件刪除時,其主要代碼如下:Dim conn As New OleDbConnection(Provider=。 ())str1 = select * from classinformation where id= amp。 (CInt())Dim cmd As New OleDbCommand(strsql, conn) () () () = 1 Call binddata()調(diào)用了delete()函數(shù),是為了保持實驗信息表和預(yù)約表的同步,其主要代碼如下:If = 星期一上午1,2節(jié) Thenstr = update time12 set monday=39。where testroom=39。 amp。Dim cmd1 As New OleDbCommand(str, conn)() () ()End If對于刪除的記錄的預(yù)約時間。因為代碼類似,在此不再贅述。至于DataGrid控件的OnCancelCommand事件過程MyDataGrid_Cancel則比較簡單,只要令DataGrid控件的EditItemIndex屬性為1,然后重新綁定數(shù)據(jù),就可取消操作。軟件界面直觀,功能相對完善,基本上實現(xiàn)了預(yù)約系統(tǒng)所要求的功能。一些模塊只是簡單實現(xiàn)了其功能,并沒有深入。另外,雖然前臺界面直觀,但系統(tǒng)程序中的代碼較多,造成許多的冗余代碼,造成了系統(tǒng)程序的可讀性比較差,但是前臺卻很直觀,有利于用戶的使用。在以后的系統(tǒng)完善中,還要根據(jù)工作的實際需求再添加相應(yīng)的功能模塊,并實現(xiàn)對一些錯誤信息的合法處理,完成一個完整的實用的實驗室預(yù)約系統(tǒng)。姬老師以一絲不茍的敬業(yè)精神,在我畢業(yè)設(shè)計的過程中給予了我很大幫助。另外,也感謝學(xué)校給我提供了良好的學(xué)習(xí)環(huán)境和實踐機會。在此,我還要感謝和我一起度過三年大學(xué)生活的室友們。隨著畢業(yè)論文寫作的完成,我的大學(xué)生活也即將結(jié)