ATM的转账

【 1 】明确我们要实现的功能

# ===================用户功能菜单=====================
#                   1.注册
#                   2.登陆
#                   3.取款
#                   4.转账
#                   5.充值余额
#                   6.查看流水
#                   7.查看银行信息(查看自己的卡号、余额、流水等信息)
# ======================欢迎使用=======================

 【 2 】注册

我们可以用文件操作里面学到的直用文本读写我们要的信息

def enroll(username, password, age, gender, bankcard, withdraw_password, balance):
    with open('5.txt', 'a', encoding='utf-8') as f:
        f.write(f'{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n')

首先我们先定义一个enroll函数来定再用文件里的模式里的“a”追加功能

f.write(f'{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n')  #这个就是换行并且用:分隔

如果你要单独实现的话就是这样:

if xuan == 1:
    new_username = input('请输入你的用户名:')
    new_password = input('请输入你的密码:')
    new_age = input('请输入你的年龄:')
    new_gender = input('请输入你的性别:')
    new_bankcard = input('请输入你的银行卡号:')
    new_withdraw_password = input('请输入你的提现密码:')
    new_balance = input('请输入你的余额: ')

    enroll(new_username, new_password, new_age, new_gender, new_bankcard, new_withdraw_password, new_balance)
    print('恭喜你注册成功')
elif xuan == 0:
    print('退出程序')
else:
    print('无效的选择')

print('-------------------------------------------')

【 3 】登录

 我们肯定要从文件里把数据读取出来才能进行下一步操作:

def login(username, password):
    # 打开文件以读取用户名和密码
    with open("5.txt", "r", encoding='utf-8') as file:
        for line in file:#遍历

            values = line.strip().split(':')
            # 如果5.txt里面的文件字符不超过7就会触发
            if len(values) < 7:
                print(f'文件格式错误,第{line}数据不完整')
                continue
            #  会先去除行末的换行符和空白符,然后按逗号分隔返回一个包含用户名、密码、性别和年龄的字符串列表。
            new_username, new_password, age, gender, bankcard, withdraw_password, balance = values
            if username == new_username and password == new_password:
                print("登录成功!")
                print(f'用户名:{new_username}')
                print(f'性别:{gender}')
                print(f'年龄:{age}')
                print(f'银行卡:{bankcard}')
                print(f'银行卡密码:{withdraw_password}')
                print(f'余额:{balance}')
                return True

            print("用户名或密码错误,请重新登录。")
            return False

【 4 】取款

def withdraw(username, password, amount):
    # 打开文件读取文本信息
    with open('5.txt', 'r', encoding='utf-8') as file:
        # 读取每一行的信息
        lines = file.readlines()
    # 遍历文件中的每一行,并将每一行的内容赋值给line,同时获取每一行的索引赋值给i
    for i, line in enumerate(lines):
        # 这行代码将行文本按逗号分割后的部分存储在values变量中,以便后续处理或使用。
        values = line.strip().split(':')
        if len(values) < 7:
            # print('文件格式错误,里面数据不完整')
            continue
        # 获取用户信息
        save_username, save_password, age, gender, bankcard, withdraw_password, balance = values

        if username == save_username and save_password == password:
            # 把余额转化成小数类型
            balance = float(balance)
            if amount <= float(balance):
                # 余额总数减去要取的值
                balance = float(balance) - float(amount)  # balance -= amount
                lines[i] = f"{save_username}:{save_password}:{age}:{gender}: {bankcard}:{withdraw_password}:{balance}\n"
                with open('5.txt', 'w', encoding='utf-8') as file:
                    file.writelines(lines)
                print(f'请取走{amount} 元, 当钱余额为{balance} 元')
            else:
                print('穷逼还来取钱')
            return True

    print('用户名或密码错误')
    return False

【 5 】转账

