5/14学习进程

今天把python大作业做完了

代码量:200行

博客数:1

import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import csv
import os


class LibraryManagementSystem:
def __init__(self, root):
self.root = root
self.root.title("图书管理系统")
self.root.geometry("500x400")

# 设置主界面样式
self.root.configure(bg='#f0f0f0')

# 创建主界面的Frame
self.main_frame = tk.Frame(root, bg='#f0f0f0')
self.main_frame.pack(pady=20)

self.label = tk.Label(self.main_frame, text="欢迎使用图书管理系统", font=('Helvetica', 16, 'bold'), bg='#f0f0f0')
self.label.grid(row=0, columnspan=2, pady=10)

self.button_add_book = tk.Button(self.main_frame, text="录入图书", command=self.add_book, bg='#007acc', fg='white', width=20)
self.button_add_book.grid(row=1, column=0, pady=5, padx=10)

self.button_add_person = tk.Button(self.main_frame, text="录入人员信息", command=self.add_person, bg='#007acc', fg='white', width=20)
self.button_add_person.grid(row=1, column=1, pady=5, padx=10)

self.button_search_book = tk.Button(self.main_frame, text="查询图书", command=self.search_book, bg='#007acc', fg='white', width=20)
self.button_search_book.grid(row=2, column=0, pady=5, padx=10)

self.button_borrow_book = tk.Button(self.main_frame, text="借阅图书", command=self.borrow_book, bg='#007acc', fg='white', width=20)
self.button_borrow_book.grid(row=2, column=1, pady=5, padx=10)

self.button_return_book = tk.Button(self.main_frame, text="归还图书", command=self.return_book, bg='#007acc', fg='white', width=20)
self.button_return_book.grid(row=3, column=0, pady=5, padx=10)

self.button_display_borrow_info = tk.Button(self.main_frame, text="显示借阅信息", command=self.display_borrow_info, bg='#007acc', fg='white', width=20)
self.button_display_borrow_info.grid(row=3, column=1, pady=5, padx=10)

def add_book(self):
# 创建录入图书窗口
self.add_book_window = tk.Toplevel(self.root)
self.add_book_window.title("录入图书")
self.add_book_window.geometry("300x250")
self.add_book_window.configure(bg='#f0f0f0')

# 创建录入图书窗口的界面元素
self.label_book_name = tk.Label(self.add_book_window, text="图书名称:", bg='#f0f0f0')
self.label_book_name.pack(pady=5)
self.entry_book_name = tk.Entry(self.add_book_window, width=30)
self.entry_book_name.pack()

self.label_author = tk.Label(self.add_book_window, text="作者:", bg='#f0f0f0')
self.label_author.pack(pady=5)
self.entry_author = tk.Entry(self.add_book_window, width=30)
self.entry_author.pack()

self.label_price = tk.Label(self.add_book_window, text="单价:", bg='#f0f0f0')
self.label_price.pack(pady=5)
self.entry_price = tk.Entry(self.add_book_window, width=30)
self.entry_price.pack()

self.button_submit = tk.Button(self.add_book_window, text="提交", command=self.submit_book_info, bg='#007acc', fg='white')
self.button_submit.pack(pady=10)

def submit_book_info(self):
# 获取用户输入的图书信息
book_name = self.entry_book_name.get()
author = self.entry_author.get()
price = self.entry_price.get()

# 检查输入是否为空
if not book_name or not author or not price:
messagebox.showerror("错误", "请填写完整图书信息")
return

