本站簡介作品介紹購買指南發布作品訂做說明專業誠信
本站收錄了大量的畢業設計和論文 [vison]       本站提供這些設計的初衷 [vison]      
管理系統 學生 計算機 教學 信息 電路 汽車 模具 網站 建筑
您現在的位置:首頁 >> 理工論文計算機信息

ATM自動取款機系統的制作

編輯:admin 來源:papersay.com   客服QQ:281788421 (為了更好的為您服務,請先加好友再咨詢)


微軟公司的Visual Basic 6.0是Windows應用程序開發工具,使目前最為廣泛的、易學易用的面向對象的開發工具。Visual Basic提供了大量的控件,這些控件可用于設計界面和實現各種功能,減少了編程人員的工作量,也簡化了界面設計過程,從而有效的提高了應用程序的運行效率和可靠性。故而,實現本系統VB是一個相對較好的選擇。
3.1.2 Visual Basic 6.0特點介紹
Vsual Basic6.0是一種可視化的、面對對象和條用事件驅動方式的結構化高級程序設計,可用于開發Windows環境下的種類應用程序。它簡單易學、效率高,且功能強大,可以與Windows的專業開發工具SDK相媲美,而且程序開發人員不必具有C/C++編程基礎。在Visual Basic環境下,利用事件驅動的編程機制、新穎易用的可視化設計工具,使用Windows內部的應用程序接口(API)函數,以及動態鏈接庫(DLL)、動態數據交換(DDE)、對象的鏈接與嵌入(OLE)、開放式數據訪問(ODBC)等技術,可以高效、快速地開發出Windows環境下功能強大、圖形界面豐富的應用軟件系統。總的來說,Visual Basic具有以下特點:
(1)可視化編程:
用傳統程序設計語言設計程序時,都是通過編寫程序代碼來設計用戶界面,在設計過程中看不到界面的實際顯示效果,必須編譯后運行程序才能觀察。如果對界面的效果不滿意,還要回到程序中修改。有時候,這種編程-編譯-修改的操作可能要反復多次,大大影響了軟件開發效率。Visual Basic提供了可視化設計工具,把Windows界面設計的復雜性“封裝”起來,開發人員不必為界面設計而編寫大量程序代碼。只需要按設計要求的屏幕布局,用系統提供的工具,在屏幕上畫出各種“部件”,即圖形對象,并設置這些圖形對象的屬性。Visual Basic自動產生界面設計代碼,程序設計人員只需要編寫實現程序功能的那部分代碼,從而可以大大提高程序設計的效率。
(2)面向對象的程序設計
Visual Basic應用面向對象的程序設計方法(OOP),把程序和數據封裝起來作為一個對象,并為每個對象賦予應有的屬性,使對象成為實在的東西。在設計對象時,不必編寫建立和描述每個對象的程序代碼,而是用工具畫在界面上,Visual Basic自動生成對象的程序代碼并封裝起來。每個對象以圖形方式顯示在界面上,都是可視的。

4.3 系統開發主要應用技術
WINDOWS XP是時下最流行的電腦操作系統穩定性安全性都非常不錯,而隨著ATM提款機逐步采用個人電腦,以及性能的升級,WINXP也有了可能成為這些提款機的操作系統,所以本次系統也在WINXP下進行開發。由于需要開發出前臺客戶友好界面及后臺數據庫系統,而對于前臺只要能滿足其界面開發需要即可,所以我采用了相對簡單易用并且功能強大的VB6.0,后臺數據庫則采用了與之相連方便且功能同樣強大的SQLSERVER2000。采用以上兩個開發軟件完全能夠滿足ATM模擬系統的開發需要。
4.3.1 系統前臺設計
系統主要是由前臺(客戶操作界面)與后臺(數據庫)兩個部分組成。前臺部分整個代碼程序采用一個主模塊,在里面定義程序全局變量,把各種功能函數寫入其中,每個界面制作一個獨立窗體,在各個窗體代碼中來調用主模塊中的各個函數來,來實現相應功能。界面部分由于08年奧運會的臨近,系統采用了幾副有關北京08奧運會的卡通圖片,讓界面整體突出一種奧運氣氛。通過可愛的卡通動物也實現了友好親切的操作氛圍。

