Advertisement
Guest User

Untitled

a guest
May 1st, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. #include <algorithm>
  2. /*
  3. Acepta la solicitud de inscripción que estará en "planillas de inscripción".
  4. Para aceptar una solicitud se coloca la cedula de quien solicita, se elimina de planillas
  5. se pasa a materias inscritas y se incrementa la cantidad de alumnos para cada seccion donde este el aceptado.
  6. Listas usadas aqui:
  7. Planillas
  8. Materias_I
  9. Secciones
  10. Alumnos
  11. Materias
  12. */
  13. void AceptarInscripcion() {
  14. extern Lista *Planillas;
  15. extern Lista *Materias_I;
  16. extern Lista *Secciones;
  17. extern Lista *Alumnos;
  18. vector<int> cedulas; //control de alumnos
  19. int cedula;
  20.  
  21. cout << "Lista de planillas de inscripción de aspirantes\n" << endl;
  22.  
  23. Node *temp_p = Planillas->primero, *temp_a = NULL, *temp_s = NULL, *temp_m;
  24. while (temp_p != NULL) {
  25. /*
  26. Almacenamos las cedulas de los alumnos que solicitan SIN REPETIR ninguna.
  27. Mostrando nombre-cedula del aspirante
  28. */
  29. if(find(cedulas.begin(), cedulas.end(), temp_p->cedula) == cedulas.end()) {
  30. cedulas.push_back(temp_p->cedula);
  31. temp_a = Alumnos->primero;
  32. while (temp_a != NULL) {
  33. if(temp_a->cedula == temp_p->cedula) {
  34. break;
  35. }
  36. temp_a = temp_a->sig;
  37. }
  38. cout << temp_a->nombre << " v" << temp_p->cedula << endl;
  39. }
  40. temp_p = temp_p->sig;
  41. }
  42.  
  43. //Obtengo toda la información de las secciones en UN Solo ciclo, porque más adelante la voy a necesitar
  44. map<string, array_asociativo> i_sec;
  45. map<string, array_asociativo>::iterator iter; //Iterador para i_sec
  46. map<string, array_asociativo>::iterator iter2; //Iterador para secciones_planilla
  47. temp_s = Secciones->primero;
  48. while (temp_s != NULL) {
  49. i_sec[temp_s->cod_seccion].cod_materia = temp_s->cod_materia;
  50. i_sec[temp_s->cod_seccion].dia = temp_s->dia;
  51. i_sec[temp_s->cod_seccion].entrada = temp_s->hora_entrada;
  52. i_sec[temp_s->cod_seccion].salida = temp_s->hora_salida;
  53. i_sec[temp_s->cod_seccion].max_alumnos = temp_s->max_alumnos;
  54. i_sec[temp_s->cod_seccion].alumnos_inscritos = temp_s->alumnos_inscritos;
  55. i_sec[temp_s->cod_seccion].nodo = temp_s;
  56. temp_s = temp_s->sig;
  57. }
  58.  
  59. cout << "\nEscribir 0 para regresar al MENU" << endl;
  60. cout << "Introducir numero de cedula para ver planilla correspondiente: "; cin >> cedula;
  61. system(clear);
  62. if(cedula != 0) {
  63. short int x, z;
  64. string seccion_elegida = "Sin Seccion";
  65. //La cedula SI existe
  66. if(find(cedulas.begin(), cedulas.end(), cedula) != cedulas.end()) {
  67.  
  68. //Muestro la planilla del alumno y encima recibo la informacion de toda la planilla del alumno
  69. map<string, array_asociativo> secciones_planilla = VerPlanilla(true,cedula);
  70.  
  71. cout << "Introduce 0 para regresar a ver todas las planillas" << endl;
  72. cout << "Introduce 1 para aceptar esta planilla" << endl;
  73. cout << "Valor: "; cin >> x;
  74. if(x == 1) {
  75. temp_p = Planillas->primero;
  76. while (temp_p != NULL) { //while(1)
  77. //Me detengo en TODOS los registros que coincidan con la cedula para meterlos en la materia inscrita
  78. if(temp_p->cedula == cedula) { //if(1)
  79.  
  80. //Si esta condicion se da, la materia no choca y tiene cupo
  81. if(i_sec[temp_p->cod_seccion].alumnos_inscritos < i_sec[temp_p->cod_seccion].max_alumnos) { //if(2)
  82.  
  83. cout << "Entramos en IF con " << temp_p->cod_seccion << endl;
  84.  
  85. //en el campo "nodo", tengo el valor de la dirección de memoria de esa sección
  86. (i_sec[temp_p->cod_seccion].nodo)->alumnos_inscritos++;
  87. seccion_elegida = temp_p->cod_seccion;
  88.  
  89. } else { //if(2)
  90.  
  91. cout << "Entramos en el ELSE con " << temp_p->cod_seccion << endl;
  92.  
  93. //En este punto, tengo que buscar reasignar a otra sección al alumno que si tenga cupo.
  94. for(iter = i_sec.begin(); iter != i_sec.end(); iter++) { //for(1)
  95. z = 0;
  96. if(i_sec[iter->first].cod_materia == i_sec[temp_p->cod_seccion].cod_materia
  97. && i_sec[iter->first].alumnos_inscritos < i_sec[iter->first].max_alumnos) { //if(3)
  98.  
  99. //En este punto conseguí otra sección de la materia que tiene cupos.
  100. //Por tanto tengo que ver si no choca con ninguna sección de las otras materias
  101. //en la planilla del user
  102. //En secciones_planilla tengo un map con las secciones de las otras materias y su información.
  103. //Así que tengo que recorrerlas todas y si ninguna choca, elijo esta nueva seccion.
  104.  
  105. iter2 = secciones_planilla.begin();
  106. while(iter2 != secciones_planilla.end()) {//while(1)
  107. //Si el dia es igual y la hora de entrada es la misma, choca o esta entre la hora de entrada y salida choca!
  108. if(secciones_planilla[iter2->first].dia == i_sec[iter->first].dia
  109. && (secciones_planilla[iter2->first].entrada == i_sec[iter->first].entrada
  110. || (secciones_planilla[iter2->first].entrada > i_sec[iter->first].entrada
  111. && secciones_planilla[iter2->first].entrada < i_sec[iter->first].salida
  112. )
  113. )
  114. )
  115. {
  116. z++; //Incremento z, porque si z al final es distinto de 0 se que al menos con alguna SI choca
  117. break; //No tendria sentido seguir buscando en el bucle porque ya al menos una si choca
  118. }
  119.  
  120. iter2++;
  121. }//end while(1)
  122.  
  123. //Si Z es 0, el codigo de la seccion que es iter->first, no choca con ninguna materia de su planilla
  124. if(z == 0) {
  125. (i_sec[iter->first].nodo)->alumnos_inscritos++;
  126. seccion_elegida = iter->first;
  127. break;//Detenemos el for de las secciones de la planilla, porque hemos conseguido una seccion!
  128. }
  129.  
  130. }//end if(3)
  131. }//end for(1)
  132. }//end if(2)
  133.  
  134. //Convertimos cedula de int a un string para poder concatenarlo en el formato
  135. string cedula_str;
  136. ostringstream convert; //este es el intermediario para hacer la conversión
  137. convert << cedula;
  138. cedula_str = convert.str();
  139.  
  140. string materia_inscrita_formato = i_sec[seccion_elegida].cod_materia + "_" + seccion_elegida + "_" + cedula_str;
  141.  
  142. char *str = new char[materia_inscrita_formato.length() + 1]; //Como Add recibe es un (char *) y no puedo castear, uso memoria dinamica
  143. strcpy(str, materia_inscrita_formato.c_str()); //Convierto en (char *) a data con el metodo c_str() y con strcpy() lo copio a str
  144. Materias_I->Add(2,str);
  145. delete[] str;//Libero de memoria el char * temporal
  146. }//end if(1)
  147. temp_p = temp_p->sig;
  148. }//end while(1)
  149.  
  150. cout << "El alumno fue inscrito correctamente!" << endl;
  151. cout << "\n\nPara volver a la lista de planillas, introducir 0 u otro numero" << endl;
  152. cout << "Para regresar al menu principal escriba 1" << endl;
  153. cout << "Opcion: "; cin >> x;
  154.  
  155. if(x == 1) {
  156. Menu();
  157. } else {
  158. system(clear);
  159. AceptarInscripcion();
  160. }
  161.  
  162. } else {
  163. system(clear);
  164. AceptarInscripcion();
  165. }
  166. } else {
  167. cout << "\nLa cedula ingresada no existe en sistema." << endl;
  168. cout << "\n\nPara volver a consultar, introducir 0 u otro numero" << endl;
  169. cout << "Para regresar al menu principal escriba 1" << endl;
  170. cout << "Opcion: "; cin >> x;
  171.  
  172. if(x == 1) {
  173. Menu();
  174. } else {
  175. system(clear);
  176. AceptarInscripcion();
  177. }
  178. }
  179. } else {
  180. Menu();
  181. }
  182.  
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement