Python游戏编程(十六)模拟自动取款机

模拟自动取款机,数据临时存放在变量列表中,实现一个取款机上的存取款模拟效果,包括登录、退出、查询余额、取款和存款功能。

目录

(一)设置账号信息列表

(二)showAccout(accout,passwd,accoutList):

format方法:

(三)showLoginPage():

(四)checkAccout(accout, passwd):

 

(五)showMainPage():

(六)atmService(index):

(七)开始循环


这里编写一个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模块用来连接数据库,这里只是简单使用一个列表来临时存储账户信息,随着编译器的关闭,数据也就被清除了。要想让数据留下来,可以使用数据库。后面我会尝试使用数据库来存储数据。

发布了19 篇原创文章 · 获赞 10 · 访问量 4685

猜你喜欢

转载自blog.csdn.net/weixin_45755966/article/details/104389572