4.3.2 后臺數據庫設計
經過充分考慮,認為系統并不需要非常復雜的數據庫系統就能夠達到模擬ATM系統的效果,所以建立了一個名為XQQ\ATM的SQL服務器,創建了名為USER的數據庫,用戶登陸名為sa密碼為空,并在ODBC數據源中將USER數據庫添加進去。其中實際上只運用到兩個表,一個用戶信息表和一個用戶操作表。
   表1 用戶信息表
 
用戶信息表(如表1)用以存放用戶的卡號,密碼,存款金額等信息,由于該系統是為了模擬運用,故安全要求不高,所以密碼采用了明文方式存放,便于使用查看。本次模擬系統并不具有創建新用戶的功能,用戶信息表上的內容都是為了模擬而手動添加的樣本用戶。
表2 用戶操作表
 
用戶操作表(如表3)則用來記錄用戶在ATM機上所使用的服務,它包括了所有用戶對ATM的操作信息,包括時間,操作類型,金額,轉帳卡號,成功與否等等。用戶查詢明細的功能就是通過搜集檢索這張表來實現。同時管理人員也可以從這張表上很方便的查閱用戶使用情況。當然,真實的銀行ATM系統,其后臺的數據庫系統肯定是十分龐大的一個系統,對保密性的要求也非常的高,在這次的模擬中當然不可能達到那樣的要求。
5 系統功能的實現
5.1 歡迎界面實現
                
圖2 歡迎界面
在歡迎界面(如圖2)我們可以自由的選擇兩種語言,分別為我們最常用的中文和英語,在這里主模塊中定義了一個非常重要的INT整型變量i,通過i的值來決定所選擇的服務。任意點擊一種服務都將進入登陸界面。
Private Sub Command1_Click()
i = 2 當點中文按鈕時,i的值就被賦為了2,在后面的操作中,i的值就將始終為2,用以區別所選語言服務
Unload Form1
Form2.Show
End Sub
Private Sub Command2_Click()
i = 1 點ENGLISH按鈕時 i的值賦1
Unload Form1
Form2.Show
End Sub
5.2 登陸的實現
在登陸界面有兩種語言可以為用戶服務,一是中文,而是英文。選擇兩種語言的功能和界面背景實際上都是完全一致的,只是語言文字不同。如圖3為選擇中文的界面:        
 
                        圖 3 登陸界面(中文)
如果點擊的是ENGLISH, 則登陸界面為圖4
 
 圖4 登陸界面(英文)
這里的兩個界面并非通過兩個窗體單獨實現而是共用一個窗體,通過判斷i的值,對label中的CAPTION進行相應的中文和英文賦值。后面

