圖書管理系統(tǒng)設(shè)計教程_第1頁
圖書管理系統(tǒng)設(shè)計教程_第2頁
圖書管理系統(tǒng)設(shè)計教程_第3頁
圖書管理系統(tǒng)設(shè)計教程_第4頁
圖書管理系統(tǒng)設(shè)計教程_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、(1) 可以實現(xiàn)圖書的登記、借閱和賠償?shù)墓芾怼?2) 可以實現(xiàn)對圖書的各種信息的查詢,包括逐個瀏覽,以及對圖書信息的增加、刪除 和編輯操作。另外,可以根據(jù)輸入的信息來檢索某個圖書的信息。(3) 可以實現(xiàn)對管理人員的投訴管理。(4) 可以實現(xiàn)對值班人員的管理。系統(tǒng)的功能模塊圖如圖1所示。本實例根據(jù)上面的設(shè)計規(guī)劃出的實體有圖書登記實體、圖書借閱實體、圖書賠償實體、 查詢輸出實體、值班管理實體、投訴管理實體。各個實體具體的描述E-R圖如下。圖書登記實體E-R圖如圖2所示。圖書借閱實體E-R圖如圖3所示。圖1系統(tǒng)的功能模塊圖圖2圖書登記實體E-R圖圖3圖書借閱實體E-R圖圖書賠償實體E-R圖如圖4所示

2、。圖4圖書賠償實體E-R圖投訴管理實體E-R圖如圖5所示。值班管理實體E-R圖如圖6所示。圖6值班管理實體 E-R圖查詢輸出實體E-R圖如圖7所示。圖7查詢輸出實體E-R圖、結(jié)構(gòu)設(shè)計根據(jù)上面的需求分析,設(shè)計好數(shù)據(jù)庫系統(tǒng),然后開發(fā)應(yīng)用程序可以考慮的窗體的系統(tǒng), 每一個窗體實現(xiàn)不同的功能,可以設(shè)計下面的幾個模塊。圖書管理模塊:用來實現(xiàn)圖書的登記、借閱、賠償。圖書資料模塊:用來實現(xiàn)圖書的查詢輸出。值班管理模塊:用來實現(xiàn)管理人員的值班瀏覽。投訴管理模塊:用來實現(xiàn)對管理人員的投訴管理。系統(tǒng)管理模塊:用來實現(xiàn)用戶的增加、刪除和修改等操作。三、數(shù)據(jù)庫設(shè)計這里的數(shù)據(jù)庫采用 Access,用ADO作為連接數(shù)據(jù)對

3、象。1、建立 Access 數(shù)據(jù)庫啟動Access,建立一個空的數(shù)據(jù)庫book.mdb,如圖8所示。使用程序設(shè)計器建立系統(tǒng)需要的表格如下。圖書登記表,如圖9所示。圖8建立數(shù)據(jù)庫book.mdb 圖9圖書登記表圖書借閱表,如圖10所示。圖書賠償表,如圖11所示。圖10圖書借閱表 圖11圖書賠償表圖書資料表,如圖12所示。系統(tǒng)管理表,如圖13所示。Ikrax* WEuw-smstw uwx* ««n 髯曲畧字若r:Ihi f t4a> 1E+圖12圖書資料表圖13系統(tǒng)管理表投訴管理表,如圖14所示。fMMt*.- »-盂T* hilvM*JEX 豈壽tfrit

4、好 fHM« "曹A啊0 ItW*>V9nua WirtA-BT4H.電j r*Ai- K4:噩圖14投訴管理表值班管理表,如圖15所示。圖15值班管理表2、連接數(shù)據(jù)在Visual Basic環(huán)境下,選擇 工程”宀“用"命令,在隨后出現(xiàn)的對話框中選擇“MicrosoftActiveX Data Objects 2.0 Library,然后單擊 確定"按鈕,如圖16所示。圖16引用ADO連接數(shù)據(jù)庫在程序設(shè)計的公共模塊中,先定義 ADO連接對象。語句如下Public conn As New ADODB.Co nn ection '標記連接對象然

