ATM

编写ATM程序实现下述功能,数据来源于文件db.txt

# coding:utf-8

user_info = {
    'username':None
}
import os
BASE_PATH = os.path.dirname(__file__)
DB_PATH = os.path.join(BASE_PATH, 'db')


def save(user_name, user_write):
    '''保存用户'''
    user_path = os.path.join(DB_PATH, f'{user_name}.txt')
    with open(f'{user_path}', 'w', encoding='utf-8')as f:
        f.write(user_write)

def select(user_name):
    '''查看用户'''
    user_path = os.path.join(DB_PATH, f'{user_name}.txt')
    if os.path.exists(user_path):
        with open(f'{user_path}', 'r', encoding='utf-8')as f:
            user_info = f.read().strip().split(':')
            return True, user_info
    else:
        return False, '用户不存在'


def login():
    '''用户登录'''
    user_name = input('请输入用户名:').strip()
    flag, msg = select(user_name)
    if flag:
        count = int(msg[3])
        while True:
            if count == 3:
                res = f'{msg[0]}:{msg[1]}:{msg[2]}:{count}'
                save(user_name, res)
                print('该用户已被冻结!')
                break
            user_pwd = input('请输入密码:').strip()
            if user_pwd == msg[1]:
                user_info['username'] = user_name
                print('登录成功!')
                break
            else:
                print('密码错误!')
                count += 1
                # print(count)
    else:
        print(msg, '请先注册')



def check_balance():
    '''查看余额'''
    if user_info['username']:
        username = user_info['username']
        flag, msg = select(username)
        print(f'{username}余额为:{msg[2]}')
    else:
        print('用户没有登录,请先登录!')
        login()

def withdraw():
    '''提现功能'''
    if user_info['username']:
        flag, msg = select(user_info['username'])
        balance = msg[2]
        balance = int(balance)
        print(balance,type(balance))
        while True:
            with_money = input('请输入提现金额:').strip()
            with_money = int(with_money)
            if balance >= with_money:
                balance -= with_money
                res = f'{msg[0]}:{msg[1]}:{balance}:{msg[3]}'
                save(user_info['username'], res)
                print('提现成功')
                break
            else:
                print('余额不足')
    else:
        print('用户没有登录,请先登录')
        login()

def transfer():
    '''转账功能'''
    tag = True
    if user_info['username']:
        while tag:
            to_user = input('请输入转账用户:').strip()
            flag, msg = select(to_user)
            if flag:
                while True:
                    trans_money = input('请输入转账金额:').strip()
                    trans_money = int(trans_money)
                    flag1, msg1 = select(user_info['username'])
                    balance = int(msg1[2])  #转账用户余额
                    to_balance = int(msg[2]) #收账用户余额
                    if balance >= trans_money:
                        balance -= trans_money
                        res1 = f'{msg1[0]}:{msg1[1]}:{balance}:{msg1[3]}'
                        save(user_info['username'], res1)
                        to_balance += trans_money
                        res2 = f'{msg[0]}:{msg[1]}:{to_balance}:{msg[3]}'
                        save(to_user, res2)
                        tag = False
                        break
                    else:
                        print('余额不足')
            else:
                print('转账用户不存在')
    else:
        print('用户未登录,请先登录!')
        login()

def recharge():
    '''充值功能'''
    if user_info['username']:
        recharge_money = input('请输入充值金额:').strip()
        recharge_money = int(recharge_money)
        flag, msg = select(user_info['username'])
        balance = int(msg[2])
        balance += recharge_money
        res = f'{msg[0]}:{msg[1]}:{balance}:{msg[3]}'
        save(user_info['username'], res)
    else:
        print('用户未登录,请先登录')
        login()

def logout():
    if user_info['username']:
        user_info['username']=None


def register():
    while True:
        user_name = input('请输入注册用户名:').strip()
        flag, msg = select(user_name)
        if flag:
            print('该用户已存在!')
            continue
        else:
            user_pwd = input('请输入密码:').strip()
            user_info = f'{user_name}:{user_pwd}:1000:0'
            save(user_name, user_info)
            print('注册成功')
            break
 #功能字典           
func_dic = {
    '1':('登录',login),
    '2':('查看余额',check_balance),
    '3':('提现', withdraw),
    '4':('转账', transfer),
    '5':('充值', recharge),
    '6':('注册', register),
    '7':('退出登录', logout),
    'q':('退出程序', exit)
}

def run():
  '''主运行函数'''
    while True:
        print('=====function=======')
        for i in func_dic:
            print(i, func_dic[i][0])
        print('=========end========')

        choice = input('请输入功能编号:').strip()
        if choice == 'q':
            break
        elif not choice.isdigit():
            print('请输入数字!')
            continue
        elif choice not in func_dic:
            print('请输入正确的功能编号')
            continue
        else:
            func_dic.get(choice)[1]()

if __name__ == '__main__':
    run()

posted @ 2020-03-20 18:20  蛋蛋的丶夜  阅读(138)  评论(0编辑  收藏  举报