Eudis Serrano. Ejercicio 1

 avatar
user_3711028
c_cpp
20 days ago
10 kB
3
Indexable
	// estudiantes
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <locale.h>
using namespace std;
int menu();/*función secundaria para desplegar el menú*/
class Estudiante {
private:
  bool SesionActiva = false, NotasCargadas = false;/*variables para verificar si ya se ha iniciado sesión y si ya se han cargado notas*/
  int ID_Estudiante, Num_ID, Num_Estudiantes = 0, Total_Notas = 0,
                             ID_Est_Arreglo[30];
  double calificaciones[5], CalxEstudiantes[150], Notas_Estudiante;
/*el arreglo calxestudiantes es usado para almacenar todas las calificaciones de los estudiantes, mientras que el arreglo calificaciones es usado solo para almacenar cinco calificaciones de un solo estudiante*/

public:
  Estudiante(int ID_Est = 0, int TNotas = 0, double Nota = 0.0)
      : ID_Estudiante(ID_Est), Total_Notas(TNotas), Notas_Estudiante(Nota){};
  void IniciarSesion();
  void AceptarDatos();
  void EditarNotas();
  void VerNotas();
  void Salir();/*al salir las variables SesionActiva y NotasCargadas se vuelven false para que ningún usuario acceda a ver las notas de los demás usuarios*/
};
void Estudiante::IniciarSesion() {
  srand(time(nullptr));/*se usan números aleatorios para crear la ID de los usuarios*/
  char SoN;
  bool ID;/*es usado para verificar si la ID es correcta en diversos casos: cuando se quiere generar una nueva ID, cuando se quiere verificar que una ID existe, etc*/
  int Error = 0;
  SesionActiva = false;
  NotasCargadas = false;
  cout << "¿Ya está registrado? es decir ¿Tiene ID? ('S'/'N')" << endl
       << "Presione S para sí o N para no: ";
  cin >> SoN;
  do {
    if (SoN != 'N' && SoN != 'S') {
      switch (Error) {
      case 0:
        cout << endl << "ups!";
        Error++;
        break;
      case 1:
        cout << endl
             << endl
             << "Se le indico presionar 'S' o 'N'... Tomare esto como un error "
                "de su parte, pero no se preocupe"
             << endl
             << "Todos cometemos errores :)" << endl
             << "Ya está registrado? es decir, Tiene ID? Sí o No? ('S'/'N'): ";
        cin >> SoN;
        Error++;
        break;
        case 2:
        cout << endl
             << endl
             << "...(ō.O)?... bueno... dos errores los comete cualquiera (creo)"
             << endl
             << "recuerde 'S' en mayuscula para sí y 'N' en mayuscula para no"
             << endl
             << "Lo tienes?...bien" << endl
             << "Ya está registrado? es decir, Tiene ID? ('S'/'N'): ";
        cin >> SoN;
        Error++;
        break;
      case 3:
        cout << endl << endl << "Jaja... que gracioso (-_-)... ('S'/'N'): ";
        cin >> SoN;
        Error++;
        break;
      case 4:
        cout << endl << endl << "... ('S'/'N') ¿SÍ O NO? (°-°): ";
        cin >> SoN;
        Error++;
        break;
      case 5:
        cout << endl
             << endl
             << "PERO BUENO VALE USTED ES PEN-... por chistosito diremos que "
                "no tienes ID... ni cerebro..."
             << endl
             << "('S'/'N'): N";
        SoN = 'N';
      }
    }
  } while (SoN != 'N' && SoN != 'S');/*con este do while verificamos la entrada del usuario*/
  if (SoN == 'N') {
    do {
      ID = false;
      ID_Estudiante = 1000 + rand() % 9000;/*aquí se genera una ID*/
      for (int i = 0; i <= Num_Estudiantes; i++) {
        if (ID_Est_Arreglo[i] == ID_Estudiante) {
          ID = true;
        }
      }
    } while (ID);
    cout << endl
         << "Su ID es: " << ID_Estudiante << " asegurese de no olvidar su ID"
         << endl
         << "ya que no hay forma de recuperar su informacion si llega a "
            "olvidarlo";
    Num_Estudiantes++;
    ID_Est_Arreglo[Num_Estudiantes - 1] = ID_Estudiante;
    Num_ID = Num_Estudiantes - 1;
  } else {/*en caso de que el usuario ya tenga una cuenta se le pide que ingrese su ID para verificarlo*/
    Error = 0;
    cout << endl << endl << "ingrese su ID: ";
    cin >> ID_Estudiante;
    ID = false;
    if (Error < 3) {
      do {
        for (int j = 0; j <= Num_Estudiantes; j++) {
          if (ID_Est_Arreglo[j] == ID_Estudiante) {
            Num_ID = j;
            ID = true;
          }
        }
        if (ID == false) {
          Error++;
          cout << endl
               << "El ID INGRESADO NO EXISTE" << endl
               << "(se la darán 3 oportunidades para verificar) (" << Error
               << "/3)" << endl
               << endl
               << "el ID ingresado es: " << ID_Estudiante << endl
               << "verifíquelo e ingrese nuevamente su ID: ";
          cin >> ID_Estudiante;
        }
      } while (Error < 3 && ID == false);/*si el usuario se equivoca más de tres veces se le asignará una nueva ID*/
      if (ID == false) {
        do {
          ID_Estudiante = 1000 + rand() % 9000;
          for (int i = 0; i <= Num_Estudiantes; i++) {
            if (ID_Est_Arreglo[i] == ID_Estudiante) {
              ID = true;
            }
          }
        } while (ID);
        cout << endl
             << "Su ID es: " << ID_Estudiante
             << " asegurese de no olvidar su ID" << endl
             << "ya que no hay forma de recuperar su informacion si llega a "
                "olvidarlo";
        Num_Estudiantes++;
        ID_Est_Arreglo[Num_Estudiantes - 1] = ID_Estudiante;
        Num_ID = Num_Estudiantes - 1;
      }
    }
  }
  while (ID == false)
    ;
  SesionActiva = true;/*luego de todo esto se activa la sesión*/
  return;
}
void Estudiante::AceptarDatos() {/*aquel usuario ingresa sus notas las cuales se almacenan en el arreglo CalxEstudiante haciendo uso del arreglo calificaciones*/
  if (SesionActiva == true) {
    for (int k = 0; k < 5; k++) {
      do {
        cout << endl
             << endl
             << "Ingrese calificacion " << k + 1 << endl
             << "(si no tiene las 5 calificaciones aún rellene con 0 las "
                "faltantes (/0 u 0)/):";
        cin >> calificaciones[k];
        if (calificaciones[k] < 0 || calificaciones[k] > 10) {
          cout << endl << "la calificación debe de estar entre 0.0 y 10!!";
        }
      } while (calificaciones[k] < 0 || calificaciones[k] > 10);
      Total_Notas++;
      int q = 0;
      int IndiceFinal = Num_ID * 5;
      for (int IndiceNotas = ((Num_ID - 1) * 5); IndiceNotas < IndiceFinal;
           IndiceNotas++) {
        CalxEstudiantes[IndiceNotas] = calificaciones[q];
        q++;
      }
    }
    NotasCargadas = true;
  } else {
    cout << endl
         << endl
         << "No se ha iniciado sesión, por favor inicie sesión primero :)";
  }
  return;
}
void Estudiante::EditarNotas() {/*aquí el estudiante puede editar una nota a la vez*/
  if (SesionActiva == true && NotasCargadas == true) {
    do {
      cout << endl << endl << "Cual nota desea editar? (1-5): ";
      cin >> Notas_Estudiante;
      if (Notas_Estudiante < 1 || Notas_Estudiante > 5) {
        cout << endl
             << "Ups! creo que se me olvido enfatizar QUE LA NOTA ESTA ENTRE 1 "
                "Y 5..."
             << endl
             << "—Atentamente un estudiante de Ing. de Sistemas con sueño";
      }
    } while (Notas_Estudiante < 1 || Notas_Estudiante > 5);
    int Indice = ((Num_ID - 1) * 5) + Notas_Estudiante - 1;
    do {
      cout << endl << endl << "Ingrese la nueva nota: ";
      cin >> CalxEstudiantes[Indice];
      if (CalxEstudiantes[Indice] < 0 || CalxEstudiantes[Indice] > 10) {
        cout << endl << "la calificación debe de estar entre 0.0 y 10!!";
      }
    } while (CalxEstudiantes[Indice] < 0 || CalxEstudiantes[Indice] > 10);
  } else {
    cout << endl
         << endl
         << "No se ha iniciado sesión, por favor inicia sesión primero :D";
  }
}
void Estudiante::VerNotas() {/*aquí se despliegan las notas y el promedio del estudiante*/
  if (SesionActiva == true) {
    double SumaNotas = 0.0;
    cout << endl
         << endl
         << "ID: " << ID_Estudiante << endl
         << "Total de notas:" << endl;
    for (int h = 0; h < 5; h++) {
      int Indice = ((Num_ID - 1) * 5) + h;
      cout << endl << "Nota " << h + 1 << ": " << CalxEstudiantes[Indice];
      SumaNotas += (CalxEstudiantes[Indice]);
    }
    cout << endl << "Promedio: " << SumaNotas / 5.0;
  } else {
    cout << endl
         << endl
         << "no se ha iniciado sesión por favor inicia sesión primero :D";
  }
}
void Estudiante::Salir() {/*aquí se cierra sesión*/
  SesionActiva = false;
  cout << endl << endl << "Se han cerrado sesión correctamente, Fuakata!!";
}
int main() {
  setlocale(LC_ALL, "es_ES.UTF-8");
  int Opcion = 0;
  Estudiante A;
  while (Opcion != 6) {/*se usa un switch con ayuda de la variable opción para así poder elegir la opción en el menú*/
    Opcion = menu();
    switch (Opcion) {
    case 1:
      A.IniciarSesion();
      break;
    case 2:
      A.AceptarDatos();
      break;
    case 3:
      A.VerNotas();
      break;
    case 4:
      A.EditarNotas();
      break;
    case 5:
      A.Salir();
      break;
    case 6:
      Opcion = 6;/*cuando el usuario elige la opción 6 se termina el programa*/
      cout << endl << endl << "FUAKATA!!";
      break;
    }
  }
  return 0;
}
int menu() {/*aquí se despliega el menú con las opciones*/
  int Opcion;
  cout << endl << endl << "__________-•M E N U•-__________" << endl << endl;
  cout << "1. Iniciar sesion" << endl
       << "2. Ingresar Notas" << endl
       << "3. Ver Notas" << endl
       << "4. Editar Notas" << endl
       << "5. Cerrar Sesion " << endl
       << "6. Salir";
  cout << endl << "---------------------------------" << endl;
  do {
    cout << endl << endl << "Ingresa una opcion: ";
    cin >> Opcion;
    if (Opcion < 1 || Opcion > 6) {
      cout << endl
           << "No esta viendo las opciones?... (-.-')" << endl
           << "Ingrese una opcion VALIDA";
    }
  } while (Opcion < 1 || Opcion > 6);
  return Opcion;
}
Editor is loading...
Leave a Comment