5、后在子程序中,用如下的語句即可打開數(shù)據(jù)庫:Dim conn ecti on stri ng As Stringconnection stri ng = "provider=Microsoft.Jet.oledb.4.0;" &_"data source=book.mdb"conn. Ope n connection stri ng3、設(shè)置ODBCVB的ADO對象是通過 ODBC來訪問數(shù)據(jù)庫,所以還要建立ODBC數(shù)據(jù)引擎接口。打開控制面板中的 管理工具”-數(shù)據(jù)源” (ODBC),出現(xiàn)如圖17所示的對話框。 'O&iK徽嶽漫計慣番盼戶

6、陽r|號愷切 文皆也|淞網(wǎng)月q 朋虛甘 壬竽1,l 1 '' 'I J fp*t 5nrc,i圖17 ODBC對話框單擊 添加”按鈕,出現(xiàn) 創(chuàng)建新數(shù)據(jù)源”對話框,如圖18所示。圖18創(chuàng)建新數(shù)據(jù)源”寸話框選擇Microsoft Access Driver(*.mdb),單擊 完成"按鈕,出現(xiàn)如圖19所示對話框。圖19設(shè)置連接數(shù)據(jù)源在數(shù)據(jù)源名”文本框中添加一個名字,單擊確定”按鈕完成系統(tǒng)默認連接設(shè)置。然后在ODBC對話框中單擊確定”按鈕完成ODBC設(shè)置。界面設(shè)計設(shè)計好的界面如圖20所示。圖20圖書管理系統(tǒng)界面這是一個多文檔界面(MDI)應(yīng)用程序,可以同時顯示多個文

7、檔,每個文檔顯示在各自的窗體中。MDI應(yīng)用程序中常有包含子菜單的窗體”選項,用于在窗體或文檔之間進行切換。菜單應(yīng)用程序中,有 5個菜單選項,每個選項對應(yīng)著E-R圖的一個子項目。1、創(chuàng)建主窗體首先創(chuàng)建一個工程,命名為圖書管理系統(tǒng),選擇 工程”-添加MDI窗體”命令,則在項目中添加了主窗體。該窗體的一些屬性如表1所示。表1主窗體的屬性屬性值Caption系統(tǒng)管理圖書NameMainMenuMainmenulWindowstateMaxsizeWindowstate的值為Maxsize,即程序啟動之后自動最大化。將菜單”組件從 工具箱”拖到窗體上。創(chuàng)建一個Text屬性設(shè)置為 文件”的頂級菜單項,且?guī)?/p>

8、有名為 關(guān)閉”的子菜單項。類似地創(chuàng)建一些菜單項,如表2所示。表2菜單項表菜單名稱Text屬性功能描述MenuItem1圖書管理頂級菜單,包含子菜單MenuItem2圖書登記調(diào)岀圖書登記窗體Menultem3圖書借閱調(diào)岀圖書借閱窗體Menultem4圖書賠償調(diào)岀圖書賠償窗體MenuItem5圖書資料頂級菜單,包含子菜單MenuItem6查詢輸岀調(diào)岀查詢輸岀窗體MenuItem7值班管理頂級菜單,沒有子菜單MenuItem8投訴管理頂級菜單,沒有子菜單MenuItem9系統(tǒng)管理頂級菜單,包含子菜單MenuItem10增加用戶調(diào)岀用戶窗體MenuItem11修改密碼調(diào)岀密碼窗體MenuItem12退

9、出系統(tǒng)退岀主窗體如圖21所示。圖21主窗體2、創(chuàng)建各子窗體選擇工程” t添加窗體”命令,添加子窗體。在新建Visual Basic工程時自帶的窗體中,將其屬性MIDChild改成True,則這個窗體成為MID窗體的子窗體。在這個項目中,要創(chuàng)建的子窗體如表3所示。表3所有子窗體圖書登記圖書借閱圖書賠償 增加新用戶 查詢輸岀 登錄系統(tǒng) 修改密碼frmdengji frmjieyue frmpeichang frmadduser frmfind frmlogin frmchangepwd下面分別給出這些子窗體,以及它們所使用的控件。(1)圖書登記子窗體如圖 22所示,其控件如表 4所示。圖22圖書登