計算機畢業設計論文網www.pdzuhx.tw
的操作界面同樣也是采用這種方法,就不再做英文的界面介紹。這里把默認的語言選擇為中文直接在窗體編輯菜單中對CAPTION進行了相應賦值。如果為英文則需執行下面的語句,此后的每個界面語言確定及實現都是通過采取這個方法
Private Sub Form_Load()
If i = 1 Then //判斷i的值 如果為1則進行英文賦值
Label1.Caption = "Do you want to continue?Please choose!"
Command1.Caption = "other service"
Command2.Caption = "Cancel"
End If
End Sub
在窗體中我們首先來判斷用戶輸入的卡號和密碼是否符合我們的規定。卡號為8位密碼為6位
Private Sub Command1_Click()     //當我們點下確認按鈕時
If i = 2 Then
If Len(Text1.Text) <> 8 Or Len(Text2.Text) <> 6 Then      // 比較卡號是否為8位及密碼是否為6位
Form3.Show
Form3.Label1.Caption = "沒有正確輸入卡號或密碼"
Text1.Text = ""
Text2.Text = ""
Else
Call Checkuser       //這里是調用主模塊中的身份驗證函數,在后面的窗體實現中都是通過
CALL語句來直接調用相應函數的
End If
End If              //以下為用戶選擇英語的代碼,和選擇中文時是一樣的,在后面的介紹中將不在引用英語的代碼
If i = 1 Then
If Len(Text1.Text) <> 8 Or Len(Text2.Text) <> 6 Then
Form3.Show
Form3.Label1.Caption = "Please Input Correct Cardnumber Or Password"
Text1.Text = ""
Text2.Text = ""
Else
Call Checkuser
End If
End If
End Sub
在主模塊MODEL1中身份驗證函數代碼為
Public Sub Checkuser() 定義Checkuser函數
Dim strr As String
Set CON = New ADODB.Connection
strr = "Provider=SQLOLEDB.1;Password= ;Persist Security Info=True;User ID=sa;Initial Catalog=user;Data Source=XQQ\ATM"http:// 這段語句采用了動態連接數據庫的方法與數據庫USER進行連接,采用的是SQL OLEDB應用接口。
CON.Open strr 
u = Form2.Text1.Text 把卡號賦給u
str = "select 密碼 from 用戶信息 where 卡號='" & u & "'"  //SQL數據庫查詢語句,根據卡號把所查詢的密碼數據放入str中
Set RS = New ADODB.Recordset       //設置RS為新的Recordset對象
RS.Open str, CON, adOpenDynamic, adLockPessimistic
If RS.EOF = True Then       //當前記錄指針無效,說明不存在這個用戶
If i = 2 Then
Form3.Show
Form3.Label1.Caption = "     沒有此用戶,請檢查并重新輸入!"
u = ""                     // u重新設置為空
接下來就是比較從所輸卡號中取出的密碼與用戶輸入的密碼進行比較
If Trim(RS.Fields(0)) = Trim(Form2.Text2.Text) Then '//檢驗密碼是否相同
Form4.Show              //密碼相同轉入服務界面
RS.Close
Unload Form2
在窗體中直接通過程序代碼調用在模塊中的Checkuser函數即可,后面的界面都是采用這種方法,都不再進行仔細說明。
5.3 主界面實現
 
圖 5 服務界面
在主界面中(如圖5)有5個服務按鈕 設置了一個整型變量j,在點擊各種服務的同時,J也被賦予了不同的數值,用以后面記錄用戶操作信息,寫入數據庫。
Private Sub Command1_Click()
If Option1(0).Value = True Then
j = 1
Unload Form4
Form5.Show
Else
If Option1(1).Value = True Then
j = 2
Unload Form4
Form6.Show
Else
If Option1(2).Value = True Then
j = 3
Unload Form4
Form7.Show
Else
If Option1(4).Value = True Then
J = 5
Unload Form4
Form12.Show
Else
If Option1(3).Value = True Then
j = 4
Unload Form4
Call Query
Form8.Show
Form8.Label2.Caption = u
5.4&nbs

計算機畢業設計論文網www.pdzuhx.tw
p;查詢余額功能的實現
查詢功能的實現相對來說就非常簡單了,直接連接數據庫,搜索到相應的數據后輸出到文本框中即可(如圖6)
在主模塊中的查詢函數:
Public Sub Query()
Dim str2 As String
str2 = "select * from 用戶信息 where 卡號='" & u & "'"
Set RS = New ADODB.Recordset

 
     圖6 查詢界面
RS.Open str2, CON, adOpenDynamic, adLockPessimistic
Form8.Label5.Caption = RS.Fields("金額")
5.5 取款功能的實現
 
