Python入门练习题(4)-图书管理系统

这篇博客介绍了如何使用Python实现一个图书管理系统,包括登陆、借书、还书、管理及查询模块。系统有三个用户,每个用户有3次登录机会,角色不同权限不同。管理员可管理用户和书籍,教师和学生可以借还书,借还书会影响图书馆库存和用户余额。系统利用带参数的装饰器来增强功能。
摘要由CSDN通过智能技术生成

这是一次结合前几次小练习的综合性作业,也算是对前面学习内容小结吧

实现功能:

一、登陆模块:

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值