10、記子窗體表4圖書登記子窗體控件控件類別控件Name控件TextLabel1編號Label2書名LabelLabel3類型Label4購買日期Label5定價Text1(空)Text2(空)TextBoxText3(空)Text4(空)Text5(空)CommandButtonCommand1增加記錄子窗體名TextCommand2刪除記錄Command3下一條Command4上一條Command5第一條Command6最后一條Command7退出ADODataAdodcl(空)DataGridDataGridl(空)圖書借閱和圖書賠償子窗體分別如圖23和圖24所示,因為它們的控件與圖書登記子窗

11、體的雷同,在此不作介紹。圖23圖書借閱子窗體圖24圖書賠償子窗體(2)增加用戶子窗體如圖 25所示,其控件如表 5所示。圖25增加用戶子窗體表5增加用戶子窗體控件控件類別控件NameLabel1Label2控件Text輸入用戶名輸入密碼LabelLabel3確認密碼Label4選擇權(quán)限Text1(空)TextBoxText2(空)Text3(空)ComboBoxComb1(空)Commandl確定CommandButtonCommand2取消(3) 修改密碼子窗體如圖 26所示。圖26修改密碼子窗體庫房管理子窗體如圖 27所示。逼岀厚* I' IfwEll*i a a u 圖27庫房管

12、理子窗體 其控件如表6所示。表6庫房管理子窗體控件TextBoxComboBoxMSFIexGrid控件NameTextlCombolMSFIexGridl控件Text(空)逼岀厚逼岀厚(4) 查詢子窗體如圖28所示,其控件如表 7所示。圖28查詢子窗體逼岀厚逼岀厚(1) 可以實現(xiàn)圖書的登記、借閱和賠償?shù)墓芾怼?2)可以實現(xiàn)對圖書的各種信息的查詢,包括逐個瀏覽,以及對圖書信息的表7查詢子窗體控件(6)用戶登錄子窗體如圖(7)值班管理子窗體如圖29所示。30所示,其控件如表8所示??丶悇e控件Name控件TextOptionButtonOption1按編號查詢Option2按購買日期查詢Labe

13、l1從Label2到Label3從Label4年LabelLabel5月Label6日Label7到Label8年Label9月Label10日Combo(O) ComboBoxCombo1(空)Combo(1) ComboBoxCombo1(空)Comboy(O) ComboBoxComboy(空)Comboy(1) ComboBoxComboy(空)Combom(0) ComboBoxCombom(空)Combom(1) ComboBoxCombom(空)Combod(0) ComboBoxCombod(空)Combod(1) ComboBoxCombod(空)CommandButtonC

14、ommand1查詢Command2取消圖29用戶登錄子窗體圖30值班管理子窗體(8)投訴管理子窗體如圖 31所示,其控件如表 9所示。i:匚呂期豪匸*LiT|mt咚tHMMVln圖31投訴管理子窗體建立公共模塊1、顯示目錄建立公共模塊可以提高代碼的效率,同時使得修改和維護代碼都很方便。創(chuàng)建公共模塊的步驟如下:(1) 在菜單中選擇 工程” t添加模塊”命令,則出現(xiàn)模塊對話框,如圖32所示。(2) 選擇模塊圖標后,單擊 打開”按鈕,則模塊已經(jīng)添加到項目中了。默認情況下名為Modulel。圖32模塊對話框(3) 在模塊中定義整個項目的公共變量。Public conn As New ADODB.Co

15、nn ection '標記連接對象Public userID As Stri ng '標記當前用戶IDPublic userpow As String '標記用戶權(quán)限Public find As Boolean '標記杳詢Public sqlfi nd As Stri ng '查詢語句Public rs_data1 As New ADODB.RecordsetPublic fin dok As Boolea nPublic frmdata As Boolea nPublic Con st keye nter = 13 ' en ter鍵的 ASC

16、II 碼在主窗體添加完菜單之后,就要為各個子菜單創(chuàng)建事件處理程序。主窗體代碼在本項目中,子菜單事件都是Click事件,這里先給出主窗體部分的代碼。下面是響應(yīng) 增加用戶”子菜單Click事件,調(diào)出增加用戶窗體代碼。Private Sub adduser_Click()frmadduser.ShowEnd Sub下面是響應(yīng) 查詢輸出”子菜單Click事件,調(diào)出查詢輸出窗體代碼。Private Sub chax un shuchu_Click()frmfi nd.ShowEnd Sub下面是響應(yīng) 退出”子菜單Click事件,調(diào)出退出窗體代碼。Private Sub exit_Click()Un lo

