#1、登陆账号的校验
def check_account(account_info):
#flag1 = True
while True:
# 获取用户输入账号
user_input = input("请输入账号:")
# 判断账号是否存在
if user_input in account_info:
# 账号输入正确,退出循环,去输入密码
# flag1 = False
return user_input
# 账号不存在
else:
# 提示账号不存在
print("输入错误,账号未注册")
# 让用户选择是否重新输入,需要获取用户再次输入
mark = input("是否重新输入账号: 其他值: 不重新输入 ,1:重新输入:")
if mark == "1":
# 重新输入账号
print("重新输入账号")
continue
else:
print("退出程序")
exit()
#2、登陆密码校验
def check_passwd(account_info,user_input):
#flag2 = True
error_count = 0
while True:
# 获取密码输入
passwd_input = input("请输入密码:")
if passwd_input == account_info[user_input]["passwd"]:
# 密码正确,进入服务选择页面
print("密码:", account_info[user_input]["passwd"])
# flag2 = False
# flag0 = False # 退出一级菜单循环
return passwd_input
else:
error_count += 1
# 密码输入错误
# 输错密码的说计数,输错一次计数一次
if error_count == 3:
exit() # 退出程序
else:
mark = input("是否重新输入密码:1,重新输入,其他,退出: ")
if mark == "1":
if error_count < 3:
continue
else:
exit() # 退出程序
else:
exit() # 退出程序
#3、注册账号校验
def check_account_register(account_info):
print("2-注册")
# 账号校验
# flag3 = True
while True:
# 账号校验,用户输入的数据类型是str
account_input = input("输入注册账号,账号必须是纯数字: ")
# 纯数字校验
if account_input.isnumeric():
# 账号是否注册校验
if account_input not in account_info:
# 走校验密码流程
# flag3 = False
return account_input
else:
mark = input("账号已存在\n请选择是否重新输入,1,重新输入账号,其他值,退出程序:")
if mark == "1":
# 重新输入账号
continue
else:
# 退出程序
exit()
else:
mark = input("账号必须是纯数字\n请选择是否重新输入,1,重新输入账号,其他值,退出程序:")
if mark == "1":
# 重新输入账号
continue
else:
# 退出程序
exit()
# 注册密码校验
def check_passwd_register():
#flag4 = True
while True:
# 获取用户输入
passwd_input = input("请输入密码,密码必须是6位纯数字:")
# 密码校验是否为6位纯数字
if passwd_input.isnumeric() and len(passwd_input) == 6:
# 密码输入正确,继续校验用户名
print("密码输入正确")
#flag4 = False
return passwd_input
else:
print("不是6位纯数字,选择是否重新输入密码")
mark = input("密码必须是6位纯数字\n请选择是否重新输入,1,重新输入密码,其他值,退出程序:")
if mark == "1":
# 重新输入账号
continue
else:
# 退出程序
exit()
#注册姓名校验
def check_name_register():
#flag5 = True
while True:
name_input = input("请输入开户姓名:")
if name_input:
print("开户姓名输入正确")
#flag5 = False
return name_input
else:
mark = input("开户姓名不能为空\n请选择是否重新输入,1,重新输入开户姓名,其他值,退出程序:")
if mark == "1":
# 重新输入账号
continue
else:
# 退出程序
exit()
#开户金额校验
def check_amount_register():
#flag6 = True
while True:
amount_input = input("请输入开户金额:")
if amount_input.isnumeric():
print("开户金额输入正确")
# flag6 = False
return amount_input
else:
mark = input("开户姓名不能为空\n请选择是否重新输入,1,重新输入开户金额,其他值,退出程序:")
if mark == "1":
# 重新输入账号
continue
else:
# 退出程序
exit()
# 保存注册信息
def save_register(account_info,account_input,passwd_input,name_input,amount_input):
register_info = {account_input: {"passwd": passwd_input, "name": name_input, "balance": float(amount_input), "bill": []}}
account_info.update(register_info)
print(f"用户注册成功,注册信息:{register_info}")
if account_input in account_info:
print("信息保存成功")
print(f"所有用户信息{account_info}")
else:
print("信息保存失败")
#1-查询余额
def select(account_info,user_input):
print("1-查询余额")
balance = account_info[user_input]["balance"]
name = account_info[user_input]["name"]
msg = f"尊敬的 {name} 先生/女士,您的账户余额为: {balance}元"
print(msg)
#2-取款
def withdraw(account_info,user_input):
print("2-取款")
# 取款功能
while True:
withdraw_input = input("取款金额必须是纯数字,必须是100的整数倍且必须小于账户余额,单笔小于3000\n请输入取款金额:")
# 出款账户
balance = account_info[user_input]["balance"]
if withdraw_input.isnumeric() and int(withdraw_input) % 100 == 0 and int(withdraw_input) <= 3000 and int(withdraw_input) <= balance:
print("满足取款条件,可以取款")
# 更新余额 = 余额 - 取款金额
account_info[user_input]["balance"] = balance - int(withdraw_input)
account_info[user_input]["bill"].append(f"取款支出-{withdraw_input}")
print(f"取款金额:{withdraw_input}")
print(f"账户余额:{account_info[user_input]['balance']}")
mark = input("是否继续取款,1,继续取款,其他值,退出程序:")
if mark == "1":
# 继续取款
continue
else:
# 退出取款循环
break
else:
mark = input("取款金额必须是纯数字,必须是100的整数倍且必须小于账户余额,单笔小于3000\n请输入取款金额,1,重新输入取款金额,其他值,退出程序:")
if mark == "1":
# 重新输入取款金额
continue
else:
#退出取款循环
break
#3-存款
def deposit(account_info,user_input):
print("3-存款")
#flag8 = True
while True:
amount_input = input("存款金额必须为纯数字,100的整数倍,且小于1万,请输入存款金额: ")
balance = account_info[user_input]["balance"]
if amount_input.isnumeric() and int(amount_input) % 100 == 0 and int(amount_input) <= 10000:
print("存款金额输入没问题,动账")
account_info[user_input]['balance'] = balance + int(amount_input)
account_info[user_input]["bill"].append(f"存款收入+{amount_input}")
print(f"存款成功,存款金额为{amount_input}")
print(f"存款成功,账户余额为{account_info[user_input]['balance']}")
mark = input("是否继续存款,1,继续存款,其他值,退出程序:")
if mark == "1":
# 继续存款
continue
else:
# 退出存款循环
break
else:
mark = input("存款金额输入有误,存款金额必须为纯数字,100的整数倍,且小于1万,是否重新输入,1,重新输入,其他值,退出程序:")
if mark == "1":
# 继续存款
continue
else:
# 退出存款循环
break
#4-转账
def transfer(account_info,user_input):
print("4-转账")
flag9 = True
flag10 = True
while flag9:
transfer_input = input("只支持同行转账,请输入收款账号: ")
# 付款账户余额
pay_account = account_info[user_input]["balance"]
if transfer_input in account_info and transfer_input != user_input:
print("收款账号输入正确,继续输入转账金额")
while flag10:
amount = input("只能为纯数字,且不能大于账户余额,请输入转账金额: ")
if amount.isnumeric() and int(amount) <= pay_account:
print("转账金额输入正确,动账")
# 增加收款账号余额
account_info[transfer_input]['balance'] += int(amount)
account_info[transfer_input]["bill"].append(f"转账收入+{amount}")
# 减少付款账户余额
account_info[user_input]["balance"] -= int(amount)
account_info[user_input]["bill"].append(f"转账支出-{amount}")
print(f"转账金额:{amount}")
print(f"收款账户余额: {account_info[transfer_input]['balance']}")
print(f"付款账户余额: {account_info[user_input]['balance']}")
mark = input("是否继续输入转账金额,1,继续输入转账金额,其他值,退出程序:")
if mark == "1":
# 继续转账
continue
else:
flag10 = False # 内存循环
flag9 = False # 外层循环
else:
# print("转账金额输入有误,是否重新输入,1,重新输入,其他值,退出程序")
mark = input("是否继续输入转账金额,1,继续输入转账金额,其他值,退出程序:")
if mark == "1":
# 继续转账
continue
else:
flag10 = False # 内存循环
flag9 = False # 外层循环
else:
print("不支持跨行转账,且收款账号不能与付款账号一致")
mark = input("是否继续转账,1,继续转账,其他值,退出程序:")
if mark == "1":
# 继续转账
continue
else:
flag9 = False
# 5-流水
def bill(user_input):
print("5-交易流水")
bill = account_info[user_input]["bill"]
bill_msg = f"账号:{user_input}的交易流水如下:"
print(bill_msg)
for val in bill:
print(val)
#==============================================================================
# 一级菜单
def first_menu(account_info):
"""
:param account_info: 账号信息
:return:
"""
while True:
#一级菜单
print('*************** 欢迎使用蜗牛ATM **************')
print('************ 1-登录 2-注册 3-退出 ************')
first_menu = input("请选择服务:")
if first_menu == "1":
# 账号校验
user_input = check_account(account_info)
# 密码校验
check_passwd(account_info, user_input)
#退出一级菜单循环
return user_input
elif first_menu == "2":
# 账号校验
account_input = check_account_register(account_info)
print("2-注册")
# 密码校验
passwd_input = check_passwd_register()
# 姓名校验
name_input = check_name_register()
# 开户金额校验
amount_input = check_amount_register()
#保存注册信息
save_register(account_info, account_input, passwd_input, name_input, amount_input)
else:
print("3-退出")
exit()
#二级菜单
def second_menu(account_info,user_input):
while True:
print("*** 1-查询 2-取款 3-存款 4-转账 5-流水 6-返回 7-退出 ***")
menu = input("进入二级菜单,请选择服务:")
if menu == "1":
# 1-查询
select(account_info,user_input)
continue
elif menu == "2":
# 2-取款
withdraw(account_info,user_input)
elif menu == "3":
# 3-存款
deposit(account_info,user_input)
elif menu == "4":
#4-转账
transfer(account_info,user_input)
elif menu == "5":
bill(user_input)
elif menu == "6":
#返回
break
else:
exit()
#执行入口
def start(account_info):
try:
print(name)
except Exception as e:
print(e)
print("报错了但是我不想处理")
while True:
#一级菜单
user_input = first_menu(account_info)
#二级菜单
second_menu(account_info,user_input)
if __name__ == '__main__':
account_info = {
"1001": {"passwd": "123456", "name": "张三", "balance": 1000, "bill": []},
"1002": {"passwd": "123456", "name": "李四", "balance": 1000, "bill": []},
"1003": {"passwd": "123456", "name": "王五", "balance": 1000, "bill": []}
}
start(account_info=account_info)
新手练习系统:系统账户系统
最新推荐文章于 2024-10-19 23:35:17 发布