☰分类导航

Python 编程/项目实战
课程进度 95% · 第11/11章第11/11章 · 标签 1/2
— 1 —

项目:命令行待办事项

实现一个命令行待办事项管理工具,综合运用文件操作、异常处理和面向对象编程。


```python
import json
import os
from datetime import datetime

class TodoItem:
    def __init__(self, title, desc="", priority="中"):
        self.id = id(self)
        self.title = title
        self.description = desc
        self.priority = priority
        self.completed = False
        self.created_at = datetime.now()

    def toggle(self):
        self.completed = not self.completed

    def __str__(self):
        status = "✓" if self.completed else "○"
        return f"[{status}] {self.title} ({self.priority})"

class TodoList:
    def __init__(self, filename="todos.json"):
        self.filename = filename
        self.items = []
        self.load()

    def add(self, title, desc="", priority="中"):
        item = TodoItem(title, desc, priority)
        self.items.append(item)
        self.save()
```
python
1
import json
2
import os
3
from datetime import datetime
4
 
5
class TodoItem:
6
def __init__(self, title, desc="", priority="中"):
7
self.id = id(self)
8
self.title = title
9
self.description = desc
10
self.priority = priority
11
self.completed = False
12
self.created_at = datetime.now()
13
 
14
def toggle(self):
15
self.completed = not self.completed
16
 
17
def __str__(self):
18
status = "✓" if self.completed else "○"
19
return f"[{status}] {self.title} ({self.priority})"
20
 
21
class TodoList:
22
def __init__(self, filename="todos.json"):
23
self.filename = filename
24
self.items = []
25
self.load()
26
 
27
def add(self, title, desc="", priority="中"):
28
item = TodoItem(title, desc, priority)
29
self.items.append(item)
30
self.save()
— 2 —

项目功能实现


```python
    def list_all(self):
        if not self.items:
            print("暂无待办事项")
            return
        for i, item in enumerate(self.items, 1):
            print(f"{i}. {item}")

    def complete(self, index):
        if 0 <= index < len(self.items):
            self.items[index].toggle()
            self.save()

    def delete(self, index):
        if 0 <= index < len(self.items):
            self.items.pop(index)
            self.save()

    def save(self):
        data = [{
            "title": item.title,
            "desc": item.description,
            "priority": item.priority,
            "completed": item.completed
        } for item in self.items]
        with open(self.filename, "w") as f:
            json.dump(data, f, ensure_ascii=False)

    def load(self):
        if os.path.exists(self.filename):
            with open(self.filename, "r") as f:
                data = json.load(f)
                for item_data in data:
                    item = TodoItem(
                        item_data["title"],
                        item_data.get("desc", ""),
                        item_data.get("priority", "中")
                    )
                    item.completed = item_data.get("completed", False)
                    self.items.append(item)
```
python
1
def list_all(self):
2
if not self.items:
3
print("暂无待办事项")
4
return
5
for i, item in enumerate(self.items, 1):
6
print(f"{i}. {item}")
7
 
8
def complete(self, index):
9
if 0 <= index < len(self.items):
10
self.items[index].toggle()
11
self.save()
12
 
13
def delete(self, index):
14
if 0 <= index < len(self.items):
15
self.items.pop(index)
16
self.save()
17
 
18
def save(self):
19
data = [{
20
"title": item.title,
21
"desc": item.description,
22
"priority": item.priority,
23
"completed": item.completed
24
} for item in self.items]
25
with open(self.filename, "w") as f:
26
json.dump(data, f, ensure_ascii=False)
27
 
28
def load(self):
29
if os.path.exists(self.filename):
30
with open(self.filename, "r") as f:
31
data = json.load(f)
32
for item_data in data:
33
item = TodoItem(
34
item_data["title"],
35
item_data.get("desc", ""),
36
item_data.get("priority", "中")
37
)
38
item.completed = item_data.get("completed", False)
39
self.items.append(item)