17、ad MeEnd SubF面是響應(yīng) 圖書登記”子菜單Click事件,調(diào)出圖書登記窗體代碼。Private Sub checkin_Click()frmde ngji.ShowEnd Sub下面是響應(yīng) 修改密碼"子菜單Click事件,調(diào)出修改密碼窗體代碼。Private Sub cha ngepwd_Click()frmcha ngepwd.ShowEnd Sub下面是響應(yīng) 圖書借閱”子菜單Click事件,調(diào)出圖書借閱窗體代碼。Private Sub borrow_Click()frmjieyue.ShowEnd Sub下面是響應(yīng) 圖書賠償”子菜單Click事件,調(diào)出圖書賠償窗體代碼。

18、Private Sub tushupeicha ng_Click()frmpeicha ng.Show 1End Sub下面是響應(yīng) 值班管理”菜單Click事件,調(diào)出值班管理窗體代碼。Private Sub zhiba ngua nli_Click()frmzhiba n. Show 1End Sub下面是響應(yīng) 投訴管理”子菜單Click事件,調(diào)出投訴管理窗體代碼。Private Sub tousugua nli_Click()frmtousu.Show 1End Sub2、各子窗體的代碼在各個子窗體建立好后,就可以根據(jù)各個子窗體的功能給它們添加相應(yīng)代碼了。(1) 圖書登記子窗體代碼MDI本窗

19、體用來填寫圖書登記的信息,用ADO來連接數(shù)據(jù)庫,是本窗體的重點。采用的子程序,所以運行后,它出現(xiàn)在主程序的界面下,如圖33所示。圖33圖書登記子窗體按鈕控件要求先填寫基本信息,然后與數(shù)據(jù)庫信息比較。Private Sub Command1_Click()On Error GoTo adderrText1.SetFocusAdodc1.Recordset.AddNewExit Subadderr:MsgBox Err.DescriptionEnd SubPrivate Sub Command2_Click()On Error GoTo deleteerrWith Adodc1.Recordset

20、If Not .EOF And Not .BOF ThenIf MsgBox(" 刪除當前記錄嗎 ?", vbYesNo + vbQuestion) = vbYes Then.Delete.MoveNextIf .EOF Then .MoveLastEnd IfEnd IfEnd WithExit Subdeleteerr:MsgBox Err.DescriptionEnd SubPrivate Sub Command3_Click()Adodc1.Recordset.MoveNextIf Adodc1.Recordset.EOF ThenMsgBox " 這是最

21、后一條記錄 ", vbOKCancel + vbQuestionAdodc1.Recordset.MoveLastEnd IfEnd SubPrivate Sub Command4_Click()Adodc1.Recordset.MovePreviousIf Adodc1.Recordset.BOF ThenMsgBox " 這是第一條記錄 ", vbOKCancel + vbQuestionAdodc1.Recordset.MoveFirstEnd IfEnd SubPrivate Sub Command5_Click()If Adodc1.Recordset.

22、EOF ThenMsgBox " 記錄空 ", vbOKCancel + vbQuestionEndElseAdodc1.Recordset.MoveFirstExit SubEnd SubPrivate Sub Comma nd6_Click()If Adodc1.Recordset.RecordCou nt = 0 The nMsgBox "空記錄", vbOKCancel + vbQuestionEndElseAdodc1.Recordset.MoveLastEnd IfEnd SubPrivate Sub Comma nd7_Click()MDI

