davidcastrosalinas

EDD 20201006 Ejemplo de composición de clases : clase Curso, Persona, Dirección

Oct 6th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.25 KB | None | 0 0
  1. /**
  2.  * @file Alumnos.cpp
  3.  * @brief Ejemplo de utilización de composición de clases
  4.  * @author David Castro Salinas
  5.  * @date 10/2020
  6.  * @note bajar doxygen http://www.doxys.dk/doxys_homepage/homepage/Download/Download0_dir_description.html
  7.  */
  8. //más información doxygen https://www.scenebeta.com/tutorial/documentando-el-codigo-con-doxygen
  9. #include <iostream>
  10.  
  11. using namespace std;
  12.  
  13. /**
  14.  * @class Direccion
  15.  * @brief Representa una dirección que para ser utilizada por otras clases
  16.  */
  17. class Direccion{
  18. public:
  19.     Direccion(string _calle="vacio", int _numero=1, int _codigoPostal=0) : calle(_calle), numero(_numero), codigoPostal(_codigoPostal) {  };
  20.  
  21.     void setCalle(string valor);
  22.     string getCalle();
  23.     int getNumero();
  24.  
  25.     int getCodigoPostal(){
  26.         return this->codigoPostal;
  27.     };
  28.  
  29.     void ver(){
  30.         cout <<"calle:" << this->calle << " #" << this->numero << ", postal:" << this->codigoPostal<<endl;
  31.     };
  32.  
  33. private:
  34.     string calle;
  35.     int numero;
  36.     int codigoPostal;
  37. };
  38.  
  39. /**
  40.  * @fn Direccion::getCalle
  41.  * @brief Devuelve el nombre de la calle
  42.  * @return Devuelve el nombre de la calle
  43.  */
  44. string Direccion::getCalle(){
  45.     return this->calle;
  46. };
  47.  
  48.  
  49.  
  50. /**
  51.  * @fn Direccion::setCalle
  52.  * @brief Permite asignar el nombre de una calle a la clase Dirección
  53.  * @param nombre de una calle
  54.  * @return void
  55.  */
  56. void Direccion::setCalle(string valor){
  57.     this->calle = valor;
  58. };
  59.  
  60. int Direccion::getNumero(){
  61.     return this->numero;
  62. };
  63.  
  64. /**
  65.  * @class Rut
  66.  * @brief Permite mantener información de Rut de personas
  67.  */
  68. class Rut {
  69. public:
  70.     Rut(int _numero=0, char _dv=' '): numero(_numero), dv(_dv) {};
  71.  
  72.     int getNumero(){
  73.         return this->numero;
  74.     };
  75.  
  76.     char getDv(){
  77.         return this->dv;
  78.     };
  79.     bool validar(){
  80.         return true;
  81.     }
  82.  
  83.     void ver(){
  84.         cout <<this->numero<<"-"<<this->getDv();
  85.     }
  86. private:
  87.     int numero;
  88.     char dv;
  89. };
  90.  
  91. /**
  92.  * @class Persona
  93.  * @brief La clase persona es la base del ejercicio de un curso, en el cuál la clase Persona representará a un Alumno, Ayudante o profesor
  94.  */
  95. class Persona{
  96. public:
  97.     Persona(string _n="", Rut _r=Rut(), Direccion _d=Direccion()): nombre(_n), rut(_r), direccion(_d){
  98.         eliminado = false;
  99.     };
  100.  
  101.     void setNombre(string nombre){
  102.         this->nombre = nombre;
  103.     };
  104.  
  105.     string getNombre(){
  106.         return nombre;
  107.     };
  108.  
  109.     Rut getRut(){
  110.         return this->rut;
  111.     }
  112.  
  113.     void setRut(Rut rut){
  114.         this->rut = rut;
  115.     }
  116.  
  117.     void setDireccion(Direccion _direccion){
  118.         direccion = _direccion;
  119.     }
  120.  
  121.     Direccion getDireccion() {
  122.         return this->direccion;
  123.     }
  124.  
  125.     void ver(){
  126.         cout <<"\n**Persona**";
  127.         cout <<"\nnombre: "<<nombre;
  128.         cout <<"\nrut:";
  129.         rut.ver();
  130.         cout <<"\ndireccion:";
  131.         direccion.ver();
  132.     }
  133.  
  134.     void setEliminado(bool valor){
  135.         this->eliminado = valor;
  136.     };
  137.  
  138.     bool getEliminado(){
  139.         return this->eliminado;
  140.     }
  141.  
  142. private:
  143.     string nombre;
  144.     //composición de clases
  145.     Rut rut;
  146.     Direccion direccion;
  147.     bool eliminado;
  148. };
  149.  
  150. class Curso{
  151. public:
  152.     Curso(string _c=0):codigo(_c){
  153.         this->index = 0;
  154.     };
  155.  
  156.     int size(){
  157.         return this->index;
  158.     }
  159.  
  160.     void setProfesor(Persona valor){
  161.         profesor = valor;
  162.     };
  163.  
  164.     Persona getProfesor(){
  165.         return profesor;
  166.     };
  167.  
  168.     void setAyudante(Persona valor){
  169.         ayudante = valor;
  170.     };
  171.  
  172.     Persona getAyudante(){
  173.         return ayudante;
  174.     };
  175.  
  176.     void setAlumno(int posicion, Persona alumno){
  177.         if(index >= 0 && index < MAX_ALUMNOS)
  178.             alumnos[posicion] = alumno;
  179.         else
  180.             cout <<"Fuera de indice";
  181.     }
  182.  
  183.  
  184.     Persona getAlumno(int posicion){
  185.         if(index >= 0 && index < MAX_ALUMNOS)
  186.             return alumnos[posicion];
  187.         else {
  188.             cout <<"Fuera de indice";
  189.             return Persona(0);
  190.         }
  191.     }
  192.  
  193.     void addAlumno(Persona nuevoAlumno){
  194.        if(index < MAX_ALUMNOS){
  195.             alumnos[index] = nuevoAlumno;
  196.             index++;
  197.        } else
  198.             cout <<"No puede ingresar más alumnos";
  199.     }
  200.  
  201.     void listaAlumnos(){
  202.         for(int i=0;i<index;i++){
  203.             if(alumnos[i].getEliminado() == false)
  204.                 alumnos[i].ver();
  205.         }
  206.     }
  207.  
  208.     void ver(){
  209.         cout <<"[CURSO "<<codigo<<"]\n";
  210.         cout <<"\n\tProfesor: ";
  211.         this->getProfesor().ver();
  212.  
  213.         cout <<"\n\tAyudante: ";
  214.         getAyudante().ver();
  215.  
  216.         cout <<"\n\tAlumnos: ";
  217.         listaAlumnos();
  218.     };
  219. private:
  220.     const int MAX_ALUMNOS = 100;
  221.     int index;
  222.     string codigo;
  223.     Persona profesor;
  224.     Persona ayudante;
  225.     Persona alumnos[100];
  226. };
  227.  
  228.  
  229. //funciones miembro
  230.  
  231.  
  232.  
  233.  
  234. int main()
  235. {
  236.     /**1.- SobreCarga**/
  237.  
  238.     /**2.- Inicialización de constructores*/
  239.     Direccion d("Avenida Macul", 23, 4321);
  240.     d.ver();
  241.  
  242.     Direccion d2("Avenida Macul", 23);
  243.     d2.ver();
  244.  
  245.     Direccion d3("Avenida Macul");
  246.     d3.ver();
  247.  
  248.     Direccion d4;
  249.     d4.ver();
  250.  
  251.     /***tarea construir la clase rut**/
  252.     Rut rut(13921921,'K');
  253.     rut.ver();
  254.  
  255.     /**3.- Alumno**/
  256.     Persona a("David", Rut(13921921, 'K'), Direccion("Macul", 123));
  257.     a.ver();
  258.  
  259.     /**4.- Curso ****/
  260.  
  261.     Curso curso("2020-02");
  262.     curso.setProfesor(Persona("David Castro", Rut(13212121, 'K')));
  263.  
  264.     curso.setAyudante(Persona("Carlos Montuyao", Rut(23232323, '1'), Direccion("Maipu")));
  265.  
  266.     curso.addAlumno(Persona("Juan Carlos", Rut(242424, '3')));
  267.     curso.addAlumno(Persona("Merari Gomez", Rut(343434, '4')));
  268.     curso.addAlumno(Persona("Pedro Perez", Rut(656565, '6')));
  269.  
  270.     //curso.ver();
  271.     /***EDICION***/
  272.     Persona alumnoEditar = curso.getAlumno(0);
  273.     alumnoEditar.setEliminado(true);
  274.     alumnoEditar.setRut(Rut(876876,'2'));
  275.     curso.setAlumno(0, alumnoEditar);
  276.  
  277.  
  278.     /***EDICION***/
  279.     alumnoEditar = curso.getAlumno(1);
  280.     alumnoEditar.setNombre("Merari Godines");
  281.     curso.setAlumno(1, alumnoEditar);
  282.  
  283.     /**Esto no se puede**/
  284.     curso.getAlumno(2).setEliminado(true); //MAL
  285.     curso.getAlumno(2).setNombre("otro"); //MAL
  286.     curso.getAlumno(0).setEliminado(true); //MAL
  287.     curso.ver();
  288.  
  289.  
  290.     return 0;
  291. }
Add Comment
Please, Sign In to add comment