圖7 取款界面
取款函數相對于其他函數就相對復雜一點,因為有很多情況需要判斷,列如只能取50與100的整數,就需要對50取模,還需要判斷所取金額是否大于卡上的余額,余額不足那也是沒法成功取款的。用戶取了一定數量的錢后還需要把新的數據重新寫入數據庫。
Public Public Sub TakeMoney()
Dim str1 As String
str1 = "select * from 用戶信息 where 卡號='" & u & "'"
Set RS = New ADODB.Recordset
RS.Open str1, CON, adOpenDynamic, adLockPessimistic  前面也是對數據庫進行連接,并把用戶信息根據所輸卡號輸入到記錄集中。
If i = 2 Then      //在中文服務下
m = Form5.Text1.Text
If m = "" Then     //m為空,說明用戶沒有輸入金額
k = 0        //這里的K為全局變量 ,在后面數據庫對用戶操作表進行寫入時非常有用,k的值標識操作的成功與否,k=0操作失敗,k=1則為成功 
Form3.Show
Form3.Label1.Caption = "請您正確輸入金額!"
Exit Sub
End If
If m Mod 50 <> 0 Then // 所輸金額不能被50整除
k = 0
Form3.Show
Form3.Label1.Caption = "請您正確輸入金額!"
Form5.Text1.Text = ""
Else
If RS.Fields("金額") < CCur(m) Then //用戶卡中金額小與輸入的金額
k = 0
Form3.Show
Form3.Label1.Caption = "金額不足!"
Form5.Text1.Text = ""
Exit Sub
Else
k = 1  //排除所有不正確情況,即輸入正確,則對k賦值為1 標識操作成功
Money = RS.Fields("金額")
RS.Fields("金額") = (Money - Form5.Text1.Text) // 表中用戶金額減去所取金額
RS.Update  // 將新的數據寫入所取位置
RS.Close
Call InsertDatabase '//把操作插入用戶操作表,這個函數將在后面介紹其功能
Unload Form5
Form9.Show
Form9.Label1.Caption = "交易成功,謝謝您的使用,請拿好您的鈔票!"
Form11.Show
Form9.SetFocus
End If
End If

在密碼修改界面中(如圖10)需要用戶兩次輸入的密碼相一致,否則不能進行修改,密碼兩次輸入正確后,程序將新的密碼寫入原來位置。
PUBLIC SUB CHANGEPWD()
IF I = 2 THEN
IF LEN(FORM6.TEXT1.TEXT) <> 6 OR LEN(FORM6.TEXT1.TEXT) <> 6 THEN//比較兩次密碼長度是否符合6位的要求
K = 0
FORM3.SHOW
FORM3.LABEL1.CAPTION = "請正確輸入6位密碼"
FORM6.TEXT1.TEXT = ""
FORM6.TEXT2.TEXT = ""
Call InsertDatabase
ELSE
IF FORM6.TEXT1.TEXT <> FORM6.TEXT2.TEXT THEN//比較兩次輸入是否一致
K = 0
FORM3.SHOW
FORM3.LABEL1.CAPTION = "您兩次輸入的密碼不一致,請檢查!"
FORM6.TEXT1.TEXT = ""
FORM6.TEXT2.TEXT = ""
Call InsertDatabase
ELSE
STR = "UPDATE 用戶信息 SET [密碼]='" & FORM6.TEXT1.TEXT & "' WHERE 卡號='" & U & "'"
SET RS = NEW ADODB.RECORDSET
RS.OPEN STR, CON, ADOPENDYNAMIC, ADLOCKPESSIMISTIC
K = 1
Call InsertDatabase
IF I = 2 THEN
FORM9.SHOW
FORM9.LABEL1.CAPTION = "密碼修改成功,請記好您的新密碼!"
ELSE
FORM9.SHOW
FORM9.LABEL1.CAPTION = "PASSWORD BE CHANGED SUCCESSFULLY"
END IF
UNLOAD FORM6
FORM11.SHOW
FORM9.SETFOCUS
END IF
END IF
5.8 查詢交易明細功能的實現
 
                       圖11 查詢明細界面
在查詢交易明細界面中(如圖11),最重要的就是運用