23、Form1.Show frmde ngji.HideEnd Sub圖書借閱和圖書賠償子窗體運行后如圖體的代碼雷同,在此不做重復(fù)。圖34圖書借閱子窗體運行效果34和圖35所示,因為它們的代碼和圖書登記子窗圖35圖書賠償子窗體運行效果(2) 增加用戶子窗體代碼增加用戶子窗體是用來增加用戶的用戶名、密碼和權(quán)限的。其運行效果如圖36所示。單擊 確定”按鈕后,還要返回一個信息框,提示成功信息,如圖 37所示。圖36增加用戶子窗體運行效果圖37成功信息框窗體部分代碼的思路是, 收集輸入的表中的字符串, 然后與數(shù)據(jù)庫中的系統(tǒng)的用戶數(shù)據(jù) 比較,如果不存在,則允許添加。Private Sub Comma nd1

24、_Click()Dim sql As Stri ngDim rs_add As New ADODB.RecordsetIf Trim(Text1.Text) = "" The nMsgBox "用戶名不能為空", vbOKOnly + vbExclamation,""Exit SubText1.SetFocusElsesql = "select * from 系統(tǒng)管理 "rs_add.Open sql, conn, adOpenKeyset, adLockPessimisticWhile (rs_add.EOF =

25、 False)If Trim(rs_add.Fields(0) = Trim(T ext1.Text) ThenMsgBox " 已有這個用戶 ", vbOKOnly + vbExclamation, ""Text1.SetFocusText1.Text = ""Text2.Text = ""Text3.Text = ""Combo1.Text = ""Exit SubElsers_add.MoveNextEnd IfWendIf Trim(Text2.Text) <&

26、gt; Trim(T ext3.Text) ThenMsgBox " 兩次密碼不一致 ", vbOKOnly + vbExclamation, ""Text2.SetFocusText2.Text = ""Text3.Text = ""Exit SubElseIf Trim(Combo1.T ext) <> "system" And Trim(Combo1.Text) <> "guest" ThenMsgBox " 請選擇正確的用戶權(quán)限 &q

27、uot;, vbOKOnly + vbExclamation, ""Combo1.SetFocusCombo1.Text = ""Exit SubElsers_add.AddNewrs_add.Fields(0) = Text1.Textrs_add.Fields(1) = Text2.Textrs_add.Fields(2) = Combo1.Textrs_add.Updaters_add.Close 面是返回成功信息對話框的代碼 :MsgBox " 添加用戶成功 ", vbOKOnly + vbExclamation, "

28、;"Unload MeEnd IfEnd IfEnd Sub(3) 修改密碼子窗體代碼38 所示。修改密碼子窗體是用來修改用戶密碼的。其運行效果如圖圖38修改密碼子窗體運行效果在確定”按鈕的Click事件中添加如下代碼:Private Sub Comma nd1_Click()Dim rs_cha ng As New ADODB.RecordsetDim sql As Stri ngIf Trim(Text1.Text) <> Trim(T ext2.Text) ThenMsgBox "密碼不一致!", vbOKOnly + vbExclamation

29、,""Text1.SetFocusText1.Text =""Text2.Text =""Elsesql = "select * from系統(tǒng)管理 where 用戶名="'& userID & ""'rs_chang.Open sql, conn, adOpenKeyset, adLockPessimisticrs_cha ng.Fields(l) = Textl.Textrs_cha ng.Updaters_cha ng.CloseMsgBox "密碼

30、修改成功", vbOKOnly + vbExclamation,""Un load MeEnd IfEnd SubE7-39提示修改成功rs_cha ng.Fields(l)"密碼修改成功", vbOKOnly + 39所示。在上述代碼中,首先比較兩個表中的數(shù)據(jù)是否一致,然后用Textl.Text語句把代碼輸入到數(shù)據(jù)庫中。最后,用MsgBoxvbExclamation ,""語句彈出一個信息框,告訴修改成功,如圖顯示目錄(4) 庫房管理子窗體代碼庫房管理子窗體是用來管理圖書資料的。其運行效果如圖40所示。圖40庫房管理子窗體

31、實際上,設(shè)計庫房管理子窗體的程序代碼與增加用戶子窗體的代碼在思路上是完全相同的。就是在DataGrid的文本框中顯示圖書進出的清單,最后把填寫的明細存儲到數(shù)據(jù)庫中。檢查代碼如下:Opti on ExplicitDim rs_data2 As New ADODB.RecordsetDim select_row As StringDim showgrid2 As BooleanDim rs_custom As New ADODB.RecordsetDim jinchu As String ' 進出庫標志Dim modify As Boolean ' 修改狀態(tài)標志Private Su

32、b cmdexit_Click()Unload MeEnd SubPrivate Sub Form_Load()On Error GoTo loaderrorDim sql As Stringsql = "select * from 圖書資料 "rs_custom.CursorLocation = adUseClientrs_custom.Open sql, conn, adOpenKeyset, adLockPessimisticWhile Not rs_custom.EOFCombo1.AddItem rs_custom.Fields(0)rs_custom.MoveN

33、extWendfindok = Truemodify = False ' 非修改狀態(tài)showgrid2 = Falsedisplaygrid1 ' 調(diào)用顯示 Datagrid1 子程序loaderror:If Err.Number <> 0 ThenMsgBox Err.DescriptionEnd IfEnd Sub'顯示 msflexgrid1 子程序Public Sub displaygrid1()Dim i As IntegerOn Error GoTo displayerrorsetgridsetgridheadMSFlexGrid1.Row =

34、0If Not rs_data1.EOF Then rs_data1.MoveFirstDo While Not rs_data1.EOFMSFlexGrid1.Row = MSFlexGrid1.Row + 1MSFlexGrid1.Col = 0If Not IsNull(rs_data1.Fields(0) Then MSFlexGrid1.Text = rs_data1.Fields(0) ElseMSFlexGrid1.T ext = ""MSFlexGrid1.Col = 1If Not IsNull(rs_data1.Fields(1) Then MSFlex

35、Grid1.Text = rs_data1.Fields(1) Else MSFlexGrid1.T ext = ""MSFlexGrid1.Col = 2If Not IsNull(rs_data1.Fields(2) Then MSFlexGrid1.Text = rs_data1.Fields(2) ElseMSFlexGrid1.T ext = ""MSFlexGrid1.Col = 3If Not IsNull(rs_data1.Fields(3) Then MSFlexGrid1.Text = rs_data1.Fields(3) ElseM

36、SFlexGrid1.T ext = ""MSFlexGrid1.Col = 4If Not IsNull(rs_data1.Fields(4) Then MSFlexGrid1.Text = rs_data1.Fields(4) ElseMSFlexGrid1.T ext = ""MSFlexGrid1.Col = 5If Not IsNull(rs_data1.Fields(5) Then MSFlexGrid1.Text = rs_data1.Fields(5) ElseMSFlexGrid1.T ext = ""rs_data

37、1.MoveNextLoopEnd Ifdisplayerror:If Err.Number <> 0 ThenMsgBox Err.DescriptionEnd IfEnd SubPublic Sub setgrid()Dim i As IntegerOn Error GoTo seterrorWith MSFlexGrid1.ScrollBars = flexScrollBarBoth.FixedCols = 0.Rows = rs_data1.RecordCount + 1.Cols = 6.SelectionMode = flexSelectionByRowFor i =

38、0 To .Rows - 1.RowHeight(i) = 315NextFor i = 0 To .Cols - 1.ColWidth(i) = 1300Next iEnd WithExit Subseterror:MsgBox Err.DescriptionEnd SubPublic Sub setgridhead()On Error GoTo setheaderrorMSFlexGrid1.Row = 0MSFlexGrid1.Col = 0MSFlexGrid1.T ext = " 編號 "MSFlexGrid1.Col = 1MSFlexGrid1.T ext =

39、 " 購買日期 "MSFlexGrid1.Col = 2MSFlexGrid1.T ext = " 書名 "MSFlexGrid1.Col = 3MSFlexGrid1.T ext = " 類型 "MSFlexGrid1.Col = 4MSFlexGrid1.T ext = " 定價 "MSFlexGrid1.Col = 5MSFlexGrid1.T ext = " 備注 "Exit Subsetheaderror:MsgBox Err.DescriptionEnd SubPrivate Sub

40、 Form_Unload(Cancel As Integer) findok = Falsers_data1.Closers_custom.CloseEnd SubPrivate Sub MSFlexGrid1_Click()On Error GoTo griderrorDim getrow As Longgetrow = MSFlexGrid1.RowIf MSFlexGrid1.Rows = 1 ThenMsgBox " 無相關(guān)記錄 ", vbOKOnly + vbExclamation, ""Elseselect_row = MSFlexGrid1

41、.TextMatrix(getrow, 0)End Ifgriderror:If Err.Number <> 0 ThenMsgBox Err.DescriptionEnd IfEnd SubPublic Sub showdata()With MSFlexGrid2.Rows = rs_data2.RecordCount + 1.Row = 0If Not rs_data2.EOF Thenrs_data2.MoveFirstDo While Not rs_data2.EOF.Row = .Row + 1.Col = 0If Not IsNull(rs_data2.Fields(0

42、) Then .Text = rs_data2.Fields(0) Else .Text = "".Col = 1If Not IsNull(rs_data2.Fields(1) Then .Text = rs_data2.Fields(1) Else .Text = "".Col = 2If Not IsNull(rs_data2.Fields(2) Then .Text = rs_data2.Fields(2) Else .Text.Col = 3If Not IsNull(rs_data2.Fields(3) Then .Text = rs_dat

43、a2.Fields(3) Else .Text.Col = 4If Not IsNull(rs_data2.Fields(4) And CDbl(rs_data2.Fields(4) < 0 Then .Text = -CDbl(rs_data2.Fields(4)Else.Text = rs_data2.Fields(4)End If.Col = 5If Not IsNull(rs_data2.Fields(5) Then .Text = rs_data2.Fields(5) Else .Text.Col = 6If Not IsNull(rs_data2.Fields(6) Then

44、 .Text = rs_data2.Fields(6) Else .Text.Col = 7If Not IsNull(rs_data2.Fields(7) And CDbl(rs_data2.Fields(4) < 0 Then .Text = -CDbl(rs_data2.Fields(7)Else.Text = rs_data2.Fields(7)IlliIlliIlliIlliEnd If.Col = #If Not lsNull(rs_data2.Fields(8) The n .Text = rs_data2.Fields(8) Else .Text =""

45、;rs_data2.MoveNextLooprs_data2.MoveLastEnd IfEnd WithEnd Sub5)查詢子窗體代碼查詢子窗體是用來查詢庫房中圖書資料明細的。其運行效果如圖41所示。圖41查詢子窗體運行效果在列表框中給出編號或年月日后, 結(jié)果。查詢”按鈕的Click事件將給出與數(shù)據(jù)庫查找比較的Private Sub Comma nd1_Click()On Error GoTo cmderrorDim fin d_date1 As Stri ngDim fin d_date2 As Stri ngIf Optio n1.Value = True Thensqlfi nd =

46、 "select * from圖書資料 where 編號 between '" &Combo1(0).T ext & "”' & " and " & "”' & Combo1(1).Text & "”'End IfIf Option2.Value = True Thenfind_date1 = Format(CDate(Comboy(0).Text & "-" & _Combom(0).Text & &

47、quot;-" & Combod(0).T ext), "yyyy-mm-dd")find_date2 = Format(CDate(Comboy(1).Text & "-" & _Combom(1).Text & "-" & Combod(1).T ext), "yyyy-mm-dd")sqlfind = "select * from 圖書資料 where 購買日期 between #" & _ find_date1 & &qu

48、ot;#" & " and" & " #" & find_date2 & "#"End Ifrs_data1.Open sqlfind, conn, adOpenKeyset, adLockPessimisticfrmdatamanage.displaygrid1Unload Mecmderror:If Err.Number <> 0 ThenMsgBox Err.DescriptionEnd IfEnd Sub運行查詢子窗體時,組合框中就已經(jīng)從數(shù)據(jù)庫中提取了貨單號和年月日兩個待查

49、條件。Dim i As IntegerDim sql As StringIf findok = True Then rs_data1.CloseEnd Ifsql = "select * from 圖書資料 order by 編號 desc" rs_find.CursorLocation = adUseClient rs_find.Open sql, conn, adOpenKeyset, adLockPessimistic If rs_find.EOF = False Then ' 添加編號With rs_findDo While Not .EOFCombo1(0

50、).AddItem .Fields(0)Combo1(1).AddItem .Fields(0).MoveNextLoopEnd WithEnd IfFor i = 2001 To 2005 ' 添加年Comboy(0).AddItem iComboy(1).AddItem iNext iFor i = 1 To 12 ' 添加月Combom(0).AddItem iCombom(1).AddItem iNext iFor i = 1 To 31 ' 添加日Combod(0).Addltem iCombod(1).Addltem iNext iEnd Sub查詢完畢后,

51、輸出查詢結(jié)果,如圖42所示。圖42查詢結(jié)果(6)用戶登錄子窗體代碼運行的用戶登錄子窗體如圖43所示。圖43運行的用戶登錄子窗體在本項目中,用戶登錄子窗體是運行的第一個界面,它的作用是檢查用戶名和密碼是否正確。由于用戶的資料是存放在數(shù)據(jù)庫中,所以在啟動該子窗體時,就已經(jīng)連接了數(shù)據(jù)庫。 其代碼如下:Private Sub Form_Load()Dim conn ecti on stri ng As Stringconnectionstring = "provider=Microsoft.Jet.oledb.4.0;" & _"data source=book.

52、mdb"conn.Open connectionstringcnt = 0End Sub“確定 ”按鈕的作用是檢查輸入的數(shù)據(jù)是否與數(shù)據(jù)庫中的數(shù)據(jù)一致。Private Sub Command1_Click()Dim sql As StringDim rs_login As New ADODB.RecordsetIf Trim(txtuser.Text) = "" Then ' 判斷輸入的用戶名是否為空MsgBox " 沒有這個用戶 ", vbOKOnly + vbExclamation, ""txtuser.SetFo

53、cusElsesql = "select * from 系統(tǒng)管理 where 用戶名 ='" & txtuser.Text & "'" rs_login.Open sql, conn, adOpenKeyset, adLockPessimisticIf rs_login.EOF = True ThenMsgBox " 沒有這個用戶 ", vbOKOnly + vbExclamation, "" txtuser.SetFocusElse ' 檢驗密碼是否正確 用戶名和密碼通過后

54、,要關(guān)閉本窗體并打開主窗體。If Trim(rs_login.Fields(1) = Trim(txtpwd.Text) ThenuserID = txtuser.Textuserpow = rs_login.Fields(2)Unload MeMDIForm1.ShowElseMsgBox " 密碼不正確 ", vbOKOnly + vbExclamation, ""txtpwd.SetFocusEnd IfEnd IfEnd If' 只能輸入 3 次cnt = cnt + 1If cnt = 3 ThenUnload MeEnd IfExit

55、 SubEnd Sub運行的值班管理子窗體如圖(7) 值班管理子窗體代碼值班管理子窗體的作用是把值班人員的時間安排形成列表。44 所示。5唏京博圖44運行的值班管理子窗體先定義連接數(shù)據(jù)庫的變量:Opti on ExplicitDim rs_zhiba n As New ADODB.Recordset然后列出窗體部分的代碼。Private Sub cmdadd_Click()On Error GoTo adderrorIf cmdadd.Caption = ” 新增記錄” Then '當此按鈕的狀態(tài)為為增加記錄"時cmdadd.Caption = ” 確定”'按鈕名稱改

56、 確定”cmddel.E nabled = FalseDataGrid1.AllowAddNew = TrueDataGrid1.AllowUpdate = True ' 設(shè)定 DataGrid 可以增加記錄ElseIf Not lsNull(DataGrid1.Bookmark) The nIf Not IsDate(Trim(DataGrid1.Colum ns(” 值 班 開 始 日 期").CellText(DataGrid1.Bookmark) The nMsgBox "請按照格式 yyyy-mm-dd 輸入值班開始日期 ", vbOKOnly

57、+ vbExclamation,""Exit SubEnd IfIf Not IsDate(Trim(DataGrid1.Columns(" 值 班 開 始 時 間 ").CellText(DataGrid1.Bookmark) ThenMsgBox " 請按照格式 hh-mm 輸入值班開始時間 ", vbOKOnly + vbExclamation, ""Exit SubEnd IfIf Not IsDate(Trim(DataGrid1.Columns(" 值 班 截 止 日 期 ").CellText(DataGrid1.Bookmark) Th

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論