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("\n").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("{}:{}:{}\n".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("\n").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("{}:{}:{}\n".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("\n").split(":") if user_name in line: mon = money fs.write("{}:{}:{}\n".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("\n").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("\n").split(":") mon = int(mon) if transfer_out_user in line: mon -= money if transfer_in_user in line: mon += money fs.write("{}:{}:{}\n".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("\n").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("\n").split(":") mon = int(mon) if username in line: mon -= money fs.write("{}:{}:{}\n".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("\n").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("请输入数字。")