简单的图书管理系统

import json
import os

# 文件路径
USER_FILE = "users.json"
BOOK_FILE = "books.json"


# ========== 数据初始化与读写 ==========
def load_data(file_path):
    """加载json文件,文件不存在则返回空列表"""
    if not os.path.exists(file_path):
        return []
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)


def save_data(file_path, data):
    """保存数据到json文件"""
    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)


# 初始化默认账号(首次运行自动创建)
def init_default_user():
    users = load_data(USER_FILE)
    if len(users) == 0:
        # 管理员账号
        users.append({"username": "admin", "password": "123456", "role": "admin"})
        # 普通读者账号
        users.append({"username": "reader", "password": "123", "role": "reader"})
        save_data(USER_FILE, users)


# ========== 用户登录模块 ==========
def login():
    print("=" * 30)
    print("        图书管理系统 登录")
    print("=" * 30)
    username = input("请输入账号:")
    password = input("请输入密码:")

    user_list = load_data(USER_FILE)
    for user in user_list:
        if user["username"] == username and user["password"] == password:
            print(f"\n登录成功!欢迎你,{username}")
            return user
    print("账号或密码错误!")
    return None


# ========== 管理员功能 ==========
def admin_menu():
    while True:
        print("\n===== 管理员菜单 =====")
        print("1. 添加图书")
        print("2. 修改图书信息")
        print("3. 删除图书")
        print("4. 查询所有图书")
        print("5. 返回登录界面")
        choice = input("请输入操作序号:")

        if choice == "1":
            add_book()
        elif choice == "2":
            edit_book()
        elif choice == "3":
            del_book()
        elif choice == "4":
            show_all_books()
        elif choice == "5":
            break
        else:
            print("输入无效,请重新选择!")


def add_book():
    books = load_data(BOOK_FILE)
    book_id = input("输入图书编号:")
    # 检查编号是否重复
    for b in books:
        if b["id"] == book_id:
            print("该图书编号已存在,添加失败!")
            return

    book_name = input("输入图书名称:")
    author = input("输入作者:")
    category = input("输入图书分类:")
    num = int(input("输入库存数量:"))

    new_book = {
        "id": book_id,
        "name": book_name,
        "author": author,
        "category": category,
        "stock": num,
        "borrow_user": None  # 当前借阅人,无人借阅为None
    }
    books.append(new_book)
    save_data(BOOK_FILE, books)
    print("✅ 图书添加成功!")


def show_all_books():
    books = load_data(BOOK_FILE)
    if not books:
        print("暂无图书数据!")
        return
    print("\n编号\t书名\t作者\t分类\t库存\t借阅人")
    print("-" * 60)
    for b in books:
        user = b["borrow_user"] if b["borrow_user"] else "无"
        print(f"{b['id']}\t{b['name']}\t{b['author']}\t{b['category']}\t{b['stock']}\t{user}")


def edit_book():
    books = load_data(BOOK_FILE)
    bid = input("输入要修改的图书编号:")
    for book in books:
        if book["id"] == bid:
            book["name"] = input("输入新书名:")
            book["author"] = input("输入新作者:")
            book["category"] = input("输入新分类:")
            book["stock"] = int(input("输入新库存:"))
            save_data(BOOK_FILE, books)
            print("✅ 修改完成!")
            return
    print("未找到该编号的图书!")


def del_book():
    books = load_data(BOOK_FILE)
    bid = input("输入要删除的图书编号:")
    for i, book in enumerate(books):
        if book["id"] == bid:
            books.pop(i)
            save_data(BOOK_FILE, books)
            print("✅ 删除成功!")
            return
    print("图书不存在!")


# ========== 读者功能(借阅/归还) ==========
def reader_menu(current_user):
    while True:
        print("\n===== 读者菜单 =====")
        print("1. 查看全部图书")
        print("2. 借阅图书")
        print("3. 归还图书")
        print("4. 返回登录界面")
        choice = input("请选择操作:")

        if choice == "1":
            show_all_books()
        elif choice == "2":
            borrow_book(current_user["username"])
        elif choice == "3":
            return_book(current_user["username"])
        elif choice == "4":
            break
        else:
            print("输入错误!")


def borrow_book(username):
    books = load_data(BOOK_FILE)
    bid = input("输入要借阅的图书编号:")
    for book in books:
        if book["id"] == bid:
            if book["stock"] <= 0:
                print("库存不足,无法借阅!")
                return
            if book["borrow_user"] is not None:
                print("这本书已被别人借走!")
                return
            book["stock"] -= 1
            book["borrow_user"] = username
            save_data(BOOK_FILE, books)
            print(f"✅ {username} 借阅成功!")
            return
    print("找不到这本图书!")


def return_book(username):
    books = load_data(BOOK_FILE)
    bid = input("输入归还图书编号:")
    for book in books:
        if book["id"] == bid:
            if book["borrow_user"] != username:
                print("你没有借阅这本书,无法归还!")
                return
            book["stock"] += 1
            book["borrow_user"] = None
            save_data(BOOK_FILE, books)
            print("✅ 归还成功!")
            return
    print("图书不存在!")


# ========== 程序主入口 ==========
def main():
    # 初始化管理员与读者账号
    init_default_user()
    while True:
        current_user = login()
        if not current_user:
            continue
        # 根据角色进入不同菜单
        if current_user["role"] == "admin":
            admin_menu()
        else:
            reader_menu(current_user)


if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱说话的分院帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值