zoukankan      html  css  js  c++  java
  • day13作业

    # 1、编写文件修改功能,调用函数时,传入三个参数(修改的文件路径,要修改的内容,修改后的内容)既可完成文件的修改

    import os
    def change_file(file_path,src_data,des_data):
        """文件内容修改功能"""
        if os.path.exists(file_path):
            swap_path=file_path+".swap"
            with open(file_path,"r",encoding="utf-8") as src_file,
                open(swap_path,"w",encoding="utf-8") as des_file:
                for line in src_file:
                    if src_data in line:
                        line=line.replace(src_data,des_data)
                    des_file.write(line)
            os.remove(file_path)
            os.rename(swap_path,file_path)
        else:
            print("文件{}不存在。".format(file_path))

    # 2、编写tail工具

    import time,os
    
    def use_tail(file_path):
        """tail功能"""
        if os.path.exists(file_path):
            with open(file_path,"rb") as f:
                f.seek(0,2)
                while True:
                    line=f.readline()
                    if len(line) == 0:
                        time.sleep(1)
                    else:
                        print(line.decode("utf-8"), end="")
        else:
            print("{}文件不存在".format(file_path))

    # 3、编写登录功能

    def u_login(username,passwd):
        """用户登录验证"""
        with open("u_db.txt","r",encoding="utf-8") as f:
            for line in f:
                name,pwd,identity=line.strip("
    ").split(":")
                if username == name and passwd == pwd:
                    print("用户{}登录成功,身份为{}。".format(username,identity))
                    break
            else:
                print("用户名或密码错误。")

    # 4、编写注册功能

    def  register(username,passwd,identity):
        """注册用户"""
        with open("u_db.txt", "r", encoding="utf-8") as f:
            for line in f:
                if username in line:
                    print("用户{}已被注册".format(username))
                    break
        with open("u_db.txt","a",encoding="utf-8") as fa:
            fa.write("{}:{}:{}
    ".format(username,passwd,identity))
            print("用户{}注册成功。".format(username))

    # 选做题:编写ATM程序实现下述功能,数据来源于文件db.txt
    # 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
    # 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
    # 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
    # 4、查询余额功能:输入账号查询余额

    # 选做题中的选做题:登录功能
    # 用户登录成功后,内存中记录下该状态,上述功能以当前登录状态为准,必须先登录才能操作

    目录

     db.txt内容:

    zhangsan:123:200
    lisi:123:10
    egon:123:455365
    alex:123:152222
    jc:123:0
    lxx:123:12280

    atm程序.py代码:

    # 开发人员: alias
    # 开发时间: 2020/3/17 16:06
    # 文件名称: atm程序.py
    # 开发工具: PyCharm
    import os
    from prettytable import PrettyTable
    
    
    def func_menu_login():
        """打印登录之前功能菜单"""
        x = PrettyTable(field_names=["功能id", "功能"])
        x.add_row(["0", "退出"])
        x.add_row(["1", "登录"])
        x.add_row(["2", "注册"])
        print(x)
    
    
    def func_menu_use():
        """打印登录成功的功能菜单"""
        x = PrettyTable(field_names=["功能id", "功能"])
        x.add_row(["0", "充值"])
        x.add_row(["1", "转账"])
        x.add_row(["2", "提现"])
        x.add_row(["3", "显示余额"])
        x.add_row(["4", "退出"])
        print(x)
    
    
    def user_login(user_name, passwd):
        """用户登录验证"""
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                name, pwd, money = line.strip("
    ").split(":")
                if user_name == name and passwd == pwd:
                    print("用户{}登录成功。".format(user_name))
                    return 1
            else:
                print("用户名或密码错误。")
    
    
    def user_register(user_name, passwd):
        """注册用户"""
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                if user_name in line:
                    print("用户{}已被注册".format(user_name))
                    return
        with open("db.txt", "a", encoding="utf-8") as fa:
            fa.write("{}:{}:{}
    ".format(user_name, passwd, "0"))
            print("用户{}注册成功。".format(user_name))
    
    
    def deposit(user_name, money):
        """用户充值"""
        with open("db.txt", "r", encoding="utf-8") as f, 
                open(".db.txt.swap", "w", encoding="utf-8") as fs:
            for line in f:
                name, pwd, mon = line.strip("
    ").split(":")
                if user_name in line:
                    mon = money
                fs.write("{}:{}:{}
    ".format(name, pwd, mon))
            print("用户{}成功充值{}元。".format(user_name, money))
        os.remove("db.txt")
        os.rename(".db.txt.swap", "db.txt")
    
    
    def transfer(transfer_out_user, transfer_in_user, money):
        """用户转账"""
        user_exist = False
        money=int(money)
        money_flag=True
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                if transfer_in_user in line:
                    user_exist = True
                    break
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                name, pwd, mon = line.strip("
    ").split(":")
                mon = int(mon)
                if transfer_out_user in line:
                    if mon < money:
                        money_flag=False
        if user_exist:
            if money_flag:
                with open("db.txt", "r", encoding="utf-8") as f, 
                        open(".db.txt.swap", "w", encoding="utf-8") as fs:
                    for line in f:
                        name, pwd, mon = line.strip("
    ").split(":")
                        mon = int(mon)
                        if transfer_out_user in line:
                            mon -= money
                        if transfer_in_user in line:
                            mon += money
                        fs.write("{}:{}:{}
    ".format(name, pwd, mon))
                    else:
                        print("用户{}成功转账{}元到{}用户。".format(transfer_out_user, money, transfer_in_user))
                os.remove("db.txt")
                os.rename(".db.txt.swap", "db.txt")
            else:
                print("尊敬的用户{}您的余额不足,无法进行转账操作。".format(transfer_out_user))
    
        else:
            print("{}用户不存在".format(transfer_in_user))
    
    
    def withdraw(username, money):
        """用户提现"""
        money = int(money)
        money_flag = True
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                name, pwd, mon = line.strip("
    ").split(":")
                mon = int(mon)
                if username in line:
                    if mon < money:
                        money_flag=False
        if money_flag:
            with open("db.txt", "r", encoding="utf-8") as f, 
                    open(".db.txt.swap", "w", encoding="utf-8") as fs:
                for line in f:
                    name, pwd, mon = line.strip("
    ").split(":")
                    mon = int(mon)
                    if username in line:
                        mon -= money
                    fs.write("{}:{}:{}
    ".format(name, pwd, mon))
                else:
                    print("用户{}成功提现{}元。".format(username, money))
            os.remove("db.txt")
            os.rename(".db.txt.swap", "db.txt")
        else:
            print("账户余额不足。无法进行提现操作。")
    
    
    def show_money(username):
        """显示余额"""
        with open("db.txt", "r", encoding="utf-8") as f:
            for line in f:
                name, pwd, mon = line.strip("
    ").split(":")
                if username in line:
                    print("{}用户账户余额为{}".format(username, mon))
                    # return mon
    
    
    flag = True
    while flag:
        func_menu_login()
        func_id = input("请输入功能id:>>").strip()
        if func_id.isdigit():
            if func_id == "0":
                break
            elif func_id == "1":
                inp_name = input("请输入用户名:>>").strip()
                inp_pwd = input("请输入密码:>>").strip()
                result=user_login(inp_name, inp_pwd)
                if result== 1:
                    while flag:
                        func_menu_use()
                        opt_id = input("请输入功能id:>>").strip()
                        if opt_id == "0":
                            inp_money = input("请输入充值金额:>>").strip()
                            deposit(inp_name, inp_money)
                        elif opt_id == "1":
                            transfer_in_user = input("请输入转入账号名:>>").strip()
                            transfer_money = input("请输入转入金额:>>").strip()
                            transfer(inp_name, transfer_in_user, transfer_money)
                        elif opt_id == "2":
                            withdraw_money = input("请输入提现金额:>>").strip()
                            withdraw(inp_name, withdraw_money)
                        elif opt_id == "3":
                            show_money(inp_name)
                        elif opt_id == "4":
                            flag=False
                            break
                        else:
                            print("输入的功能id不存在。")
            elif func_id == "2":
                add_name = input("请输入注册的用户名:>>").strip()
                add_pwd = input("请输入注册用户的密码:>>").strip()
                user_register(add_name, add_pwd)
            else:
                print("输入的功能id不存在,请重新输入。")
        else:
            print("请输入数字。")
  • 相关阅读:
    从零搭建Spring Boot脚手架(6):整合Redis作为缓存
    MyBatis初级实战之三:springboot集成druid
    table布局
    【JVM之内存与垃圾回收篇】直接内存
    【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位
    【JUnit测试】总结
    【JVM之内存与垃圾回收篇】方法区
    【JVM之内存与垃圾回收篇】堆
    【JVM之内存与垃圾回收篇】本地方法栈
    【JVM之内存与垃圾回收篇】本地方法接口
  • 原文地址:https://www.cnblogs.com/baicai37/p/12510362.html
Copyright © 2011-2022 走看看