项目名称:个人任务管理系统 (Personal Task Management System)
- 项目简介
开发一个个人任务管理系统,帮助用户记录和管理日常任务。该系统应具备添加任务、查看任务、更新任务状态和删除任务等基本功能,并将数据存储在文件中。通过完成该项目,学员将综合运用Python编程能力,并撰写项目开发报告。
- 项目需求
1. 用户界面
提供简易的命令行界面供用户操作。
用户可以选择不同的操作:添加任务、查看任务、更新任务状态、删除任务和退出程序。
2. 功能模块
- 添加任务
用户输入任务标题、描述、截止日期和优先级。
将任务信息保存到一个数据结构中(如列表)。
- 查看任务
显示所有已记录的任务。
每条记录包括任务标题、描述、截止日期、优先级和状态。
- 更新任务状态
用户可以选择某个任务并更新其状态(如完成、进行中、未开始)。
- 删除任务
用户可以按任务标题删除特定的任务记录。
- 退出程序
用户选择退出程序后,系统保存所有任务记录到一个文件中,以便下次启动时读取。
3. 数据存储
使用JSON文件保存和读取任务记录,确保数据在程序关闭后不丢失。
- 项目开发步骤
1. 需求分析
分析用户需要的功能和操作流程。
确定数据存储格式和文件结构。
2. 系统设计
设计程序的模块结构和功能函数。
设计数据存储结构(如列表存储任务)。
确定用户界面和交互方式。
3. 开发源码
编写添加任务、查看任务、更新任务状态、删除任务和文件读写等功能函数。
创建用户交互界面,接收用户输入并调用相应的功能模块。
处理异常情况和错误输入。
4. 测试与验证
测试各个功能模块,确保其正常工作。
验证数据存储和读取功能,确保数据持久化。
进行综合测试,模拟用户操作流程,检查系统整体功能。
- 项目开发报告
- 项目需求分析
1. 用户需要一个命令行界面操作系统,可以添加、查看、更新和删除任务。
2. 任务信息包括标题、描述、截止日期、优先级和状态。
3. 数据需要持久化存储,确保程序关闭后数据不丢失。
- 系统设计
1. 模块结构
添加任务模块
查看任务模块
更新任务状态模块
删除任务模块
文件读写模块
2. 数据存储结构
使用列表存储任务,每个任务是一个字典,包含标题、描述、截止日期、优先级和状态等信息。
使用JSON文件保存和读取任务数据。
3. 用户界面
命令行界面,提供操作菜单供用户选择。
- 测试与验证
1. 功能模块测试
添加任务:输入不同任务信息,查看是否正确保存。
查看任务:添加多个任务后,查看是否显示所有任务。
更新任务状态:更新任务状态,查看状态是否正确更新。
删除任务:删除任务后,查看任务列表是否正确更新。
2. 数据存储测试
添加任务后退出程序,再次启动程序,查看任务是否正确读取。
3. 综合测试
模拟用户操作流程,进行添加、查看、更新、删除任务的操作,验证系统整体功能。
- 模块展示
任务列表
tasks = []
这是一个全局变量tasks
,用于存储所有任务的信息,初始值为空列表。
加载任务数据
def load():
if os.path.exists('task.json'):
with open('task.json', 'r', encoding='utf-8') as file:
global tasks
tasks = json.load(file)
print("任务数据加载成功")
else:
print("存储的数据文件不翼而飞了!!")
功能:从文件task.json
中加载任务数据到全局变量tasks
。
- 首先检查文件是否存在。
- 如果文件存在,打开并读取文件内容,将其解析为Python对象并赋值给
tasks
。 - 如果文件不存在,打印一条错误消息。
保存任务数据
def save():
with open('task.json', 'w', encoding='utf-8') as file:
json.dump(tasks, file, ensure_ascii=False, indent=4)
print("任务保存成功,记得完成!!")
功能:将当前的任务数据保存到文件task.json
中。
- 打开文件
task.json
,以写模式。 - 将
tasks
的内容以JSON格式写入文件中。 - 打印保存成功的消息。
添加任务
def add():
title = input("任务名字: ")
details = input("任务内容是: ")
due_date = input("任务截止到(格式:YYYY-MM-DD): ")
priority = input("任务重要否: ")
task = {
'标题': title,
'内容': details,
'截止日期': due_date,
'优先级': priority,
'状态': '未开始'
}
tasks.append(task)
print("添加成功")
功能:添加一个新的任务到任务列表中。
- 通过用户输入,获取任务的标题、内容、截止日期和优先级。
- 将这些信息封装成一个字典对象,并设置任务状态为"未开始"。
- 将这个任务对象添加到
tasks
列表中。 - 打印任务添加成功的消息。
查看任务
def cat():
if not tasks:
print("还没有任务")
else:
for idx, task in enumerate(tasks, start=1):
print(
f"{idx}. 标题: {task['标题']}, 内容: {task['内容']}, 截止日期: {task['截止日期']}, 重要度: {task['优先级']}, 状态: {task['状态']}")
功能:查看并显示所有任务的详细信息。
- 检查任务列表是否为空。
- 如果为空,打印没有任务的消息。
- 如果不为空,遍历任务列表,并打印每个任务的详细信息,包括编号、标题、内容、截止日期、优先级和状态。
更新任务状态
def update():
cat()
index = int(input("请选择要更新状态的任务编号:")) - 1
if 0 <= index < len(tasks):
status = input("请输入新的任务状态(已完成、正进行、待完成):")
tasks[index]['状态'] = status
print("更新成功")
else:
print("编号无效")
功能:更新指定任务的状态。
- 调用
cat()
函数显示所有任务。 - 通过用户输入,获取要更新状态的任务编号,并将其转换为列表索引。
- 检查输入的编号是否有效。
- 如果有效,获取新的任务状态并更新任务的状态字段。
- 打印状态更新成功的消息。
- 如果编号无效,打印错误消息。
删除任务
def delete():
cat()
index = int(input("输入删除的任务编号:")) - 1
if 0 <= index < len(tasks):
del tasks[index]
print("任务删除成功")
else:
print("编号无效")
功能:删除指定的任务。
- 调用
cat()
函数显示所有任务。 - 通过用户输入,获取要删除的任务编号,并将其转换为列表索引。
- 检查输入的编号是否有效。
- 如果有效,删除指定的任务。
- 打印任务删除成功的消息。
- 如果编号无效,打印错误消息。
主程序
def main():
load()
while True:
print("\n请选择:")
print("1. 添加")
print("2. 查看")
print("3. 更新")
print("4. 删除")
print("5. 退出")
choice = input("输入选择:")
if choice == '1':
add()
elif choice == '2':
cat()
elif choice == '3':
update()
elif choice == '4':
delete()
elif choice == '5':
save()
print("程序退出")
break
else:
print("选择无效,重新输入")
功能:主程序入口,提供用户交互界面。
- 加载任务数据。
- 显示操作菜单,提供添加、查看、更新、删除任务和退出程序的选项。
- 根据用户输入的选择,调用相应的函数进行操作。
- 如果用户选择退出,保存任务数据并退出程序。
- 如果用户输入无效,提示重新输入。
主程序入口
if __name__ == "__main__":
main()
功能:检查当前模块是否作为主程序运行。如果是,则调用main()
函数启动程序。
- 完整代码呈现:
import json
import os
# 任务列表
tasks = []
# 加载任务数据
def load():
if os.path.exists('task.json'):
with open('task.json', 'r', encoding='utf-8') as file:
global tasks
tasks = json.load(file)
print("任务数据加载成功")
else:
print("存储的数据文件不翼而飞了!!")
# 保存任务数据
def save():
with open('task.json', 'w', encoding='utf-8') as file:
json.dump(tasks, file, ensure_ascii=False, indent=4)
print("任务保存成功,记得完成!!")
# 添加任务
def add():
title = input("任务名字: ")
details = input("任务内容是: ")
due_date = input("任务截止到(格式:YYYY-MM-DD): ")
priority = input("任务重要否: ")
task = {
'标题': title,
'内容': details,
'截止日期': due_date,
'优先级': priority,
'状态': '未开始'
}
tasks.append(task)
print("添加成功")
# 查看任务
def cat():
if not tasks:
print("还没有任务")
else:
for idx, task in enumerate(tasks, start=1):
print(
f"{idx}. 标题: {task['标题']}, 内容: {task['内容']}, 截止日期: {task['截止日期']}, 重要度: {task['优先级']}, 状态: {task['状态']}")
# 更新任务状态
def update():
cat()
index = int(input("请选择要更新状态的任务编号:")) - 1
if 0 <= index < len(tasks):
status = input("请输入新的任务状态(已完成、正进行、待完成):")
tasks[index]['状态'] = status
print("更新成功")
else:
print("编号无效")
# 删除任务
def delete():
cat()
index = int(input("输入删除的任务编号:")) - 1
if 0 <= index < len(tasks):
del tasks[index]
print("任务删除成功")
else:
print("编号无效")
# 主程序
def main():
load()
while True:
print("\n请选择:")
print("1. 添加")
print("2. 查看")
print("3. 更新")
print("4. 删除")
print("5. 退出")
choice = input("输入选择:")
if choice == '1':
add()
elif choice == '2':
cat()
elif choice == '3':
update()
elif choice == '4':
delete()
elif choice == '5':
save()
print("程序退出")
break
else:
print("选择无效,重新输入")
if __name__ == "__main__":
main()