python atm银行取款系统_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的函数和返回值是个特别神奇的东西,当然这个案例还有很大的改进空间,大家有什么好的建议也可以给我留言,我之后会慢慢进行改良哒!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-02-14

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【摘录】BREW应用的c++实现注意点

BREW应用的c实现注意点 从VC6.0的调试器来说吧&#xff0c;肯定支持C语言了&#xff0c;对于ARM或者GCC来说&#xff0c;也是有可用的C编译器&#xff0c;而且任何支持BREW的手机都可以运行通过ARM或者GCC编译连接出来的目标代码&#xff0c;所以从环境来说&#xff0c;BREW开发…

MapXtreme 包含所有自带坐标系一览

CoordSys 对象包含关于 X 和 Y 坐标如何与其在 Earth 上的位置相关联的基本信息。 每个 Geometry 或 Map 对象都有一个关联的坐标系。 CoordSys 对象包含对坐标系的详细说明。 CoordSysFactory 类提供了各种用于创建不同 CoordSys 对象的方法。 所有 CoordSys 对象都是只读的&a…

html4的语法,HTML——语法

文章目录页面结构一个标准的HTML页面如下&#xff1a;Document一、文档声明头标准的HTML页面&#xff0c;第一行是以开头的的语句&#xff0c;这就是文档声明头&#xff0c;即DocType Declaration&#xff0c;简称DTD。DTD可以告知浏览器使用哪种HTML或者XHTML规范。二、页面语…

如何学习streamdecoder类_2019年终巨献:一份拿下了阿里、网易、滴滴等大厂offer的学习笔记...

2019仅剩最后二十天&#xff0c;回顾今年初遇“寒冬”时&#xff0c;自己也挺慌的&#xff0c;但是经历过这么多次面试后&#xff0c;我才“醒悟”&#xff0c;所谓的“寒冬”&#xff0c;“冻死”的都是“衣服穿的少的”。年末了在这里做一个年度总结&#xff0c;今年面试了不…

自定义控件的构建(12)

Share 前面讲了模板的构建&#xff0c;我们忽略了一个细节&#xff0c;如果接触ASP.NET时间不长的话&#xff0c;一般都会看到数据表达式是<%#Eval(‘Name’)%>这种形式的&#xff0c; 那么我们为什么用<%#Container.Name%>这种形式呢&#xff0c;其实前者是ASP.NE…

矩阵快速幂 zoj-3690 Choosing number

题目链接&#xff1a; http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId4973 题目意思&#xff1a; 有n个人&#xff0c;有1——m个数&#xff0c;每个人可以选择1个数&#xff0c;要求相邻的两个人如果选的数相同则必须大于k,求选数的种数。 解题思路&#xff1a…

insertAfter()

