ATM实验报告.docx
《ATM实验报告.docx》由会员分享,可在线阅读,更多相关《ATM实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
ATM实验报告
课程名称VB程序设计成绩评定
实验项目名称ATM指导教师余宏华
实验项目编号实验项目类型实验地点
学生姓名刘细萍学号2012050279
学生姓名徐嘉茵学号2012050280
学生姓名吴晓君学号2012050274
学生姓名徐如婵学号2012052712
学院经济学院系国际经济与贸易专业国际经济与贸易
实验时间2013年6月1日~6月25日
一、实验目的(知识点)
实验目的:
模拟一个ATM终端程序
知识点:
1.(熟练)数组(一维数组、一维动态数组)
2.(掌握)自定义数据类型(构造复杂类型的数据结构、作为函数参数与返回值)
3.(熟练)函数(自定义数据类型作为参数传递、变量的作用域)
4.(掌握)简单的排序算法(冒泡或选择)
5.(掌握)文件(顺序文件的读写)
6.(了解)其他(异常处理、内存变量回收、逻辑业务与界面设计分离的思想)
二、实验内容
(一)设计说明
本实验分为业务逻辑设计和界面设计两部分,相互之间互不干扰,只通过外部函数的调用来相互沟通。
界面设计部分只负责界面以及数据的显示(为简单起见,数据有效性检测仅放在界面部分)。
业务逻辑设计部分包括ATM柜员机的所有业务逻辑函数,以及相应的数据结构。
本模拟程序仅使用“带格式数据”的顺序文件作数据存储,程序中所使用的数据结构与文件中的数据格式一一对应。
程序启动时先将文件里面的数据全部读入内存,生成相应的数据结构(自定义数据类型数组);一旦用户作业务逻辑操作使内存中相应数据发生任何变化,立即将数据结构(自定义数据类型数组)的所有内容全部写入文件(覆盖原文件)。
因将文件中的全部数据读入内存,内存中的数据结构包含“所有用户”的记录信息,所以对某一特定用户的账号操作时必须先定义一个指针(数组下标),用于指向该用户。
(二)业务逻辑设计
银行自动柜员机(ATM)终端程序设计是软件工程的经典案例。
其中一个重要的思想是要求:
逻辑业务与界面设计分离,以此可以增强程序的独立性、复用性。
逻辑业务部分主要是自动柜员机的终端业务(包括:
登录、存|取款、查询余额、修改密码、转账、取卡),每个业务可用独立的函数完成,并提供给界面调用。
(三)具体实验过程
第一步,界面设计以及界面属性设定。
(1)登录
同一个窗体用frame来实现界面的转换
相同的过程可以写成一个子过程,通过调用子过程来简化程序编码,'改写成public成为公用程序,可在其他窗口调用
PublicSubaa()
Frame2.Visible=False
Frame1.Visible=True
Frame3.Visible=False
EndSub
(2)业务办理
(3)具体业务(如取款、存款、转账、修改密码、查询余额、开户)
第二步,在模块中构造自定义类型数据结构,利用上述构造的自定义数据类型,再构造一个该类型的数组。
用于保存从文件里面读进来的数据。
PublicTypeusertype
accountAsString*19
keyAsString*6
nameAsString*4
moneyAsString
EndType
Publicb()Asusertype
第三步,具体业务设计编写
(1)登录
运用第七章“外存数据的访问”中文件的应用的知识,将用户账号、密码从文件中读出与记录,然后将账号添加到组合框项目中。
Dimi%
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreservea(1Toi)
Input#1,saccount,skey,sname,smoney
Combo1.AddItemsaccount
a(i)=skey
Loop
Close#1
检测账号密码是否一致,登陆账号
PrivateSubCommand1_Click()
IfCombo1.Text=""Then
Form2.Hide
Form5.Show
Else
IfCombo1.Text="9558800000000000000"AndText1.Text="111222"OrCombo1.Text="9559900000000000000"AndText1.Text="111111"OrCombo1.Text="9556600000000000000"AndText1.Text="222333"OrCombo1.Text="2222222222222222222"AndText1.Text="222222"OrCombo1.Text="3333333333333333333"AndText1.Text="123456"Then
Form2.Hide
Form3.Show
Else:
Form2.Hide
Form4.Show
EndIf
EndIf
EndSub
(2)取款(存款类似)
PrivateSubForm_Load()
Dimi%,k%,m@,t%
k=Form2.Combo1.ListIndex
m=Form11.Text1.Text
t=Form2.Combo1.ListCount
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreserveb(1Toi)
Input#1,saccount,skey,sname,smoney
b(i).account=saccount
b(i).key=skey
b(i).money=smoney
b(i).name=sname
Loop
Close#1
Ifb(k+1).moneyLabel1.Caption="对不起,您的账户当前余额不足"&vbCrLf&"您当前的余额为:
"
Else
Label1.Caption="取款成功"&vbCrLf&"您当前的余额为:
"
OpenApp.Path&"\Account.txt"ForOutputAs#1
i=0
DoWhileii=i+1
Ifi=k+1Then
Write#1,b(i).account,b(i).key,b(i).name,b(i).money-m
Else
Write#1,b(i).account,b(i).key,b(i).name,b(i).money
EndIf
Loop
EndIf
Close#1
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreservea(1Toi)
Input#1,saccount,skey,sname,smoney
a(i)=smoney
Loop
Close#1
Label2.Caption=a(k+1)
EndSub
(3)查询余额
PrivateSubForm_Load()
k=Form2.Combo1.ListIndex
Dimi%
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreservea(1Toi)
Input#1,saccount,skey,sname,smoney
a(i)=smoney
Loop
Close#1
Label2.Caption=a(k+1)
EndSub
(4)转账
PrivateSubForm_Load()
Dimi%,k%,m@,t%,q%
k=Form2.Combo1.ListIndex
m=Form14.Text1.Text
t=Form2.Combo1.ListCount
q=Form14.Combo1.ListIndex
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreserveb(1Toi)
Input#1,saccount,skey,sname,smoney
b(i).account=saccount
b(i).key=skey
b(i).money=smoney
b(i).name=sname
Loop
Close#1
Ifb(k+1).moneyLabel1.Caption="对不起,您的账户当前余额不足"&vbCrLf&"您当前的余额为:
"
Else
Label1.Caption="转账成功"&vbCrLf&"您当前的余额为:
"
OpenApp.Path&"\Account.txt"ForOutputAs#1
i=0
DoWhileii=i+1
Ifi=k+1Then
Write#1,b(i).account,b(i).key,b(i).name,b(i).money-m
ElseIfi=q+1Then
Write#1,b(i).account,b(i).key,b(i).name,b(i).money+m
Else
Write#1,b(i).account,b(i).key,b(i).name,b(i).money
EndIf
Loop
EndIf
Close#1
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreservea(1Toi)
Input#1,saccount,skey,sname,smoney
a(i)=smoney
Loop
Close#1
Label2.Caption=a(k+1)
EndSub
(5)修改密码
PrivateSubCommand1_Click()
Dimi%,k%,t%
k=Form2.Combo1.ListIndex
t=Form2.Combo1.ListCount
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreserveb(1Toi)
Input#1,saccount,skey,sname,smoney
b(i).account=saccount
b(i).key=skey
b(i).money=smoney
b(i).name=sname
Loop
Close#1
IfText1.Text<>b(k+1).keyThen
Form16.Hide
Form17.Show
Form17.Label1.Caption="旧密码错误,请重新输入"
ElseIfText3.Text<>Text2.TextThen
Form16.Hide
Form17.Show
Form17.Label1.Caption="新密码确认错误,请重新输入"
Else
OpenApp.Path&"\Account.txt"ForOutputAs#1
i=0
DoWhileii=i+1
Ifi=k+1Then
Write#1,b(i).account,Text2.Text,b(i).name,b(i).money
Else
Write#1,b(i).account,b(i).key,b(i).name,b(i).money
EndIf
Loop
EndIf
Close#1
Form16.Hide
Form17.Show
Form17.Label1.Caption="密码修改成功"
EndSub
(6)开户
PrivateSubCommand1_Click()
Dimi%,k%,t%
k=Form2.Combo1.ListIndex
t=Form2.Combo1.ListCount
OpenApp.Path&"\Account.txt"ForInputAs#1
i=0
DoWhileNotEOF
(1)
i=i+1
ReDimPreserveb(1Toi)
Input#1,saccount,skey,sname,smoney
b(i).account=saccount
b(i).key=skey
b(i).money=smoney
b(i).name=sname
Loop
Close#1
IfLen(Text1.Text)<>19Then
MsgBox"请输入19位账号!
",0+16,"提示"
ElseIfLen(Text2.Text)<>6Then
MsgBox"请输入6位密码!
",0+16,"提示"
Else
OpenApp.Path&"\Account.txt"ForOutputAs#1
i=0
DoWhileii=i+1
Ifi=t+1Then
Write#1,Text1.Text,Text2.Text,Text3.Text,Text4.Text
Else
Write#1,b(i).account,b(i).key,b(i).name,b(i).money
EndIf
Loop
Close#1
Form18.Hide
Form19.Show
Form19.Label1.Caption="开户成功"
EndIf
EndSub
第四步,细节设计
为使程序更真实,可在界面窗体、业务逻辑函数(标准模块中)分别加入对信息有效性与完整性的处理。
例如:
加入账号(19位数字)、密码(6位数字)、姓名(小于4为字符串)、余额(大于0)的有效性判断、在标准模块中进行定义,密码用“*”显示,用formhide和formshow来实现窗体之间的连接。