Advertisement
Guest User

Untitled

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