【正文】
在所有代碼編寫完成后,再一一驗(yàn)證其功能,修正了很多不足,也使得程序慢慢完善起來。其次就是與數(shù)據(jù)庫連接上的問題,由于對 VB 與 SQL 連接的不熟走了很多彎路,使程序設(shè)計(jì)需要用到數(shù)據(jù)庫時(shí)復(fù)雜化,過后通過老師同學(xué)指點(diǎn),采用了 ADO 控件的動(dòng)態(tài)連接,才解決一個(gè)頭疼的問題。在程序運(yùn)行時(shí)有時(shí)會(huì)因?yàn)檩斎氲臄?shù)字過大而出現(xiàn)內(nèi)存溢出,程序崩潰現(xiàn)象,經(jīng)過調(diào)試改正已經(jīng)有了很大改觀,但仍然存在不可知的錯(cuò)誤。界面設(shè)計(jì)經(jīng)過細(xì)細(xì)的調(diào)整之后,人性化的設(shè)計(jì)基本達(dá)到了要求。 第 24 頁 共 26 頁 圖 12 繼續(xù)服務(wù)界面 在很多函數(shù)的運(yùn)用中都要調(diào)用 INSERTDATABASE函數(shù),用以對數(shù)據(jù)庫中用戶操作信息表進(jìn)行用戶操作信息的寫入,包括操作類型,操作時(shí)間,操作金額,轉(zhuǎn)帳卡號,轉(zhuǎn)帳金額,以及是否成功等等。 39。 amp。 39。 amp。 39。 amp。 Set RS = New str5, CON, adOpenDynamic, adLockPessimistic (金額 ) = (金額 ) + transmoney //所轉(zhuǎn)入的卡號加上相應(yīng)數(shù)額 If i = 2 Then = 恭喜您轉(zhuǎn)帳成功! Else = Transfered successfully! End If Call InsertDatabase //調(diào)用數(shù)據(jù)庫寫入函數(shù) End Sub 密碼修改功能的 實(shí)現(xiàn) 圖 10 修改密碼 界面 在密碼修改界面 中 (如圖 10)需要用戶兩次輸入的密碼相一致,否則不能進(jìn)行修改,密碼兩次輸入正確后,程序?qū)⑿碌拿艽a寫入原來位置。 transcard amp。 Set RS = New str4, CON, adOpenDynamic, adLockPessimistic (金額 ) = (金額 ) – transmoney //對轉(zhuǎn)出錢的卡號減少相應(yīng)數(shù)額 Dim str5 As String 第 21 頁 共 26 頁 str5 = select * from 用戶信息 where 卡號 =39。 u amp。 Set RS = New str6, CON, adOpenDynamic, adLockPessimistic If (金額 ) Val() Then //判斷輸入金額與卡 中余額 k = 0 = 金額不足以轉(zhuǎn)帳,請你重新輸入 第 20 頁 共 26 頁 = Call InsertDatabase Exit Sub Else k = 1 Unload Form7 = transcard = transmoney End If 在排除了不正確的情況后,將轉(zhuǎn)入確認(rèn)信息界面 ,如圖 9,在確認(rèn)信息窗體中將調(diào)用 TRANS2 函數(shù),對交易成功后的數(shù)據(jù)進(jìn)行更新 圖 9 確認(rèn)界面 Public Sub Trans2() Dim str4 As String str4 = select * from 用戶信息 where 卡號 =39。 u amp。此函數(shù)將在后面介紹 Exit Sub End If If = True Then //記錄集中沒有所輸入卡號的用戶 則出錯(cuò) k = 0 = 沒有此用戶,請檢 查并重新輸入! Call InsertDatabase Exit Sub End If If transcard = u Then //轉(zhuǎn)帳卡號與實(shí)施轉(zhuǎn)帳操作的卡號相同,則出錯(cuò) k = 0 = 操作錯(cuò)誤,同帳戶不可以轉(zhuǎn)帳! Call InsertDatabase Exit Sub End If str6 = select * from 用戶信息 where 卡號 =39。 Set RS = New str3, CON, adOpenDynamic, adLockPessimistic //數(shù)據(jù)庫連接 第 19 頁 共 26 頁 If i = 2 Then If = Or = Then // 輸入卡號或輸入金額為空 則出錯(cuò) k = 0 = 請你正確輸入! = = Call InsertDatabase //每出現(xiàn)一次錯(cuò)誤就調(diào)用數(shù)據(jù)庫寫入函數(shù)。 transcard amp。 Public Sub Trans() Dim str3 As String transcard = transmoney = str3 = select * from 用戶信息 where 卡號 =39。//把操作插入用戶操作表,這個(gè)函數(shù)將在后面介紹其功能 Unload Form5 = 交易成功,謝謝您的使用,請拿好您的鈔票! End If End If 轉(zhuǎn)賬 功能的 實(shí)現(xiàn) 轉(zhuǎn)帳功能要求用戶輸入對方卡號及轉(zhuǎn)帳金額,并且對方卡號也必須是在數(shù)據(jù)庫中存在的卡號,否則會(huì)出錯(cuò),這里對數(shù)額上沒有要求,并不要求是整數(shù),可隨意輸入轉(zhuǎn)帳金額 。 Set RS = New str1, CON, adOpenDynamic, adLockPessimistic 前面也是對數(shù)據(jù)庫進(jìn)行連接,并把用戶信息根據(jù)所輸卡號輸入到記錄集中。 u amp。 Public Public Sub TakeMoney() 第 17 頁 共 26 頁 Dim str1 As String str1 = select * from 用戶信息 where 卡號 =39。 Set RS = New 圖 6 查詢界面 str2, CON, adOpenDynamic, adLockPessimistic = (金額 ) 取款 功能的 實(shí)現(xiàn) 圖 7 取款界面 取款函數(shù)相對于其他函數(shù)就相對復(fù)雜一點(diǎn),因?yàn)橛泻芏嗲闆r需要判斷,列如只能取 50 與 100 的整數(shù),就需要對 50 取模,還需要判斷所取金額是否大于卡上的余額,余額不足那也是沒法成功取款的。 u amp。 Private Sub Command1_Click() If Option1(0).Value = True Then j = 1 Unload Form4 Else If Option1(1).Value = True Then j = 2 Unload Form4 Else If Option1(2).Value = True Then j = 3 Unload Form4 Else If Option1(4).Value = True Then J = 5 Unload Form4 Else If Option1(3).Value = True Then j = 4 Unload Form4 Call Query = u 查詢 余額功能的 實(shí)現(xiàn) 查詢功能的實(shí)現(xiàn)相對來說就非常簡單了,直接連接數(shù)據(jù)庫,搜索到相應(yīng)的數(shù)據(jù)后輸出到文本框中即可 (如圖 6) 在主模塊中的查詢函數(shù): 第 16 頁 共 26 頁 Public Sub Query() Dim str2 As String str2 = select * from 用戶信息 where 卡號 =39。//檢驗(yàn)密 碼是否相同 //密碼相同轉(zhuǎn)入服務(wù)界面 Unload Form2 在窗體中直接通過程序代碼調(diào)用在模塊中的 Checkuser 函數(shù)即可,后面的界面都是采用這種方法,都不再進(jìn)行仔細(xì)說明。 39。 amp。Data Source=X\ATM// 這段語句采用了動(dòng)態(tài)連接數(shù)據(jù)庫的方法與 數(shù)據(jù)庫 USER進(jìn)行連接,采用的是 SQL OLEDB應(yīng)用接口。User ID=sa。Password= 。如果為英文則需執(zhí)行下面的語句,此后的每個(gè)界面語言確定及實(shí)現(xiàn)都是通過采取這個(gè)方法 Private Sub Form_Load() If i = 1 Then //判斷 i的值 如 果為 1 則進(jìn)行英文賦值 = Do you want to continue?Please choose! = other service = Cancel End If End Sub 第 13 頁 共 26 頁 在窗體中我們首先來判斷用戶輸入的卡號和密碼是否符合我們的規(guī)定。后面的操作界面同樣也是采用這種方法,就不再做英文的界面介紹。選擇兩種語言的功能和界面背景實(shí)際上都是完全一致的,只是語言文字不同。任意點(diǎn)擊一種服務(wù)都將進(jìn)入登陸界面。當(dāng)然,真實(shí)的銀行 ATM 系統(tǒng),其后臺的數(shù)據(jù)庫系統(tǒng)肯定是十分龐大 的一個(gè)系統(tǒng),對保密性的要求也非常的高,在這次的模擬中當(dāng)然不可能達(dá)到那樣的要求。用戶查詢明細(xì)的功能就是通過搜集檢索這張表來實(shí)現(xiàn)。本次模擬系統(tǒng)并不具有創(chuàng)建新用戶的功能,用戶信息表上的內(nèi)容都是為了模擬而手動(dòng)添加的樣本用戶。其中實(shí)際上只運(yùn)用到兩個(gè)表,一個(gè)用戶信息表和一個(gè)用戶操作表。通過可愛的卡通動(dòng)物也實(shí)現(xiàn)了友好親切的操作氛圍。前臺部分整個(gè)代碼程序采用一個(gè)主模塊,在里面定義程序全局變量,把各種功能函數(shù)寫入其中,每個(gè)界面制作一個(gè)獨(dú)立窗體,在各個(gè)窗體代碼中來調(diào)用主模塊中的各個(gè)函數(shù)來,來實(shí)現(xiàn)相應(yīng)功能。采用以上兩個(gè)開發(fā)軟件完全能夠滿足 ATM 模擬系統(tǒng)的開發(fā)需要。在本次設(shè)計(jì)中 ,由于我只設(shè)計(jì)了一個(gè) 主模塊 ,所以直接將 ADO 控件的初始化、建立連接、關(guān)閉連接等操作都寫到了最先調(diào)用的身份認(rèn)證函數(shù)中 ,就已經(jīng)可以滿足我對數(shù)據(jù)庫的訪問操作 . 通過 ADO控件使 Visual Basic 程