Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.98 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 comparar_dnis(tdni dni1, tdni dni2); //dni1 va variant, dni2 ha de ser constant
  40. int comparar_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, j, 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: if (list_exp.num_exp != 0) {
  68.                         for (i = 0; i < list_exp.num_exp; i++) {
  69.                             mostrar_alumno(list_exp.expedient[i]);
  70.                             printf("%d\n", list_exp.expedient[i].numas);
  71.                             for (j = 0; j < list_exp.expedient[i].numas; j++){
  72.                                 mostrar_asignaturas(list_exp.expedient[i].asig[j]);
  73.                             }
  74.                             printf("\n");
  75.                         }      
  76.                     }
  77.                     else printf("La lista de expedientes esta vacia\n");
  78.                     printf("\n");                  
  79.                     break;
  80.             case 3: if (list_exp.num_exp != 0) {
  81.                         for (i = 0; i < list_exp.num_exp; i++) mostrar_alumno(list_exp.expedient[i]);
  82.                     }
  83.                     else printf("La lista de expedientes esta vacia\n");
  84.                     printf("\n");
  85.                     break;
  86.             case 4:
  87.                     break;
  88.             case 5:
  89.                     break;
  90.             case 6:
  91.                     break;
  92.             case 7: if (list_exp.num_exp != 0) {
  93.                         printf("Introduce DNI del alumno que quieres ver su expediente: ");
  94.                         scanf("%d%c", &daux.num, &daux.lletra);
  95.                         q = 0;                        
  96.                         for (i = 0; i < list_exp.num_exp && q != 1; i++){
  97.                             q = comparar_dnis(list_exp.expedient[i].dni, daux);
  98.                         }
  99.                         if (q == 1) {
  100.                             mostrar_alumno(list_exp.expedient[i-1]);
  101.                             printf("%d\n", list_exp.expedient[i-1].numas);
  102.                             for (j = 0; j < list_exp.expedient[i-1].numas; j++){
  103.                                 mostrar_asignaturas(list_exp.expedient[i-1].asig[j]);
  104.                             }
  105.                         }
  106.                         else printf("No se ha encontrado el alumno\n");
  107.                     }
  108.                     else printf("La lista de expedientes esta vacia\n");
  109.                     printf("\n");                    
  110.                     break;
  111.             case 8:
  112.                     break;
  113.             case 9:
  114.                     break;
  115.             case 10:
  116.                      break;
  117.             case 11:
  118.                      break;
  119.             case 12:
  120.                      break;
  121.             case 13: break;
  122.             default: printf("Opción Incorrecta\n");
  123.         }    
  124.     } while(op != 13);
  125. }
  126.  
  127. texpedient leer_alumno(){
  128.     texpedient exp;
  129.     int i = 0;    
  130.     char caux;    
  131.     do {
  132.         scanf("%c", &caux);
  133.         exp.nom[i] = caux;
  134.         i++;
  135.     } while(caux != ':' && i < 20); //NOM
  136.     scanf("%d", &exp.dni.num); //DNI NUM
  137.     scanf("%c:", &exp.dni.lletra); //DNI LLETRA
  138.     scanf("%d%*c", &exp.any); //ANY INGRES
  139.     return exp;
  140. }
  141.  
  142. tlista_exp leer_alumnos(){
  143.     tlista_exp lexp;
  144.     int i, j, q;    
  145.     printf("Introduce el numero de alumnos que quieres cargar: ");
  146.     scanf("%d%*c", &lexp.num_exp);
  147.     for (i = 0; i < lexp.num_exp; i++){
  148.         printf("ALUMNO %d\n", i+1);
  149.         printf("Introduce información con el siguiente formato (Nombre_apellidos:DNI:anyo_ingreso): ");
  150.         lexp.expedient[i] = leer_alumno();
  151.         q = 0;
  152.         for (j = 0; j < i && q != 1; j++){
  153.             q = comparar_dnis(lexp.expedient[j].dni, lexp.expedient[i].dni);        
  154.         }
  155.         if (q == 1) {
  156.             printf("Este alumno ya existe. Vuelve a introducir los datos del alumno\n");
  157.             i--;
  158.         }
  159.         else lexp.expedient[i] = leer_asignaturas(lexp.expedient[i]);
  160.     }
  161.     return lexp;
  162. }
  163.  
  164. tasign leer_asignatura(){
  165.     tasign as;
  166.     char caux;
  167.     int i = 0;
  168.     do {
  169.         scanf("%c", &caux);
  170.         as.nomas[i] = caux;
  171.         i++;
  172.     } while(caux != ':' && i < 20); //NOM ASSIGNATURA
  173.     scanf("%f:", &as.numcred); // NUM CREDITS ASSIGNATURA
  174.     scanf("%f%*c", &as.nota); //NOTA ASIGNATURA
  175.     return as;
  176. }
  177.  
  178. texpedient leer_asignaturas(texpedient exp){
  179.     int j, n;    
  180.     printf("Introduce el numero de asignaturas: ");
  181.     scanf("%d%*c", &exp.numas);
  182.  
  183.     for (j = 0; j < exp.numas; j++){
  184.         printf("Introduce ASIGNATURA %d con el siguiente formato (nombre_asginatura:creditos:calificacion: ", j+1);
  185.         exp.asig[j] = leer_asignatura();
  186.         n = 0;
  187.                            
  188.         if (j > 0){ //Perque no compari la primera asignatura que posem.
  189.             n = comparar_nomas(exp, j);
  190.         }
  191.         if (n == 1) {
  192.             printf("Esta asignatura ya existe. Vuelve a introducir los datos de la asignatura\n");
  193.             j--;
  194.         }
  195.     }
  196.     return exp;
  197. }
  198.  
  199. int comparar_nomas(texpedient exp, int n){
  200.     int j, i, aux;
  201.     for (j = 0; j < n; j++){
  202.         aux = 0;
  203.         for (i = 0; i < 20 && exp.asig[n].nomas[i] != ':'; i++){          
  204.             if (exp.asig[j].nomas[i] == exp.asig[n].nomas[i]) aux++;
  205.         }
  206.         if (aux == i) return 1;
  207.     }
  208.     return 0;
  209. }
  210.  
  211. int comparar_dnis(tdni dni1, tdni dni2) { //dni1 va variant, dni2 ha de ser constant
  212.     int i;
  213.     if (dni1.num == dni2.num && dni1.lletra == dni2.lletra) return 1;
  214.     return 0;
  215. }
  216.  
  217. int comparar_nomass(tasign ass1, tasign ass2); //ass1 va variant, ass2 ha de ser constan
  218.  
  219. void mostrar_alumno(texpedient exp){
  220.     int i;
  221.     for (i = 0; i < max_chars+1 && exp.nom[i] != ':'; i++){
  222.         printf("%c", exp.nom[i]);
  223.     }
  224.     printf(":");
  225.     printf("%d%c:", exp.dni.num, exp.dni.lletra);
  226.     printf("%d\n", exp.any);
  227. }
  228.  
  229. void mostrar_asignaturas(tasign asig);
  230.  
  231. void mostrar_lista_alumnos(tlista_exp lista);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement