模拟自动取款机,数据临时存放在变量列表中,实现一个取款机上的存取款模拟效果,包括登录、退出、查询余额、取款和存款功能。
目录
(二)showAccout(accout,passwd,accoutList):
(四)checkAccout(accout, passwd):
这里编写一个Python程序,来实现以上功能,当然仅仅是通过一些文本来表示。
(一)设置账号信息列表
对于一个类似银行、应用用户群体这样庞大的数据群体,多数是采用数据库进行管理,当然对于数据库我们也需要有一定的了解之后,才能使用。这里先用一个列表存储一些数据:
# 账号信息列表
accoutList = [{'accout':'442018001','name':'Allen','passwd':'123456','balance':100.00},
{'accout':'442018002','name':'Bonus','passwd':'abcdef','balance':100.00},
{'accout':'442018003','name':'Carrie','passwd':'hello','balance':200.00},
{'accout':'442018004','name':'Bob','passwd':'hello','balance':400.00}]
(二)showAccout(accout,passwd,accoutList):
自定义showAccout()函数实现管理员功能,这里设置了管理员模式下可以查看所有用户的个人信息:
# 进入管理员系统,显示所有账户信息
def showAccout(accout,passwd,accoutList):
if accout == "1" and passwd == "1":
if len(accoutList) == 0:
print("(I) No Data from Accout")
return
print("|{0:<10} | {1:<10} | {2:<10} | {3:<10}".format("accout",
"name","passwd","balance"))
print("-"*40)
for i in range(len(accoutList)):
print("|{0:<10} | {1:<10} | {2:<10} | {3:<10}".format(accoutList[i]['accout'],
accoutList[i]['name'],"******",accoutList[i]['balance']))
print("")
input("按回车键退出管理员系统:")
return
else:
return None
format方法:
format方法是一种强大的字符串格式化脚本,称得上是一种微型语言,几乎为操作字符串提供了无限可能。不过这里只是简单介绍,更多的了解参见标准库文档的字符串格式部分。
除了使用format方法格式化字符串,还可以使用%格式化字符串。
(三)showLoginPage():
涉资一个文本登录界面:
# 登录界面
def showLoginPage():
print("+-------------------------------+")
print("+ +")
print("+ ATM +")
print("+ +")
print("+-------------------------------+")
print(" (请插卡) ")
(四)checkAccout(accout, passwd):
# 验证账号及密码
def checkAccout(accout, passwd):
for i in range(len(accoutList)):
if accout == accoutList[i]['accout'] and passwd == accoutList[i]['passwd']:
return i
# 没有匹配成功
return -1
(五)showMainPage():
# 初始化界面
def showMainPage():
print("")
print("="*13, "自动存取款系统", "="*13)
print("{0:1} {1:13} {2:15}".format(" ", "1.查询",
"2.取款"))
print("{0:1} {1:13} {2:15}".format(" ", "3.存款",
"4.退出系统"))
print("="*42)
(六)atmService(index):
# 自动取款机业务
def atmService(index):
key = input("请输入对应的选择:")
print("")
if key == "1":
print("="*14, "查询账户余额", "="*14)
#showAccout(accoutList)
print("> 账户姓名:", accoutList[index]['name'])
print("> 当前账户:", accoutList[index]['accout'])
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
return 0
elif key == "2":
print("="*14, "取款", "="*14)
money = input("请输入取款金额(元):¥")
if int(money) > 0 and int(money) <= accoutList[index]['balance']:
accoutList[index]['balance'] -= int(money)
print("> 取款成功!*^_^*")
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
print("(I) 请取走现金并妥善保管")
return 0
else:
print("(E) 余额不足,取款失败")
return -1
elif key == "3":
print("="*14, "存款", "="*14)
money = input("> 存入金额(元):¥")
accoutList[index]['balance'] += int(money)
print("> 存款成功!*^_^*")
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
return 0
elif key == "4":
print("="*18, "再见", "="*18)
return 1
else:
print("Try again!")
return -1
(七)开始循环
# 开始啦
showLoginPage()
accout = input("请输入账号:")
passwd = input("请输入密码:")
showAccout(accout,passwd,accoutList)
index = checkAccout(accout, passwd)
if index >= 0:
print("(I) 登录成功")
while True:
showMainPage()
if 1 == atmService(index):
break
input("按回车键继续:")
else:
print("(I) 登录失败,请检查账号和密码")
源代码:
'''
Name: 模拟自动取款机
Athor: 卢华东
Date: 2018-06-18
Description: 数据临时存放在变量列表中,实现一个取款机上的存取款
模拟效果,包括登录、退出、查询余额、取款和存款功能
'''
# 账号信息列表
accoutList = [{'accout':'442018001','name':'Allen','passwd':'123456','balance':100.00},
{'accout':'442018002','name':'Bonus','passwd':'abcdef','balance':100.00},
{'accout':'442018003','name':'Carrie','passwd':'hello','balance':200.00},
{'accout':'442018004','name':'Bob','passwd':'hello','balance':400.00}]
# 进入管理员系统,显示所有账户信息
def showAccout(accout,passwd,accoutList):
if accout == "1" and passwd == "1":
if len(accoutList) == 0:
print("(I) No Data from Accout")
return
print("|{0:<10} | {1:<10} | {2:<10} | {3:<10}".format("accout",
"name","passwd","balance"))
print("-"*40)
for i in range(len(accoutList)):
print("|{0:<10} | {1:<10} | {2:<10} | {3:<10}".format(accoutList[i]['accout'],
accoutList[i]['name'],"******",accoutList[i]['balance']))
print("")
input("按回车键退出管理员系统:")
return
else:
return None
# 登录界面
def showLoginPage():
print("+-------------------------------+")
print("+ +")
print("+ ATM +")
print("+ +")
print("+-------------------------------+")
print(" (请插卡) ")
# 验证账号及密码
def checkAccout(accout, passwd):
for i in range(len(accoutList)):
if accout == accoutList[i]['accout'] and passwd == accoutList[i]['passwd']:
return i
# 没有匹配成功
return -1
# 初始化界面
def showMainPage():
print("")
print("="*13, "自动存取款系统", "="*13)
print("{0:1} {1:13} {2:15}".format(" ", "1.查询",
"2.取款"))
print("{0:1} {1:13} {2:15}".format(" ", "3.存款",
"4.退出系统"))
print("="*42)
# 自动取款机业务
def atmService(index):
key = input("请输入对应的选择:")
print("")
if key == "1":
print("="*14, "查询账户余额", "="*14)
#showAccout(accoutList)
print("> 账户姓名:", accoutList[index]['name'])
print("> 当前账户:", accoutList[index]['accout'])
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
return 0
elif key == "2":
print("="*14, "取款", "="*14)
money = input("请输入取款金额(元):¥")
if int(money) > 0 and int(money) <= accoutList[index]['balance']:
accoutList[index]['balance'] -= int(money)
print("> 取款成功!*^_^*")
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
print("(I) 请取走现金并妥善保管")
return 0
else:
print("(E) 余额不足,取款失败")
return -1
elif key == "3":
print("="*14, "存款", "="*14)
money = input("> 存入金额(元):¥")
accoutList[index]['balance'] += int(money)
print("> 存款成功!*^_^*")
print("> 当前余额:", accoutList[index]['balance'], end='\n\n')
return 0
elif key == "4":
print("="*18, "再见", "="*18)
return 1
else:
print("Try again!")
return -1
# 开始啦
showLoginPage()
accout = input("请输入账号:")
passwd = input("请输入密码:")
showAccout(accout,passwd,accoutList)
index = checkAccout(accout, passwd)
if index >= 0:
print("(I) 登录成功")
while True:
showMainPage()
if 1 == atmService(index):
break
input("按回车键继续:")
else:
print("(I) 登录失败,请检查账号和密码")
对于数据的处理,最好的方式就是用数据库了。python提供了pygame模块用来连接数据库,这里只是简单使用一个列表来临时存储账户信息,随着编译器的关闭,数据也就被清除了。要想让数据留下来,可以使用数据库。后面我会尝试使用数据库来存储数据。