davidcastrosalinas

Clase 20201013 Ejemplo Clase curso con ADD - Listar - Eliminar

Oct 13th, 2020 (edited)
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.90 KB | None | 0 0
  1. /**
  2.  * @file main.cpp
  3.  * @brief Ejemplo sobre utilización de un vector por medio de una clase compuesta
  4.  * @author David Armando Castro Salinas
  5.  * @date 14/10/2020
  6.  */
  7. #include <iostream>
  8. #include <string>
  9. using namespace std;
  10.  
  11. class Direccion {
  12. public:
  13.     Direccion(string, int);
  14.     void setCalle(string);
  15.     string getCalle();
  16.     void setNumero(int);
  17.     int getNumero();
  18.     void ver();
  19.     string toString();
  20.  
  21. private:
  22.     string calle;
  23.     int numero;
  24. };
  25.  
  26. //constructor parametrizado con valores por defecto
  27. Direccion::Direccion(string c="", int n=0):calle(c), numero(n){}
  28.  
  29. void Direccion::setCalle(string valor){
  30.     this->calle = valor;
  31. }
  32.  
  33. string Direccion::getCalle(){
  34.     return this->calle;
  35. }
  36.  
  37. void Direccion::setNumero(int valor){
  38.     this->numero = valor;
  39. }
  40.  
  41. int Direccion::getNumero(){
  42.     return this->numero;
  43. }
  44.  
  45.  
  46. void Direccion::ver(){
  47.     cout <<calle<< " #" << numero;
  48. }
  49. string Direccion::toString(){
  50.  
  51.     if(this->calle == "")
  52.         return "";
  53.  
  54.     if(this->numero == 0)
  55.         return this->calle;
  56.  
  57.     return this->calle + " #" + to_string(this->numero);
  58. }
  59.  
  60. class Persona{
  61. public:
  62.     Persona(string, Direccion);
  63.     //getters y setters
  64.     void setNombre(string);
  65.     string getNombre();
  66.     void setDireccion(Direccion);
  67.     Direccion getDireccion();
  68.     void setEliminado(bool);
  69.     bool isEliminado();
  70.     //funciones miembro
  71.     void ver();
  72. private:
  73.     string nombre;
  74.     Direccion direccion;
  75.     bool eliminado;
  76. };
  77.  
  78. Persona::Persona(string n="", Direccion d=Direccion()): nombre(n), direccion(d){
  79.     eliminado = false;
  80. }
  81.  
  82. void Persona::setNombre(string valor){
  83.     this->nombre = valor;
  84. }
  85.  
  86. string Persona::getNombre(){
  87.     return nombre;
  88. }
  89.  
  90. void Persona::setDireccion( Direccion d ){
  91.     this->direccion = d;
  92. }
  93.  
  94. Direccion Persona::getDireccion(){
  95.     return direccion;
  96. }
  97.  
  98. void Persona::setEliminado(bool valor){
  99.     eliminado = valor;
  100. }
  101. bool Persona::isEliminado(){
  102.     return eliminado;
  103. }
  104.  
  105.  
  106.  
  107. void Persona::ver(){
  108.     cout <<nombre;
  109.     if(this->direccion.toString() != "")
  110.         cout <<" "<<this->direccion.toString();
  111. }
  112.  
  113.  
  114. class Curso{
  115. public:
  116.     Curso(string);
  117.     //getters y setters
  118.     void setProfesor(Persona);
  119.     Persona getProfesor();
  120.  
  121.     void setAyudante(Persona);
  122.     Persona getAyudante();
  123.  
  124.     //funciones miembro
  125.     bool addAlumno(Persona);
  126.     bool eliminarPorNombre(string);
  127.     void listarAlumnosSimple();
  128.     void listarAlumnos();
  129.     void ver();
  130. private:
  131.     //constante estática que permite definir el tamaño del vector dentro de una clase
  132.     static const int MAX_ALUMNOS = 100;
  133.     int index; //posicion actual
  134.     string codigoCurso;
  135.     Persona profesor;
  136.     Persona ayudante;
  137.     Persona alumnos[MAX_ALUMNOS];
  138.     //metodos intencionalmente privados, para que no puedan ser accedidos desde otras clases
  139.     bool delAlumno(int);
  140.     int findPosAlumnoPorNombre(string);
  141. };
  142.  
  143. Curso::Curso(string c=""): codigoCurso(c){
  144.     index = 0;
  145. };
  146.  
  147. void Curso::setProfesor(Persona p){
  148.     this->profesor = p;
  149. };
  150.  
  151. Persona Curso::getProfesor(){
  152.     return this->profesor;
  153. };
  154.  
  155. void Curso::setAyudante(Persona p){
  156.     this->ayudante = p;
  157. };
  158.  
  159. Persona Curso::getAyudante(){
  160.     return this->ayudante;
  161. };
  162.  
  163. /**
  164.  * @fn addAlumno
  165.  * @brief permite agregar un nuevo alumno a la lista
  166.  * @param alumno de tipo Persona
  167.  * @return retorna true si la insercción se pudo realizar correctamente
  168.  */
  169. bool Curso::addAlumno(Persona nuevoAlumno){
  170.     if(index > MAX_ALUMNOS){
  171.         cout <<"\nNo se puede ingresar mas alumnos";
  172.         return false;
  173.     }
  174.     alumnos[index] = nuevoAlumno;
  175.     index++;
  176.     return true;
  177. }
  178.  
  179. /**
  180.  * @fn eliminarPorNombre
  181.  * @brief realiza la eliminación en base a un nombre entregado
  182.  * @param nombre del alumno a eliminar
  183.  * @return retorna true si la eliminación se realizó
  184.  */
  185. bool Curso::eliminarPorNombre(string nombreEliminar){
  186.     int posicionEliminar = findPosAlumnoPorNombre(nombreEliminar);
  187.     if(posicionEliminar != -1) {
  188.         delAlumno(posicionEliminar);
  189.         return true;
  190.     } else {
  191.  
  192.         return false;
  193.     }
  194. }
  195.  
  196. /**
  197.  * @fn listarAlumnos
  198.  * @brief muestra la lista de alumnos que no estan eliminados
  199.  * @param void
  200.  * @return void
  201.  */
  202. void Curso::listarAlumnosSimple(){
  203.     for(int i=0; i < index;  i++ )
  204.         if(alumnos[i].isEliminado()==false) {
  205.             alumnos[i].ver();
  206.             cout <<", ";
  207.         }
  208. }
  209.  
  210.  
  211. void Curso::listarAlumnos(){
  212.     int contador = 1;
  213.     for(int i=0; i < index;  i++ )
  214.         if(alumnos[i].isEliminado()==false) {
  215.             cout <<contador<<".- ";
  216.             alumnos[i].ver();
  217.             cout <<endl;
  218.             contador++;
  219.         }
  220.  
  221. }
  222.  
  223. void Curso::ver(){
  224.         cout <<"\nCURSO :"<<this->codigoCurso;
  225.         cout <<"\nProfesor:";
  226.         this->profesor.ver();
  227.         cout <<"\nAyudante:";
  228.         this->ayudante.ver();
  229.         cout <<"\nAlumnos:\n";
  230.         listarAlumnos();
  231.  
  232. }
  233.  
  234. //métodos privados que sólo pueden ser accedidos desde la clase
  235. /**
  236.  * @fn delAlumno
  237.  * @brief marca como eliminado un elemento dentro del vector
  238.  * @param posición a marcar eliminado
  239.  * @return si puede realizar correctamente la marca retorna true, en caso contrario return false
  240.  */
  241.  bool Curso::delAlumno(int posicionEliminar){
  242.     if(posicionEliminar >= 0 && posicionEliminar < index){
  243.         alumnos[posicionEliminar].setEliminado(true);
  244.         return true;
  245.     } else {
  246.         cout << "\nerror fuera de indice";
  247.         return false;
  248.     }
  249. }
  250.  
  251. /**
  252.  * @fn findPosAlumnoPorNombre
  253.  * @brief retorna la posición dentro del vector en base a el nombre de alumno
  254.  * @param nombre del alumno
  255.  * @return posición dentro del vector, si lo lo encuentra retorna -1
  256.  */
  257. int Curso::findPosAlumnoPorNombre(string nombre){
  258.     //buscar
  259.     for(int i=0; i < index;  i++ ) {
  260.         if((alumnos[i].getNombre() == nombre)
  261.             &&(alumnos[i].isEliminado()==false)) {
  262.                 return i;
  263.         }
  264.     }
  265.     return -1;
  266.  
  267. }
  268. /*********************PROGRAMA PRINCIPAL************************/
  269. int main()
  270. {
  271.     setlocale(LC_CTYPE,"Spanish");
  272.  
  273.     Curso curso("301");
  274.     curso.setProfesor(Persona("David Castro", Direccion("Avenida Macul", 1234)));
  275.     curso.setAyudante(Persona("Carlos Montuyao", Direccion("Avenida Macul", 4321)));
  276.  
  277.     curso.addAlumno(Persona("Lorena Quezada"));
  278.     curso.addAlumno(Persona("Juan Buendia", Direccion("La Florida", 432)));
  279.     curso.addAlumno(Persona("Florencia Bustos"));
  280.     curso.addAlumno(Persona("Vitalia Figueroa", Direccion("Renca", 1242)));
  281.     curso.addAlumno(Persona("Rogelio Rojas"));
  282.     curso.addAlumno(Persona("Máximo Venegas"));
  283.  
  284.     curso.ver();
  285.  
  286.     cout <<"\nAhora eliminamos a Juan, Vitalia y Lorena de la lista\n";
  287.     curso.eliminarPorNombre("Juan Buendia");
  288.     curso.eliminarPorNombre("Lorena Quezada");
  289.     curso.eliminarPorNombre("Vitalia Figueroa");
  290.     curso.listarAlumnos();
  291.  
  292.     return 0;
  293. }
  294.  
Add Comment
Please, Sign In to add comment