Sistema en C++ para gestionar proyectos escolares con asignación de grupos y fechas límite, usando clases, vectores y entrada/salida estándar.
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
// Clase que representa un proyecto escolar
class Project {
private:
std::string name; // Nombre del proyecto
std::vector<std::string> students; // Lista de estudiantes asignados al proyecto
std::string deadline; // Fecha límite del proyecto (formato cadena, ej. "2024-06-30")
public:
// Constructor
Project(const std::string& name, const std::string& deadline) : name(name), deadline(deadline) {}
// Añade un estudiante al grupo
void addStudent(const std::string& student) {
students.push_back(student);
}
// Obtiene el nombre del proyecto
std::string getName() const {
return name;
}
// Obtiene la fecha límite
std::string getDeadline() const {
return deadline;
}
// Muestra información del proyecto
void display() const {
std::cout << "Proyecto: " << name << "\n";
std::cout << "Fecha límite: " << deadline << "\n";
std::cout << "Grupo de estudiantes: ";
if (students.empty()) {
std::cout << "Ningún estudiante asignado." << std::endl;
} else {
for (size_t i = 0; i < students.size(); ++i) {
std::cout << students[i];
if (i != students.size() - 1) std::cout << ", ";
}
std::cout << std::endl;
}
std::cout << "-----------------------------" << std::endl;
}
};
// Clase que gestiona múltiples proyectos
class ProjectManager {
private:
std::vector<Project> projects; // Lista de proyectos
public:
// Añade un nuevo proyecto
void addProject(const std::string& name, const std::string& deadline) {
projects.emplace_back(name, deadline);
std::cout << "Proyecto '" << name << "' añadido con fecha límite " << deadline << ".\n";
}
// Asigna un estudiante a un proyecto existente
void assignStudentToProject(const std::string& projectName, const std::string& studentName) {
for (auto& project : projects) {
if (project.getName() == projectName) {
project.addStudent(studentName);
std::cout << "Estudiante '" << studentName << "' asignado al proyecto '" << projectName << "'.\n";
return;
}
}
std::cout << "Proyecto '" << projectName << "' no encontrado.\n";
}
// Muestra todos los proyectos
void displayProjects() const {
if (projects.empty()) {
std::cout << "No hay proyectos disponibles.\n";
return;
}
std::cout << "Lista de proyectos:\n";
for (const auto& project : projects) {
project.display();
}
}
};
// Función para leer una línea de entrada con mensaje
std::string readLine(const std::string& prompt) {
std::cout << prompt;
std::string input;
std::getline(std::cin, input);
return input;
}
int main() {
ProjectManager manager;
bool running = true;
while (running) {
std::cout << "\n--- Gestión de Proyectos Escolares ---\n";
std::cout << "1. Añadir nuevo proyecto\n";
std::cout << "2. Asignar estudiante a proyecto\n";
std::cout << "3. Mostrar proyectos\n";
std::cout << "4. Salir\n";
std::cout << "Seleccione una opción: ";
std::string choiceStr;
std::getline(std::cin, choiceStr);
int choice = 0;
std::stringstream ss(choiceStr);
ss >> choice;
switch (choice) {
case 1: {
std::string name = readLine("Ingrese nombre del proyecto: ");
std::string deadline = readLine("Ingrese fecha límite (YYYY-MM-DD): ");
manager.addProject(name, deadline);
break;
}
case 2: {
std::string projectName = readLine("Ingrese nombre del proyecto para asignar estudiante: ");
std::string studentName = readLine("Ingrese nombre del estudiante: ");
manager.assignStudentToProject(projectName, studentName);
break;
}
case 3: {
manager.displayProjects();
break;
}
case 4: {
running = false;
std::cout << "Saliendo del programa.\n";
break;
}
default: {
std::cout << "Opción no válida, intente de nuevo.\n";
break;
}
}
}
return 0;
}Clase Project: representa un proyecto con nombre, grupo de estudiantes y fecha límite.
Clase ProjectManager: gestiona una lista de proyectos, con métodos para agregar, modificar y mostrar proyectos.
Uso de STL vector y string para gestión dinámica de datos.
Entrada/salida estándar para interacción con el usuario.
Sin dependencias externas, solo librerías estándar de C++ (iostream, vector, string, sstream, chrono).
Configuración: no se requiere configuración de hardware, programa de consola independiente.
Arduino: no aplicable, programa de escritorio en C++.
Software: se requiere compilador C++11 o superior.