[Pt_01] Python循环结构案例:模拟银行存取款业务,设
2019-03-09 本文已影响22人
Fighting_001
目录结构
一、案例描述
二、需求分析
1. 业务流程图
2. 业务项&测试场景
三、代码实现
四、用例设计&执行(简化模式)
1. 登录业务
2. 存款业务
3. 取款业务
4. 退卡业务
5. 存款、取款、退卡-交叉业务
案例:利用循环结构语法,实现模拟银行存款&取款业务
一、案例描述
- 模拟3张银行卡,卡号分别为:1001、1002、1003,分别设置有密码、初始余额
- 提示用户输入卡号和密码
- 银行卡登录场景
(1)若用户输入正确,则提示让用户选择具体的操作业务(取款|存款|退出),并提示当前余额数目
(2)若用户输入错误,则提示重新输入卡号密码
(3)若连续3次输入错误的账号密码,则提示银行卡已被锁定,不能继续交易 - 登录后的业务操作场景
(1)取款业务:提示输入取款额度。若输入超出余额,则提示余额不足;否则,在余额上减掉输入的取款金额
(2)存款业务:提示输入存款金额。余额加上存款金额,提示当前余额的数目
(3)退出操作:提示重新输入卡号和密码
二、需求分析
1. 业务流程图
2. 业务项&测试场景
1. 登录验证业务
1)正确匹配,登录成功
①首次输入即正确匹配
②输入错误1次,再次输入正确
③连续输入错误2次,再次输入正确
2)输入错误超出次数限制,登录失败(退出程序)
①连续输入错误3次
2. 存款业务
1)存款成功
①输入非0的正整数
2)存款失败
①输入非数字
②输入负数
③输入0
④不输入,直接提交
3. 取款业务
1)取款成功
①输入非0的正整数,且输入的数字=账户余额
②输入非0的正整数,且输入的数字<账户余额
2)取款失败
①输入非数字
②输入负数
③输入0
④不输入,直接提交
⑤取款金额>账户余额
4. 退卡业务
①登录成功后,业务选择“退卡”,不作其他交易
5. 存款、取款、退卡-交叉业务
①存款,退卡
②存款,存款,退卡
③存款,取款,退卡
④存款,存款,取款,取款,存款,退卡
⑤取款,退卡
⑥取款,取款,退卡
⑦取款,取款,存款,存款,取款,退卡
三、代码实现
bankTest.py
# 定义3张银行卡,分别设置密码、初始余额
card1="1001"
pwd1="111"
bal1=100
card2="1002"
pwd2="222"
bal2=200
card3="1003"
pwd3="333"
bal3=300
# 开启登录、存取款业务
print("------Welcome to Python Bank------")
times=0 # 控制输错的连续次数
while True: # while永久循环
# 提示用户输入卡号和密码
card=input("请输入银行卡号:")
pwd=input("请输入密码:")
bal=0 # 余额
# 对卡号密码匹配判断-登录业务
if card==card1 and pwd==pwd1: # 将卡号密码-余额进行关联
bal=bal1
print("Welcome User:",card)
elif card==card2 and pwd==pwd2:
bal=bal2
print("Welcome User:",card)
elif card==card3 and pwd==pwd3:
bal=bal3
print("Welcome User:",card)
else: # 卡号密码不匹配的处理
times=times+1
if times<3:
print("卡号or密码输入错误,请重新输入!")
continue # 跳出当前循环,继续下一次循环:输入卡号密码
else:
print("已连续3次输入错误,请联系银行柜台解锁")
break
# 登录银行账户后,进行存取款业务
while True:
num=input("请选择办理的业务[1-存款 2-取款 3-退卡]:")
# 存款业务
if num=="1":
while True:
# 与整数比较,变量需要为int类型;强转int只对数字型字符串有效
# 输入可能有整数、小数、字母字符等
deposit=input("请输入存款金额:")
if deposit.isnumeric() and int(deposit)>0:
bal=bal+int(deposit)
print("存款成功!\n存入:",deposit,"\t账户余额:",bal)
break # 终止当前while循环,进入上一层循环(若有):选择业务
else:
print("存款金额必须为正整数,请重新输入!")
continue # 跳出本次循环,进入下一次循环:继续输入存款金额
# 取款业务
elif num=="2":
while True:
withdraw=input("请输入取款金额:")
if withdraw.isnumeric():
if int(withdraw)>0 and int(withdraw)<=bal:
bal=bal-int(withdraw)
print("取款成功!\n取出:",withdraw,"\t账户余额:",bal)
break
elif int(withdraw)>bal:
print("余额不足,请重新输入!")
continue
else:
print("取款金额必须为正整数,请重新输入!")
continue
else:
print("取款金额必须为正整数,请重新输入!")
continue
# 退卡业务
elif num=="3":
print("退卡成功!")
exit() # 退出程序
else:
print("输入有误,请重新选择!")
continue # 跳出本次循环,进行下一次循环:选择业务
四、用例设计&执行(简化模式)
1. 登录业务
编号 | 用例描述 | 预期结果 |
---|---|---|
01 | 首次输入卡号密码正确 | 登录成功,出现对应卡号的欢迎信息 |
02 | 输入错误1次,再次输入正确 | 输入错误:登录失败,系统提示“卡号or密码输入错误,请重新输入!” 输入正确:登录成功,出现对应卡号的欢迎信息 |
03 | 连续输入错误2次,再次输入正确 | 输入错误:登录失败,系统提示“卡号or密码输入错误,请重新输入!” 输入正确:登录成功,出现对应卡号的欢迎信息 |
04 | 连续输入错误3次 | 连续第1/2次输入错误:登录失败,系统提示“卡号or密码输入错误,请重新输入!” 连续第3次输入错误:登录失败,系统提示“已连续3次输入错误,请联系银行柜台解锁” |
执行结果:
2. 存款业务
预置条件:使用银行卡1001,初始账户余额=100
编号 | 用例描述 | 预期结果 |
---|---|---|
01 | 输入非0的正整数:1000 | 系统提示“存款成功! 存入:1000 账户余额:1100” |
02 | 输入非数字:abc100 | 系统提示“存款金额必须为正整数,请重新输入!” |
03 | 输入负数:-200 | 系统提示“存款金额必须为正整数,请重新输入!” |
04 | 输入0 | 系统提示“存款金额必须为正整数,请重新输入!” |
05 | 不输入,直接提交 | 系统提示“存款金额必须为正整数,请重新输入!” |
执行结果:
3. 取款业务
预置条件:使用银行卡1002,初始账户余额=200
编号 | 用例描述 | 预期结果 |
---|---|---|
01 | 输入非0的正整数,且输入的数字(150)<账户余额 | 取款成功,系统提示“取款成功! 取出:150 账户余额:50” |
02 | 输入非0的正整数,且输入的数字(50)=账户余额 | 取款成功,系统提示“取款成功! 取出:50 账户余额:0” |
03 | 输入非数字:aaabbb | 取款失败,系统提示“取款金额必须为正整数,请重新输入!” |
04 | 输入负数:-100 | 取款失败,系统提示“取款金额必须为正整数,请重新输入!” |
05 | 输入0 | 取款失败,系统提示“取款金额必须为正整数,请重新输入!” |
06 | 不输入,直接提交 | 取款失败,系统提示“取款金额必须为正整数,请重新输入!” |
07 | 取款金额(300)>账户余额 | 取款失败,系统提示“余额不足,请重新输入!” |
执行结果:
4. 退卡业务
编号 | 用例描述 | 预期结果 |
---|---|---|
01 | 登录成功后,业务选择“退卡”,不作其他交易 | 系统提示“退卡成功!”,并退出程序 |
执行结果:
5. 存款、取款、退卡-交叉业务
预置条件:使用银行卡1003,初始账户余额=300
编号 | 用例描述 | 预期结果 |
---|---|---|
01 | 存款,退卡 | 存款:存款成功,并显示存入金额、账户余额 退卡:系统提示“退卡成功!”,并退出程序 |
02 | 存款,存款,退卡 | <描述省略> |
03 | 存款,取款,退卡 | <描述省略> |
04 | 存款,存款,取款,取款,存款,退卡 | <描述省略> |
05 | 取款,退卡 | 取款:取款成功,并显示取出金额、账户余额 退卡:系统提示“退卡成功!”,并退出程序 |
06 | 取款,取款,退卡 | <描述省略> |
07 | 取款,取款,存款,存款,取款,退卡 | <描述省略> |
执行结果: