介绍
这个任务管理应用程序允许用户添加、删除和查看任务。每个任务包含标题、描述和优先级。用户可以通过命令行界面与应用程序进行交互,添加新任务、删除现有任务以及查看所有任务的列表。
项目结构
TaskManagerApp/
build/
BUILD.gn
data/
TaskData.cpp
TaskData.h
ui/
MainUI.cpp
MainUI.h
main.cpp
CMakeLists.txt
示例
build/BUILD.gn
executable("task_manager_app") {
sources = [
"../data/TaskData.cpp",
"../ui/MainUI.cpp",
"../main.cpp",
]
deps = []
}
data/TaskData.h
#ifndef TASKDATA_H
#define TASKDATA_H
#include <string>
#include <vector>
class Task {
public:
Task(const std::string &title, const std::string &description, int priority);
std::string GetTitle() const;
std::string GetDescription() const;
int GetPriority() const;
private:
std::string title_;
std::string description_;
int priority_;
};
class TaskData {
public:
void AddTask(const Task &task);
void RemoveTask(int index);
const std::vector<Task>& GetTasks() const;
private:
std::vector<Task> tasks_;
};
#endif // TASKDATA_H
data/TaskData.cpp
#include "TaskData.h"
Task::Task(const std::string &title, const std::string &description, int priority)
: title_(title), description_(description), priority_(priority) {}
std::string Task::GetTitle() const {
return title_;
}
std::string Task::GetDescription() const {
return description_;
}
int Task::GetPriority() const {
return priority_;
}
void TaskData::AddTask(const Task &task) {
tasks_.push_back(task);
}
void TaskData::RemoveTask(int index) {
if (index >= 0 && index < tasks_.size()) {
tasks_.erase(tasks_.begin() + index);
}
}
const std::vector<Task>& TaskData::GetTasks() const {
return tasks_;
}
ui/MainUI.h
#ifndef MAINUI_H
#define MAINUI_H
#include "../data/TaskData.h"
class MainUI {
public:
MainUI(TaskData &taskData);
void DisplayMenu();
void AddTask();
void RemoveTask();
void ViewTasks();
private:
TaskData &taskData_;
};
#endif // MAINUI_H
ui/MainUI.cpp
#include "MainUI.h"
#include <iostream>
MainUI::MainUI(TaskData &taskData) : taskData_(taskData) {}
void MainUI::DisplayMenu() {
int choice;
do {
std::cout << "\nTask Manager Menu:\n";
std::cout << "1. Add Task\n";
std::cout << "2. Remove Task\n";
std::cout << "3. View Tasks\n";
std::cout << "4. Exit\n";
std::cout << "Enter your choice: ";
std::cin >> choice;
switch (choice) {
case 1:
AddTask();
break;
case 2:
RemoveTask();
break;
case 3:
ViewTasks();
break;
case 4:
std::cout << "Exiting...\n";
break;
default:
std::cout << "Invalid choice. Please try again.\n";
}
} while (choice != 4);
}
void MainUI::AddTask() {
std::string title, description;
int priority;
std::cout << "Enter task title: ";
std::cin.ignore();
std::getline(std::cin, title);
std::cout << "Enter task description: ";
std::getline(std::cin, description);
std::cout << "Enter task priority (1-5): ";
std::cin >> priority;
Task newTask(title, description, priority);
taskData_.AddTask(newTask);
std::cout << "Task added successfully.\n";
}
void MainUI::RemoveTask() {
int index;
std::cout << "Enter the index of the task to remove: ";
std::cin >> index;
taskData_.RemoveTask(index);
std::cout << "Task removed successfully.\n";
}
void MainUI::ViewTasks() {
const auto &tasks = taskData_.GetTasks();
if (tasks.empty()) {
std::cout << "No tasks available.\n";
return;
}
std::cout << "\nTasks List:\n";
for (size_t i = 0; i < tasks.size(); ++i) {
std::cout << i << ". " << tasks[i].GetTitle() << " - " << tasks[i].GetDescription() << " (Priority: " << tasks[i].GetPriority() << ")\n";
}
}
main.cpp
#include "data/TaskData.h"
#include "ui/MainUI.h"
int main() {
TaskData taskData;
MainUI mainUI(taskData);
mainUI.DisplayMenu();
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(TaskManagerApp)
set(CMAKE_CXX_STANDARD 17)
add_executable(TaskManagerApp
data/TaskData.cpp
ui/MainUI.cpp
main.cpp
)