Mx1GSap21Lt 发表于 2025-2-25 16:43:41

简易任务管理器的二次开发与优化

一、引言
在日常学习和工作中,我们经常需要管理各种任务,为了更高效地组织和跟踪这些任务,开发一个简易的任务管理器是一个不错的选择。本文将详细介绍如何从一个基础的任务管理器程序开始,逐步进行二次开发和优化,最终实现一个功能较为完善且用户友好的任务管理工具。
二、基础版本:简易任务管理器

[*]代码实现
#include <iostream>#include <vector>#include <string>using namespace std;// 任务结构体struct Task {    string description;    bool completed;};class TaskManager {private:    vector<Task> tasks;public:    // 添加任务    void addTask(const string& task) {      tasks.push_back({task, false});    }    // 删除任务    void deleteTask(int index) {      if (index >= 0 && index < tasks.size()) {            tasks.erase(tasks.begin() + index);      } else {            cout << "无效的任务索引" << endl;      }    }    // 查看任务    void viewTasks() {      if (tasks.empty()) {            cout << "没有可用的任务。" << endl;      } else {            for (size_t i = 0; i < tasks.size(); ++i) {                string status = tasks.completed ? "已完成" : "未完成";                cout << i + 1 << ". " << tasks.description << " [" << status << "]" << endl;            }      }    }    // 标记任务为完成    void markCompleted(int index) {      if (index >= 0 && index < tasks.size()) {            tasks.completed = true;      } else {            cout << "无效的任务索引" << endl;      }    }};int main() {    TaskManager tm;    tm.addTask("购买食品杂货");    tm.addTask("完成作业");    tm.viewTasks();    tm.markCompleted(0);    tm.viewTasks();    tm.deleteTask(1);    tm.viewTasks();    return 0;}
[*]功能解释
任务结构体 Task:定义了任务的基本属性,包括任务描述 description 和完成状态 completed。
任务管理器类 TaskManager:
addTask 方法:用于向任务列表中添加新任务。
deleteTask 方法:根据传入的任务索引删除指定任务,如果索引无效则给出提示。
viewTasks 方法:显示所有任务的信息,包括任务描述和完成状态。
markCompleted 方法:将指定索引的任务标记为已完成,如果索引无效则给出提示。
main 函数:演示了如何使用 TaskManager 类的基本功能,包括添加任务、查看任务、标记任务完成和删除任务。
三、二次开发:增加任务优先级和分类
拓展需求提出
基础版本虽然能满足基本的任务管理需求,但在实际使用中,我们可能希望对任务进行更细致的分类和优先级设置,以便更好地安排工作。
[*]代码实现
#include <iostream>#include <vector>#include <string>using namespace std;// 任务结构体struct Task {    string description;    bool completed;    string priority;    string category;};class TaskManager {private:    vector<Task> tasks;public:    // 添加任务    void addTask(const string& task, const string& priority = "中等", const string& category = "通用") {      tasks.push_back({task, false, priority, category});    }    // 删除任务    void deleteTask(int index) {      if (index >= 0 && index < tasks.size()) {            tasks.erase(tasks.begin() + index);      } else {            cout << "无效的任务索引" << endl;      }    }    // 查看任务,可按类别和优先级过滤    void viewTasks(const string& category = "", const string& priority = "") {      bool found = false;      for (size_t i = 0; i < tasks.size(); ++i) {            if ((category.empty() || tasks.category == category) &&                (priority.empty() || tasks.priority == priority)) {                string status = tasks.completed ? "已完成" : "未完成";                cout << i + 1 << ". " << tasks.description << " [优先级: " << tasks.priority                     << ", 类别: " << tasks.category << ", " << status << "]" << endl;                found = true;            }      }      if (!found) {            cout << "没有符合条件的任务。" << endl;      }    }    // 标记任务为完成    void markCompleted(int index) {      if (index >= 0 && index < tasks.size()) {            tasks.completed = true;      } else {            cout << "无效的任务索引" << endl;      }    }};void displayMenu() {    cout << "\n任务管理器" << endl;    cout << "1. 查看任务" << endl;    cout << "2. 添加任务" << endl;    cout << "3. 删除任务" << endl;    cout << "4. 标记任务为已完成" << endl;    cout << "5. 退出" << endl;}int main() {    TaskManager tm;    int choice;    string task, priority, category;    int index;    while (true) {      displayMenu();      cout << "请选择一个选项: ";      cin >> choice;      cin.ignore(); // 忽略换行符      switch (choice) {            case 1:                cout << "按类别过滤 (留空显示所有): ";                getline(cin, category);                cout << "按优先级过滤 (留空显示所有): ";                getline(cin, priority);                tm.viewTasks(category, priority);                break;            case 2:                cout << "请输入任务描述: ";                getline(cin, task);                cout << "请输入优先级 (高/中等/低): ";                getline(cin, priority);                cout << "请输入类别: ";                getline(cin, category);                tm.addTask(task, priority, category);                break;            case 3:                cout << "请输入要删除的任务索引: ";                cin >> index;                cin.ignore(); // 忽略换行符                tm.deleteTask(index - 1);                break;            case 4:                cout << "请输入要标记为已完成的任务索引: ";                cin >> index;                cin.ignore(); // 忽略换行符                tm.markCompleted(index - 1);                break;            case 5:                return 0;            default:                cout << "无效的选项,请重试。" << endl;      }    }    return 0;}代码改进点分析
结构体扩展:在 Task 结构体中新增了 priority(优先级)和 category(类别)两个属性,使得任务信息更加丰富。
addTask 方法改进:支持传入优先级和类别参数,默认优先级为 “中等”,默认类别为 “通用”,方便用户自定义任务属性。
viewTasks 方法改进:增加了按类别和优先级过滤的功能。用户可以根据需要输入类别和优先级,程序会显示符合条件的任务。若不输入,则显示所有任务。
用户交互界面:新增了 displayMenu 函数,用于显示操作菜单。在 main 函数中,使用 while 循环和 switch 语句实现了一个简单的命令行交互界面,让用户可以方便地选择不同的操作。
总结与展望
开发成果总结
通过二次开发,我们成功地为任务管理器增加了任务优先级和分类功能,并优化了用户交互界面。这使得任务管理器更加灵活和实用,能够更好地满足用户的多样化需求。
未来优化方向
尽管当前的任务管理器已经具备了较为丰富的功能,但仍有一些可以改进的地方。例如,可以考虑添加任务的截止日期,方便用户对任务进行时间管理;实现任务的排序功能,按照优先级、截止日期等进行排序;开发图形用户界面(GUI),提升用户体验。这些改进将进一步提升任务管理器的实用性和易用性。
希望本文的内容能对大家理解程序的二次开发和优化过程有所帮助,也欢迎大家尝试对这个任务管理器进行更多的改进和拓展。

页: [1]
查看完整版本: 简易任务管理器的二次开发与优化