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

你可能感兴趣的:(Python小案例--ATM系统)