您的位置:首页 > 文旅 > 旅游 > python项目开发——简易图书管理系统

python项目开发——简易图书管理系统

2024/12/23 16:21:44 来源:https://blog.csdn.net/qq_68600196/article/details/139250862  浏览:    关键词:python项目开发——简易图书管理系统

项目名称:简易图书管理系统

  • 项目简介

开发一个简单的图书管理系统,帮助用户记录和管理图书信息。该系统应具备添加图书、查看图书、搜索图书、更新图书信息和删除图书等基本功能,并将数据存储在文件中。

  • 项目需求

1. 用户界面
  1. 提供简易的命令行界面供用户操作。
  2. 用户可以选择不同的操作:添加图书、查看图书、搜索图书、更新图书信息、删除图书和退出程序。
2. 功能模块
     a.添加图书

     - 用户输入书名、作者、出版年份和ISBN(也就是国际标准书号)。

     - 将图书信息保存到一个数据结构中(如列表)。

     b.查看图书

     - 显示所有已记录的图书信息。

     - 每条记录包括书名、作者、出版年份和ISBN。

     c.搜索图书

     - 用户可以按书名或作者搜索图书,显示匹配的结果。

     d.更新图书信息

     - 用户可以选择某本图书并更新其信息。

     e.删除图书

     - 用户可以按ISBN删除特定的图书记录。

     f.退出程序

     - 用户选择退出程序后,系统保存所有图书记录到一个文件中,以便下次启动时读取。

3. 数据存储

   - 使用文本文件(如.txt文件)保存和读取图书记录,确保数据在程序关闭后不丢失。

  •  项目步骤

1. 初始化项目

   - 创建一个新的Python项目文件。

   - 创建必要的函数和数据结构(如列表)。

2. 实现功能模块

   - 编写添加图书的函数,提示用户输入必要信息,并保存到数据结构中。

   - 编写查看图书的函数,遍历数据结构并打印所有记录。

   - 编写搜索图书的函数,根据用户输入的条件查询数据结构并显示匹配结果。

   - 编写更新图书信息的函数,根据用户选择更新数据结构中的记录。

   - 编写删除图书的函数,根据用户输入的ISBN从数据结构中删除相应记录。

   - 编写文件读写函数,在程序启动时读取文件并加载记录,在程序退出时保存记录到文件。

3. 用户交互界面

   - 使用循环结构创建用户交互界面,根据用户选择调用相应的功能模块。

   - 提供明确的提示信息和错误处理机制,确保用户输入的有效性。

4. 测试和调试

   - 对每个功能模块进行单独测试,确保其正确性。

   - 测试整个系统的工作流程,检查各功能模块之间的交互是否正常。

   - 处理可能出现的异常情况,如文件读写错误、用户输入错误等。

  •  项目扩展

完成基本功能后,可以考虑添加以下扩展功能,完成者将获得更高评分。

- 提供更复杂的搜索功能,例如按出版年份搜索图书。

- 添加用户登录功能,支持不同用户管理自己的图书列表。

- 提供图形用户界面(GUI)实现,使用如Tkinter等库。

实验器材、设备和平台

  1. 计算机
  2. 操作系统:Windows、macOS或Linux
  3. 编程语言:Python 3.x
  4. 开发环境:任意Python集成开发环境(IDE),例如PyCharm、VSCode,或文本编辑器如Sublime Text
  5. 必要的Python库:标准库Tkinter、json、os、hashlib

 接下来,将代码划分成各个模块,解释说明其功能与实现。

项目呈现

一、导入库和变量初始化的实现

import tkinter as tk
from tkinter import messagebox, simpledialog
import json
import os
import hashlibFILE_PATH_TEMPLATE = "{}_books.json"
current_user = None
books = []
  • 导入了 Tkinter 库用以创建图形用户界面。
  • 导入了 messagebox 和 simpledialog 模块用于消息对话框和简单对话框。
  • 导入了 json 库用于处理数据的序列化和反序列化。
  • 导入了 os 库用于文件操作。
  • 导入了 hashlib 库用于密码哈希处理。
  • 初始化文件路径的模板 FILE_PATH_TEMPLATE 以及当前用户变量 current_user 以及图书列表 books

二、数据加载和保存功能的实现

def load_data(username):global booksfile_path = FILE_PATH_TEMPLATE.format(username)if os.path.exists(file_path):with open(file_path, "r", encoding="utf-8") as file:books = json.load(file)else:books = []def save_data(username):file_path = FILE_PATH_TEMPLATE.format(username)with open(file_path, "w", encoding="utf-8") as file:json.dump(books, file, ensure_ascii=False, indent=4)
  • load_data(username):根据用户名加载用户对应的图书数据文件,如果文件存在,则读取数据,否则将会初始化为空列表。
  • save_data(username):将当前用户的图书数据保存到文件中。

三、图书管理功能的实现

①添加图书
def add_book():book_name = simpledialog.askstring("添加图书", "所添书名:")author = simpledialog.askstring("添加图书", "何许人所著::")year = simpledialog.askstring("添加图书", "何时所著:")ISBN = simpledialog.askstring("添加图书", "图书的ISBN(国际标准书号):")if book_name and author and year and ISBN:books.append({"书名": book_name, "作者": author, "出版年份": year, "ISBN": ISBN})messagebox.showinfo("成功", "添加成功了哟!!!")save_data(current_user)cat_books()else:messagebox.showwarning("错误输入!", "添加失败!!!。")
  • 通过对话框来获取书名、作者、出版年份和以及ISBN 信息,并添加到图书列表中。
  • 检查是否为完整的输入,不完整则显示警告信息。
  • 添加成功后保存数据并刷新图书列表。
②查看图书
def cat_books():listbox.delete(0, tk.END)for idx, book in enumerate(books, 1):listbox.insert(tk.END, f"{idx}. 书名: {book['书名']}, 作者: {book['作者']}, 出版年份: {book['出版年份']}, ISBN: {book['ISBN']}")
  • 将所有图书信息显示在列表框中。
③搜索图书
def search_books():search_term = simpledialog.askstring("搜索图书", "请输入书名、作者或出版年份进行搜索:")if search_term:listbox.delete(0, tk.END)results = [book for book in books if search_term in book['书名'] or search_term in book['作者'] or search_term == book['出版年份']]if results:for idx, book in enumerate(results, 1):listbox.insert(tk.END, f"{idx}. 书名: {book['书名']}, 作者: {book['作者']}, 出版年份: {book['出版年份']}, ISBN: {book['ISBN']}")else:messagebox.showinfo("伤心", "没有找到/(ㄒoㄒ)/~~。")
  • 通过对话框获取搜索关键词,根据书名、作者或出版年份进行搜索。
  • 将搜索结果显示在列表框中,如果没有找到则显示信息框提示。
④更新图书信息
def update_book():isbn = simpledialog.askstring("更新图书", "请输入图书的ISBN来更新信息:")for book in books:if book['ISBN'] == isbn:book['书名'] = simpledialog.askstring("更新图书", f"请输入新的书名(当前是: {book['书名']}):")book['作者'] = simpledialog.askstring("更新图书", f"请输入新的作者(当前是: {book['作者']}):")book['出版年份'] = simpledialog.askstring("更新图书", f"请输入新的出版年份(当前是: {book['出版年份']}):")messagebox.showinfo("成功", "图书相关信息更新成功o(* ̄▽ ̄*)ブ!")save_data(current_user)cat_books()returnmessagebox.showwarning("未找到", "坏了,彻查无果!!")
  • 根据输入的 ISBN 查找图书并更新其信息,未找到则提示。
⑤删除图书
def delete_book():isbn = simpledialog.askstring("删除图书", "请输入要删除图书的ISBN:")global booksbooks = [book for book in books if book['ISBN'] != isbn]messagebox.showinfo("成功", "图书删除成功!")save_data(current_user)cat_books()
  • 根据输入的 ISBN 删除图书,删除成功后保存数据并刷新列表。

四、用户管理功能的实现

①用户登录
def login():global current_userusername = simpledialog.askstring("登录", "请输入用户名:")password = simpledialog.askstring("登录", "请输入密码:", show='*')if username and password:hashed_password = hashlib.sha256(password.encode()).hexdigest()if os.path.exists("users.json"):with open("users.json", "r", encoding="utf-8") as file:users = json.load(file)else:users = {}if username in users and users[username] == hashed_password:current_user = usernamemessagebox.showinfo("成功", "登录成功!")load_data(current_user)cat_books()enable_buttons()else:messagebox.showwarning("失败", "用户名或密码错误!")else:messagebox.showwarning("输入错误", "所有字段均为必填。")
  • 通过对话框获取用户名和密码,验证用户信息是否正确。
  • 如果验证成功则加载用户数据并启用功能按钮。
②用户注册
def register():username = simpledialog.askstring("注册", "请输入用户名:")password = simpledialog.askstring("注册", "请输入密码:", show='*')if username and password:hashed_password = hashlib.sha256(password.encode()).hexdigest()if os.path.exists("users.json"):with open("users.json", "r", encoding="utf-8") as file:users = json.load(file)else:users = {}if username not in users:users[username] = hashed_passwordwith open("users.json", "w", encoding="utf-8") as file:json.dump(users, file, ensure_ascii=False, indent=4)messagebox.showinfo("成功", "注册成功,请登录!")else:messagebox.showwarning("失败", "用户名已存在!")else:messagebox.showwarning("输入错误", "所有字段均为必填。")
  • 通过对话框获取用户名和密码,检查用户名是否已存在,不存在则注册新用户。

