You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
5.2 KiB

import tkinter as tk
from tkinter import messagebox, simpledialog
from tkinter import ttk
import json
from datetime import datetime
class HomeworkManager:
def __init__(self, root):
self.root = root
self.root.title("作业管理系统")
self.homework_list = []
self.frame = tk.Frame(self.root)
self.frame.pack(pady=10)
self.label = tk.Label(self.frame, text="作业列表")
self.label.pack()
self.tree = ttk.Treeview(self.frame, columns=("描述", "截止日期", "优先级", "状态"), show="headings")
self.tree.heading("描述", text="描述")
self.tree.heading("截止日期", text="截止日期")
self.tree.heading("优先级", text="优先级")
self.tree.heading("状态", text="状态")
self.tree.pack(pady=10)
self.add_button = tk.Button(self.frame, text="添加作业", command=self.add_homework)
self.add_button.pack(side=tk.LEFT, padx=10)
self.delete_button = tk.Button(self.frame, text="删除作业", command=self.delete_homework)
self.delete_button.pack(side=tk.LEFT, padx=10)
self.details_button = tk.Button(self.frame, text="查看详情", command=self.view_details)
self.details_button.pack(side=tk.LEFT, padx=10)
self.complete_button = tk.Button(self.frame, text="标记为完成", command=self.mark_as_completed)
self.complete_button.pack(side=tk.LEFT, padx=10)
self.stats_button = tk.Button(self.frame, text="查看统计", command=self.view_stats)
self.stats_button.pack(side=tk.LEFT, padx=10)
self.save_button = tk.Button(self.frame, text="保存作业", command=self.save_homework)
self.save_button.pack(side=tk.LEFT, padx=10)
self.load_button = tk.Button(self.frame, text="加载作业", command=self.load_homework)
self.load_button.pack(side=tk.LEFT, padx=10)
def add_homework(self):
description = simpledialog.askstring("输入", "输入作业描述:")
if description:
due_date = simpledialog.askstring("输入", "输入截止日期YYYY-MM-DD")
priority = simpledialog.askstring("输入", "输入优先级(高/中/低):")
try:
due_date = datetime.strptime(due_date, '%Y-%m-%d').date()
except ValueError:
messagebox.showwarning("无效日期", "截止日期格式应为YYYY-MM-DD")
return
self.homework_list.append({"描述": description, "截止日期": str(due_date), "优先级": priority, "状态": "未完成"})
self.update_treeview()
def delete_homework(self):
selected_item = self.tree.selection()
if selected_item:
index = self.tree.index(selected_item)
del self.homework_list[index]
self.update_treeview()
else:
messagebox.showwarning("警告", "未选择任何作业进行删除")
def view_details(self):
selected_item = self.tree.selection()
if selected_item:
index = self.tree.index(selected_item)
hw = self.homework_list[index]
message = f"描述: {hw['描述']}\n截止日期: {hw['截止日期']}\n优先级: {hw['优先级']}\n状态: {hw['状态']}"
messagebox.showinfo("作业详情", message)
else:
messagebox.showwarning("警告", "未选择任何作业查看详情")
def mark_as_completed(self):
selected_item = self.tree.selection()
if selected_item:
index = self.tree.index(selected_item)
self.homework_list[index]['状态'] = "已完成"
self.update_treeview()
else:
messagebox.showwarning("警告", "未选择任何作业进行标记")
def view_stats(self):
total_homework = len(self.homework_list)
completed_homework = sum(1 for hw in self.homework_list if hw["状态"] == "已完成")
message = f"总作业数: {total_homework}\n已完成作业数: {completed_homework}\n未完成作业数: {total_homework - completed_homework}"
messagebox.showinfo("统计信息", message)
def save_homework(self):
with open("homework_list.json", "w", encoding='utf-8') as f:
json.dump(self.homework_list, f, ensure_ascii=False, indent=4)
messagebox.showinfo("保存", "作业列表已成功保存")
def load_homework(self):
try:
with open("homework_list.json", "r", encoding='utf-8') as f:
self.homework_list = json.load(f)
self.update_treeview()
messagebox.showinfo("加载", "作业列表已成功加载")
except FileNotFoundError:
messagebox.showwarning("加载", "未找到保存的作业列表")
def update_treeview(self):
self.tree.delete(*self.tree.get_children())
for hw in self.homework_list:
self.tree.insert("", tk.END, values=(hw["描述"],hw["截止日期"], hw["优先级"], hw["状态"]))
if __name__ == "__main__":
root = tk.Tk()
app = HomeworkManager(root)
root.mainloop()