def transfer(second_username, second_password, jieshuo_username, amount):
    with open("5.txt", "r", encoding='utf-8') as file:
        # 读取所有行的信息
        lines = file.readlines()
    # 遍历文件的每一行
    for i, line in enumerate(lines):
        # 分割每一行的值
        values = line.strip().split(':')
        if len(values) < 7:
            continue

        username, password, age, gender, bankcard, withdraw_password, balance = values
        if username == second_username and password == second_password:
            balance = float(balance)
            if balance >= float(amount):
                balance -= float(amount)
                lines[i] = f"{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n"
                break
            else:
                print("余额不足,无法完成转账。")
                return
    # 重新打开文件并写入更新后的信息
    with open('5.txt', 'w', encoding='utf-8') as f:
        f.writelines(lines)
    # 增加接收者的余额
    with open('5.txt', 'r+', encoding='utf-8') as f:
        lines = f.readlines()

    # 其中enumerate() 函数用于同时获取每一行的内容和行号,方便后续操作。line.split(':')则使用冒号分隔符将每行的数据分割成一个列表。
    for i, line in enumerate(lines):
        values = line.strip().split(':')
        # 读取文件中的每一行,并将其解析成一个列表,如果列表长度小于7,则跳过这一行,不进行处理。
        if len(values) < 7:
            continue

        username, password, age, gender, bankcard, withdraw_password, balance = values
        if username == jieshuo_username:
            balance = float(balance)
            balance += float(amount)
            # 更新用户信息
            lines[i] = f"{username}:{password}:{age}:{gender}:{bankcard}:{withdraw_password}:{balance}\n"
            break
    # 最后将更新的信息写回文件
    with open('5.txt', 'w', encoding='utf-8') as f:
        f.writelines(lines)

    print(f'转账成功!{amount} 元 用户{second_username} 账户转到{jieshuo_username}中')

【 6 】充值金额

def chongqian(username,password,amount):
    with open("5.txt", "r", encoding='utf-8') as file:
        # 读取所有行的信息
        lines = file.readlines()

        # 遍历文件的每一行
    for i, line in enumerate(lines):
        # 分割每一行的值
        values = line.strip().split(':')
        if len(values) < 7:
            continue

        second_username, second_password, age, gender, bankcard, withdraw_password, balance = values
        if username == second_username and password == second_password:
            balance = float(balance)
            if float(amount) <= 0:
                print('充值金额不能是负数:')
                return  False
            # 更新余额信息
            balance += float(amount)
            new_lines = f"{second_username}:{second_password}:{age}:{gender}: {bankcard}:{withdraw_password}:{balance}\n"
            lines[i] = new_lines
            # 将更新后的用户信息写回文件中
            with open('5.txt', 'w', encoding='utf-8') as f:
                f.writelines(lines)

            print(f'充值成功!当前余额为{balance}人民币')
            return True
        print('用户名或密码错误')
        return False

【 7】 查看流水

from _datetime import datetime

# 读取保存用户信息的文件,逐行读取每个用户的信息。
# 对于每个用户,提取其操作记录(例如转账、取款等)。
# 将操作记录写入一个新的文件中,并输出到控制台。
def chalook_water():
    # 打开文件并读出所用行
    with open('5.txt', 'r', encoding='utf-8') as flie:
        lines = flie.readlines()
        # 遍历每一行并打印出来,并添加时间
        for line in lines:
            timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 获取当前时间
            print(f"{timestamp} {line.strip()}")
            # 使用文本的a的追加将流水时间写入文件
            with open('5.log', 'a', encoding='utf-8') as f:
                f.write(f'{timestamp} {line.strip()}')
                print(timestamp,line.strip())

【 8 】查看银行信息

 

def chalook_bankard(username, password, timestamp):
    with open('5.txt', 'r', encoding='utf-8') as f:
        for line in f:
            values = line.strip().split(":")
            if len(values) < 7:
                # print('文件格式错误,里面数据不完整')
                continue

            cha_username, cha_password, age, gender, bankcard, withdraw_password, balance = values
            if username == cha_username and password == cha_password:
                print(f'银行卡卡号:{bankcard}')
                print(f'余额{balance}')

                with open('5.log', 'a', encoding='utf-8') as f:
                    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                    # 生成当前时间戳,并使用f.write()向文件中写入一行文本,文本内容包括时间戳、银行卡号和余额信息。
                    f.write(f'{timestamp} 银行卡卡号:{bankcard} 余额:{balance}\n')

                return True

        print("账户或密码错误:")
        return False

【 9 】 主界面

       