③功能按钮的启动

def enable_buttons():button_add.config(state=tk.NORMAL)button_view.config(state=tk.NORMAL)button_search.config(state=tk.NORMAL)button_update.config(state=tk.NORMAL)button_delete.config(state=tk.NORMAL)
  • 登录成功后将开启各个功能按钮。

④主窗口的创建

window = tk.Tk()
window.title("图书管理系统")
window.geometry("600x400")tk.Button(window, text="登录", command=login).pack(fill=tk.X)
tk.Button(window, text="注册", command=register).pack(fill=tk.X)
tk.Button(window, text="退出程序", command=window.quit).pack(fill=tk.X)button_add = tk.Button(window, text="添加图书", command=add_book, state=tk.DISABLED)
button_view = tk.Button(window, text="查看图书", command=cat_books, state=tk.DISABLED)
button_search = tk.Button(window, text="搜索图书", command=search_books, state=tk.DISABLED)
button_update = tk.Button(window, text="更新图书信息", command=update_book, state=tk.DISABLED)
button_delete = tk.Button(window, text="删除图书", command=delete_book, state=tk.DISABLED)button_add.pack(fill=tk.X)
button_view.pack(fill=tk.X)
button_search.pack(fill=tk.X)
button_update.pack(fill=tk.X)
button_delete.pack(fill=tk.X)listbox = tk.Listbox(window)
listbox.pack(fill=tk.BOTH, expand=True)window.mainloop()
  • 创建主窗口并设置其标题和尺寸。
  • 添加登录、注册和退出按钮。
  • 添加功能按钮并初始化为禁用状态。
  • 创建列表框用于显示图书信息。
  • 启动事件循环,显示窗口。

完整代码呈现:

