Subido por Gonzalo Ortega

Carpeta proyecto

Anuncio
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
Descargar