项目名称:个人任务管理系统 (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 taskstasks = 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("请选择要更新状态的任务编号:")) - 1if 0 <= index < len(tasks):status = input("请输入新的任务状态(已完成、正进行、待完成):")tasks[index]['状态'] = statusprint("更新成功")else:print("编号无效")
功能:更新指定任务的状态。
- 调用
cat()
函数显示所有任务。 - 通过用户输入,获取要更新状态的任务编号,并将其转换为列表索引。
- 检查输入的编号是否有效。
- 如果有效,获取新的任务状态并更新任务的状态字段。
- 打印状态更新成功的消息。
- 如果编号无效,打印错误消息。
删除任务
def delete():cat()index = int(input("输入删除的任务编号:")) - 1if 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("程序退出")breakelse: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 taskstasks = 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("请选择要更新状态的任务编号:")) - 1if 0 <= index < len(tasks):status = input("请输入新的任务状态(已完成、正进行、待完成):")tasks[index]['状态'] = statusprint("更新成功")else:print("编号无效")# 删除任务
def delete():cat()index = int(input("输入删除的任务编号:")) - 1if 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("程序退出")breakelse:print("选择无效,重新输入")if __name__ == "__main__":main()