# 导入必要的库以及变量初始化
import tkinter as tk
from tkinter import messagebox, simpledialog
import json
import os
import hashlibFILE_PATH_TEMPLATE = "{}_books.json"
current_user = None
books = []'''加载和保存数据'''# 加载图书数据
def load_data(username):global booksfile_path = FILE_PATH_TEMPLATE.format(username)if os.path.exists(file_path):with open(file_path, "r", encoding="utf-8") as file:books = json.load(file)else:books = []# 保存图书数据
def save_data(username):file_path = FILE_PATH_TEMPLATE.format(username)with open(file_path, "w", encoding="utf-8") as file:json.dump(books, file, ensure_ascii=False, indent=4)'''图书管理功能'''# 添加图书
def add_book():book_name = simpledialog.askstring("添加图书", "所添书名:")author = simpledialog.askstring("添加图书", "何许人所著::")year = simpledialog.askstring("添加图书", "何时所著:")ISBN = simpledialog.askstring("添加图书", "图书的ISBN(国际标准书号):")if book_name and author and year and ISBN:books.append({"书名": book_name, "作者": author, "出版年份": year, "ISBN": ISBN})messagebox.showinfo("成功", "添加成功了哟!!!")save_data(current_user)cat_books()else:messagebox.showwarning("错误输入!", "添加失败!!!。")# 查看图书
def cat_books():listbox.delete(0, tk.END)for idx, book in enumerate(books, 1):listbox.insert(tk.END,f"{idx}. 书名: {book['书名']}, 作者: {book['作者']}, 出版年份: {book['出版年份']}, ISBN: {book['ISBN']}")# 搜索图书
def search_books():search_term = simpledialog.askstring("搜索图书", "请输入书名、作者或出版年份进行搜索:")if search_term:listbox.delete(0, tk.END)results = [book for book in books ifsearch_term in book['书名'] or search_term in book['作者'] or search_term == book['出版年份']]if results:for idx, book in enumerate(results, 1):listbox.insert(tk.END,f"{idx}. 书名: {book['书名']}, 作者: {book['作者']}, 出版年份: {book['出版年份']}, ISBN: {book['ISBN']}")else:messagebox.showinfo("伤心", "没有找到/(ㄒoㄒ)/~~。")# 更新图书信息
def update_book():isbn = simpledialog.askstring("更新图书", "请输入图书的ISBN来更新信息:")for book in books:if book['ISBN'] == isbn:book['书名'] = simpledialog.askstring("更新图书", f"请输入新的书名(当前是: {book['书名']}):")book['作者'] = simpledialog.askstring("更新图书", f"请输入新的作者(当前是: {book['作者']}):")book['出版年份'] = simpledialog.askstring("更新图书", f"请输入新的出版年份(当前是: {book['出版年份']}):")messagebox.showinfo("成功", "图书相关信息更新成功o(* ̄▽ ̄*)ブ!")save_data(current_user)cat_books()returnmessagebox.showwarning("未找到", "坏了,彻查无果!!")# 删除图书
def delete_book():isbn = simpledialog.askstring("删除图书", "请输入要删除图书的ISBN:")global booksbooks = [book for book in books if book['ISBN'] != isbn]messagebox.showinfo("成功", "图书删除成功!")save_data(current_user)cat_books()# 用户登录
def login():global current_userusername = simpledialog.askstring("登录", "请输入用户名:")password = simpledialog.askstring("登录", "请输入密码:", show='*')if username and password:hashed_password = hashlib.sha256(password.encode()).hexdigest()if os.path.exists("users.json"):with open("users.json", "r", encoding="utf-8") as file:users = json.load(file)else:users = {}if username in users and users[username] == hashed_password:current_user = usernamemessagebox.showinfo("成功", "登录成功!")load_data(current_user)cat_books()enable_buttons()else:messagebox.showwarning("失败", "用户名或密码错误!")else:messagebox.showwarning("输入错误", "所有字段均为必填。")'''用户管理系统'''# 用户注册
def register():username = simpledialog.askstring("注册", "请输入用户名:")password = simpledialog.askstring("注册", "请输入密码:", show='*')if username and password:hashed_password = hashlib.sha256(password.encode()).hexdigest()if os.path.exists("users.json"):with open("users.json", "r", encoding="utf-8") as file:users = json.load(file)else:users = {}if username not in users:users[username] = hashed_passwordwith open("users.json", "w", encoding="utf-8") as file:json.dump(users, file, ensure_ascii=False, indent=4)messagebox.showinfo("成功", "注册成功,请登录!")else:messagebox.showwarning("失败", "用户名已存在!")else:messagebox.showwarning("输入错误", "所有字段均为必填。")'''功能按钮的启动'''def enable_buttons():button_add.config(state=tk.NORMAL)button_view.config(state=tk.NORMAL)button_search.config(state=tk.NORMAL)button_update.config(state=tk.NORMAL)button_delete.config(state=tk.NORMAL)'''主窗口的创建'''# 创建主窗口
window = tk.Tk()
window.title("图书管理系统")
window.geometry("600x400")# 登录和注册按钮
tk.Button(window, text="登录", command=login).pack(fill=tk.X)
tk.Button(window, text="注册", command=register).pack(fill=tk.X)
tk.Button(window, text="退出程序", command=window.quit).pack(fill=tk.X)# 添加按钮(在用户登录后启用)
button_add = tk.Button(window, text="添加图书", command=add_book, state=tk.DISABLED)
button_view = tk.Button(window, text="查看图书", command=cat_books, state=tk.DISABLED)
button_search = tk.Button(window, text="搜索图书", command=search_books, state=tk.DISABLED)
button_update = tk.Button(window, text="更新图书信息", command=update_book, state=tk.DISABLED)
button_delete = tk.Button(window, text="删除图书", command=delete_book, state=tk.DISABLED)button_add.pack(fill=tk.X)
button_view.pack(fill=tk.X)
button_search.pack(fill=tk.X)
button_update.pack(fill=tk.X)
button_delete.pack(fill=tk.X)# 列表示例显示
listbox = tk.Listbox(window)
listbox.pack(fill=tk.BOTH, expand=True)# 启动事件循环
window.mainloop()

项目特色

1. 用户管理系统

  • 注册和登录:系统具备用户注册和登录功能,通过用户名和密码确保每个用户的数据独立和安全。密码采用SHA-256哈希加密存储,增加了系统的安全性。
  • 数据隔离:每个用户的图书数据存储在独立的JSON文件中,保证了数据的隔离和隐私性。

2. 图书管理功能

  • 全面的图书管理:提供添加、查看、搜索、更新和删除图书的功能,满足了基本的图书管理需求。
  • 搜索功能:支持按书名、作者和出版年份进行搜索,方便用户快速查找图书。

3. 友好的用户界面

  • 命令行界面:通过简单直观的命令行界面与用户交互,操作方便。
  • 图形用户界面(GUI):使用Tkinter库开发的图形界面,使用户体验更加友好和直观。

4. 数据持久化

  • 文件存储:所有数据均保存在本地JSON文件中,保证了数据的持久化。每次操作后自动保存数据,确保不会丢失。

5.未来小改进方向

  • 引入数据库:在数据存储方面,未来可以考虑使用数据库来管理数据,以此提高数据处理的效率和安全性。

谢谢观看,点个小赞~~~o(* ̄▽ ̄*)ブ

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com