python学习——小说阅读程序

——————————————————————————————更新于3.26 23:41————————————————————————————
# 编写小说阅读程序实现下属功能
# # 一:程序运行开始时显示
# 0 账号注册
# 1 充值功能
# 2 阅读小说
#
#
# # 二: 针对文件db.txt,内容格式为:"用户名:密码:金额",完成下述功能
# 2.1、账号注册
# 2.2、充值功能
#
# # 三:文件story_class.txt存放类别与小说文件路径,如下,读出来后可用eval反解出字典
# {"0":{"0":["倚天屠狗记.txt",3],"1":["沙雕英雄转.txt",10]},"1":{"0":["令人羞耻的爱.txt",6],"1":["二狗的妻子与大草原的故事.txt",5]},}
#
# 3.1、用户登录成功后显示如下内容,根据用户选择,显示对应品类的小说编号、小说名字、以及小说的价格
# """
# 0 玄幻武侠
# 1 都市爱情
# 2 高效养猪36技
# """
#
# 3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,扣费并显示小说内容,如果余额不足则提示余额不足
#
# # 四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作
#
# # 五:为功能2.2、3.2编写记录日志的装饰器,日志格式为:"时间 用户名 操作(充值or消费) 金额"
#
#
#
# # 附加:
# # 可以拓展作者模块,作者可以上传自己的作品
#
#
import time

userstatus = {'username': None}


def auth(func):
'''
认证功能装饰器
:return:
'''

def wrapper(*args, **kwargs):
if userstatus['username'] is None:
inp_name = input('输入用户名')
inp_psd = input('输入密码')
with open('db.txt', 'rt', encoding='utf-8')as rf:
userinfo = {}
for line in rf:
name, psd, remind = line.strip().split(':')
userinfo[name] = [psd, int(remind)]
if inp_name not in userinfo:
print('用户不存在')
return
if inp_name in userinfo and userinfo[inp_name][0]==inp_psd:
print('登录成功,亲爱的{}用户'.format(inp_name))
userstatus['username']=inp_name
res=func(*args, **kwargs)
return res
else:
print('账号密码错误')
return
else:
res = func(*args, **kwargs)
return res
return wrapper


def record_log(func):
'''
日志记录功能装饰器
:return:
'''

def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
with open('record.log', 'ab')as log_f:
op_time = time.time()
amount = func.amount
log_f.write('{} {} {} {}\n'.format(op_time, userstatus['username'], func.__name__, amount).encode('utf-8'))
return res

return wrapper


def register():
'''
注册功能
:return:
'''
with open('db.txt', 'rt', encoding='utf-8')as rf:
userinfo = {}
for line in rf:
name, psd, remind = line.strip().split(':')
userinfo[name] = [psd, int(remind)]
inp_name = input('输入注册名')
inp_psd = input('输入密码')
if inp_name in userinfo:
print('用户名已存在')
return
re_psd = input('再次输入密码')
if inp_psd == re_psd:
print('注册成功')
with open('db.txt', 'at', encoding='utf-8')as af:
af.write('{}:{}:0\n'.format(inp_name, inp_psd))
else:
print('两次密码不一致')
return


@record_log
@auth
def add_credit():
'''
充值功能
:return:
'''
print('欢迎使用充值功能,亲爱的{}'.format(userstatus['username']))
with open('db.txt', 'rt', encoding='utf-8')as rf:
userinfo = {}
for line in rf:
name, psd, remind = line.strip().split(':')
userinfo[name] = [psd, int(remind)]
while True:
amount = input('请输入充值的金额').strip()
conf = input('确定要向{}用户充值{}吗,确定输入Y/y,退出N/n'.format(userstatus['username'], amount))
if conf == 'Y' or conf == 'y':
print('充值成功,已为您充值{}元'.format(amount))
userinfo[userstatus['username']][1] += int(amount)
break
elif conf == 'N' or conf == 'n':
break
with open('db.txt', 'wt', encoding='utf-8')as wf:
for name in userinfo:
wf.write('{}:{}:{}\n'.format(userinfo[name], userinfo[name][0], userinfo[name][1]))

@record_log
@auth
def read():
'''
阅读小说功能
:return:
'''
pass


def logout():
'''
登出
:return:
'''
userstatus['username'] = None
return


def menu():
fuc_dic = {
'0': ('注册功能', register),
'1': ('充值功能', add_credit),
'2': ('阅读小说', read),
'3': ('登出',logout)
}
tag= True
while tag:
cmd = input('''
0 账号注册
1 充值功能
2 阅读小说
3 登出
''')
int(cmd)
if not cmd.isdigit():
print('请输入数字')
if cmd.isdigit():
fuc_dic[cmd][1]()
if cmd == 3:
tag=False

menu()

猜你喜欢

转载自www.cnblogs.com/heirenxilou/p/12578475.html
今日推荐