計算機畢業設計論文網www.pdzuhx.tw
到了RECORDSET記錄集EOF屬性,通過判斷BOF的真值來判斷是否取到了記錄集合,并把所需要的數據逐條到文本框中,在TEXT文本框中的MULTILINE屬性要設為TRUE,使輸出的文字能夠自動換行
Public Sub Query2()
 Dim str7 As String
Set RS = New ADODB.Recordset
str7 = "select 時間,操作,取款金額,轉帳金額,轉帳卡號,是否成功 from 用戶操作表 where 卡號='" & u & "'"   //只搜索需要的單元
RS.Open str7, CON, adOpenKeyset, adLockReadOnly //這里把對數據的讀取設為只讀方式
If Not RS.EOF Then //如果RS.EOF值為假則說明得到了所需要的記錄集合,為真則當前記錄指針無效
Form12.Text1.Text = RS.GetString //用RECORDSET對象的GetString方法來得到記錄集中的字符串,并輸出在文本框中
End If
End Sub
5.9 其余界面及函數
在完成了所選擇的服務后都會出現一個繼續服務的界面(如圖12),用以選擇退出還是返回到服務選擇界面繼續進行其他服務。
             
 
圖12 繼續服務界面
在很多函數的運用中都要調用INSERTDATABASE函數,用以對數據庫中用戶操作信息表進行用戶操作信息的寫入,包括操作類型,操作時間,操作金額,轉帳卡號,轉帳金額,以及是否成功等等。這里就介紹其中對取款操作寫入的代碼即可,其余的都是一樣的
Public Sub InsertDatabase()
str = "select * from 用戶操作表"
Set RS = New ADODB.Recordset
RS.Open str, CON, adOpenDynamic, adLockPessimistic
If j = 1 And k = 1 Then   //這里j就是前面所選擇的服務的標識
RS.AddNew
RS.Fields("卡號") = u
RS.Fields("操作") = "取款"
RS.Fields("時間") = Now
RS.Fields("取款金額") = Val(Form5.Text1.Text)
RS.Fields("是否成功") = "是"
RS.Update
RS.Close
ElseIf j = 1 And k = 0 Then
RS.AddNew
RS.Fields("卡號") = u
RS.Fields("操作") = "取款"
RS.Fields("時間") = Now
RS.Fields("取款金額") = Val(Form5.Text1.Text)
RS.Fields("是否成功") = "否"
RS.Update
RS.Close
6 系統運行結果及工作總結
6.1 系統測試及運行結果
系統測試全部功能都能夠使用,也達到了預期的效果,運行速度和穩定性都不錯。界面設計經過細細的調整之后,人性化的設計基本達到了要求。
6.2 系統有待改進之處
因為系統只是要求模擬,并不牽涉到真實的一些處理,所以很多真實的應用并不沒有加在里面,一些與真實的自動化機器的接口連接并沒有做到。在程序運行時有時會因為輸入的數字過大而出現內存溢出,程序崩潰現象,經過調試改正已經有了很大改觀,但仍然存在不可知的錯誤。
6.3 系統中遇到的問題及解決方法
首先遇到的問題就是系統分析不足的問題,在大致考慮了一些功能后就開始動手做,想到哪里做到哪里,一度陷入了困境,其后從新開始理清了思緒,畫好了流程圖在做,隨即順暢了許多。其次就是與數據庫連接上的問題,由于對VB與SQL連接的不熟走了很多彎路,使程序設計需要用到數據庫時復雜化,過后通過老師同學指點,采用了ADO控件的動態連接,才解決一個頭疼的問題。其后的問題都是程序中邏輯性的一些小問題,大多數都是一些遺漏,導致程序死循環,或者是數據庫寫入不去作用等等,都是通過仔細重新分析檢查一一解決。在所有代碼編寫完成后,再一一驗證其功能,修正了很多不足,也使得程序慢慢完善起來。
計算機畢業設計論文網www.pdzuhx.tw
精准三肖中特