这是一次结合前几次小练习的综合性作业,也算是对前面学习内容小结吧
实现功能:
一、登陆模块:
1、该系统有三个用户”alex”, “pizza”, “john”
2、这三个用户对应的角色和密码分别是:”管理员”, “教师”, “学生”, “alex123”, “pizza123”, “john123”
3、每个用户只有3次登录机会,失败三次锁定该用户,程序终止
4、每个用户登录之后,根据其对应的角色,显示欢迎信息
二、借书模块:
1、该图书馆中有书籍:《Python基础编程》,《Python进阶编程》,《Python高级编程》,《Django入门指南》
2、上述管理系统中的教师和学生两个角色可以借书,每次借书后该用户的薪资减少100元(第一次借书时充值)
3、借书之后,图书馆中收藏的该书籍数量减少
4、借书过程中会展示当前借阅书籍和余额信息,借书完毕后打印本次所借所有书籍和余额。
5、只有学生和老师可以借书,管理员不行
6、借书过程持续进行,按q退出
三、还书模块:
1、教师和学生两个角色可以还书,每次还书后该用户的薪资增加100元
2、还书过程中会展示当前所还书籍和余额信息,还书完毕后打印本次所还书籍和余额。
3、还书之后,图书馆中收藏的该书籍数量增加
4、只有学生和老师可以还书,管理员没借书,理应不能还书
5、还书过程持续进行,按q退出
四、管理模块:
1、管理员可以增加用户(账号,密码,身份)、删除用户、增加书籍(更改旧书数量,添加新书)、删除书籍
2、每个角色在程序重启并登录之后,当前状态与上一次退出时的状态保持一致
3、每个角色在程序重启并登录之后,当前状态与上一次退出时的状态保持一致
五、查询模块:
1、学生和教师可以查询借书和还书的全部历史信息,包括时间。
亮点:在完成所有要求的基础上,使用了带参数的装饰器。
完整代码如下,后附下载链接:
# encoding='UTF-8'
import json
import os
import time
import functools
func_dict={}
def mask(option):
def outter(func):
func_dict[option] = func
@functools.wraps(func)
def inner(*args, **kwargs):
return func(*args, **kwargs)
return inner
return outter
def login():
if os.path.exists("user_info.txt"):
with open("user_info.txt", mode="r", encoding="utf-8") as file:
user_info = json.load(file)
else:
user_info = \
{
'alex': {
'pwd': 'alex123', 'role': 'admin', 'state': True},
'pizza': {
'pwd': 'pizza123', 'role': 'teacher', 'state': True, 'balance': -1, 'book_shelf': [],
'history': {}},
'john': {
'pwd': 'john123', 'role': 'student', 'state': True, 'balance': -1, 'book_shelf': [],
'history': {}}
}
with open("user_info.txt", mode="w", encoding="utf-8") as file:
json.dump(user_info, file)
count = 0
while count < 3:
user_name = input("Please input username:")
password = input("Please input password:")
if user_name in user_info:
if user_info[user_name]['state']:
if password == user_info[user_name]['pwd']:
print("Welcome back " + user_name + "!")
return user_name
else:
print("The name or password may be incorrect!")
else:
print("The account has been locked!")
else:
print("User does not exist")
count += 1
if count == 3:
user_info[user_name]['stat'] = False
with open("user_info.txt", mode='w', encoding="utf-8")as file:
json.dump(user_info, file)
exit("You have tried too many times and the account has been locked!")
@mask("Borrow books")
def borrow_book(user_name):
if os.path.exists("book_info.txt"):
book_info = []
with open("book_info.txt", mode="r", encoding="utf-8")as file:
for line in file.readlines():
line = line.strip()
line = line