ATM机系统1.0(函数、文件版)


# 编写ATM程序实现下述功能
# 1.充值功能:用户输入充值钱数,该账号钱数完成修改
# 2.转账功能:用户A向用户B转账1000元,完成用户A账号减钱,用户B账号加钱
# 3.提现功能:用户输入提现金额,该账号钱数减少
# 4.查询余额功能:输入账号查询余额
以上功能需要在用户登录后才可操作,否则用户需要重新注册
import os
#定义一个全局变量:字典、登陆后的用户名
dict={}
login_user=None


def pay_money(username):
    """用户输入充值金额,保存到全局变量字典中"""
    while True:
        money=(input("请输入您要充值的金额:").strip())
        if not money.isdigit():
            print('输入的必须是数字且为整数!')
            continue
        else:
            pay_money=int(money)
            dict[username]+=pay_money
            print("您已充值成功!")
            break

    #将操作充值成功的数据进行保存,以便用户对后续功能的操作
    save_data()


def transfer(username):
    """"转账,把A用户的钱加到B账户中,A减少金额,B增加金额"""
    transfer_name = input("输入您要转账的账户名:").strip()
    # 判断此账户名是否存在
    if transfer_name in dict:
        while True:
            money = input("请输入您要转账的金额:").strip()
            if money.isdigit():
                pay_money = int(money)
                if pay_money <= dict[username]:
                    dict[username] -= pay_money
                    dict[transfer_name] += pay_money
                    print("您已转账成功!")
                    break
                elif pay_money > dict[username]:
                    print('您输入的转账金额超过了实际金额,请重新输入提现金额:')
                    continue

            else:
                print('输入的必须是数字且为整数!')
                continue
    elif transfer_name not in dict:
        print("该用户名不存在,请重新核实!")


    # 将操作
    # 转账成功的数据进行保存,以便用户对后续功能的操作
    save_data()
    

def withdraw(username):
    """提现,用户输入金额,该账号金额减少"""

    while True:
        money = input("请输入您要提现的金额:").strip()
        if  money.isdigit():
            pay_money = int(money)
            if pay_money<=dict[username]:
                dict[username] -= pay_money
                print("您已提现成功!")
                break
            elif pay_money > dict[username]:
                print('您输入的提现金额超过了实际金额,请重新输入提现金额:')
                continue

        else:
            print('输入的必须是数字且为整数!')
            continue

    # 将操作提现成功后的数据进行保存,以便用户对后续功能的操作
    save_data()

def check_money(username):
    """查询余额,输入该账户,输出该账号的金额数"""
    print("您的账户余额为:%s元" %dict[username])



def login():
    """用户登录,校验用户是否存在,用户存在即才可以做其他操作,输错密码三次该账号被锁定进黑名单"""
    #用户登录成功返回值1,否则返回值为0,

    count=0
    while count<3:
        user_name = input("请输入您的账户名:").strip()
        #判断账户名是否存在,如果不存在则先让用户注册
        if user_name not in dict:
            print("该用户名不存在,请先注册!")
            return False
            break
        password = input("请输入您的账户密码:").strip()
        # 在黑名单文件中取出用户名
        with open("black_name.txt", mode="r", encoding="utf-8") as f:
            for line1 in f:
                blackname = line1.strip()
        #打开用户名和密码的数据文件,匹配用户是否存在
        with open("user_name.txt","rt",encoding='utf-8') as file:
            for line in file:
                username,use_psd=line.strip().split(":")
                # 将用户输入的用户名和用户信息表中的用户名
                if user_name == username and blackname == username:
                      print("该账号已被锁定!!")
                      count=3
                      break
                if user_name==username and password==use_psd and user_name in dict :
                      print("登陆成功!")
                      global login_user
                      login_user=user_name
                      count=3
                      return True

            else:
                count += 1
                print('您已输错%s次,还剩%s次' % (count, 3 - count))
                if count == 3:
                    with open("black_name.txt", mode='wt', encoding='utf-8') as f:
                         f.write(f'{user_name}\n')
                    print('该账号已被锁定加入黑名单!')
                    break



def registered():

    # 定义一个空字典,把用户信息里面的信息都存入到reg_dict字典里
    reg_dict={}

    with open("user_name.txt", "rt", encoding='utf-8') as file:
        for line in file:
            user_name, user_psd = line.strip().split(":")
            reg_dict[user_name] = user_psd


    flag=True
    while flag:
        username = input("请您输入用户名:").strip()
        password = input("请您输入密码:").strip()
        password1= input("请您再次输入密码:").strip()

        if username not in reg_dict and password == password1:
            with open("user_name.txt", mode='at', encoding='utf-8') as f:  # 追加写入到用户信息文件中
                f.write(f'{username}:{password}\n')
                # 账号注册成功后,把用户名保存到user_money文件中,并且将金额初始值设置为0
                with open("user_money.txt", "at", encoding='utf-8') as f1:  # 追加写入到用户金额文件中
                    f1.write(f'{username}:{0}\n')
                print("账号注册成功!")
                flag = False
                break
        elif password != password1:
            print("两次密码输入不一样,请重新注册!")
        elif username in reg_dict:
            print("该用户名已经存在,请重新注册!")







def save_data():
    """保存数据,将字典里的数据写入文件"""
    # 打开文件,指定文件的操作模式:w以字符串模式写入
    with open("user_money.txt", "wt", encoding="utf-8") as file:
        for line in dict:
           file.write(f'{line}:{dict[line]}\n')



def show_menu():
    """展示功能菜单栏"""
    print("==========ATM系统v1.0========")
    print("1. 充值")
    print("2. 转账")
    print("3. 提现")
    print("4. 查询")
    print("5. 退出")


def start():  #下面的内容都是程序开始就要执行的,所以都放到start函数里面

    """首先读取useer_money文件数据放到全局变量字典里面"""
    global dict
    with open("user_money.txt", "rt", encoding='utf-8') as file:
        for line in file:
            user_name, use_money = line.strip().split(":")
            dict[user_name] = int(use_money)



    #用户登录,判断用户是否存在,用户存在则继续功能操作,不存在则让用户重新注册
    flag = login()
    if flag==0:
        registered()

    while flag:#用户存在则进入ATM操作的菜单栏
        # 如何实现该系统
        # 1、显示系统的功能
        show_menu()
        # 2、让用户选择指定的功能,接收用户输入的功能选项
        menu_option = input("请输入操作的功能选项:")
        # 3、判断用户选择的指定功能,然后完成对应的操作
        if menu_option == "1":
            pay_money(login_user)
        elif menu_option == "2":
            transfer(login_user)
        elif menu_option == "3":
            withdraw(login_user)
        elif menu_option == "4":
            check_money(login_user)
        elif menu_option == "5":
            #把数据保存到文件中
            save_data()
            print("退出系统")
            break

start()

 

上一篇:简易ATM程序


下一篇:ATM+购物车