Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
IO 7.71 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define max_chars 20
  4. #define max_exp 200
  5. #define max_asig 25
  6.  
  7. typedef struct{
  8.     int num;
  9.     char lletra;
  10. }tdni; //DNI
  11.  
  12. typedef struct{
  13.     char nomas[max_chars+1]; //Nom Assignatura (max. 20 chars)
  14.     float numcred; //Numero de Crèdits
  15.     float nota; //Nota de l'assignatura
  16. }tasign; //ASIGNATURES
  17.  
  18. typedef struct{
  19.     char nom[max_chars+1]; //Nom i Cognom (max. 20 chars)
  20.     tdni dni; //DNI
  21.     int any; //Any d'ingres
  22.     int numas; //Numero assignatures cursades
  23.     tasign asig[max_asig];
  24. }texpedient; //EXPEDIENT PER PERSONA
  25.  
  26. typedef struct{
  27.     int num_exp;
  28.     texpedient expedient[max_exp];
  29. }tlista_exp; //GUARDA INFORMACIO (max. 200) EXPEDIENTS
  30.  
  31. texpedient leer_alumno();
  32. tlista_exp leer_alumnos();
  33. tasign leer_asignatura();
  34. texpedient leer_asignaturas();
  35. void mostrar_alumno(texpedient exp);
  36. void mostrar_asignaturas(tasign asig);
  37. void mostrar_lista_alumnos(tlista_exp lista);
  38. int comparar_nomas(texpedient exp, int n); //Compara les n-1 primeres asignatures amb l'assignatura numero n, 1 si hi ha alguna igual, 0 si no.
  39. int comprar_dnis(tdni dni1, tdni dni2); //dni1 va variant, dni2 ha de ser constant
  40. int comprar_nomass(tasign ass1, tasign ass2); //ass1 va variant, ass2 ha de ser constant
  41.  
  42. int main(){
  43.     tlista_exp list_exp;
  44.     tdni daux;
  45.     list_exp.num_exp = 0;
  46.     int op, i, q;
  47.     do{
  48.         printf("1-Introducir los datos de los expedientes\n");
  49.         printf("2-Mostrar todos los datos de los expedientes\n");
  50.         printf("3-Listar todos los alumnos (nombre, DNI y fecha de ingreso)\n");
  51.         printf("4-Anyadir o modificar el expediente de un alumno\n");
  52.         printf("5-Eliminar el expediente de un alumno a partir de su DNI\n");
  53.         printf("6-Mostrar los datos (Nombre, DNI y fecha de Ingreso) de los alumnos que mas tiempo llevan en la escuela\n");
  54.         printf("7-Mostrar el expediente de un alumno a partir de su DNI\n");
  55.         printf("8-Calcular la nota media del expediente de un alumno a partir de su DNI\n");
  56.         printf("9-Anyadir o modificar una asignatura al expediente de un alumno a partir de su DNI\n");
  57.         printf("10-Mostrar los alumnos ordenados por nota media de expediente\n");
  58.         printf("11-Mostrar los alumnos con nota mayor que una dada en una determinada asignatura\n");
  59.         printf("12-Mostrar el alumno con mayor nota en una asignatura dada\n");
  60.         printf("13-Salir del programa\n\n");
  61.         printf("Opción:");        
  62.         scanf("%d", &op);
  63.         switch(op){
  64.             case 1: list_exp = leer_alumnos();
  65.                     printf("\n");
  66.                     break;
  67.             case 2:
  68.                     break;
  69.             case 3:
  70.                     break;
  71.             case 4: /*printf("Introduce información con el siguiente formato (Nombre_apellidos:DNI:anyo_ingreso): ");
  72.                     list_aux.expedient[0] = leer_alumno();
  73.                     printf("Introduce el numero de asignaturas: ");
  74.                     scanf("%d%*c", &list_aux.expedient[0].numas);
  75.                     for (i = 0; i < list_aux.expedient[0].numas; i++){
  76.                         list_aux.expedient[0].asig[i] = leer_asignatura();
  77.  
  78.  
  79.  
  80.                     if (list_exp.num_exp == 200) printf("No se puede anyadir el alumno porque el vector de expedientes esta lleno\n");
  81.                     */
  82.                     break;
  83.             case 5:
  84.                     break;
  85.             case 6:
  86.                     break;
  87.             case 7: if (list_exp.num_exp != 0) {
  88.                         printf("Introduce DNI del alumno que quieres ver su expediente: ");
  89.                         scanf("%d%c", &daux.num, &daux.lletra);
  90.                         q = 0;                        
  91.                         for (i = 0; i < list_exp.num_exp && q != 1; i++){
  92.                             q = comparar_dnis(list_exp.expedient[i].dni, daux);
  93.                         }
  94.                         if (q == 1) {
  95.                             mostrar_alumno(list_exp.expedient[i-1]);
  96.                         }
  97.                         else printf("No se ha encontrado el alumno\n");
  98.                     }
  99.                     else printf("La lista de expedientes esta vacia\n");
  100.                     printf("\n");                    
  101.                     break;
  102.             case 8:
  103.                     break;
  104.             case 9:
  105.                     break;
  106.             case 10:
  107.                      break;
  108.             case 11:
  109.                      break;
  110.             case 12:
  111.                      break;
  112.             case 13: break;
  113.             default: printf("Opción Incorrecta\n");
  114.         }    
  115.     } while(op != 13);
  116. }
  117.  
  118. texpedient leer_alumno(){
  119.     texpedient exp;
  120.     int i = 0;    
  121.     char caux;    
  122.     do {
  123.         scanf("%c", &caux);
  124.         exp.nom[i] = caux;
  125.         i++;
  126.     } while(caux != ':' && i < 20); //NOM
  127.     scanf("%d", &exp.dni.num); //DNI NUM
  128.     scanf("%c:", &exp.dni.lletra); //DNI LLETRA
  129.     scanf("%d%*c", &exp.any); //ANY INGRES
  130.     return exp;
  131. }
  132.  
  133. tlista_exp leer_alumnos(){
  134.     tlista_exp lexp;
  135.     int i, j, q;    
  136.     printf("Introduce el numero de alumnos que quieres cargar: ");
  137.     scanf("%d%*c", &lexp.num_exp);
  138.     for (i = 0; i < lexp.num_exp; i++){
  139.         printf("ALUMNO %d\n", i+1);
  140.         printf("Introduce información con el siguiente formato (Nombre_apellidos:DNI:anyo_ingreso): ");
  141.         lexp.expedient[i] = leer_alumno();
  142.         q = 0;
  143.         for (j = 0; j < i && q != 1; j++){
  144.             q = comparar_dnis(lexp.expedient[j].dni, lexp.expedient[i].dni);        
  145.         }
  146.         if (q == 1) {
  147.             printf("Este alumno ya existe. Vuelve a introducir los datos del alumno\n");
  148.             i--;
  149.         }
  150.         else lexp.expedient[i] = leer_asignaturas(lexp.expedient[i]);
  151.     }
  152.     return lexp;
  153. }
  154.  
  155. tasign leer_asignatura(){
  156.     tasign as;
  157.     char caux;
  158.     int i = 0;
  159.     do {
  160.         scanf("%c", &caux);
  161.         as.nomas[i] = caux;
  162.         i++;
  163.     } while(caux != ':' && i < 20); //NOM ASSIGNATURA
  164.     scanf("%f:", &as.numcred); // NUM CREDITS ASSIGNATURA
  165.     scanf("%f%*c", &as.nota); //NOTA ASIGNATURA
  166.     return as;
  167. }
  168.  
  169. texpedient leer_asignaturas(texpedient exp){
  170.     int j, n;    
  171.     printf("Introduce el numero de asignaturas: ");
  172.     scanf("%d%*c", &exp.numas);
  173.  
  174.     for (j = 0; j < exp.numas; j++){
  175.         printf("Introduce ASIGNATURA %d con el siguiente formato (nombre_asginatura:creditos:calificacion: ", j+1);
  176.         exp.asig[j] = leer_asignatura();
  177.         n = 0;
  178.                            
  179.         if (j > 0){ //Perque no compari la primera asignatura que posem.
  180.             n = comparar_nomas(exp, j);
  181.         }
  182.         if (n == 1) {
  183.             printf("Esta asignatura ya existe. Vuelve a introducir los datos de la asignatura\n");
  184.             j--;
  185.         }
  186.     }
  187.     return exp;
  188. }
  189.  
  190. int comparar_nomas(texpedient exp, int n){
  191.     int j, i, aux;
  192.     for (j = 0; j < n; j++){
  193.         aux = 0;
  194.         for (i = 0; i < 20 && exp.asig[n].nomas[i] != ':'; i++){          
  195.             if (exp.asig[j].nomas[i] == exp.asig[n].nomas[i]) aux++;
  196.         }
  197.         if (aux == i) return 1;
  198.     }
  199.     return 0;
  200. }
  201.  
  202. int comparar_dnis(tdni dni1, tdni dni2) { //dni1 va variant, dni2 ha de ser constant
  203.     int i;
  204.     if (dni1.num == dni2.num && dni1.lletra == dni2.lletra) return 1;
  205.     return 0;
  206. }
  207.  
  208. int comprar_nomass(tasign ass1, tasign ass2); //ass1 va variant, ass2 ha de ser constan
  209.  
  210. void mostrar_alumno(texpedient exp){
  211.     int i;
  212.     for (i = 0; i < max_chars+1 && exp.nom[i] != ':'; i++){
  213.         printf("%c", exp.nom[i]);
  214.     }
  215.     printf(":");
  216.     printf("%d%c:", exp.dni.num, exp.dni.lletra);
  217.     printf("%d\n", exp.any);
  218. }
  219.  
  220. void mostrar_asignaturas(tasign asig);
  221.  
  222. void mostrar_lista_alumnos(tlista_exp lista);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement