本站简介作品介绍购买指南发布作品订做说明专业诚信
本站收录了大量的毕业设计和论文 [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.papersay.com
的操作界面同样也是采用这种方法,就不再做英文的界面介绍。这里把默认的语言选择为中文直接在窗体编辑菜单中对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"// 这段语句采用了动态连接数据库的方法与数据库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.papersay.com
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.papersay.com
到了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.papersay.com