3.29小说阅读器

start:

from core import src
import os
import sys
#将项目根目录添加到sys.path中 即添加环境变量?
dir = os.path.dirname(os.path.dirname(__file__))
sys.path.append(dir)
if __name__ == '__main__':
src.run()

settings:
#先获取根目录
import os
#获取项目reader根目录
BASE_PATH=os.path.dirname(os.path.dirname(__file__))
#获取DB目录(这一块不懂复习模块)
DB_PATH=os.path.join(BASE_PATH, 'db')
# 进入db.txt
db_txt_path = os.path.join(DB_PATH, 'db.txt')
#story_class路径
STORY_PATH=os.path.join(DB_PATH, 'story_class')
#小说存放目录
FICTION_DIR=os.path.join(DB_PATH, 'fictions')
#日志存放路径
LOG_PATH=os.path.join(BASE_PATH, 'log', 'log.txt')

src:
from db import db_hanlder
from lib import common
import time
login_user=None

#注册
def register():
print('注册功能执行中')
#先确认用户是否存在(涉及查看数据在注册之前)
while True:
username=input("请输入用户名:").strip()
user_data=db_hanlder.select(username)
if user_data:
print('用户名已存在')
continue
password=input("请输入用户名密码:").strip()
re_password=input("请确认用户名密码:").strip()
#判断密码是否一样
if password==re_password:
db_hanlder.save(username,password)
print(f'用户{username}注册成功')
break
else:
print('请重新输入:')
continue
#登录
def login():
print('登录功能执行中')
while True:
username = input("请输入用户名:").strip()
user_data = db_hanlder.select(username)
if not user_data:
print('当前用户不存在,请重新输入')
continue
password = input("请输入用户名密码:").strip()
# 判断密码是否和账号里密码一样
if password == user_data[1]:
#记录到日志
global login_user
login_user = username
print(f'用户{username}登录成功')
break
else:
print('请重新输入:')
continue


#充值
@common.login_auth
def recharge():
while True:
balance=input('请输入充值金额:').strip()
if not balance.isdigit():
print('输入有误')
else:
balance=int(balance)
user,pwd,bal=db_hanlder.select(login_user)
old_data=f'{user}:{pwd}:{bal}'
bal=int(bal)
bal+=balance
new_data=f'{user}:{pwd}:{bal}'
db_hanlder.update(old_data,new_data)
print(f'当前用户:【{login_user}】充值金额【{balance}】元!')
#记录时间
now_time=time.strftime('%Y-%m-%d %X')
log_data=f'时间:{now_time} 用户名:{login_user} 充值金额:{balance}'
common.append_log(log_data)
break

#阅读
@common.login_auth
def reader():
story_dic=db_hanlder.get_all_story()
if not story_dic:
print('没有小说')
return

while True:
print('''
====欢迎来到阅读小说功能主页====
0 玄幻武侠
1 都市爱情
2 高效养猪36天
=============END==============
''')
choice1=input("请输入编号:").strip()
if choice1 not in story_dic:
print("输入有误")
continue
#获取小说类型所有小说
fiction_dic=story_dic.get(choice1)
#打印当前小说,让用户选择
for number,fiction_list in fiction_dic.items():
name,price=fiction_list
print(f'小说编号{number} 小说名字{name} 小说价格{price}')
while True:
choice2=input("请输入想买的小说")
if choice2 not in fiction_dic:
print("输入有误")
continue
name,price=fiction_dic.get(choice2)
choice3=input(f'当前小说名为{name} ,价格为{price}元,请输入y确认购买,b退出程序:').strip()
if choice3 == 'b':
exit()
if choice3 == 'y':
username, password, balance = db_hanlder.select(login_user)
balance = int(balance)
price=int(price)
if balance<price:
print('没钱快滚')
break
else:
old_data=f'{username}:{password}:{balance}'
new_data=f'{username}:{password}:{balance}'
balance-=price
db_hanlder.update(old_data,new_data)
print('购买成功')
ficton_data=db_hanlder.show_fiction_data(name)
print(f'''
=====小说内容如下=====
{ficton_data}
''')
now_time = time.strftime('%Y-%m-%d %X')
log_data = f'时间:{now_time} 用户名:{login_user} 充值金额:{balance}'
common. append_log(log_data)

break

fuc_dic={
'0':register,
'1':login,
'2':recharge,
'3':reader,

}


def run():
while True:
print('''
=====小说阅读器=====
0 账号注册
1 账号登录
2 充值功能
3 阅读小说
=======END=========
''')

choice=input('请输入编号(输入q退出):').strip()
if choice=='q':
break
#判断用户是否在编号
if choice not in fuc_dic:
print('当前输入有误!')
continue
else:
fuc_dic.get[choice]()
db_hanlder:
from conf import settings
import os
import os
#查看数据
def save(username,password,balance=0):
with open(settings.db_txt_path,'a',encoding='utf-8')as f1:
f1.write(f'{username}:{password}:{balance}\n')
def select(username):
with open(settings.db_txt_path,'r',encoding='utf-8')as f:
#先读出内容
for line in f:
if username in f.read():
user_data=line.strip().split(':')
return user_data

def update(old_data,new_data):
new_path=os.path.join(settings.DB_PATH,'new.txt')
with open(settings.db_txt_path,'r+',encoding='utf-8') as r_f,\
open(new_path,'w',encoding='utf-8')as w_f:
#替换数据
all_user_data=r_f.read()
all_user_data=all_user_data.replace(old_data,new_data)
#将数据放入新文件
w_f.write(all_user_data)
#最后修改新文件
os.rename(new_path,settings.db_txt_path)

#查看所有小说数据
def get_all_story():
with open(settings.STORY_PATH,'r',encoding='utf-8') as f:
story_dic=eval(f.read())
return story_dic


#查看单本小说
def show_fiction_data(fiction_name):
fiction_path=os.path.join(settings.FICTION_DIR,fiction_name)
with open(settings.FICTION_DIR,'r',encoding='utf-8') as f:
fiction_data=f.read()
return fiction_data
common:
from conf import settings
def login_auth(func):
from core import src
def inner(*args,**kwargs):
if src.login_user:
res=func(*args,**kwargs)
return res
else:
print('没登录,没权享受权利')
src.login()
return inner

def append_log(log_data):
with open(settings.LOG_PATH, 'a', encoding='utf-8') as f:
f.write(log_data + '\n')



猜你喜欢

转载自www.cnblogs.com/lijunc/p/12595103.html