Python实现ATM系统

作者:我和我的口袋裙 时间:2021-10-17 05:20:46 

今天偶尔在知乎上看到某大佬用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

标签:python,ATM,系统
0
投稿

猜你喜欢

  • Python数据类型转换详解

    2021-03-04 04:11:13
  • JavaScript防抖与节流超详细全面讲解

    2023-09-22 07:05:13
  • 解决出现SoapFault (looks like we got no XML document)的问题

    2023-11-19 04:21:01
  • python数据分析之单因素分析线性拟合及地理编码

    2021-02-09 06:46:20
  • python递归删除指定目录及其所有内容的方法

    2022-12-12 02:42:51
  • JavaScript图片放大镜效果

    2009-10-19 22:15:00
  • 如何做一个计数器并让人家申请使用?

    2010-07-11 21:13:00
  • VS2008 和.NET 3.5 Beta2常见问题的解决方案

    2007-09-23 12:33:00
  • httpwatch 的页面元素加载时间表

    2008-02-13 08:28:00
  • 解决oracle用户连接失败的解决方法

    2011-01-04 19:35:00
  • Web开发与JavaScript编辑利器——Aptana Studio简介

    2008-05-05 13:32:00
  • 在MySQL数据库中如何来复位根用户的密码

    2008-12-03 16:57:00
  • asp产生不重复的随机数

    2008-06-03 13:29:00
  • 支持鼠标拖拽的简单目录树代码

    2011-07-01 12:34:09
  • 用途相似的标签

    2008-05-23 13:11:00
  • go build失败报方法undefined的解决过程

    2023-06-18 15:07:36
  • 一个小时内学习 SQLite 数据库

    2012-05-22 18:51:30
  • 你知道怎么在淘宝里进行投诉吗?

    2008-06-04 12:00:00
  • python画环形图的方法

    2023-02-12 09:54:24
  • 如何用python抓取B站数据

    2023-07-19 20:02:55
  • asp之家 网络编程 m.aspxhome.com