From 3f0760c8ecf52f9b97ec2ab7f26454b575304322 Mon Sep 17 00:00:00 2001 From: kuiran <2940496089@qq.com> Date: Mon, 29 Jun 2026 22:49:54 +0800 Subject: [PATCH 1/3] feat: add delete_task core function --- campus_task/task_service.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/campus_task/task_service.py b/campus_task/task_service.py index 5b24eb9..cdad055 100644 --- a/campus_task/task_service.py +++ b/campus_task/task_service.py @@ -35,4 +35,13 @@ def get_task_by_id(task_id: int) -> Optional[Task]: for task in tasks: if task.id == task_id: return task - return None \ No newline at end of file + return None + +def delete_task(task_id: int) -> bool: + tasks = load_tasks() + for i, task in enumerate(tasks): + if task.id == task_id: + del tasks[i] + save_tasks(tasks) + return True + return False \ No newline at end of file -- Gitee From 27039a0d71afc1db7cac062cd4848ed76890fd6c Mon Sep 17 00:00:00 2001 From: kuiran <2940496089@qq.com> Date: Mon, 29 Jun 2026 22:50:24 +0800 Subject: [PATCH 2/3] test: add unit tests for delete task feature --- campus_task/__init__.py | 4 ++-- tests/test_delete.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/test_delete.py diff --git a/campus_task/__init__.py b/campus_task/__init__.py index fb3b798..f415f45 100644 --- a/campus_task/__init__.py +++ b/campus_task/__init__.py @@ -1,4 +1,4 @@ from .task_model import Task -from .task_service import add_task, get_all_tasks, mark_task_done, get_task_by_id +from .task_service import add_task, get_all_tasks, mark_task_done, get_task_by_id, delete_task -__all__ = ["Task", "add_task", "get_all_tasks", "mark_task_done", "get_task_by_id"] \ No newline at end of file +__all__ = ["Task", "add_task", "get_all_tasks", "mark_task_done", "get_task_by_id", "delete_task"] \ No newline at end of file diff --git a/tests/test_delete.py b/tests/test_delete.py new file mode 100644 index 0000000..e766267 --- /dev/null +++ b/tests/test_delete.py @@ -0,0 +1,36 @@ +import unittest +import os +import sys +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from campus_task import add_task, delete_task, get_all_tasks + +class TestDeleteFeature(unittest.TestCase): + + def setUp(self): + if os.path.exists("tasks.json"): + os.remove("tasks.json") + + def tearDown(self): + if os.path.exists("tasks.json"): + os.remove("tasks.json") + + def test_delete_existing_task(self): + task = add_task("测试任务") + result = delete_task(task.id) + self.assertTrue(result) + self.assertEqual(len(get_all_tasks()), 0) + + def test_delete_nonexistent_task(self): + result = delete_task(999) + self.assertFalse(result) + + def test_delete_last_task(self): + add_task("任务1") + add_task("任务2") + delete_task(1) + delete_task(2) + self.assertEqual(len(get_all_tasks()), 0) + +if __name__ == "__main__": + unittest.main() \ No newline at end of file -- Gitee From 437806d3fdae4a2af5530c0aa9a52ba45c96d808 Mon Sep 17 00:00:00 2001 From: kuiran <2940496089@qq.com> Date: Mon, 29 Jun 2026 22:51:17 +0800 Subject: [PATCH 3/3] feat: add CLI and interactive mode for delete --- main.py | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index dc617c5..9c2d97e 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ import sys -from campus_task import add_task, get_all_tasks, mark_task_done +from campus_task import add_task, get_all_tasks, mark_task_done, delete_task def print_tasks(): tasks = get_all_tasks() @@ -40,14 +40,29 @@ def handle_done(args): except ValueError: print("任务编号必须是数字") +def handle_delete(args): + if len(args) < 1: + print("用法: python main.py delete ") + return + try: + task_id = int(args[0]) + success = delete_task(task_id) + if success: + print(f"任务 {task_id} 已删除") + else: + print(f"未找到任务 {task_id}") + except ValueError: + print("任务编号必须是数字") + def interactive_mode(): while True: print("\n===== 校园任务清单 =====") print("1. 添加任务") print("2. 查看任务列表") print("3. 标记任务完成") - print("4. 退出") - choice = input("请输入选择 (1-4): ") + print("4. 删除任务") + print("5. 退出") + choice = input("请输入选择 (1-5): ") if choice == "1": title = input("请输入任务标题: ").strip() @@ -72,10 +87,21 @@ def interactive_mode(): except ValueError: print("任务编号必须是数字") elif choice == "4": + print_tasks() + try: + task_id = int(input("请输入要删除的任务编号: ")) + success = delete_task(task_id) + if success: + print(f"任务 {task_id} 已删除") + else: + print(f"未找到任务 {task_id}") + except ValueError: + print("任务编号必须是数字") + elif choice == "5": print("退出程序") break else: - print("无效选择,请输入 1-4") + print("无效选择,请输入 1-5") def main(): if len(sys.argv) >= 2: @@ -88,6 +114,8 @@ def main(): handle_list() elif command == "done": handle_done(args) + elif command == "delete": + handle_delete(args) else: print(f"未知命令: {command}") else: -- Gitee