Python实现简易ATM系统:从逻辑到代码的完整解析

Mason
Mason
发布时间:2026-10-13| 6人浏览过
原创

本文基于Python基础语法,详细解析了一个简易ATM系统的实现过程。内容涵盖主界面设计、账号与密码验证逻辑、余额查询、存款取款功能及密码修改模块。通过模块化函数设计与循环控制,展示了如何将基础编程知识应用于实际业务场景,适合Python初学者参考学习。

Python ATM系统案例背景与实现思路

近期在知乎平台浏览到一位技术专家分享的Python编写的ATM系统案例,通过研读其实现思路与源码,获得了不少启发。基于此,结合个人对Python编程的理解及现有知识储备,重新梳理并实现了该ATM系统。以下是具体的案例解析过程。

案例核心功能剖析:

系统主要包含以下功能模块: 1. ATM主界面展示。 2. 用户账号身份验证。 3. 账户余额查询。 4. 存款操作。 5. 取款操作。 6. 用户密码修改。

实现思路说明:上述功能模块被划分为独立的功能块,通过定义Python函数、使用循环结构以及返回值机制来协同工作。以下直接展示具体代码实现。

ATM系统核心功能代码解析

代码实现部分:

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\'退出操作')

注:此处采用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' # 密码错误

注:该模块利用循环遍历与返回值机制,实现卡号与密码的对比检测。

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中的函数定义与返回值机制在处理逻辑分支时具有显著优势。当然,该案例仍有优化空间,欢迎读者提出建议,后续将持续迭代改进。

以上内容为本文全部分享,希望能对读者的Python学习有所助益,也欢迎大家关注与支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。