Estudiantes: Britos, Pablo 2.593.694-9 Díaz, Claudio 3.680.653-3 INET – Profesorado de Informática -Programacion II- 2015 Contenido 1. TIPOS ABSTRACTOS DE DATOS ...................................................................... 3 2. MANUAL DE USUARIO ..................................................................................... 6 2.1 DESCRIPCIÓN DEL SISTEMA ............................................................... 6 2.2 DIAGRAMA DE OPCIONES ................................................................... 7 2.3 DETALLE DE MENUES ......................................................................... 8 2.3 DETALLE DE OPCIONES .................................................................... 10 2.4 OPCIONES DISPONIBLES .................................................................. 11 PROFESORES ........................................................................................ 12 ESCALAFON .......................................................................................... 14 LICEOS ................................................................................................ 15 ELECCION DE HORAS ............................................................................. 17 3- ANEXO ...................................................................................................... 19 3.1 CODIGO.......................................................................................... 19 MAIN.CPP ......................................................................................................... 19 MENU.H ........................................................................................................... 25 MENU.CPP ........................................................................................................ 26 ELECCION.H ...................................................................................................... 28 ELECCION.CPP.................................................................................................... 29 LICEOS.H ......................................................................................................... 30 LICEOS.CPP ....................................................................................................... 31 MATERIAS.H ...................................................................................................... 32 MATERIAS.CPP ................................................................................................... 33 PROFESORES.H................................................................................................... 35 PROFESORES.CPP ................................................................................................ 36 GRUPOS.H ........................................................................................................ 38 GRUPOS.CPP...................................................................................................... 39 ESCALAFON.H .................................................................................................... 41 ESCALAFON.CPP.................................................................................................. 42 COLPROFESORES.H .............................................................................................. 44 COLPROFESORES.CPP ........................................................................................... 45 COLMATERIAS.H ................................................................................................. 46 COLMATERIAS.CPP ............................................................................................... 47 GRAFO.H .......................................................................................................... 48 GRAFO.CPP ....................................................................................................... 49 Proyecto Página 2 de 49 INET – Profesorado de Informática 1. -Programacion II- 2015 TIPOS ABSTRACTOS DE DATOS Elementales: CI, NroCobro , Grado, CantHoras, CodLiceo, CodGrupo, Nivel, Turno, Ciclo : entero Puntaje: Real Nombre, Apellido, Materia, Dirección: Cadena de caracteres. Intermedios: Profesor: CI x Nombre x Apellido Liceo: CodLiceo x Grupos Grupo: CodGrupo x CodLiceo x Turno materia : CodGrupo x CodLiceo x CI Colecciones: Colección de profesores: diccionario(profesor) Colección de grupos : diccionario (grupo) Colección de materias: diccionario(materia) Colección de profesores (TAD Diccionario) Los elementos en esta colección no se repiten por tratarse de personas, a su vez tienen un número que los identifica (el número de CI). Esto nos lleva a pensar que la colección de profesores más adecuada es la de diccionario por carecer de elementos repetidos y poseer una clave que los identifica. Por otro lado los profesores se dividen por asignatura. Dentro de éstas, están ordenados por grado y puntaje. La estructura de datos avanzada para representar nuestro diccionario de profesores será el HASH. La elección se base en que los profesores se dividen por asignatura, siendo esta una cantidad finita, es decir, hay una división de nuestros elementos entre una cantidad finita de clases. Las asignaturas serán entonces la forma de realizar la dispersión en el HASH. Al ser la cantidad de profesores variable, en principio no acotada, se utilizará dentro de cada clase una estructura de lista para almacenarlos. Colección de grupos (Tad Diccionario) Esta colección reúne a todos los grupos de secundaria, los cuales están divididos en liceos. Al igual que la colección anterior, los elementos de esta colección no se repiten. Poseen un código que los identifica, en este caso es una clave compuesta ya que cada elemento se identifica por el código de grupo y el código de liceo. Proyecto Página 3 de 49 INET – Profesorado de Informática -Programacion II- 2015 Al tener elementos sin repetir, con una clave que los identifica, el TAD adecuado será el de diccionario de grupos. De acuerdo a nuestro análisis, los grupos se encuentran divididos en en liceos, por lo que nuevamente, la estructura de datos avanzada adecuada al diccionario de liceos será el HASH. Dentro de cada cubeta (liceo) encontraremos a los grupos, los cuales se encontrarán almacenados en una lista simple por ser en principio una cantidad no limitada a priori. En nuestro proyecto la colección de los grupos la llamaremos liceos. Colección de materias (TAD Diccionario) Las materias también son elementos que no se repiten dentro de una colección pues cada grupo posee propia materia y se pueden identificar con un código de grupo, código de liceo, es decir, una clave compuesta De la misma forma que lo planteado anteriormente, el TAD adecuado será el diccionario y su implementación el HASH por dividirse por asignaturas. Diccionario Profesores CrearP: ∅ -> HASHprof Crea un diccionario vacío. PerteneceP: HASHprof x puntaje x asignatura -> bool Determina si un profesor de una determinada asignatura con su correspondiente puntaje pertenece a la colección. InsertarP: HASHprof x profesor x materia x puntaje -> HASHprof precondición: el profesor no puede estar en la colección Agrega un nuevo elemento al diccionario. EliminarP: HASHprof x puntaje x asignatura -> HASHprof precondición: el profesor debe estar en la lista Elimina un profesor con un determinado puntaje. MostraEscalafon: HASHprof x asignatura -> ∅ Muestra los profesores de una determinada asignatura, ordenados por puntaje. Diccionario Liceos CrearLiceos: ∅ -> ColLiceos Crea un diccionario vacío. Proyecto Página 4 de 49 INET – Profesorado de Informática -Programacion II- 2015 PerteneceGrupoLiceo: ColLiceos x CodG x CodL -> bool Determina si un grupo de un determinado liceo pertenece a la colección. InsertarGrupoLiceo: ColLiceos x CodG x CodL x Turno -> ColLiceos precondición:el grupo no puede estar en la lista Agrega un nuevo elemento al diccionario. EliminarGrupoLiceo: ColLiceos x CodG xCodL -> ColLiceos precondición: la materia debe estar en la colección. Elimina un grupo de un determinado liceo. MostraGruposLiceo: ColLiceos x CodL -> ∅ Muestra los grupos de un determinado liceo. Diccionario Materias CrearMat: ∅ -> ColMat Crea un diccionario vacío. PerteneceMat: ColMat x CodG x CodL x asignatura -> bool Determina si una materia de un determinado grupo de un liceo en particular pertenece a la colección. InsertarMat: ColMat x CodG x CodL x asignatura -> ColMat precondición: la materia no puede estar en la colección. EliminarMat: ColMat x CodG x CodL x asignatura -> ColMat precondición: la materia debe estar en la lista Elimina una asignatura de un grupo determinado perteneciente a un liceo en particular. MostraMateriasLibres (ColMat m, int asignatura); Proyecto Página 5 de 49 INET – Profesorado de Informática -Programacion II- 2015 2. MANUAL DE USUARIO 2.1 DESCRIPCIÓN DEL SISTEMA El sistema de elección de horas consiste en la implementación de un simulador de la elección de horas que se hace en Educación Secundaria. Trabaja en tiempo de ejecución en la plataforma DOS, se almacenan los datos en memoria RAM mientras corre el programa, no utiliza ninguna estructura para almacenar los datos en disco u otro dispositivo de almacenamiento. Puede ser utilizado por cualquier usuario con conocimientos básicos de operación PC. Permite ingresar, eliminar, modificar y mostrar datos de: profesores, escalafón de profesores, grupos, y asignar horas. Puede ser utilizado por cualquier usuario con conocimientos básicos de operación PC. La interfaz del sistema es sencilla, la misma está compuesta por pantallas que dependiendo de la intervención del usuario habilitan funcionalidades diferentes. A continuación se detallan en forma gráfica el diagrama de opciones y se muestran las capturas de pantalla correspondientes. Proyecto Página 6 de 49 INET – Profesorado de Informática -Programacion II- 2015 2.2 DIAGRAMA DE OPCIONES MENU PRINCIPAL 1.Profesores 2.Escalafón de profesores 3.Liceos 4.Elección de horas 1.Agregar profesor 1.Agregar profesor al escalafón 1.Agregar un nuevo grupo a un Liceo 1.Mostrar pizarrón de horas vacantes 2.Averiguar si un profesor está en lista 2.Averiguar si un profesor está en el escalafón 2.Averiguar si un grupo está ingresado 2.Asignar profesor a un grupo 3.Mostrar datos de un profesor 3.Borrar un profesor 3.Borrar un grupo 3.Eliminar profesor a un grupo 4.Borrar un profesor 4.Mostrar escalafón por asignatura 4.Mostrar grupos de un liceo 4.Mostrar el liceo más cercano 5.Mostrar listado de profesores 5.Volver al menú principal 5.Volver al menú principal 5.Mostrar grupos asignados a un profesor 6.Volver al menú principal 5.Salir 6.Mostrar la matriz de liceos 7.Volver al menú principal Proyecto Página 7 de 49 INET – Profesorado de Informática -Programacion II- 2015 2.3 DETALLE DE MENUES MENU PRINCIPAL MENU PROFESORES MENU ESCALAFON DE PROFESORES Proyecto Página 8 de 49 INET – Profesorado de Informática -Programacion II- 2015 MENU LICEOS MENU ELECCION Proyecto Página 9 de 49 INET – Profesorado de Informática -Programacion II- 2015 2.3 DETALLE DE OPCIONES 1. Profesores 1. Agregar profesor 2. Averiguar si un profesor está en lista 3. Mostrar datos de un profesor 4. Borrar un profesor 5. Mostrar listado de profesores 6. Volver al menú principal 2. Escalafón de profesores 1. Agregar profesor al escalafón 2. Averiguar si un profesor está en el escalafón 3. Borrar un profesor 4. Mostrar escalafón por asignatura 5. Volver al menú principal 3. Liceos 1. Agregar un nuevo grupo a un Liceo 2. Averiguar si un grupo está ingresado 3. Borrar un grupo 4. Mostrar grupos de un liceo 5. Volver al menú principal 4. Elección de horas 1. Mostrar pizarrón de horas vacantes 2. Asignar profesor a un grupo 3. Eliminar profesor asignado a un grupo 4. Mostrar el liceo más cercano 5. Mostrar grupos asignados a un profesor 6. Mostrar la matriz de liceos 7. Volver al menú principal 5. Salir Proyecto Página 10 de 49 INET – Profesorado de Informática -Programacion II- 2015 2.4 OPCIONES DISPONIBLES MENÚ PRINCIPAL MENU PROFESORES MENU ESCALAFON DE PROFESORES MENU LICEOS Proyecto Página 11 de 49 INET – Profesorado de Informática -Programacion II- 2015 MENU ELECCION PROFESORES 1. Para agregar un profesor al sistema debemos ingresar a la opción 1 y luego el sistema le pedirá que ingrese al usuario el número de cedula, como su nombre y apellido. Seguidamente le mostrara un mensaje que el profesor fue ingresado correctamente. 2. La opción 2 sirve para averiguar si un profesor se encuentra en lista, el usuario deberá ingresar la cedula del profesor, y se mostrara el mensaje que corresponda (puede estar o no). Proyecto Página 12 de 49 INET – Profesorado de Informática -Programacion II- 2015 3. La opción 3 muestra datos de un profesor, debe ingresar su cedula y se mostrara sus datos (nombre y apellido). 4. La opción 4 borra los datos de un profesor, debe ingresar la cedula del profesor que se quiere borrar. 5. La opción 5 muestra el listado de profesores. 6. Opción para volver al menú principal. Proyecto Página 13 de 49 INET – Profesorado de Informática -Programacion II- 2015 ESCALAFON 1. Agregar profesor al escalafón, deberá ingresar el puntaje del profesor, su cedula y la asignatura. Si no existe, lo ingresa al escalafón. 2. Averiguar si un profesor está en el escalafón, se ingresa el puntaje del profesor, el código de la materia, si esta lo muestra. 3. Borrar un profesor, se ingresa el puntaje y luego la asignatura del profesor. Si se encuentra en el escalafón lo elimina. Proyecto Página 14 de 49 INET – Profesorado de Informática -Programacion II- 2015 4. Mostrar escalafón por asignatura, ingresar el código de la asignatura que se quiere ver el escalafón. 5. Volver al menú principal. LICEOS 1. Agregar un nuevo grupo a un Liceo, deberá ingresar el numero del liceo, el turno y el código del grupo. 2. Averiguar si un grupo está ingresado, dado un liceo y el código del grupo me dice si existe. Proyecto Página 15 de 49 INET – Profesorado de Informática -Programacion II- 2015 3. Borrar un grupo, dado un liceo, un turno y grupo se elimina el grupo. 4. Mostrar grupos de un liceo, dado un liceo entre el 1 y el 6. 5. Volver al menú principal. Proyecto Página 16 de 49 INET – Profesorado de Informática -Programacion II- 2015 ELECCION DE HORAS 1. Mostrar pizarrón de horas vacantes, se debe ingresar la asignatura que se desea consultar. 2. Asignar profesor a un grupo, se debe ingresar la asignatura, la cedula del profesor, el liceo y código del grupo. Si no está asignado a otro profesor, lo asigna. Proyecto Página 17 de 49 INET – Profesorado de Informática -Programacion II- 2015 3. Eliminar profesor asignado a un grupo, se debe ingresar la asignatura, la cedula del profesor, el liceo y código del grupo. Se elimina el profesor que estaba asignado al grupo. 4. Mostrar el liceo más cercano, dado un liceo muestra cual es el liceo mas próximo. 5. Mostrar grupos asignados a un profesor, se debe ingresar la cedula del profesor y la asignatura. 6. Mostrar la matriz de liceos, muestra los liceos con sus distancias entre si. 7. Volver al menú principal Proyecto Página 18 de 49 INET – Profesorado de Informática -Programacion II- 2015 3- ANEXO 3.1 CODIGO Main.cpp 1 #include <iostream> 2 #include <cstdlib> //tiene la definicion de la funcion RAND (random) 3 #include "menu.h" 4 #include "profesores.h" 5 #include "colprofesores.h" 6 #include "grupos.h" 7 #include "liceos.h" 8 #include "materias.h" 9 #include "colmaterias.h" 10 #include "eleccion.h" 11 #include "grafo.h" 12 13 14 using namespace std; 15 16 int main() 17 { 18 19 // Declaración de variables 20 int opcion1, opcion2, opcion3, opcion4, opcion5; 21 bool fin=false, fin1=false, fin2=false, fin3=false, fin4=false; 22 listaProf l; 23 HASH h; 24 ABB a; 25 int num_ci, cod_mat, codliceo, codgrupo; 26 profesor p; 27 float puntaje; 28 grupo gru; 29 30 ColLiceos liceos; 31 ColMat mat; 32 GrafoMat g; 33 34 // Creación de las estructruras necesarias 35 CrearListaProf(l); 36 CrearP(h); 37 creaABB(a); 38 CrearLiceos(liceos); 39 CrearMat(mat); 40 crea_grafo(g); 41 42 // JUEGO DE DATOS (Se cargan datos para pruebas) 43 // --------------------------------------------------44 45 // Se carga el grafo con distancias entre liceos. 46 for (int i=0; i<v ; i++){ 47 for(int j=i; j<v; j++){ 48 int distancia=rand() % 100; // Se elige una distancia aleatoria menor a 100 49 if (i!=j) 50 agregar_arista(g,i,j,distancia); 51 } 52 } 53 // La sentencia rand() por si sola devuelve enteros entre 0 y un número tope de 32767 aproximádamente. 54 // Para limitar nuestro rango utilizamos: rand() % 100 que nos va a estar dando los enteros del 0 al 99. 55 56 // Se cargan 3 profesores a una misma asignatura. 57 p.ci=1; 58 p.apellido="Britos"; 59 p.nombre="Pablo"; 60 InsertarListaProf(l,p); // Agregamos el profesor a la lista de profesores de CES 61 InsertarP(h,p,1,120); // Agregamos profesor al escalafón correspondiente a la asignatura 1 62 p.ci=2; 63 p.apellido="Diaz"; Proyecto Página 19 de 49 INET – Profesorado de Informática -Programacion II- 2015 64 p.nombre="Claudio"; 65 InsertarListaProf(l,p); // Agregamos el profesor a la lista de profesores de CES 66 InsertarP(h,p,1,135); // Agregamos profesor al escalafón correspondiente a la asignatura 1 67 p.ci=3; 68 p.apellido="Perez"; 69 p.nombre="Juan"; 70 InsertarListaProf(l,p); // Agregamos el profesor a la lista de profesores de CES 71 InsertarP(h,p,1,100); // Agregamos profesor al escalafón correspondiente a la asignatura 1 72 73 // Se carga un primero por liceo. 74 gru.CodGrupo=11; // 11 corresponde a 1ero. 1. 75 gru.Turno=1; // 1 corresponde al turno matutino. 76 for(int i=0; i<v; i++){ 77 gru.CodLiceo=i; 78 InsertarGrupoLiceo(liceos,gru); 79 for(int i=0; i<cantMaterias;i++) // Se agregan todas las materias que debe tener el grupo creado. 80 InsertarMat(mat,gru.CodGrupo,gru.CodLiceo,i); 81 } 82 // Se carga un segundo por liceo. 83 gru.CodGrupo=21; // 11 corresponde a 1ero. 1. 84 gru.Turno=1; // 1 corresponde al turno matutino. 85 for(int i=0; i<v; i++){ 86 gru.CodLiceo=i; 87 InsertarGrupoLiceo(liceos,gru); 88 for(int i=0; i<cantMaterias;i++) // Se agregan todas las materias que debe tener el grupo creado. 89 InsertarMat(mat,gru.CodGrupo,gru.CodLiceo,i); 90 } 91 // Se carga un tercero por liceo. 92 gru.CodGrupo=31; // 11 corresponde a 1ero. 1. 93 gru.Turno=1; // 1 corresponde al turno matutino. 94 for(int i=0; i<v; i++){ 95 gru.CodLiceo=i; 96 InsertarGrupoLiceo(liceos,gru); 97 for(int i=0; i<cantMaterias;i++) // Se agregan todas las materias que debe tener el grupo creado. 98 InsertarMat(mat,gru.CodGrupo,gru.CodLiceo,i); 99 } 100 101 // Fin JUEGO DE DATOS 102 // --------------------------------------------------103 104 do{ 105 limpiar_pantalla(); 106 menu_principal(); 107 cin >> opcion1; 108 109 switch (opcion1){ 110 case 1: do{ // Opciones para trabajar con los profesores. 111 limpiar_pantalla(); 112 menu_profesores(); 113 cin >> opcion2; 114 switch (opcion2){ 115 // Agregar profesor 116 case 1: cout << "Ingrese el numero de cedula del profesor: "; 117 cin >> num_ci; 118 if (PerteneceListaP(l,num_ci)) 119 cout << "\n Ya existe un profesor con ese numero de cedula \n"; 120 else{ 121 InsertarListaProf(l,leerProfesor(num_ci)); 122 if (PerteneceListaP(l,num_ci)) 123 cout << "Profesor ingresado \n"; 124 } 125 system("pause"); 126 break; 127 // Averiguar si un profesor está en lista 128 case 2: cout << "Ingrese el numero de cedula del profesor que desea buscar \n"; 129 cin >> num_ci; 130 if (PerteneceListaP (l, num_ci)) 131 cout << "El profesor se encuentra en la lista \n"; Proyecto Página 20 de 49 INET – Profesorado de Informática -Programacion II- 2015 132 else 133 cout << "No se encuentra un profesor con dicha cedula \n"; 134 system("pause"); 135 break; 136 // Mostrar datos se un profesor 137 case 3: cout << "Ingrese el numero de cedula del profesor que desea visualizar \n"; 138 cin >> num_ci; 139 p=ObtenerListaProf(l,num_ci); 140 mostrardatosProfesor(p); 141 system("pause"); 142 break; 143 144 // Borrar un profesor 145 case 4: cout << "Ingrese el numero de cedula del profesor borrar \n"; 146 cin >> num_ci; 147 if (!PerteneceListaP(l,num_ci)) 148 cout << "\n No existe un profesor con ese numero de cedula \n"; 149 else{ 150 BorrarListaProf(l,num_ci); 151 if (!PerteneceListaP(l,num_ci)) 152 cout << "El profesor ha sido borrado \n"; 153 } 154 system("pause"); 155 break; 156 // Mostrar lista de profesores 157 case 5 : mostralistaProf(l); 158 system("pause"); 159 break; 160 161 case 6: fin1=true; 162 break; 163 164 default: cout << "error, debe ingresar alguna de las opciones anteriores"; 165 system("pause"); 166 break; 167 } 168 system("pause"); 169 }while (!fin1); 170 break; 171 172 case 2: do{ // Opciones para trabajar con la colección de profesores. 173 limpiar_pantalla(); 174 menu_colProfesores(); 175 cin >> opcion3; 176 switch (opcion3){ 177 // Agregar profesor 178 179 case 1: cout << "Ingrese el puntaje del profesor: "; 180 cin >> puntaje; 181 cout << "Ingrese el numero de cedula del profesor: "; 182 cin >> num_ci; 183 cout << "Ingrese la asignatura: "; 184 cin >> cod_mat; 185 if (PerteneceABB(a,puntaje)) 186 cout << "\n Ya existe un profesor con ese puntaje "; 187 else{ 188 InsertarP(h,ObtenerListaProf(l,num_ci),cod_mat, puntaje); 189 if (PerteneceP(h,puntaje,cod_mat)) 190 cout << "Profesor ingresado \n"; 191 } 192 system("pause"); 193 break; 194 // Averiguar si un profesor está en lista 195 case 2: cout << "Ingrese puntaje del profesor "; 196 cin >> puntaje; 197 cout << "Ingrese codigo de materia: \n"; 198 // Hacer función mostrar codigos 199 cin >> cod_mat; 200 if (PerteneceP (h, puntaje,cod_mat)) Proyecto Página 21 de 49 INET – Profesorado de Informática -Programacion II- 2015 201 cout << "El profesor se encuentra en la lista \n"; 202 else 203 cout << "No se encuentra un profesor con dicho puntaje \n"; 204 system("pause"); 205 break; 206 // Borrar un profesor 207 case 3: cout << "Ingrese el puntaje del profesor "; 208 cin >> puntaje; 209 cout << "Ingrese codigo de materia: \n"; 210 // Hacer función mostrar codigos 211 cin >> cod_mat; 212 if (PerteneceP (h, puntaje,cod_mat)) 213 EliminarP(h,puntaje,cod_mat); 214 else 215 cout << "No se encuentra un profesor con dicha cedula \n"; 216 system("pause"); 217 break; 218 // Muestra el escalafón docente por asignatura 219 case 4: cout << "Ingrese codigo de materia: \n"; 220 // Hacer función mostrar codigos 221 cin >> cod_mat; 222 MostraEscalafon(h,cod_mat); 223 system("pause"); 224 break; 225 226 case 5: fin2=true; 227 break; 228 229 default: cout << "error, debe ingresar alguna de las opciones anteriores"; 230 system("pause"); 231 break; 232 } 233 }while (!fin2); 234 break; 235 236 case 3: do{ // Opciones para trabajar con la colección de liceos. 237 limpiar_pantalla(); 238 menu_liceos(); 239 cin >> opcion4; 240 switch (opcion4){ 241 // Agregar un grupo a un liceo 242 case 1: cout << "Ingrese el liceo al que pertenece el grupo: (1-6) "; 243 cin >> gru.CodLiceo; 244 cout << "Ingrese el turno: "; 245 cin >> gru.Turno; 246 cout << "Ingrese el codigo del grupo: "; 247 cin >> gru.CodGrupo; 248 if (PerteneceGrupoLiceo(liceos,codgrupo,codliceo)) 249 cout << "\n Ya existe el grupo"; 250 else{ 251 InsertarGrupoLiceo(liceos,gru); 252 for(int i=0; i<cantMaterias;i++) // Se agregan todas las materias que debe tener el grupo creado. 253 InsertarMat(mat,codgrupo,codliceo,i); 254 if (PerteneceGrupoLiceo(liceos,codgrupo, codliceo)) 255 cout << "grupo ingresado \n"; 256 } 257 system("pause"); 258 break; 259 // Averiguar si un grupo está ingresado 260 case 2: cout << "Ingrese el liceo al que pertenece el grupo: (1-6) "; 261 cin >> codliceo; 262 cout << "Ingrese el codigo del grupo: "; 263 cin >> codgrupo; 264 if (PerteneceGrupoLiceo(liceos,codgrupo,codliceo)) 265 cout << "\n Ya existe el grupo \n"; 266 else 267 cout << "No se encuentra el grupo \n"; 268 system("pause"); Proyecto Página 22 de 49 INET – Profesorado de Informática -Programacion II- 2015 269 break; 270 // Borrar un grupo 271 case 3: cout << "Ingrese el liceo al que pertenece el grupo: (1-6) "; 272 cin >> codliceo; 273 cout << "Ingrese el codigo del grupo: "; 274 cin >> codgrupo; 275 if (PerteneceGrupoLiceo(liceos,codgrupo,codliceo)) 276 EliminarGrupoLiceo(liceos,codgrupo,codliceo); 277 else 278 cout << "No se encuentra el grupo \n"; 279 system("pause"); 280 break; 281 // Muestra grupos de un liceo 282 case 4: cout << "Ingrese el liceo a consultar grupo: (1-6) "; 283 cin >> codliceo; 284 MostraGruposLiceo(liceos,codliceo-1); 285 system("pause"); 286 break; 287 288 case 5: fin3=true; 289 break; 290 291 default: cout << "error, debe ingresar alguna de las opciones anteriores"; 292 system("pause"); 293 break; 294 } 295 }while (!fin3); 296 break; 297 298 case 4: do{ // Elección de horas 299 limpiar_pantalla(); 300 menu_eleccion(); 301 cin >> opcion5; 302 switch (opcion5){ 303 // Mostrar pizarrón de horas vancates 304 case 1: cout << "Ingrese la asignatura que desea ver los grupos vacantes: "; 305 cin >> codliceo; 306 Pizarron(mat,codliceo); 307 system("pause"); 308 break; 309 // Asignar grupos a un profesor 310 case 2: cout << "Ingrese la asignatura "; 311 cin >> cod_mat; 312 cout << "\n Ingrese la cedula del profesor: "; 313 cin >> num_ci; 314 cout << "\n Ingrese el liceo al que pertenece el grupo: "; 315 cin >> codliceo; 316 cout << "\n Ingrese el codigo del grupo: "; 317 cin >> codgrupo; 318 if (!materiaAsignada(mat,codgrupo, codliceo, cod_mat)) 319 elegirGrupo(mat,num_ci,codgrupo,codliceo,cod_mat); 320 else cout << "la asignatura ya está asignada"; 321 system("pause"); 322 break; 323 324 case 4: cout << "\n Ingrese el liceo de referencia: "; 325 cin >> codliceo; 326 cout << "\n El liceo mas cercano es el nro: " << liceoCercano(g,codliceo) << endl; 327 system("pause"); 328 break; 329 330 case 5: cout << "\n Ingrese la cedula del profesor: "; 331 cin >> num_ci; 332 cout << "Ingrese la asignatura "; 333 cin >> cod_mat; 334 gruposAsignados(mat, num_ci,cod_mat); 335 system("pause"); 336 break; 337 338 // Muestra el contenido de la matriz de liceos (distancias Proyecto Página 23 de 49 INET – Profesorado de Informática -Programacion II- 2015 entre ellos) 339 case 6: mostrar_matriz(g); 340 system("pause"); 341 break; 342 case 7: fin4=true; 343 break; 344 345 default: cout << "error, debe ingresar alguna de las opciones anteriores"; 346 system("pause"); 347 break; 348 } 349 }while (!fin4); 350 break; 351 352 case 5: fin=true; 353 break; 354 355 default: cout << "error, debe ingresar alguna de las opciones anteriores"; 356 system("pause"); 357 break; 358 } 359 360 }while (!fin); 361 362 return 0; 363 } Proyecto Página 24 de 49 INET – Profesorado de Informática -Programacion II- 2015 Menu.h 1 #ifndef MENU_H_INCLUDED 2 #define MENU_H_INCLUDED 3 4 #include <iostream> 5 #include <cstdlib> // necesaria para utilizar system("cls") y system("clear") 6 7 using namespace std; 8 9 void limpiar_pantalla(); 10 void menu_principal(); 11 void menu_profesores(); 12 void menu_colProfesores(); 13 void menu_liceos(); 14 void menu_eleccion(); 15 16 #endif // MENU_H_INCLUDED Proyecto Página 25 de 49 INET – Profesorado de Informática -Programacion II- 2015 Menu.cpp 1 #include "menu.h" 2 3 void limpiar_pantalla(){ 4 5 std::system("cls"); 6 7 } 8 9 10 void menu_principal(){ 11 cout << endl; 12 cout << " *****************************************\n"; 13 cout << " MENU Principal\n"; 14 cout << " ***************************************** " << endl << 15 cout << " 1 - Profesores " << endl; 16 cout << " 2 - Escalafon de profesores " << endl; 17 cout << " 3 - Liceos " << endl; 18 cout << " 4 - Eleccion de horas " << endl; 19 cout << " 5 - Salir " << endl; 20 cout << endl; 21 } 22 void menu_profesores(){ 23 cout << endl; 24 cout << " *****************************************\n"; 25 cout << " MENU Profesores \n"; 26 cout << " ***************************************** " << endl << 27 cout << " 1 - Agregar profesor " << endl; 28 cout << " 2 - Averiguar si un profesor esta en lista " << endl; 29 cout << " 3 - Mostrar datos de un profesor " << endl; 30 cout << " 4 - Borrar un profesor " << endl; 31 cout << " 5 - Mostrar listado de profesores " << endl; 32 cout << " 6 - Volver al menu principal " << endl; 33 cout << endl; 34 } 35 void menu_colProfesores(){ 36 cout << endl; 37 cout << " *****************************************\n"; 38 cout << " MENU Escalafon \n"; 39 cout << " ***************************************** " << endl << 40 cout << " 1 - Agregar profesor al escalafon" << endl; 41 cout << " 2 - Averiguar si un profesor esta en el escalafon " << 42 cout << " 3 - Borrar un profesor " << endl; 43 cout << " 4 - Mostrar Escalafon por asignatura" << endl; 44 cout << " 5 - Volver al menu principal " << endl; 45 cout << endl; 46 } 47 48 void menu_liceos(){ 49 cout << endl; 50 cout << " *****************************************\n"; 51 cout << " MENU Liceos \n"; 52 cout << " ***************************************** " << endl << 53 cout << " 1 - Agregar un nuevo grupo a un Liceo" << endl; 54 cout << " 2 - Averiguar si un grupo esta ingresado " << endl; 55 cout << " 3 - Borrar un grupo " << endl; 56 cout << " 4 - Mostrar grupos de un liceo" << endl; 57 cout << " 5 - Volver al menu principal " << endl; 58 cout << endl; 59 } 60 61 void menu_eleccion(){ 62 cout << endl; 63 cout << " *****************************************\n"; 64 cout << " MENU Eleccion \n"; 65 cout << " ***************************************** " << endl << 66 cout << " 1 - Mostrar pizarron de horas vacantes " << endl; 67 cout << " 2 - Asignar profesor a un grupo " << endl; 68 cout << " 3 - Eliminar profesor asignado a un grupo " << endl; 69 cout << " 4 - Mostrar el liceo mas cercano " << endl; 70 cout << " 5 - Mostrar grupos asignados a un profesor " << endl; 71 cout << " 6 - Mostrar la matriz de liceos " << endl; 72 cout << " 7 - Volver al menu principal " << endl; Proyecto endl; endl; endl; endl; endl; endl; Página 26 de 49 INET – Profesorado de Informática -Programacion II- 2015 73 cout << endl; 74 } Proyecto Página 27 de 49 INET – Profesorado de Informática -Programacion II- 2015 Eleccion.h 1 #ifndef ELECCION_H_INCLUDED 2 #define ELECCION_H_INCLUDED 3 4 #include "colmaterias.h" 5 6 void Pizarron (ColMat m, int asignatura); // Muestra el pizarón de horas vacantes por asignatura 7 bool materiaAsignada (ColMat m, int CodG, int CodL, int asignatura); // Verifica que la una asignatura no esté asignada a un profesor. 8 void elegirGrupo (ColMat &m, int ci, int CodG, int CodL, int asignatura); // Asigna un profesor a un grupo, precondición: la asignatura está sin asignar 9 void gruposAsignados (ColMat m, int Ci, int asignatura); // Muestra los grupos que tiene asignado un profesor 10 11 #endif // ELECCION_H_INCLUDED Proyecto Página 28 de 49 INET – Profesorado de Informática -Programacion II- 2015 Eleccion.cpp 1 #include<iostream> 2 #include"eleccion.h" 3 4 using namespace std; 5 6 void Pizarron (ColMat m, int asignatura){ // Muestra el pizarón de horas vacantes por asignatura 7 while( m[asignatura] !=NULL){ 8 if (m[asignatura]->mat.ci == 0) 9 cout << "Liceo nro. " << m[asignatura]->mat.CodLiceo+1 << " - " << m[ asignatura]->mat.CodGrupo << endl; 10 m[asignatura]=m[asignatura]->sig; 11 } 12 } 13 14 bool materiaAsignada (ColMat m, int CodG, int CodL, int asignatura){ // Verifica que una asignatura no esté asignada a un profesor. 15 bool encontre=false; 16 while(m[asignatura]!=NULL && !encontre){ 17 if (m[asignatura]->mat.ci==0 && m[asignatura]->mat.CodGrupo== CodG && m[asignatura ]->mat.CodLiceo == CodL) 18 encontre=true; 19 else m[asignatura]=m[asignatura]->sig; 20 } 21 return encontre; 22 } 23 24 void elegirGrupo (ColMat &m, int Ci, int CodG, int CodL, int asignatura){ // Asigna un profesor a un grupo, precondición: la asignatura está sin asignar 25 bool encontre=false; 26 listaMat aux; 27 aux=m[asignatura]; 28 while (aux != NULL && !encontre){ 29 if (aux->mat.CodGrupo==CodG && aux->mat.CodLiceo==CodL){ 30 aux->mat.ci=Ci; 31 encontre=true; 32 } 33 else aux=aux->sig; 34 } 35 } 36 37 void gruposAsignados (ColMat m, int Ci, int asignatura){ 38 while (m[asignatura] != NULL){ 39 if (m[asignatura]->mat.ci==Ci) 40 cout << m[asignatura]->mat.CodGrupo << " - " << m[asignatura]->mat.CodLiceo << endl; 41 m[asignatura]=m[asignatura]->sig; 42 } 43 } Proyecto Página 29 de 49 INET – Profesorado de Informática -Programacion II- 2015 Liceos.h 1 #ifndef LICEOS_H_INCLUDED 2 #define LICEOS_H_INCLUDED 3 4 #include "grupos.h" 5 6 const int cantLiceos=6; // Cantidad de liceos 7 8 typedef listaGrupos ColLiceos[cantLiceos]; 9 10 11 12 void CrearLiceos(ColLiceos &l); 13 bool PerteneceGrupoLiceo (ColLiceos l, int CodG, int CodL); 14 void InsertarGrupoLiceo (ColLiceos &l, grupo gru); // precondición: la materia no puede estar en la lista 15 void EliminarGrupoLiceo (ColLiceos &l, int CodG, int CodL); // precondición: la materia debe estar en la lista 16 void MostraGruposLiceo (ColLiceos l, int CodL); 17 18 19 #endif // LICEOS_H_INCLUDED Proyecto Página 30 de 49 INET – Profesorado de Informática -Programacion II- 2015 Liceos.cpp 1 #include<iostream> 2 #include "liceos.h" 3 4 using namespace std; 5 6 7 void CrearLiceos(ColLiceos &l){ 8 for(int i=0; i<cantLiceos ; i++) 9 CrearListaGrupos(l[i]); 10 } 11 12 bool PerteneceGrupoLiceo (ColLiceos l, int CodG, int CodL){ 13 return PertenecelistaGrupos(l[CodL], CodG); 14 } 15 16 void InsertarGrupoLiceo (ColLiceos &l, grupo gru){ // precondición: la materia no puede estar en la lista 17 InsertarGrupo(l[gru.CodLiceo],gru); 18 } 19 20 21 void EliminarGrupoLiceo (ColLiceos &l, int CodG, int CodL){ // precondición: la materia debe estar en la lista 22 BorrarGrupo(l[CodL],CodG); 23 } 24 25 void MostraGruposLiceo (ColLiceos l, int CodL){ 26 while (l[CodL]!= NULL){ 27 cout << l[CodL]->g.CodGrupo << " - " << l[CodL]->g.Turno << endl; 28 l[CodL]=l[CodL]->sig; 29 } 30 31 } Proyecto Página 31 de 49 INET – Profesorado de Informática -Programacion II- 2015 Materias.h 1 #ifndef MATERIAS_H_INCLUDED 2 #define MATERIAS_H_INCLUDED 3 4 using namespace std; 5 6 7 typedef struct { 8 int CodGrupo; 9 int CodLiceo; 10 int ci; 11 } materia; 12 13 14 typedef struct nodoM { 15 materia mat; 16 nodoM *sig; 17 } nodoMateria; 18 19 typedef nodoMateria *listaMat; 20 21 22 23 void CrearListaMat(listaMat &l); 24 bool PerteneceListaMat(listaMat l, int CodG, int CodL); 25 void InsertarMat ( listaMat &lista , int CodG, int CodL); 26 materia ObtenerMat (listaMat l,int CodG); 27 void BorrarMat (listaMat &l, int CodG, int CodL); 28 void mostralistaMat(listaMat l); 29 30 #endif // MATERIAS_H_INCLUDED Proyecto Página 32 de 49 INET – Profesorado de Informática -Programacion II- 2015 Materias.cpp 1 #include<iostream> 2 #include "materias.h" 3 4 using namespace std; 5 6 7 void CrearListaMat(listaMat &l){ 8 l=NULL; 9 } 10 11 bool PerteneceListaMat(listaMat l, int CodG, int CodL){ 12 while (l!=NULL){ 13 if (l->mat.CodGrupo==CodG && l->mat.CodLiceo==CodL) 14 return true; 15 l=l->sig; 16 } 17 return false; 18 } 19 20 void InsertarMat ( listaMat &lista , int CodG, int CodL){ 21 22 listaMat nuevo_nodo = new nodoMateria; 23 24 nuevo_nodo->mat.ci = 0; 25 nuevo_nodo->mat.CodGrupo=CodG; 26 nuevo_nodo->mat.CodLiceo=CodL; 27 28 nuevo_nodo->sig = lista; 29 30 lista = nuevo_nodo; 31 32 return; 33 } 34 35 materia ObtenerMat (listaMat l,int CodG){ // precondición: el profesor debe de encontrarse en la lista 36 37 if (l->mat.CodGrupo == CodG) 38 return l->mat; 39 else 40 return ObtenerMat(l->sig,CodG); 41 } 42 43 void BorrarMat (listaMat &l, int CodG, int CodL){ // Precondición: el docente debe de encontrarse en la lista 44 listaMat aux1, aux2; 45 46 if (l->mat.CodGrupo == CodG && l->mat.CodLiceo==CodL) 47 l=l->sig; 48 else{ 49 aux1=l->sig; 50 aux2=aux1->sig; 51 52 while (aux2 !=NULL){ 53 if (aux1->mat.CodGrupo == CodG && l->mat.CodLiceo==CodL){ 54 aux1->sig=aux2->sig; 55 aux2=aux2->sig; 56 } 57 else { 58 aux1=aux1->sig; 59 aux2=aux2->sig; 60 } 61 } 62 } 63 } 64 65 void mostralistaMat(listaMat l){ 66 67 while (l !=NULL){ 68 cout << l ->mat.CodLiceo << " - " << l->mat.CodGrupo << " - " << l->mat.ci << endl; 69 l=l->sig; 70 } Proyecto Página 33 de 49 INET – Profesorado de Informática -Programacion II- 2015 71 } Proyecto Página 34 de 49 INET – Profesorado de Informática -Programacion II- 2015 Profesores.h 1 #ifndef PROFESORES_H_INCLUDED 2 #define PROFESORES_H_INCLUDED 3 4 5 #include<string> 6 7 using namespace std; 8 9 10 11 typedef struct { 12 int ci; 13 string nombre; 14 string apellido; 15 } profesor; 16 17 18 typedef struct nodoP { 19 profesor prof; 20 nodoP *sig; 21 } nodoProfesor; 22 23 typedef nodoProfesor *listaProf; 24 25 26 27 void CrearListaProf(listaProf &l); 28 bool PerteneceListaP(listaProf l, int ced); 29 profesor leerProfesor(int ced); 30 void InsertarListaProf ( listaProf &lista , profesor p ); 31 profesor ObtenerListaProf (listaProf l,int ced); 32 void BorrarListaProf (listaProf l, int ced); 33 void mostrardatosProfesor(profesor p); 34 void mostralistaProf(listaProf l); 35 36 #endif // PROFESORES_H_INCLUDED Proyecto Página 35 de 49 INET – Profesorado de Informática -Programacion II- 2015 Profesores.cpp 1 #include<iostream> 2 #include "profesores.h" 3 4 using namespace std; 5 6 void CrearListaProf(listaProf &l){ 7 8 l=NULL; 9 10 } 11 bool PerteneceListaP(listaProf l, int nro){ 12 while (l!=NULL){ 13 if (l->prof.ci==nro) 14 return true; 15 l=l->sig; 16 } 17 return false; 18 } 19 20 profesor leerProfesor(int ced){ 21 profesor p; 22 p.ci=ced; 23 cout << "Ingrese los datos del Profesor: \n"; 24 cout << "Nombre: ............. "; cin >> p.nombre ; cout << "\n"; 25 cout << "Apellido: ........... "; cin >> p.apellido ; cout << "\n"; 26 cout << endl; 27 return p; 28 } 29 30 31 void InsertarListaProf ( listaProf &lista , profesor p ){ 32 33 listaProf nuevo_nodo = new nodoProfesor; 34 35 nuevo_nodo -> prof = p; 36 37 nuevo_nodo ->sig = lista; 38 39 lista = nuevo_nodo; 40 41 42 return; 43 } 44 45 profesor ObtenerListaProf (listaProf l,int ced){ // precondición: el profesor debe de encontrarse en la lista 46 47 if (l->prof.ci == ced) 48 return l->prof; 49 else return ObtenerListaProf(l->sig,ced); 50 } 51 52 void BorrarListaProf (listaProf l, int ced){ // Precondición: el docente debe de encontrarse en la lista 53 listaProf aux1, aux2; 54 55 if (l->prof.ci == ced ) 56 l=l->sig; 57 else{ 58 aux1=l->sig; 59 aux2=aux1->sig; 60 61 while (aux2 !=NULL){ 62 if (aux1->prof.ci == ced){ 63 aux1->sig=aux2->sig; 64 aux2=aux2->sig; 65 } 66 else { 67 aux1=aux1->sig; 68 aux2=aux2->sig; 69 } 70 } Proyecto Página 36 de 49 INET – Profesorado de Informática 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 -Programacion II- 2015 } } void mostrardatosProfesor(profesor p){ cout << "Datos del Profesor:" << endl; cout << "Nombre: ............. " << p.nombre << endl; cout << "Apellido: ........... " << p.apellido << endl; } void mostralistaProf(listaProf l){ while (l !=NULL){ cout << l ->prof.apellido << ", " << l->prof.nombre << endl; l=l->sig; } } Proyecto Página 37 de 49 INET – Profesorado de Informática -Programacion II- 2015 Grupos.h 1 #ifndef GRUPOS_H_INCLUDED 2 #define GRUPOS_H_INCLUDED 3 4 using namespace std; 5 6 7 typedef struct { 8 int CodGrupo; 9 int CodLiceo; 10 int Turno; 11 } grupo; 12 13 14 typedef struct nodoG { 15 grupo g; 16 nodoG *sig; 17 } nodoGrupo; 18 19 typedef nodoGrupo *listaGrupos; 20 21 22 23 void CrearListaGrupos (listaGrupos &l); 24 bool PertenecelistaGrupos(listaGrupos l, int CodG); 25 void InsertarGrupo ( listaGrupos &lista , grupo gru); // Agrega un grupo a la lista de grupos 26 grupo ObtenerGrupo (listaGrupos l,int CodG); 27 void BorrarGrupo (listaGrupos &l, int CodG); 28 void mostralistaGrupos(listaGrupos l); 29 30 #endif // GRUPOS_H_INCLUDED Proyecto Página 38 de 49 INET – Profesorado de Informática -Programacion II- 2015 Grupos.cpp 1 #include<iostream> 2 #include "grupos.h" 3 4 using namespace std; 5 6 7 void CrearListaGrupos (listaGrupos &l){ 8 l=NULL; 9 10 } 11 12 bool PertenecelistaGrupos(listaGrupos l, int CodG){ 13 bool encontre=false; 14 while (l!=NULL && !encontre){ 15 if (l->g.CodGrupo==CodG) 16 encontre=true; 17 l=l->sig; 18 } 19 return encontre; 20 } 21 22 23 24 25 void InsertarGrupo ( listaGrupos &lista , grupo gru){ 26 27 listaGrupos nuevo_nodo = new nodoGrupo; 28 29 nuevo_nodo->g.Turno = gru.Turno; 30 nuevo_nodo->g.CodGrupo=gru.CodGrupo; 31 nuevo_nodo->g.CodLiceo=gru.CodLiceo; 32 33 nuevo_nodo->sig = lista; 34 35 lista = nuevo_nodo; 36 37 return; 38 } 39 40 grupo ObtenerGrupo (listaGrupos l,int CodG){ // precondición: el profesor debe de encontrarse en la lista 41 42 if (l->g.CodGrupo == CodG) 43 return l->g; 44 else 45 return ObtenerGrupo(l->sig,CodG); 46 } 47 48 void BorrarGrupo (listaGrupos &l, int CodG){ // Precondición: el docente debe de encontrarse en la lista 49 listaGrupos aux1, aux2; 50 51 if (l->g.CodGrupo == CodG) 52 l=l->sig; 53 else{ 54 aux1=l->sig; 55 aux2=aux1->sig; 56 57 while (aux2 !=NULL){ 58 if (aux1->g.CodGrupo == CodG){ 59 aux1->sig=aux2->sig; 60 aux2=aux2->sig; 61 } 62 else { 63 aux1=aux1->sig; 64 aux2=aux2->sig; 65 } 66 } 67 } 68 69 } 70 Proyecto Página 39 de 49 INET – Profesorado de Informática 71 72 73 74 75 76 77 78 79 80 -Programacion II- 2015 void mostralistaGrupos(listaGrupos l){ while (l !=NULL){ cout << l->g.CodGrupo << " - " << l->g.Turno << endl; l=l->sig; } } Proyecto Página 40 de 49 INET – Profesorado de Informática -Programacion II- 2015 Escalafon.h 1 #ifndef ESCALAFON_H_INCLUDED 2 #define ESCALAFON_H_INCLUDED 3 4 #include "profesores.h" 5 6 typedef struct nodoA { 7 profesor prof; 8 float puntaje; 9 nodoA * HIzq; 10 nodoA * HDer; 11 } nodoABB; 12 typedef nodoABB * ABB; 13 14 void creaABB (ABB &a); 15 void InsertABB(ABB &a, profesor p, float puntaje); 16 bool PerteneceABB(ABB a, float p); 17 void inordenABB(ABB a); 18 void Borrar_Minimo (ABB &a);// Borra el profesor con puntaje mínimo. 19 profesor Minimo(ABB a); // Devuelve el profesor con puntaje mínimo. 20 void BorrarProfABB (float p , ABB &a); //Dado un puntaje, elimina el profesor del escalafon con dicho puntaje. 21 22 #endif // ESCALAFON_H_INCLUDED Proyecto Página 41 de 49 INET – Profesorado de Informática -Programacion II- 2015 Escalafon.cpp 1 #include "escalafon.h" 2 #include<iostream> 3 using namespace std; 4 5 void creaABB (ABB &a){ 6 a=NULL;} 7 8 9 /* insertar un nuevo valor en el ABB */ 10 11 /* precondición: el valor no existía previamente en el ABB */ 12 void InsertABB(ABB &a, profesor p, float puntaje) { 13 if (a == NULL){ 14 a = new nodoABB; 15 a -> prof = p; 16 a -> HIzq = NULL; 17 a -> HDer = NULL; 18 a -> puntaje= puntaje; 19 } 20 else 21 if (puntaje < a->puntaje) 22 InsertABB(a->HIzq,p,puntaje); 23 else 24 InsertABB(a->HDer,p,puntaje); 25 } 26 27 /* saber si un elemento pertenece al ABB, versión recursiva */ 28 bool PerteneceABB(ABB a, float p) { 29 if (a == NULL) 30 return false; 31 else 32 if (a->puntaje == p) 33 return true; 34 else 35 if (p < a->puntaje) 36 return PerteneceABB(a->HIzq,p); 37 else 38 return PerteneceABB(a->HDer,p); 39 } 40 41 42 void inordenABB(ABB a){ 43 ABB de,iz; 44 profesor p; 45 float puntaje; 46 if (a != NULL) 47 { 48 iz=a->HIzq; 49 de=a->HDer; 50 p=a->prof; 51 puntaje=a->puntaje; 52 inordenABB(de); 53 cout << p.apellido << ", " << p.nombre << " ... " << puntaje << endl; 54 inordenABB(iz); 55 } 56 } 57 58 59 60 61 void Borrar_Minimo (ABB &a){// Borra el profesor con puntaje mínimo. 62 ABB aux; 63 if (a->HIzq == NULL){ 64 aux = a->HDer; 65 delete a; 66 a = aux; 67 } 68 else 69 Borrar_Minimo (a->HIzq); 70 } 71 72 profesor Minimo(ABB a) { // Devuelve el profesor con puntaje mínimo. Proyecto Página 42 de 49 INET – Profesorado de Informática -Programacion II- 2015 73 if (a->HIzq == NULL) 74 return a->prof; 75 else 76 return Minimo(a->HIzq); 77 } 78 79 void BorrarProfABB (float p , ABB &a){ //Dado un puntaje, elimina el profesor del escalafon con dicho puntaje. 80 81 ABB aux; 82 if (p == a->puntaje){ 83 if (a->HDer == NULL){ 84 aux = a->HIzq; 85 delete a; 86 a = aux; 87 } 88 else 89 if (a->HIzq == NULL){ 90 aux = a->HDer; 91 delete a; 92 a = aux; 93 } 94 else{ 95 a->prof = Minimo (a->HDer); 96 Borrar_Minimo (a->HDer); 97 } 98 } 99 else{ 100 if (p < a->puntaje) 101 BorrarProfABB (p ,a->HIzq); 102 else 103 BorrarProfABB (p ,a->HDer); 104 } 105 } Proyecto Página 43 de 49 INET – Profesorado de Informática -Programacion II- 2015 Colprofesores.h 1 #ifndef COLPROFESORES_H_INCLUDED 2 #define COLPROFESORES_H_INCLUDED 3 4 #include<string> 5 #include"escalafon.h" 6 7 const int cantMaterias=13; // Cantidad de materias 8 9 typedef ABB HASH[cantMaterias]; 10 11 12 13 void CrearP(HASH &p); 14 bool PerteneceP (HASH h, float puntaje, int asignatura); 15 void InsertarP (HASH &h, profesor p, int materia,float puntaje); // precondición: el profesor no puede estar en la lista 16 void EliminarP (HASH &h, float puntaje, int asignatura); // precondición: el profesor debe estar en la lista 17 void MostraEscalafon (HASH h, int asignatura); 18 19 #endif // COLPROFESORES_H_INCLUDED Proyecto Página 44 de 49 INET – Profesorado de Informática -Programacion II- 2015 Colprofesores.cpp 1 #include "colprofesores.h" 2 3 using namespace std; 4 5 void CrearP(HASH &h){ 6 for(int i=0; i<cantMaterias ; i++) 7 creaABB(h[i]); 8 } 9 10 bool PerteneceP (HASH h, float puntaje, int asignatura){ 11 return PerteneceABB(h[asignatura],puntaje); 12 } 13 14 void InsertarP (HASH &h, profesor p, int materia, float puntaje){ // precondición: el profesor no puede estar en la lista 15 InsertABB(h[materia],p,puntaje); 16 } 17 18 19 void EliminarP (HASH &h, float puntaje, int asignatura){ // precondición: el profesor debe estar en la lista 20 BorrarProfABB(puntaje,h[asignatura]); 21 } 22 23 void MostraEscalafon (HASH h, int asignatura){ 24 inordenABB(h[asignatura]); 25 } Proyecto Página 45 de 49 INET – Profesorado de Informática -Programacion II- 2015 Colmaterias.h 1 #ifndef COLMATERIAS_H_INCLUDED 2 #define COLMATERIAS_H_INCLUDED 3 4 #include"colprofesores.h" // La incluimos por la constante cantMaterias 5 #include"materias.h" 6 7 8 9 typedef listaMat ColMat[cantMaterias]; 10 11 12 13 void CrearMat(ColMat &m); 14 bool PerteneceMat (ColMat m, int CodG, int CodL, int asignatura); 15 void InsertarMat (ColMat &m, int CodG, int CodL ,int asignatura); // precondición: la materia no puede estar en la lista 16 void EliminarMat (ColMat &m, int CodG, int CodL, int asignatura); // precondición: la materia debe estar en la lista 17 void MostraMateriasLibres (ColMat m, int asignatura); 18 19 #endif // COLMATERIAS_H_INCLUDED Proyecto Página 46 de 49 INET – Profesorado de Informática -Programacion II- 2015 Colmaterias.cpp 1 #include<iostream> 2 #include "colmaterias.h" 3 4 using namespace std; 5 6 7 void CrearMat(ColMat &m){ 8 for(int i=0; i<cantMaterias ; i++) 9 CrearListaMat(m[i]); 10 } 11 12 bool PerteneceMat (ColMat m, int CodG, int CodL, int asignatura){ 13 return PerteneceListaMat(m[asignatura], CodG, CodL); 14 } 15 16 void InsertarMat (ColMat &m, int CodG, int CodL ,int asignatura){ // precondición: la materia no puede estar en la lista 17 InsertarMat(m[asignatura],CodG,CodL); 18 } 19 20 21 void EliminarMat (ColMat &m, int CodG, int CodL, int asignatura){ // precondición: la materia debe estar en la lista 22 BorrarMat(m[asignatura],CodG,CodL); 23 } 24 25 void MostraMateriasLibres (ColMat m, int asignatura){ 26 while (m[asignatura]!= NULL){ 27 if (m[asignatura]->mat.ci==0) 28 cout << m[asignatura]->mat.CodLiceo << " - " << m[asignatura]->mat.CodGrupo << endl; 29 } 30 31 } Proyecto Página 47 de 49 INET – Profesorado de Informática -Programacion II- 2015 Grafo.h 1 #ifndef GRAFO_H_INCLUDED 2 #define GRAFO_H_INCLUDED 3 4 5 6 #define v 6 // cantidad de liceos con los que vamos a trabajar. 7 8 typedef int GrafoMat[v][v]; 9 10 void crea_grafo (GrafoMat &g); // Crear grafo sin aristas 11 void agregar_arista (GrafoMat &g,int i,int j, int distancia); // Agrega arista con costo entre dos vértices 12 void mostrar_matriz (GrafoMat g); // Muestra la matriz 13 void DFS (GrafoMat g, int verticeActual, bool visitado[v]); 14 int liceoCercano (GrafoMat g, int liceo); // Dado un liceo, devuelve el liceo mas cercano a el. 15 16 #endif // GRAFO_H_INCLUDED Proyecto Página 48 de 49 INET – Profesorado de Informática -Programacion II- 2015 Grafo.cpp 1 #include<iostream> 2 #include"grafo.h" 3 4 5 using namespace std; 6 7 void crea_grafo (GrafoMat &g){ // Crear grafo sin aristas 8 9 for (int i=0; i<v;i++) 10 for(int j=0;j<v;j++) 11 g[i][j]=0; 12 } 13 14 void agregar_arista (GrafoMat &g,int i,int j, int distancia) // Agrega arista con costo entre dos vértices 15 { 16 g[i][j]=distancia; 17 g[j][i]=distancia; 18 } 19 20 void mostrar_matriz (GrafoMat g){ // Muestra el contenido de la matriz 21 for (int i=0; i<v; i++){ 22 for(int j=0; j<v; j++) 23 cout << g[i][j] << " " ; 24 cout << endl; 25 } 26 } 27 28 void DFS (GrafoMat g, int verticeActual, bool visitado[v]){ 29 30 visitado[verticeActual] = true; 31 32 for (int j=0; j<v; j++){ 33 34 if (g[verticeActual][j] != 0 ) { 35 36 if (!visitado[j]) 37 DFS(g, j, visitado); 38 } 39 } 40 } 41 42 int liceoCercano (GrafoMat g, int liceo){ // Dado un liceo, devuelve el liceo mas cercano a el. 43 int distMenor,liceoCerca; 44 liceo = liceo -1; // Se realiza la traslación para adecuarse al índice del grafo 45 if (liceo != 0){ // Inicializamos menor con la distancia del liceo al primer liceo de la fila 46 distMenor = g[liceo][0]; // Si el primer liceo es el de referencia, inicializamos con el segundo 47 liceoCerca = 0; 48 } 49 else { 50 distMenor = g[liceo][1]; 51 liceoCerca = 1; 52 } 53 54 for (int i=0; i<v; i++){ 55 if (g[liceo][i] < distMenor && liceo != i){ 56 distMenor = g[liceo][i]; 57 liceoCerca = i; 58 } 59 } 60 return liceoCerca+1; // Se realiza la traslaciónpara adecuarse al número de los liceos 61 } Proyecto Página 49 de 49