python项目开发——个人任务管理系统

项目名称:个人任务管理系统 (Personal Task Management System)

  • 项目简介

开发一个个人任务管理系统,帮助用户记录和管理日常任务。该系统应具备添加任务、查看任务、更新任务状态和删除任务等基本功能,并将数据存储在文件中。通过完成该项目,学员将综合运用Python编程能力,并撰写项目开发报告。

  • 项目需求

1. 用户界面

   提供简易的命令行界面供用户操作。

   用户可以选择不同的操作:添加任务、查看任务、更新任务状态、删除任务和退出程序。

2. 功能模块

  1. 添加任务

     用户输入任务标题、描述、截止日期和优先级。

     将任务信息保存到一个数据结构中(如列表)。

  1. 查看任务

     显示所有已记录的任务。

     每条记录包括任务标题、描述、截止日期、优先级和状态。

  1. 更新任务状态

     用户可以选择某个任务并更新其状态(如完成、进行中、未开始)。

  1. 删除任务

     用户可以按任务标题删除特定的任务记录。

  1. 退出程序

     用户选择退出程序后,系统保存所有任务记录到一个文件中,以便下次启动时读取。

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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2转vue3初步下载pnpm遇到的问题 pnpm : 无法加载文件 D:\nodejs\pnpm.ps1

安装pnpm npm install -g pnpm pnpm -v 提示&#xff1a; 解决&#xff1a;nvm install 18.18.0 下载最稳定版本的nodejs nvm use 18.18.0 然后注意重新下载删除pnpm npm uninstall -g pnpm npm install -g pnpmlatest 在vscode使用pnpm报错 解决&#xff1a;管理员运行Windo…

web项目规范配置(husky、eslint、lint-staged、commit)

背景&#xff1a; 团队开发为了保证提交代码格式统一&#xff0c;通常在进行代码提交的时候对暂存区代码进行校验&#xff0c;如没有通过eslint(本例使用eslint)校验&#xff0c;则不能提交到远端。 安装依赖 husky 、eslint 、prettier 、lint-staged npm install husky e…

Satellite Stereo Pipeline学习

1.在Anaconda某个环境中安装s2p pip install s2p 2.在Ubuntu系统中安装s2p源代码 git clone https://github.com/centreborelli/s2p.git --recursive cd s2p pip install -e ".[test]" 3.在s2p中进行make all处理 中间会有很多情况&#xff0c;基本上哪个包出问题…

基于网关的ip频繁访问web限制

一、前言 外部ip对某一个web进行频繁访问&#xff0c;有可能是对web进行攻击&#xff0c;现在提供一种基于网关的ip频繁访问web限制策略&#xff0c;犹如带刀侍卫&#xff0c;审查异常身份人员。如发现异常或者暴力闯关者&#xff0c;即可进行识别管制。 二、基于网关的ip频繁访…

【Python】 倒序遍历列表:Python中的简单技巧

基本原理 在Python中&#xff0c;列表是一种非常灵活的数据结构&#xff0c;它允许我们存储一系列的元素。有时&#xff0c;我们需要按照与元素添加顺序相反的顺序来遍历列表。这通常被称为“倒序遍历”。Python提供了几种不同的方法来实现这一功能。 代码示例 示例1&#x…

国内常用的编程博客网址:技术资源与学习平台

一、国内常用的编程博客网址&#xff1a;技术资源与学习平台 大家初入编程&#xff0c;肯定会遇到各种各样的问题。我们除了找 AI 工具以外&#xff0c;我们还能怎么迅速解决问题呢&#xff1f; 大家可以通过谷歌&#xff0c;百度&#xff0c;必应&#xff0c;github&#xf…

****三次握手和四次挥手

一、三次握手 1.简要描述TCP三次握手的过程 第一次握手&#xff0c;客户端发送SYN包到服务器&#xff1b; 第二次握手&#xff0c;服务器收到SYN包&#xff0c;回复一个SYNACK包&#xff1b; 第三次握手&#xff0c;客户端收到服务器的SYNACK包后&#xff0c;回复一个ACK包…

C++ 使用 nlohmann/json 库

C常用 json 库有&#xff1a; Jsoncpp boost ison Qt Json (不推荐使用) nlohman::json (推荐使用) 其中Qt中json解析的相关类只在qt中有用&#xff0c;为了避免以后不用qt无法解析json&#xff0c;建议使用nlohmann/json&#xff0c;适用于任何C框架。 1. 简介 nlohmann是一…

【vueCms】vueCms后台管理系统安装问题集合

开源项目地址: https://www.vuecms.cn/ 开源代码地址: https://gitee.com/derekgo/vue-cms_xg 问题一 如果出现提示少了个index.html。如下图 解决办法: 重新安装前端(vue3_vite)项目依赖 问题二 npm版本高无法解析依赖树导致依赖下载失败 解决方案: npm install --legacy…

Vue.use的实现原理

一、Vue.use 是做什么的&#xff1f; use 概念 如果你希望编写一个 Vue.js 插件来扩展应用的功能&#xff0c;需要提供一个 install 方法。如果插件是一个对象&#xff0c;那么这个对象必须包含 install 方法&#xff1b;如果插件是一个函数&#xff0c;那么这个函数将被作为 …

【Flask-app.py运行】已解决Cannot run program “D:\APP\python\python.exe”

文章目录 一、问题描述二、解决方法 一、问题描述 Cannot run program “D:\APP\python\python.exe” (in directory “F:\Codes\竞赛\大计赛\group\code\web\web”): CreateProcess error2, 系统找不到指定的文件。 这段报错源于运行 flask 项目的 app.py 时报错找不到程序&…

C++ | Leetcode C++题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> getRow(int rowIndex) {vector<int> row(rowIndex 1);row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row;} };

SNCScan:针对SAP安全网络通信(SNC)的安全分析与评估工具

关于SNCScan SNCScan是一款针对SAP安全网络通信&#xff08;SNC&#xff09;的安全分析与评估工具&#xff0c;该工具旨在帮助广大研究人员分析SAP安全网络通信&#xff08;SNC&#xff09;&#xff0c;并分析和检测SNC配置与SAP组件中的潜在问题。 SNC系统参数 SNC基础 SAP协…

flutter sdk升级之空安全启用

公司项目flutter sdk需要从2.5升级到3.7。由于项目不支持空安全&#xff0c;所以升级sdk之前要做的第一件事就是启用空安全。以下为空安全适配过程记录。 启用空安全 将dart sdk设置成sdk: ">2.12.0 <3.0.0"&#xff0c;即可启用。代码如下&#xff1a; envi…

面向Java程序员的Go工程开发入门流程

对于一个像我这样没有go背景的java程序员来说&#xff0c;使用go开发一个可用的程序的速度是肉眼可见的缓慢。 其难点不在于go语言本身&#xff0c;而是搭建整个工程链路的过程&#xff0c;即所谓的“配环境”。 本文主要讲述如何配出一个适合go开发的环境&#xff0c;以免有同…

未来工厂新篇章:大型工厂3D可视化技术引领工业新潮流

在科技日新月异的今天&#xff0c;大型工厂不再是我们印象中机器轰鸣、尘土飞扬的钢铁丛林&#xff0c;而是变成了智慧与效率并存的现代化生产中心。这一切的改变&#xff0c;都离不开一项革命性的技术——3D可视化。 一、何为大型工厂3D可视化&#xff1f; 大型工厂3D可视化&…

MATLAB函数模块光显示zeros/poles怎么办?

出现下面这种图了怎么办&#xff1f;是做错了吗&#xff1f; 这种图就是它显示不完整了&#xff0c;把它拉大点就可以完全显示了。

K8s Ingress 详解

文章目录 K8s Ingress 详解Ingress 资源清单Ingress 基于URL 实现路由Ingress 基于名称虚拟主机Ingress 实现HTTPS创建TLS 证书创建Secrets配置ingress Ingress RewriteIngress 灰度发布Ingress 配置认证 K8s Ingress 详解 Ingress 资源清单 apiVersion: networking.k8s.io/v…

ubuntu22 部署nacos集群

#nacos集群 至少需要启动三个nacos &#xff08;这里我只有俩台虚拟机&#xff0c;故在一台上启动了俩个nacos服务&#xff09; https://github.com/alibaba/nacos/releases #下载编译后压缩包 nacos-server-$version.tar.gz cd /usr/local tar -zxvf nacos-server-2.3.2.tar.…

mysql 查询指定id的所有下级数据

为了查询指定ID所有下级数据&#xff0c;你可以使用递归的公用表表达式&#xff08;Common Table Expressions, CTEs&#xff09;。以下是一个例子&#xff0c;假设你有一个名为categories的表&#xff0c;它有id和parent_id字段&#xff0c;parent_id表示父级分类的ID。 WITH…