flag = True
while True:

    print(''''
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        ''')
    xuan = int(input('请选择你想要的程序:'))
    if xuan == 1:
        username = input('请输入你用户名:')
        password = input('请输入你密码:')
        age = input('请输入你年龄:')
        gender = input('请输入你性别:')
        bankcard = input('请输入你的银行卡卡号:')
        withdraw_password = input('请输入你的银行卡密码:')
        balance = input('请输入你余额·:')
        enroll(username, password, age, gender, bankcard, withdraw_password, balance)
        if username is not None:
            print('恭喜你注册成功')
    elif xuan == 2:
        username = input('请输入你用户名:')
        password = input('请输入你密码:')
        login(username, password)

    elif xuan == 3:
        username = input('请输入用户名:')
        password = input('请输入密码:')
        amount = int(input('请输入取款金额:'))
        withdraw(username, password, amount)

    elif xuan == 4:
        flag = False
        print('欢迎光临')
        break

    elif xuan == 5:
        second_username = input('请输入你用户:')
        second_password = input(('请输入你的用户密码:'))

        jieshuo_username = input('请输入你的接收用户账户: ')
        amount = input('请输入你要转账的金额: ')
        transfer(second_username, second_password, jieshuo_username, amount)
    elif xuan == 6:
        chalook_water()

    elif xuan == 7:
        username = input('请输入用户名: ')
        password = input('请输入密码:')
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        chalook_bankard(username, password, timestamp)

    elif xuan == 8:
        username = input('请输入你要充值的用户: ')
        password = input('请输入你要充值的用户的密码: ')
        amount = input('请输入你要充值的金额: ')
        chongqian(username,password,amount)

    else:
        print('无效的选项')

结果:

        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:1
请输入你用户名:mao
请输入你密码:123
请输入你年龄:16
请输入你性别:nan
请输入你的银行卡卡号:6666
请输入你的银行卡密码:1111
请输入你余额·:500000
---------------------------------
恭喜你注册成功
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:1
请输入你用户名:tian
请输入你密码:123
请输入你年龄:19
请输入你性别:nv
请输入你的银行卡卡号:5555
请输入你的银行卡密码:1111
请输入你余额·:50000000
---------------------------------
恭喜你注册成功
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:1
请输入你用户名:tian
请输入你密码:123
请输入你年龄:18
请输入你性别:nan
请输入你的银行卡卡号:7777
请输入你的银行卡密码:1111
请输入你余额·:50000
---------------------------------
恭喜你注册成功
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:3
请输入用户名:tian
请输入密码:123
请输入取款金额:2000
请取走2000 元, 当钱余额为108211.2 元
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:5
请输入你用户:mao
请输入你的用户密码:123
请输入你的接收用户账户: tian
请输入你要转账的金额: 1000
转账成功!1000 元 用户mao 账户转到tian中
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:7
请输入用户名: mao
请输入密码:123
银行卡卡号:  3333
余额147888.7
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:8
请输入你要充值的用户: mao
请输入你要充值的用户的密码: 123
请输入你要充值的金额: 600000
充值成功!当前余额为747888.7人民币
'
        双面龟的日常生活
        1.注册
        2.登陆
        3.取款
        4.退出
        5.转账
        6.查看流水
        7.查看银行信息
        8.充值业务
        
请选择你想要的程序:4
欢迎光临

相关推荐

  1. ATM转账

    2023-12-11 18:42:06       84 阅读
  2. ARM开源硬件

    2023-12-11 18:42:06       41 阅读
  3. ARM学习

    2023-12-11 18:42:06       42 阅读
  4. ARMTrustZone技术

    2023-12-11 18:42:06       148 阅读
  5. ARM学习

    2023-12-11 18:42:06       37 阅读
  6. ARM工作模式

    2023-12-11 18:42:06       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 18:42:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 18:42:06       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 18:42:06       87 阅读
  4. Python语言-面向对象

    2023-12-11 18:42:06       96 阅读

热门阅读

  1. C#随笔 | List.Sort()使用小计

    2023-12-11 18:42:06       54 阅读
  2. Go 反射技术判断结构体字段数据为空

    2023-12-11 18:42:06       62 阅读
  3. 面试经典150题(10-13)

    2023-12-11 18:42:06       57 阅读
  4. Android源码下载流程

    2023-12-11 18:42:06       71 阅读
  5. HBase

    HBase

    2023-12-11 18:42:06      46 阅读
  6. 手撕分布式缓存---互斥锁的优化

    2023-12-11 18:42:06       64 阅读
  7. 【CSP】202203-1_未初始化警告Python实现

    2023-12-11 18:42:06       49 阅读