一、引言
在日常学习和工作中,我们经常需要管理各种任务,为了更高效地组织和跟踪这些任务,开发一个简易的任务管理器是一个不错的选择。本文将详细介绍如何从一个基础的任务管理器程序开始,逐步进行二次开发和优化,最终实现一个功能较为完善且用户友好的任务管理工具。
二、基础版本:简易任务管理器
- 代码实现
cpp
#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[i].completed ? "已完成" : "未完成";
cout << i + 1 << ". " << tasks[i].description << " [" << status << "]" << endl;
}
}
}
// 标记任务为完成
void markCompleted(int index) {
if (index >= 0 && index < tasks.size()) {
tasks[index].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 类的基本功能,包括添加任务、查看任务、标记任务完成和删除任务。
三、二次开发:增加任务优先级和分类
拓展需求提出
基础版本虽然能满足基本的任务管理需求,但在实际使用中,我们可能希望对任务进行更细致的分类和优先级设置,以便更好地安排工作。
-
代码实现
cpp
#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[i].category == category) &&
(priority.empty() || tasks[i].priority == priority)) {
string status = tasks[i].completed ? "已完成" : "未完成";
cout << i + 1 << ". " << tasks[i].description << " [优先级: " << tasks[i].priority
<< ", 类别: " << tasks[i].category << ", " << status << "]" << endl;
found = true;
}
}
if (!found) {
cout << "没有符合条件的任务。" << endl;
}
}
// 标记任务为完成
void markCompleted(int index) {
if (index >= 0 && index < tasks.size()) {
tasks[index].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),提升用户体验。这些改进将进一步提升任务管理器的实用性和易用性。
希望本文的内容能对大家理解程序的二次开发和优化过程有所帮助,也欢迎大家尝试对这个任务管理器进行更多的改进和拓展。
