1、ATM实验报告课程名称 VB程序设计 成绩评定 实验项目名称 ATM 指导教师 余宏华 实验项目编号 实验项目类型 实验地点 学生姓名 刘细萍 学号 2012050279 学生姓名 徐嘉茵 学号 2012050280 学生姓名 吴晓君 学号 2012050274 学生姓名 徐如婵 学号 2012052712 学院 经济学院 系 国际经济与贸易 专业 国际经济与贸易 实验时间 2013 年 6月 1 日 6 月 25 日 一、 实验目的(知识点)实验目的:模拟一个ATM终端程序知识点:1. (熟练)数组(一维数组、一维动态数组)2. (掌握)自定义数据类型(构造复杂类型的数据结构、作为函数参数与
2、返回值)3. (熟练)函数(自定义数据类型作为参数传递、变量的作用域)4. (掌握)简单的排序算法(冒泡或选择)5. (掌握)文件(顺序文件的读写)6. (了解)其他(异常处理、内存变量回收、逻辑业务与界面设计分离的思想)二、 实验内容(一) 设计说明本实验分为业务逻辑设计和界面设计两部分,相互之间互不干扰,只通过外部函数的调用来相互沟通。界面设计部分只负责界面以及数据的显示(为简单起见,数据有效性检测仅放在界面部分)。业务逻辑设计部分包括ATM柜员机的所有业务逻辑函数,以及相应的数据结构。本模拟程序仅使用“带格式数据”的顺序文件作数据存储,程序中所使用的数据结构与文件中的数据格式一一对应。程
3、序启动时先将文件里面的数据全部读入内存,生成相应的数据结构(自定义数据类型数组);一旦用户作业务逻辑操作使内存中相应数据发生任何变化,立即将数据结构(自定义数据类型数组)的所有内容全部写入文件(覆盖原文件)。因将文件中的全部数据读入内存,内存中的数据结构包含“所有用户”的记录信息,所以对某一特定用户的账号操作时必须先定义一个指针(数组下标),用于指向该用户。(二) 业务逻辑设计银行自动柜员机(ATM)终端程序设计是软件工程的经典案例。其中一个重要的思想是要求:逻辑业务与界面设计分离,以此可以增强程序的独立性、复用性。逻辑业务部分主要是自动柜员机的终端业务(包括:登录、存|取款、查询余额、修改密
4、码、转账、取卡),每个业务可用独立的函数完成,并提供给界面调用。(三)具体实验过程第一步,界面设计以及界面属性设定。(1)登录同一个窗体用frame来实现界面的转换相同的过程可以写成一个子过程,通过调用子过程来简化程序编码,改写成public成为公用程序,可在其他窗口调用Public Sub aa()Frame2.Visible = FalseFrame1.Visible = TrueFrame3.Visible = FalseEnd Sub(2)业务办理(3)具体业务(如取款、存款、转账、修改密码、查询余额、开户)第二步,在模块中构造自定义类型数据结构,利用上述构造的自定义数据类型,再构造一
5、个该类型的数组。用于保存从文件里面读进来的数据。Public Type usertypeaccount As String * 19key As String * 6name As String * 4money As StringEnd TypePublic b() As usertype第三步,具体业务设计编写(1) 登录运用第七章“外存数据的访问”中文件的应用的知识,将用户账号、密码从文件中读出与记录,然后将账号添加到组合框项目中。Dim i%Open App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i
6、+ 1ReDim Preserve a(1 To i)Input #1, saccount, skey, sname, smoneyCombo1.AddItem saccounta(i) = skeyLoopClose #1检测账号密码是否一致,登陆账号Private Sub Command1_Click()If Combo1.Text = ThenForm2.HideForm5.ShowElseIf Combo1.Text = 9558800000000000000 And Text1.Text = 111222 Or Combo1.Text = 9559900000000000000 An
7、d Text1.Text = 111111 Or Combo1.Text = 9556600000000000000 And Text1.Text = 222333 Or Combo1.Text = 2222222222222222222 And Text1.Text = 222222 Or Combo1.Text = 3333333333333333333 And Text1.Text = 123456 ThenForm2.HideForm3.ShowElse: Form2.HideForm4.ShowEnd IfEnd IfEnd Sub(2)取款(存款类似)Private Sub For
8、m_Load()Dim i%, k%, m, t%k = Form2.Combo1.ListIndexm = Form11.Text1.Textt = Form2.Combo1.ListCountOpen App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve b(1 To i)Input #1, saccount, skey, sname, smoneyb(i).account = saccountb(i).key = skeyb(i).money = smoneyb(i).n
9、ame = snameLoopClose #1If b(k + 1).money m ThenLabel1.Caption = 对不起,您的账户当前余额不足 & vbCrLf & 您当前的余额为:ElseLabel1.Caption = 取款成功 & vbCrLf & 您当前的余额为:Open App.Path & Account.txt For Output As #1i = 0Do While i ti = i + 1If i = k + 1 ThenWrite #1, b(i).account, b(i).key, b(i).name, b(i).money - mElseWrite #
10、1, b(i).account, b(i).key, b(i).name, b(i).moneyEnd IfLoopEnd IfClose #1Open App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve a(1 To i)Input #1, saccount, skey, sname, smoneya(i) = smoneyLoopClose #1Label2.Caption = a(k + 1)End Sub(3)查询余额Private Sub Form_Load()k
11、= Form2.Combo1.ListIndexDim i%Open App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve a(1 To i)Input #1, saccount, skey, sname, smoneya(i) = smoneyLoopClose #1Label2.Caption = a(k + 1)End Sub(4)转账Private Sub Form_Load()Dim i%, k%, m, t%, q%k = Form2.Combo1.ListInde
12、xm = Form14.Text1.Textt = Form2.Combo1.ListCountq = Form14.Combo1.ListIndexOpen App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve b(1 To i)Input #1, saccount, skey, sname, smoneyb(i).account = saccountb(i).key = skeyb(i).money = smoneyb(i).name = snameLoopClose #1
13、If b(k + 1).money m ThenLabel1.Caption = 对不起,您的账户当前余额不足 & vbCrLf & 您当前的余额为:ElseLabel1.Caption = 转账成功 & vbCrLf & 您当前的余额为:Open App.Path & Account.txt For Output As #1i = 0Do While i ti = i + 1If i = k + 1 ThenWrite #1, b(i).account, b(i).key, b(i).name, b(i).money - mElseIf i = q + 1 ThenWrite #1, b(i
14、).account, b(i).key, b(i).name, b(i).money + mElseWrite #1, b(i).account, b(i).key, b(i).name, b(i).moneyEnd IfLoopEnd IfClose #1Open App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve a(1 To i)Input #1, saccount, skey, sname, smoneya(i) = smoneyLoopClose #1Label2.
15、Caption = a(k + 1)End Sub(5)修改密码Private Sub Command1_Click()Dim i%, k%, t%k = Form2.Combo1.ListIndext = Form2.Combo1.ListCountOpen App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve b(1 To i)Input #1, saccount, skey, sname, smoneyb(i).account = saccountb(i).key = s
16、keyb(i).money = smoneyb(i).name = snameLoopClose #1If Text1.Text b(k + 1).key ThenForm16.HideForm17.ShowForm17.Label1.Caption = 旧密码错误,请重新输入ElseIf Text3.Text Text2.Text ThenForm16.HideForm17.ShowForm17.Label1.Caption = 新密码确认错误,请重新输入ElseOpen App.Path & Account.txt For Output As #1i = 0Do While i ti =
17、i + 1If i = k + 1 ThenWrite #1, b(i).account, Text2.Text, b(i).name, b(i).moneyElseWrite #1, b(i).account, b(i).key, b(i).name, b(i).moneyEnd IfLoopEnd IfClose #1Form16.HideForm17.ShowForm17.Label1.Caption = 密码修改成功End Sub(6)开户Private Sub Command1_Click()Dim i%, k%, t%k = Form2.Combo1.ListIndext = Fo
18、rm2.Combo1.ListCountOpen App.Path & Account.txt For Input As #1i = 0Do While Not EOF(1)i = i + 1ReDim Preserve b(1 To i)Input #1, saccount, skey, sname, smoneyb(i).account = saccountb(i).key = skeyb(i).money = smoneyb(i).name = snameLoopClose #1If Len(Text1.Text) 19 ThenMsgBox 请输入19位账号!, 0 + 16, 提示E
19、lseIf Len(Text2.Text) 6 ThenMsgBox 请输入6位密码!, 0 + 16, 提示ElseOpen App.Path & Account.txt For Output As #1i = 0Do While i t + 1i = i + 1If i = t + 1 ThenWrite #1, Text1.Text, Text2.Text, Text3.Text, Text4.TextElseWrite #1, b(i).account, b(i).key, b(i).name, b(i).moneyEnd IfLoopClose #1Form18.HideForm19.ShowForm19.Label1.Caption = 开户成功End IfEnd Sub第四步,细节设计为使程序更真实,可在界面窗体、业务逻辑函数(标准模块中)分别加入对信息有效性与完整性的处理。例如:加入账号(19位数字)、密码(6位数字)、姓名(小于4为字符串)、余额(大于0)的有效性判断、在标准模块中进行定义,密码用“*”显示,用form hide和form show来实现窗体之间的连接。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1