news 2026/6/25 14:28:35

简单的图书管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单的图书管理系统
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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 14:27:47

3分钟掌握Obsidian Excel表格转换:终极Markdown表格解决方案

3分钟掌握Obsidian Excel表格转换&#xff1a;终极Markdown表格解决方案 【免费下载链接】obsidian-excel-to-markdown-table An Obsidian plugin to paste data from Microsoft Excel, Google Sheets, Apple Numbers and LibreOffice Calc as Markdown tables in Obsidian edi…

作者头像 李华
网站建设 2026/6/25 14:27:20

Navicat Mac版无限试用重置:3种简单方法完整指南

Navicat Mac版无限试用重置&#xff1a;3种简单方法完整指南 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat P…

作者头像 李华
网站建设 2026/6/25 14:26:15

MetaboAnalystR 4.3.0架构解析:500+函数构建的代谢组学分析技术框架

MetaboAnalystR 4.3.0架构解析&#xff1a;500函数构建的代谢组学分析技术框架 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR MetaboAnalystR 4.3.0是一个基于R语言的代谢组学数据分析平台…

作者头像 李华
网站建设 2026/6/25 14:25:27

向量数据库选型实战指南:从原理、指标到落地避坑

1. 项目概述&#xff1a;为什么向量数据库选型不是“挑个热门就行”的事 “向量数据库”这个词&#xff0c;过去两年在技术圈里火得像刚出锅的葱油饼——热气腾腾、香气扑鼻&#xff0c;人人都想掰一块。但真当你把模型训练好、特征向量导出来、准备上线相似搜索或RAG应用时&a…

作者头像 李华
网站建设 2026/6/25 14:25:16

终极指南:如何用Python实现FMI标准模型仿真与FMU文件解析

终极指南&#xff1a;如何用Python实现FMI标准模型仿真与FMU文件解析 【免费下载链接】FMPy Simulate Functional Mock-up Units (FMUs) in Python 项目地址: https://gitcode.com/gh_mirrors/fm/FMPy 在当今复杂的系统建模与仿真领域&#xff0c;FMPy作为一款强大的Pyt…

作者头像 李华