参考学生信息管理,来实现一个自动取款机的存取款模拟效果。要求有登陆、退出、查询余额、取钱,存钱等操作
- 页面展示与登录
- 余额查询
- 存款
- 取款
- 退出程序
2 解题提示
本题是对模块一整体练习
利用while True对整个系统循环,当用户退出程序,回到登录页面
页面布局使用建议使用format格式化,使用空格进行填充
功能选择使用分支结构,按照用户选择进行相应的功能函数
每个功能使用函数封装,需要使用某个功能时,进行相应的功能函数的调用
登录功能,添加计数功能,密码错误三次退出程序
存取款对金额进行改变时,在查询余额时,进行相应的改变
3 打分标准
本题共计40分
界面展示5分
登录、退出、查询、取钱、存钱共计5个功能,每个功能6分
代码注释、规范5分
4 要点解析
4.1 列表和字典的取值
列表是通过索引进行取值,字典是通过键值来获取。
lis = ['user1', 'user2', 'user3', 'user4']
print(lis[2])
dic = {'user':'a123', 'pw':'123', 'money':8888}
print(dic['money'])
users_data = [
{'user':'a123', 'pw':'123', 'money':8888},
{'user':'b123', 'pw':'123', 'money':0},
{'user':'c123', 'pw':'123', 'money':188888},
{'user':'d123', 'pw':'123', 'money':1328}
]
print(users_data[2]['money'])
4.2 获取列表中字典的下标
如何确定后续的操作是对当前登录的用户进行操作呢?
需要把用户的全部信息提取出来,赋予一个新的变量,然后对这个变量进行操作。
# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
users_data = [
{'user':'a123', 'pw':'123', 'money':8888},
{'user':'b123', 'pw':'123', 'money':0},
{'user':'c123', 'pw':'123', 'money':18},
{'user':'d123', 'pw':'123', 'money':1328}
]
for i, user_dict in enumerate(users_data):
print(i,user_dict)
enumerate函数 参考链接
4.3 Input
input() 函数接受一个标准输入数据,返回为 string 类型。
a = input('请输入内容:')
print(a)
print(type(a))
4.4 登录验证功能
如何判断我们输入的用户存在用户列表中?
users_data = [
{'user':'a123', 'pw':'123', 'money':8888},
{'user':'b123', 'pw':'123', 'money':0},
{'user':'c123', 'pw':'123', 'money':18},
{'user':'d123', 'pw':'123', 'money':1328}
]
user_list = []
user = input('请输入您的用户名:')
for i, user_dict in enumerate(users_data):
if user_dict['user'] == user:
user_list.append(user_dict)
if user_list != []:
print('登录成功')
else:
print('用户不存在')
5 代码实现
# 自动取款机
'''
ATM机所需要的功能
1·用户数据
2·交互界面
3·登陆
4·余额
5·取钱
6·存钱
7·退出
'''
# 用户数据
users_data = [
{'user':'a123', 'pw':'123', 'money':8888},
{'user':'b123', 'pw':'123', 'money':0},
{'user':'c123', 'pw':'123', 'money':18},
{'user':'d123', 'pw':'123', 'money':1328}
]
# 定义一个空列表的目的是让atm记住当前登陆的用户信息
user_list = []
# 交互界面
def show_face():
'''
给用户展示的交互界面
:return:
'''
print('=' * 33, 'ATM操作界面', '=' * 33)
print('|{:^36}|{:^36}|'.format('1.登陆', '2.余额'))
print('-' * 78)
print('|{:^36}|{:^36}|'.format('3.存钱', '4.取钱'))
print('-' * 78)
print('|{:^74}|'.format('5.退出'))
print('=' * 78)
# 登入
def login():
'''
判断登陆信息是否存在用户数据中,并临时记录在user_list中
:return:
'''
# 声明user_list是全局变量,方便登陆函数添加当前登陆用户的信息给其他函数用
global user_list
# 等待用户输入自己的账号密码
key_u = input('请输入用户名:')
key_p = input('请驶入密码:')
# 用遍历和枚举得到一个索引序列,数据下标
for i, user_dict in enumerate(users_data):
# 判断用户输入的信息是否存在
if user_dict['user'] == key_u and user_dict['pw'] == key_p:
# 当用户的信息存在后,把索引和user存到user_list列表中
user_list.append(i)
user_list.append(user_dict['user'])
# 判断列表是不是为空
if user_list != []:
# 不为空是,代表用户输入的用户存在,则提示登陆成功
print('{:^76}'.format('------登陆成功------\n'))
# 否则就是没有找到用户的数据,代表密码或账户错误
else:
# 提示用户需不需要重新输入,输入y重新引用本函数,否则结束本函数
if input('您输入的密码有误,是否重新输入?y/n') == 'y':
login()
# 登出
def logOut():
'''
登出,也是退出的函数,后期韩式可扩展成退出时保存用户操作的信息到数据库
:return:
'''
print('='*78)
print('='*30,'感谢使用,再见!!!','='*29)
print('=' * 78)
# 余额
def balance():
'''
查询用户的余额
:return:
'''
print('=' * 78)
# 通过登入函数中临时保存的列表中的索引,就可以找出当前用户的余额信息
print(' '*26,'您的账户余额为{:^8}元!'.format(users_data[user_list[0]]['money']))
print('=' * 78)
# 存钱
def save_money():
'''
存钱函数
:return:
'''
# 当用户输入的不是整数,报错并返回重新调用本函数,报错时使用return组织程序继续往下运行
key_sm = float(input('请输入您要存款的金额:'))
# is_integer()判断一个浮点是否为整数,小数为FALSE
if key_sm.is_integer() == False:
print('只能输入整数!!!')
save_money()
else:
# 把用户输入的整数加到用户数据中,用户数据的定位也来自登入提供的临时列表
users_data[user_list[0]]['money'] += key_sm
print('=' * 78)
# 使用format占位
print(' '* 28,'您已成功存款{:^8}元!'.format(key_sm))
print('='* 78)
# 取钱
def draw_money():
'''
取钱
:return:
'''
# 当用户输入的不是整数,报错并返回重新调用本函数,报错时使用return组织程序继续往下运行
key_dm = float(input('请输入您要取款的金额:'))
# 判断输入的是否为整数,整数返回True
if key_dm.is_integer() == False:
print('只能输入整数!!!')
draw_money()
# 判断余额是否大于取款金额,当账户余额充足,执行取款
if users_data[user_list[0]]['money'] >= key_dm:
users_data[user_list[0]]['money'] -= key_dm
print('=' * 78)
print(' '*28,'您已成功取款{:^8}元!'.format(key_dm))
print('=' * 78)
else: #当用户余额不足是,告知,并结束本函数
print('=' * 78)
print('{:^78}'.format('余额不足!!!'))
print('=' * 78)
head()
# 总控制函数
def head():
'''
界面控制
:return:
'''
# 使用while循环保证用户输入后能继续使用
while True:
# 调用界面
show_face()
key = input('请选择:')
if key == '1':
# 判断用户是否登陆,如已登陆就提醒,没登陆就执行登陆
if user_list != []:
print('-'*20,'您已经登陆,如要登陆新账户,请先退出!','-'*20)
else:
login()
elif key == '2':
# 判断用户是否登陆,未登陆就提醒登陆,已登陆前往余额函数
if user_list == []:
print('='*28,'您尚未登陆,请先登录!!!','='*28)
else:
balance()
input('任意键返回!!!')
elif key == '3':
# 判断用户是否登陆,未登陆就提醒登陆,已登陆前往存钱函数
if user_list == []:
print('=' * 28, '您尚未登陆,请先登录!!!', '=' * 28)
else:
save_money()
input('任意键返回!!!')
elif key == '4':
# 判断用户是否登陆,未登陆就提醒登陆,已登陆前往取钱函数
if user_list == []:
print('=' * 28, '您尚未登陆,请先登录!!!', '=' * 28)
else:
draw_money()
input('任意键返回!!!')
elif key == '5':
# 前往登出函数
logOut()
break
else:
# 如果输入指定意外的案件,提醒有误
print('输入有误,请重新输入!!!')
head()
版权声明:本文为CSDN博主「BeefpasteC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。