<div id"b">bbbbbbbbb</div> <div>dddddd</div> JavaScript window.οnlοadfunction(){var a document.createElement("span");var b document.createTextNode("cssrain");a.appendChild(b);var mubiao document.getE…

python def 参数一直为false_在Python 3中,如果参数为False,则查找惯用的方法来评估为False...

我有一连串的功能,全部定义在课程其他地方&#xff1a;fus(roh(dah(inp)))其中inp是字典或bool(False).期望的结果是,如果inp或任何函数评估为False,则False由函数堆返回.我试图使用三元运算符,但是它们不能正确评估.def func(inp):return int(inp[value]) 1 if inp else Fals…

复试计算机网络与软件工程,2018华南理工大学软件工程复试经验贴

尘埃落定&#xff0c;昨天结束了复试&#xff0c;终于被拟录取了&#xff0c;只有真正经历过才知道不容易&#xff0c;一年来受到王道的很多帮助&#xff0c;论坛上软件工程的信息相对来说还是比较少的&#xff0c;所以也想分享下自己的一些经验&#xff0c;帮助后来人。本人普…

学计算机等级考试电脑版软件,计算机二级考试宝典电脑版

计算机二级考试宝典电脑版是一款专业的二级计算机内容学习软件。该软件由武汉大学团队真情研发&#xff0c;软件包含选择题1600道&#xff0c;非选择题109套&#xff0c;成功实现了考点和重点的全面覆盖式学习目的&#xff0c;对学生们学习起到了巨大的帮助。该版本是通过安卓模…

mysq进阶

学习资料&#xff1a; 官方文档&#xff1a;http://dev.mysql.com/doc/refman/5.0/en/tutorial.html 1.存储过程&#xff1a; 优点&#xff1a;业务逻辑封装在存储过程中&#xff0c;容易维护&#xff0c;执行效率也高。 缺点&#xff1a;不同的数据库功能函数等不一样&#xf…

归纳整理--第4篇--常用软件

CSDN博客不再经常更新&#xff0c;更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 随着软硬件设施的提高和网民网络生活的丰富&#xff0c;电脑上的软件越来越多。对于一个专业开发者来说&#xff0c;尤其如此。常用软件主要分2类。1.娱乐休闲类。普通网民使用的一些软…

获取主机的信息

BOOL GetLocalHostInfo(){   //得到主机名称   int nComputerNameLen;   nComputerNameLen MAX_COMPUTERNAME_LENGTH 1;   if(SOCKET_ERROR gethostname(m_chLocalHostName,nComputerNameLen))     return FALSE;   ///end//   ///得到主机IP地址   HOST…

python数据动画_[转载]Maya使用Python获取动画每帧的rotation数据

import maya.cmds asmcimport os#添加一个"Maya动画收集数据"窗口设置动画开始播放#win mc.window(title "Maya动画收集数据", w 400, h 40)#mc.frameLayout( lvFalse )#mc.playbackOptions( minTime0, maxTime20 )mc.select("jamie_arm_R",…

HTML使用vue的 event,vue-js 特殊变量$event常识

背景如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a;event.preventDefault();而在 IE 中&#xff0c;我们则需要写&#xff1a;event.returnValue false;jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只需要写&am…

创建非矩形的Windows 窗体

创建非矩形窗体的过程包含三个步骤&#xff1a;• 创建一个作为窗体图面的位图。&#xff08;一种有效的方式是&#xff0c;您可以从矩形中“裁剪掉”所需的窗体形状。&#xff09;• 创建Windows 应用程序项目&#xff0c;将其属性设置为移除标题栏并使用位图作为窗体背景。•…

python3装饰器例子_python 装饰器(三):装饰器实例(一)

示例 7-15 定义了一个装饰器&#xff0c;它会在每次调用被装饰的函数时计时&#xff0c;然后把经过的时间、传入的参数和调用的结果打印出来。示例 7-15 一个简单的装饰器&#xff0c;输出函数的运行时间importtimedefclock(func):def clocked(*args): #➊t0 time.perf_counte…

《c专家编程》笔记--define和typedef的区别

#include <stdio.h> #define peach int typedef int banana;int main(void){unsigned peach a;unsigned banana b;return 0; } 上面的代码中&#xff0c; unsigned banana b; 该行编译会出现错误。 因为typedef是一种彻底的“封装”类型&#xff0c;而#define只是简单的文…

ExtJs6 Desktop Demo 修改测试

一直用Extjs4&#xff0c; extjs6 的变化较大&#xff0c;这几天有兴趣研究一下&#xff0c;把自带的Demo的desktop做了些修改&#xff0c; 1.首先下载安装sencha cmd 2.然后 需要生成新项目 用sencha cmd 命令如下&#xff1a; sencha -sdk E:\ext-6.0.0 generate app linb…

包含html语言的超链接标记的网页_零基础入门 HTML 的 8 分钟极简教程

在今天&#xff0c;前端工程师已经成为研发体系中的重要岗位之一。可是与此相对的是&#xff0c;极少大学的计算机专业愿意开设前端课程&#xff0c;大部分前端工程师的知识&#xff0c;也都是在实践和工作中不断学习的。最近收到很多同学的后台留言&#xff0c;说希望多推出一…