Python实现ATM系统
作者:我和我的口袋裙 发布时间:2021-10-17 05:20:46
标签:python,ATM,系统
今天偶尔在知乎上看到某大佬用Python写的ATM系统案例,然后观摩了下他的实现思路和源码,感觉受益颇多,于是就根据自己的思路和目前掌握的Python编程基础将ATM实现了一下,以下是案例解析的过程:
案例剖析:
1.atm主页面显示.
2.账号验证.
3.查询余额.
4.存款.
5.取款.
6.修改密码.
ps:我的思路是将以上的功能分成几大块,通过函数,循环和返回值来实现,话不多说直接上代码.
代码:
1.atm主页面显示
def index(nowUser):
print('=' * 10, '自动存取款机', '=' * 10)
print(getName(nowUser), '欢迎登陆!')
print('{:<10}{:^10}{:<10}'.format('1.修改密码', ' ', '2.查询余额'))
print('{:<10}{:^12}{:<10}'.format('3.存钱', ' ', '4.取钱'))
print('输入\'exit\'退出操作')
ps:使用format来进行格式的定义.
2.账号验证
def getId(nowUser):
'''获取当前用户在列表中的位置'''
index = -1
for i in range(len(userList)):
if userList[i]['cardid'] == nowUser:
index = i # 如果用户存在则返回它在列表中的下标
break
return index # 如果用户不存在则返回-1
def getName(nowUser):
''' 获取用户姓名'''
index = getId(nowUser)
return userList[index]['name']
def checkUser(cardid, password):
'''自定义用户检测功能,包括卡号及密码检测'''
index = getId(cardid)
if index == -1: # 如果用户不存在
return 'noCardId' # 卡号不存在
else:
if userList[index]['cardid'] == cardid and userList[index]['password'] == password: # 用户存在并且账号密码正确
return 'login' # 密码正确
else:
return 'errorPW' # 密码错误
ps:使用循环和返回值来进行账号的对比和检测.
3.查询余额
def showMoney(nowUser):
'''查询余额'''
index = getId(nowUser)
print('您当前的账户余额为:', userList[index]['money'], '元')
4.存钱
def saveMoney(nowUser, money):
'''存钱'''
index = getId(nowUser)
print("输入的金额是:", money)
userList[index]['money'] += int(money)
print('存入成功!')
5.取钱
def drawMoney(nowUser, money):
'''取钱'''
index = getId(nowUser)
nowMoney = userList[index]['money']
if nowMoney >= int(money):
userList[index]['money'] -= int(money)
print('已取出', money, '元')
else:
print('账户余额不足!')
6.修改密码
def changePW(nowUser, newPW):
'''修改密码'''
index = getId(nowUser)
userList[index]['password'] = newPW
7.定义用户操作函数
# 用户操作
def userChoice(nowUser):
choices = ['1', '2', '3', '4', 'exit']
# 循环获取用户操作
while True:
index(nowUser)
choice = input('请选择操作:')
if choice == '1': # 选择修改密码
oldPW = input('请输入原始密码:')
flag = checkUser(nowUser, oldPW)
if flag == "errorPW":
# print('密码错误!请重新输入,或输入\'back\'返回上一级')
print('密码错误!返回主界面')
elif flag == 'login':
changePW(nowUser, input('请输入新密码:'))
print('修改密码成功!')
continue
elif choice == '2': # 选择查询余额
showMoney(nowUser)
continue
elif choice == '3': # 选择存钱
saveMoney(nowUser, input('请输入存入金额:'))
continue
elif choice == '4': # 选择取钱
drawMoney(nowUser, input('请输入取出金额:'))
continue
elif choice == 'exit':
main() # 返回主界面
elif choice not in choices:
print('错误操作,请重新输入选项!')
continue
8.定义main主函数
# 主界面
def main():
# 定义错误次数
errorTime = 0
if errorTime >= 3: # 错误次数达三次退出系统后清零
errorTime = 0
while True:
# crs登陆主界面
print('=' * 10, '自动存取款机', '=' * 10)
nowUser = ''
# 用户输入卡号和密码
cardid = input('请输入卡号:')
password = input('请输入密码:')
# 判断卡号密码是否存在正确
# 卡号不存在
flag = checkUser(cardid, password)
if flag == 'noCardId':
print('卡号不存在!请重新输入')
continue
# 密码错误
elif flag == 'errorPW':
errorTime += 1
print('密码错误!错误次数达三次将自动退出本系统!')
print("错误次数:", errorTime)
if errorTime >= 3: # 错误次数达三次自动退出
print('密码输错三次,自动退出系统!')
exit(0)
continue
# 卡号密码正确进入系统
else:
nowUser = cardid
userChoice(nowUser)
9.最后定义函数主入口,进行ATM系统的测试
if __name__ == '__main__':
main()
收获:
通过ATM案例 ,将之前学习的Python基础重新进行了一次巩固,梳理和融会贯通,个人感觉 Python的函数和返回值是个特别神奇的东西,当然这个案例还有很大的改进空间,大家有什么好的建议也可以给我留言,我之后会慢慢进行改良哒!
来源:https://blog.csdn.net/weixin_45522366/article/details/100736549


猜你喜欢
- 字符函数——返回字符值这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR
- 近日,朋友写一个关于成绩管理的系统,其中遇到一个小问题。如果按照SQLSERVER的ORDER 排序时,比如遇到两个100分,结果必然是名次
- 引言微信群的用户添加逻辑是 —— 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉
- 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable)。相对来说,多数SQL语句是可移植的,在SQL实现之间有
- 1.进入mysql/bin目录下输入mysqladmin processlist; 2.启动mysql,输入show processlist
- 操作系统:win7 64位旗舰版mysql压缩包:mysql-5.7.11-winx64.zip1. 解压MySQL压缩包将下载的MySQL
- 使用MySql的窗口函数统计数据时,发现一个小的问题,与大家一起探讨下。环境配置:mysql-installer-community-8.0
- Tqdm库比较常用,用于显示进度条。简单用法:from tqdm import tqdmfor i in tqdm(range(2)):
- 本文实例为大家分享了Python实现双人五子棋对局的具体代码,供大家参考,具体内容如下效果:自己需要两个棋子:服务器玩家全部代码:# 案列使
- 成天都要与样式打交道的朋友,相信对CSS选择符(CSS Selectors)都不会陌生。不过对于刚接触或者还不是很熟悉css的朋友来说,能够
- 一、读写excel数据利用pandas可以很方便的读写excel数据1.1 读:data_in = pd.read_excel('M
- 前言你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游?专业点的人使用 PhotoSh
- 一、JS介绍  Javascript是一种由Netscape(网景)的LiveScript发展而来的原型
- 目录一、前言二、使用1.vue2和vue3的不同2.页面某些数据不需要缓存3.动态设置keepAlive属性4.使用include,excl
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:create or replace procedure PROC_test is --D
- pandas每次多Sheet写入文件,只能一次性存入,不然每次会重写文件,最后只保留最后一次的写入。# !usr/bin env pytho
- 这个问题好像在各种数据库中都存在,该如何处理呢?一、SQL中:sql="CREATE TABLE phone&
- explain用于获取查询执行计划信息,一、语法只需要在select前加上explain即可,如:mysql> explain sel
- 1.定时器Timer定时器源码实现,和自定义一个线程方式一样,都是继承Thread类,重写了run()方法,只是实现的功能是延时执行一个函数
- 本文实例讲述了js实现简单的可切换选项卡效果的方法。分享给大家供大家参考。具体如下:如图,最简单的纯粹的选项卡第一步,当然是先写html代码