Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file main.cpp
- * @brief Ejemplo sobre utilización de un vector por medio de una clase compuesta
- * @author David Armando Castro Salinas
- * @date 14/10/2020
- */
- #include <iostream>
- #include <string>
- using namespace std;
- class Direccion {
- public:
- Direccion(string, int);
- void setCalle(string);
- string getCalle();
- void setNumero(int);
- int getNumero();
- void ver();
- string toString();
- private:
- string calle;
- int numero;
- };
- //constructor parametrizado con valores por defecto
- Direccion::Direccion(string c="", int n=0):calle(c), numero(n){}
- void Direccion::setCalle(string valor){
- this->calle = valor;
- }
- string Direccion::getCalle(){
- return this->calle;
- }
- void Direccion::setNumero(int valor){
- this->numero = valor;
- }
- int Direccion::getNumero(){
- return this->numero;
- }
- void Direccion::ver(){
- cout <<calle<< " #" << numero;
- }
- string Direccion::toString(){
- if(this->calle == "")
- return "";
- if(this->numero == 0)
- return this->calle;
- return this->calle + " #" + to_string(this->numero);
- }
- class Persona{
- public:
- Persona(string, Direccion);
- //getters y setters
- void setNombre(string);
- string getNombre();
- void setDireccion(Direccion);
- Direccion getDireccion();
- void setEliminado(bool);
- bool isEliminado();
- //funciones miembro
- void ver();
- private:
- string nombre;
- Direccion direccion;
- bool eliminado;
- };
- Persona::Persona(string n="", Direccion d=Direccion()): nombre(n), direccion(d){
- eliminado = false;
- }
- void Persona::setNombre(string valor){
- this->nombre = valor;
- }
- string Persona::getNombre(){
- return nombre;
- }
- void Persona::setDireccion( Direccion d ){
- this->direccion = d;
- }
- Direccion Persona::getDireccion(){
- return direccion;
- }
- void Persona::setEliminado(bool valor){
- eliminado = valor;
- }
- bool Persona::isEliminado(){
- return eliminado;
- }
- void Persona::ver(){
- cout <<nombre;
- if(this->direccion.toString() != "")
- cout <<" "<<this->direccion.toString();
- }
- class Curso{
- public:
- Curso(string);
- //getters y setters
- void setProfesor(Persona);
- Persona getProfesor();
- void setAyudante(Persona);
- Persona getAyudante();
- //funciones miembro
- bool addAlumno(Persona);
- bool eliminarPorNombre(string);
- void listarAlumnosSimple();
- void listarAlumnos();
- void ver();
- private:
- //constante estática que permite definir el tamaño del vector dentro de una clase
- static const int MAX_ALUMNOS = 100;
- int index; //posicion actual
- string codigoCurso;
- Persona profesor;
- Persona ayudante;
- Persona alumnos[MAX_ALUMNOS];
- //metodos intencionalmente privados, para que no puedan ser accedidos desde otras clases
- bool delAlumno(int);
- int findPosAlumnoPorNombre(string);
- };
- Curso::Curso(string c=""): codigoCurso(c){
- index = 0;
- };
- void Curso::setProfesor(Persona p){
- this->profesor = p;
- };
- Persona Curso::getProfesor(){
- return this->profesor;
- };
- void Curso::setAyudante(Persona p){
- this->ayudante = p;
- };
- Persona Curso::getAyudante(){
- return this->ayudante;
- };
- /**
- * @fn addAlumno
- * @brief permite agregar un nuevo alumno a la lista
- * @param alumno de tipo Persona
- * @return retorna true si la insercción se pudo realizar correctamente
- */
- bool Curso::addAlumno(Persona nuevoAlumno){
- if(index > MAX_ALUMNOS){
- cout <<"\nNo se puede ingresar mas alumnos";
- return false;
- }
- alumnos[index] = nuevoAlumno;
- index++;
- return true;
- }
- /**
- * @fn eliminarPorNombre
- * @brief realiza la eliminación en base a un nombre entregado
- * @param nombre del alumno a eliminar
- * @return retorna true si la eliminación se realizó
- */
- bool Curso::eliminarPorNombre(string nombreEliminar){
- int posicionEliminar = findPosAlumnoPorNombre(nombreEliminar);
- if(posicionEliminar != -1) {
- delAlumno(posicionEliminar);
- return true;
- } else {
- return false;
- }
- }
- /**
- * @fn listarAlumnos
- * @brief muestra la lista de alumnos que no estan eliminados
- * @param void
- * @return void
- */
- void Curso::listarAlumnosSimple(){
- for(int i=0; i < index; i++ )
- if(alumnos[i].isEliminado()==false) {
- alumnos[i].ver();
- cout <<", ";
- }
- }
- void Curso::listarAlumnos(){
- int contador = 1;
- for(int i=0; i < index; i++ )
- if(alumnos[i].isEliminado()==false) {
- cout <<contador<<".- ";
- alumnos[i].ver();
- cout <<endl;
- contador++;
- }
- }
- void Curso::ver(){
- cout <<"\nCURSO :"<<this->codigoCurso;
- cout <<"\nProfesor:";
- this->profesor.ver();
- cout <<"\nAyudante:";
- this->ayudante.ver();
- cout <<"\nAlumnos:\n";
- listarAlumnos();
- }
- //métodos privados que sólo pueden ser accedidos desde la clase
- /**
- * @fn delAlumno
- * @brief marca como eliminado un elemento dentro del vector
- * @param posición a marcar eliminado
- * @return si puede realizar correctamente la marca retorna true, en caso contrario return false
- */
- bool Curso::delAlumno(int posicionEliminar){
- if(posicionEliminar >= 0 && posicionEliminar < index){
- alumnos[posicionEliminar].setEliminado(true);
- return true;
- } else {
- cout << "\nerror fuera de indice";
- return false;
- }
- }
- /**
- * @fn findPosAlumnoPorNombre
- * @brief retorna la posición dentro del vector en base a el nombre de alumno
- * @param nombre del alumno
- * @return posición dentro del vector, si lo lo encuentra retorna -1
- */
- int Curso::findPosAlumnoPorNombre(string nombre){
- //buscar
- for(int i=0; i < index; i++ ) {
- if((alumnos[i].getNombre() == nombre)
- &&(alumnos[i].isEliminado()==false)) {
- return i;
- }
- }
- return -1;
- }
- /*********************PROGRAMA PRINCIPAL************************/
- int main()
- {
- setlocale(LC_CTYPE,"Spanish");
- Curso curso("301");
- curso.setProfesor(Persona("David Castro", Direccion("Avenida Macul", 1234)));
- curso.setAyudante(Persona("Carlos Montuyao", Direccion("Avenida Macul", 4321)));
- curso.addAlumno(Persona("Lorena Quezada"));
- curso.addAlumno(Persona("Juan Buendia", Direccion("La Florida", 432)));
- curso.addAlumno(Persona("Florencia Bustos"));
- curso.addAlumno(Persona("Vitalia Figueroa", Direccion("Renca", 1242)));
- curso.addAlumno(Persona("Rogelio Rojas"));
- curso.addAlumno(Persona("Máximo Venegas"));
- curso.ver();
- cout <<"\nAhora eliminamos a Juan, Vitalia y Lorena de la lista\n";
- curso.eliminarPorNombre("Juan Buendia");
- curso.eliminarPorNombre("Lorena Quezada");
- curso.eliminarPorNombre("Vitalia Figueroa");
- curso.listarAlumnos();
- return 0;
- }
Add Comment
Please, Sign In to add comment