目录:
readsys/ ├── bin │ ├── __init__.py │ └── start.py ├── conf │ ├── __init__.py │ └── setting.py ├── core │ ├── __init__.py │ └── src.py ├── db │ ├── access.log │ ├── db_handle.py │ ├── db.txt │ ├── fictions │ │ ├── __init__.py │ │ ├── 344272214347213227347232204345246273345255220344270216345244247350215211345216237347232204346225205344272213.txt │ │ ├── 344273244344272272347276236350200273347232204347210261.txt │ │ ├── 345200232345244251345261240347213227350256260.txt │ │ ├── 346262231351233225350213261351233204350275254.txt │ │ ├── 35125323034622521034520527334721425236346212200-344270212.txt │ │ └── 35125323034622521034520527334721425236346212200-344270213.txt │ ├── __init__.py │ └── story_class.txt ├── __init__.py ├── lib │ ├── common.py │ ├── __init__.py └── log ├── __init__.py └── user.log
import os,sys dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(dir) from core import src if __name__ == '__main__': src.run()
import os #主目录 base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #数据库文件目录 db_dir=os.path.join(base_dir,"db") #db文件路径 db_path=os.path.join(db_dir,"db.txt") db_path_swap=os.path.join(db_dir,".db.txt.swap") #story_class.txt路径 story_path=os.path.join(db_dir,"story_class.txt") #书籍目录 book_dir=os.path.join(db_dir,"fictions")
from db import db_handle from lib import common data_info={ "name":None, "data":None, } #用户注册 def register(): flag=True while flag: add_name=input("请输入注册的用户名:>>>").strip() #如果用户输入b返回程序初始界面 if add_name == "b": break #加载用户信息,查看库中是否已存在注册的用户 user_data=db_handle.load_data(add_name) if user_data: print("输入的用户名,已被注册,请重新输入") continue add_passwd=input("请输入密码:>>>").strip() re_add_passwd=input("请再次输入密码").strip() if add_passwd == re_add_passwd: data=str({"name":add_name,"passwd":add_passwd,"balance":0}) db_handle.save(data) print("用户[{}]注册成功".format(add_name)) break else: print("两次密码输入不一致,请重新输入") #用户登录 def user_login(): flag = True while flag: inp_name=input("请输入用户名:>>>").strip() user_data = db_handle.load_data(inp_name) if user_data: count=0 while count < 3: inp_pwd=input("请输入密码:>>>").strip() if user_data["passwd"] == inp_pwd: data_info["name"]=inp_name data_info["data"]=user_data print("用户[{}]登录成功".format(inp_name)) flag=False break else: print("密码输入错误,请重新输入") else: print("输错三次,退出程序") exit() else: print("输入的用户名不存在,请重新输入。") #充值功能 @common.auth def rechange(): flag=True while flag: rechange_money=input("请输入充值金额:>>>").strip() if rechange_money.isdigit(): rechange_money=int(rechange_money) user_data=data_info["data"] user_data["balance"] += rechange_money db_handle.dump_data(data_info["name"],user_data) print("用户[{}]成功充值{}元".format(data_info["name"],rechange_money)) break else: print("请输入数字。。。") #阅读小说功能 @common.auth def reads(): flag=True while flag: print(''' ----------小说阅读程序主页面---------- 0. 玄幻武侠 1. 都市爱情 2. 高效养猪36技 q. 退出 b. 返回上一层 --------------end--------------- ''') #加载小说类型以及书籍名称的字典 story_dic=db_handle.story_info() chooice=input("请输入小说类型编号:>>>").strip() if chooice == "b": break if chooice == "q": exit() if chooice in story_dic: for i in story_dic[chooice]: print("小说编号[{}],小说名称<{}>,小说价格[{}]".format(i,story_dic[chooice][i][0],story_dic[chooice][i][1])) while flag: chooice1=input("请输入选择的小说编号:b返回上一层,q退出>>>").strip() book_name=story_dic[chooice][chooice1][0] book_price=int(story_dic[chooice][chooice1][1]) if chooice1 == "b": break if chooice1 == "q": exit() if chooice1 in story_dic[chooice]: chooice2=input("是否确认购买:Y/N,y/n").strip() if chooice2 == "y" or chooice2 == "Y": #查看余额是否够买书 #加载用户信息 user_data=data_info["data"] if user_data["balance"] < book_price: print("尊敬的用户,您的余额不足以购买此书。。") break user_data["balance"]-=book_price db_handle.dump_data(data_info["name"],user_data) print("购买成功,自动显示书籍信息~") book_data=db_handle.read_book_info(book_name) print(''' ----------{}小说内容---------- {} --------------end------------- '''.format(book_name,book_data)) break elif chooice2 == "n" or chooice2 == "N": break else: print("请输入Y/N,y/n") else: print("输入的小说类型编号不存在,请重新输入。") #退出程序 def logout(): chooice=input("确认退出Y/N,y/n:>>>").strip() if chooice == "Y" or chooice == "y": exit() elif chooice == "N" or chooice == "n": pass else: print("请输入Y/N,y/n") func_dic={ "0":register, "1":user_login, "2":rechange, "3":reads, "4":logout, } #主运行程序 def run(): flag=True while flag: print(''' ----------小说阅读程序---------- 0. 注册 1. 登录 2. 充值 3. 阅读小说 4. 退出 --------------end--------------- ''') chooice=input("请输入功能id:>>>").strip() if chooice in func_dic: func_dic[chooice]() else: print("输入的功能id不存在。")
from conf import setting import os #读取用户信息 def load_data(user_name): with open(setting.db_path,"r",encoding="utf-8") as f: for line in f: if user_name in line: user_data=eval(line) return user_data #更新用户信息 def dump_data(name,user_data): with open(setting.db_path, "r", encoding="utf-8") as f, open(setting.db_path_swap, "w", encoding="utf-8") as fw: for line in f: if name in line: line=str(user_data) fw.write("{}".format(line)) os.remove(setting.db_path) os.rename(setting.db_path_swap,setting.db_path) #存储注册用户信息 def save(user_data): with open(setting.db_path,"a",encoding="utf-8") as f: f.write("{} ".format(user_data)) #加载书籍信息字典 def story_info(): with open(setting.story_path,"r",encoding="utf-8") as f: story_dic=f.read() return eval(story_dic) #购买成功,打印书籍信息 def read_book_info(book_name): book_path=os.path.join(setting.book_dir,book_name) with open(book_path,"r",encoding="utf-8") as f: book_data=f.read() return book_data
{"name":"zhangsan","passwd":"123","balance":200,} {"name":"lisi","passwd":"123","balance":200,} {'name': 'egon', 'passwd': '123', 'balance': 152222} {"name":"alex","passwd":"123","balance":455365,} {'name': 'lxx', 'passwd': '123', 'balance': 19945}
def auth(func): from core import src def inner(*args,**kwargs): if src.data_info["name"]: res=func(*args,**kwargs) return res else: print("还没有登录,请先登录。。。") src.user_login() res = func(*args, **kwargs) return res return inner