# 将图书信息写入CSV文件
with open('books.csv', mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([book_name, author, price, "未借出"]) # 添加默认状态未借出

messagebox.showinfo("成功", "图书信息录入成功")

# 关闭录入图书窗口
self.add_book_window.destroy()

def add_person(self):
# 创建录入人员信息窗口
self.add_person_window = tk.Toplevel(self.root)
self.add_person_window.title("录入人员信息")
self.add_person_window.geometry("300x250")
self.add_person_window.configure(bg='#f0f0f0')

# 创建录入人员信息窗口的界面元素
self.label_name = tk.Label(self.add_person_window, text="姓名:", bg='#f0f0f0')
self.label_name.pack(pady=5)
self.entry_name = tk.Entry(self.add_person_window, width=30)
self.entry_name.pack()

self.label_gender = tk.Label(self.add_person_window, text="性别:", bg='#f0f0f0')
self.label_gender.pack(pady=5)
self.entry_gender = tk.Entry(self.add_person_window, width=30)
self.entry_gender.pack()

self.label_id = tk.Label(self.add_person_window, text="学号:", bg='#f0f0f0')
self.label_id.pack(pady=5)
self.entry_id = tk.Entry(self.add_person_window, width=30)
self.entry_id.pack()

self.button_submit = tk.Button(self.add_person_window, text="提交", command=self.submit_person_info, bg='#007acc', fg='white')
self.button_submit.pack(pady=10)

def submit_person_info(self):
# 获取用户输入的人员信息
name = self.entry_name.get()
gender = self.entry_gender.get()
id_number = self.entry_id.get()

# 检查输入是否为空
if not name or not gender or not id_number:
messagebox.showerror("错误", "请填写完整人员信息")
return

# 将人员信息写入CSV文件
with open('persons.csv', mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([name, gender, id_number])

messagebox.showinfo("成功", "人员信息录入成功")

# 关闭录入人员信息窗口
self.add_person_window.destroy()

def search_book(self):
# 创建查询图书窗口
self.search_book_window = tk.Toplevel(self.root)
self.search_book_window.title("查询图书")
self.search_book_window.geometry("300x200")
self.search_book_window.configure(bg='#f0f0f0')

# 创建查询图书窗口的界面元素
self.label_search_book_name = tk.Label(self.search_book_window, text="图书名称:", bg='#f0f0f0')
self.label_search_book_name.pack(pady=5)
self.entry_search_book_name = tk.Entry(self.search_book_window, width=30)
self.entry_search_book_name.pack()

self.label_search_book_author = tk.Label(self.search_book_window, text="作者:", bg='#f0f0f0')
self.label_search_book_author.pack(pady=5)
self.entry_search_book_author = tk.Entry(self.search_book_window, width=30)
self.entry_search_book_author.pack()

self.button_submit = tk.Button(self.search_book_window, text="查询", command=self.display_search_result, bg='#007acc', fg='white')
self.button_submit.pack(pady=10)

def display_search_result(self):
# 获取用户输入的查询信息
search_book_name = self.entry_search_book_name.get()
search_book_author = self.entry_search_book_author.get()

# 打开图书信息文件并查找匹配的图书
found_books = []
with open('books.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
if search_book_name in row[0] and search_book_author in row[1]:
found_books.append(row)

# 如果找到匹配的图书,则显示结果,否则提示未找到
if found_books:
result_text = "\n".join([f"图书名称: {row[0]}, 作者: {row[1]}, 单价: {row[2]}, 状态: {row[3]}" for row in found_books])
messagebox.showinfo("查询结果", result_text)
else:
messagebox.showinfo("查询结果", "未找到匹配的图书")

def borrow_book(self):
# 创建借阅图书窗口
self.borrow_book_window = tk.Toplevel(self.root)
self.borrow_book_window.title("借阅图书")
self.borrow_book_window.geometry("300x250")
self.borrow_book_window.configure(bg='#f0f0f0')

# 创建借阅图书窗口的界面元素
self.label_borrow_book_name = tk.Label(self.borrow_book_window, text="图书名称:", bg='#f0f0f0')
self.label_borrow_book_name.pack(pady=5)
self.entry_borrow_book_name = tk.Entry(self.borrow_book_window, width=30)
self.entry_borrow_book_name.pack()

self.label_borrow_person_name = tk.Label(self.borrow_book_window, text="借阅人姓名:", bg='#f0f0f0')
self.label_borrow_person_name.pack(pady=5)
self.entry_borrow_person_name = tk.Entry(self.borrow_book_window, width=30)
self.entry_borrow_person_name.pack()

self.button_submit = tk.Button(self.borrow_book_window, text="借阅", command=self.borrow_book_action, bg='#007acc', fg='white')
self.button_submit.pack(pady=10)

def borrow_book_action(self):
# 获取用户输入的借阅信息
borrow_book_name = self.entry_borrow_book_name.get()
borrow_person_name = self.entry_borrow_person_name.get()

# 检查输入是否为空
if not borrow_book_name or not borrow_person_name:
messagebox.showerror("错误", "请填写完整借阅信息")
return

# 校验借阅人是否存在
person_exists = False
with open('persons.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
if row[0] == borrow_person_name:
person_exists = True
break

if not person_exists:
messagebox.showerror("错误", "借阅人未录入系统")
return

# 校验图书是否存在且未被借出
book_available = False
with open('books.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
rows = list(reader)
for row in rows:
if row[0] == borrow_book_name:
if row[3] == "未借出":
book_available = True
break

if not book_available:
messagebox.showerror("错误", "图书已被借出或不存在")
return

# 更新图书状态为已借出
with open('books.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
for row in rows:
if row[0] == borrow_book_name:
row[3] = "已借出"
writer.writerow(row)

# 将借阅信息写入借阅记录文件
with open('borrow_records.csv', mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([borrow_book_name, borrow_person_name, "借阅"])

messagebox.showinfo("成功", "图书借阅成功")

# 关闭借阅图书窗口
self.borrow_book_window.destroy()

def return_book(self):
# 创建归还图书窗口
self.return_book_window = tk.Toplevel(self.root)
self.return_book_window.title("归还图书")
self.return_book_window.geometry("300x250")
self.return_book_window.configure(bg='#f0f0f0')

# 创建归还图书窗口的界面元素
self.label_return_book_name = tk.Label(self.return_book_window, text="图书名称:", bg='#f0f0f0')
self.label_return_book_name.pack(pady=5)
self.entry_return_book_name = tk.Entry(self.return_book_window, width=30)
self.entry_return_book_name.pack()

self.label_return_person_name = tk.Label(self.return_book_window, text="归还人姓名:", bg='#f0f0f0')
self.label_return_person_name.pack(pady=5)
self.entry_return_person_name = tk.Entry(self.return_book_window, width=30)
self.entry_return_person_name.pack()

self.button_submit = tk.Button(self.return_book_window, text="归还", command=self.return_book_action, bg='#007acc', fg='white')
self.button_submit.pack(pady=10)

def return_book_action(self):
# 获取用户输入的归还信息
return_book_name = self.entry_return_book_name.get()
return_person_name = self.entry_return_person_name.get()

# 检查输入是否为空
if not return_book_name or not return_person_name:
messagebox.showerror("错误", "请填写完整归还信息")
return

# 校验图书是否存在且已被借出
book_borrowed = False
with open('books.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
rows = list(reader)
for row in rows:
if row[0] == return_book_name:
if row[3] == "已借出":
book_borrowed = True
break

if not book_borrowed:
messagebox.showerror("错误", "图书未被借出或不存在")
return

# 校验借阅记录,检查最新的借阅记录是否匹配
correct_borrower = False
if os.path.exists('borrow_records.csv'):
with open('borrow_records.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reversed(list(reader)):
if row[0] == return_book_name and row[2] == "借阅":
if row[1] == return_person_name:
correct_borrower = True
break

if not correct_borrower:
messagebox.showerror("错误", "归还人不是该图书的借阅人")
return

# 更新图书状态为未借出
with open('books.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
for row in rows:
if row[0] == return_book_name:
row[3] = "未借出"
writer.writerow(row)

# 将归还信息写入借阅记录文件
with open('borrow_records.csv', mode='a', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow([return_book_name, return_person_name, "归还"])

messagebox.showinfo("成功", "图书归还成功")

# 关闭归还图书窗口
self.return_book_window.destroy()

def display_borrow_info(self):
# 创建显示借阅信息窗口
self.display_borrow_info_window = tk.Toplevel(self.root)
self.display_borrow_info_window.title("借阅信息")
self.display_borrow_info_window.geometry("400x300")
self.display_borrow_info_window.configure(bg='#f0f0f0')

# 创建显示借阅信息窗口的界面元素
self.text_borrow_info = tk.Text(self.display_borrow_info_window, wrap="word", bg='#ffffff', font=('Helvetica', 12))
self.text_borrow_info.pack(pady=10, padx=10, fill="both", expand=True)

# 从借阅记录文件中读取借阅信息,并显示在窗口中
borrow_info_text = ""
if os.path.exists('borrow_records.csv'):
with open('borrow_records.csv', mode='r', newline='', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
borrow_info_text += f"图书名称: {row[0]}, 姓名: {row[1]}, 操作: {row[2]}\n"
else:
borrow_info_text = "暂无借阅信息"

self.text_borrow_info.insert("1.0", borrow_info_text)
self.text_borrow_info.config(state="disabled")


def main():
# 检查文件是否存在,如果不存在,则创建文件并写入标题行
if not os.path.exists('books.csv'):
with open('books.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['图书名称', '作者', '单价', '状态'])

# 检查文件是否存在,如果不存在,则创建文件并写入标题行
if not os.path.exists('persons.csv'):
with open('persons.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['姓名', '性别', '学号'])

# 检查文件是否存在,如果不存在,则创建文件并写入标题行
if not os.path.exists('borrow_records.csv'):
with open('borrow_records.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['图书名称', '姓名', '操作'])

root = tk.Tk()
app = LibraryManagementSystem(root)
root.mainloop()


if __name__ == "__main__":
main()
posted on 2024-05-14 20:15  带带带集美  阅读(7)  评论(0编辑  收藏  举报