SHARE
TWEET

Untitled

a guest Jul 17th, 2017 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. //OPZIONI MENU
  8. #define ESCI 0
  9. #define INSERISCI_DOCENTE 1
  10. #define INSERISCI_CORSO 2
  11. #define ASSEGNAZIONE 3
  12. #define CARICO_DIDATTICO 4
  13. #define SCHEDA_DOCENTE 5
  14.  
  15. //OPZIONI PER ARRAY
  16. #define MAX_STRING 30
  17. #define MAX_DOCENTI 30
  18. #define MAX_CORSI 30
  19. #define MAX_CFU 30
  20.  
  21. //CONTROLLO DELLE OPERAZIONI
  22. #define OPERAZIONE_RIUSCITA 1
  23. #define OPERAZIONE_FALLITA -1
  24.  
  25.  
  26. //STRUTTURE DEI DATI
  27. typedef struct {
  28.     int code;
  29.     char titolo[MAX_STRING];
  30.     int cfu;
  31.     char corso[MAX_STRING];
  32. } corso;
  33.  
  34. typedef struct {
  35.     int num_corsi;
  36.     corso corsi[MAX_CORSI];
  37. } archivio_corsi;
  38.  
  39. typedef struct {
  40.     char code_fisc[MAX_STRING];
  41.     char nome[MAX_STRING];
  42.     char cognome[MAX_STRING];
  43.     int num_cfu;
  44.     archivio_corsi corsi;
  45. } docente;
  46.  
  47. typedef struct {
  48.     int num_docenti;
  49.     docente docenti[MAX_DOCENTI];
  50. } archivio_docenti;
  51.  
  52.  
  53. //FUNZIONI PER DOCENTE
  54. docente leggi_docente() {
  55.     docente nuovo_docente;
  56.     printf("Inserisci codice fiscale del docente: ");
  57.     scanf("%s", nuovo_docente.code_fisc);
  58.     printf("Inserisci nome del docente: ");
  59.     scanf("%s", nuovo_docente.nome);
  60.     printf("Inserisci cognome del docente: ");
  61.     scanf("%s", nuovo_docente.cognome);
  62.     nuovo_docente.num_cfu = 0;
  63.     nuovo_docente.corsi.num_corsi = 0;
  64.     return nuovo_docente;
  65. }
  66.  
  67. int inserisci_docente(archivio_docenti *docenti, docente nuovo_docente) {
  68.     for (int i = 0; i < docenti->num_docenti; i++) {
  69.         if (strcmp(docenti->docenti[i].code_fisc, nuovo_docente.code_fisc) == 0) {
  70.             printf("Codice fiscale gia' esistente!!\n\n");
  71.             return OPERAZIONE_FALLITA;
  72.         }
  73.     }
  74.     if (docenti->num_docenti >= MAX_DOCENTI) {
  75.         printf("Archivio pieno!!\n\n");
  76.         return OPERAZIONE_FALLITA;
  77.     } else {
  78.         docenti->docenti[docenti->num_docenti] = nuovo_docente;
  79.         docenti->num_docenti++;
  80.         return OPERAZIONE_RIUSCITA;
  81.     }
  82. }
  83.  
  84. int ricerca_docente(archivio_docenti docenti) {
  85.     int index = 0;
  86.     char code_fisc[MAX_STRING];
  87.     printf("Inserire il codice fiscale del docente da cercare: ");
  88.     scanf("%s", code_fisc);
  89.     do {
  90.  
  91.         if (strcmp(docenti.docenti[index].code_fisc, code_fisc) == 0) {
  92.             return index;
  93.         } else {
  94.             index++;
  95.         }
  96.  
  97.     } while (index < docenti.num_docenti);
  98.  
  99.     return OPERAZIONE_FALLITA;
  100. }
  101.  
  102.  
  103. //FUNZIONE PER CORSO
  104. corso leggi_corso() {
  105.     corso nuovo_corso;
  106.     printf("Inserisci codice del corso: ");
  107.     scanf("%d", &nuovo_corso.code);
  108.     printf("Inserisci titolo del corso: ");
  109.     scanf("%s", nuovo_corso.titolo);
  110.     printf("Inserisci CFU del corso: ");
  111.     scanf("%d", &nuovo_corso.cfu);
  112.     printf("Inserisci corso di Laurea del corso: ");
  113.     scanf("%s", nuovo_corso.corso);
  114.     return nuovo_corso;
  115. }
  116.  
  117.  
  118. int inserisci_corso(archivio_corsi *corsi, corso nuovo_corso) {
  119.     for (int i = 0; i < corsi->num_corsi; i++) {
  120.         if (corsi->corsi[i].code == nuovo_corso.code) {
  121.             printf("Codice corso gia' esistente!!\n\n");
  122.             return OPERAZIONE_FALLITA;
  123.         }
  124.     }
  125.     if (corsi->num_corsi >= MAX_CORSI) {
  126.         printf("Archivio pieno!!\n\n");
  127.         return OPERAZIONE_FALLITA;
  128.     } else {
  129.         corsi->corsi[corsi->num_corsi] = nuovo_corso;
  130.         corsi->num_corsi++;
  131.         return OPERAZIONE_RIUSCITA;
  132.     }
  133. }
  134.  
  135.  
  136. int ricerca_corso(archivio_corsi corsi) {
  137.     int index = 0, code;
  138.     printf("Inserire il codice del corso da cercare: ");
  139.     scanf("%d", &code);
  140.     do {
  141.  
  142.         if (corsi.corsi[index].code == code) {
  143.             return index;
  144.         } else {
  145.             index++;
  146.         }
  147.  
  148.     } while (index < corsi.num_corsi);
  149.  
  150.     return OPERAZIONE_FALLITA;
  151. }
  152.  
  153.  
  154. //FUNZIONE PER ASSEGNARE UN CORSO AD UN DOCENTE
  155. int assegnazione_docente_corso(archivio_docenti *docenti, archivio_corsi *corsi, int index_docente, int index_corso) {
  156.  
  157.     int scelta;
  158.  
  159.     if ((docenti->docenti[index_docente].num_cfu) + (corsi->corsi[index_corso].cfu) > MAX_CFU) {
  160.         printf("Troppi corsi assegnati al docente!!\n\n");
  161.         return OPERAZIONE_FALLITA;
  162.     } else {
  163.         printf("Vuoi assegnare a -%s- il corso -%s-?\n SI->1  NO->2 SCELTA: ", docenti->docenti[index_docente].cognome, corsi->corsi[index_corso].titolo);
  164.         scanf("%d", scelta);
  165.         if (scelta == OPERAZIONE_RIUSCITA) {
  166.             docenti->docenti[index_docente].corsi.corsi[docenti->docenti[index_docente].corsi.num_corsi] = corsi->corsi[index_corso];
  167.             docenti->docenti[index_docente].num_cfu = docenti->docenti[index_docente].num_cfu + corsi->corsi[index_corso].cfu;
  168.             docenti->docenti[index_docente].corsi.num_corsi++;
  169.             return OPERAZIONE_RIUSCITA;
  170.         } else {
  171.             return OPERAZIONE_FALLITA;
  172.         }
  173.     }
  174. }
  175.  
  176.  
  177. //FUNZIONE PER STAMPARE IL CARICO DOCENTI
  178. void stampa_carico(archivio_docenti docenti) {
  179.     for (int i = 0; i < docenti.num_docenti; i++) {
  180.         printf("----Docente n.%d---\n", i + 1);
  181.         printf("Cognome: %s\n", docenti.docenti[i].cognome);
  182.         printf("Nome: %s\n", docenti.docenti[i].nome);
  183.         printf("Carico didattico: %d\n", docenti.docenti[i].num_cfu);
  184.         printf("-------------------\n\n");
  185.     }
  186. }
  187.  
  188.  
  189. //FUZIONE PER STAMPARE LA SCHEDA DI UN DOCENTE
  190. void stampa_docente(archivio_docenti docenti, int index) {
  191.     printf("---- %s %s ----\n", docenti.docenti[index].cognome, docenti.docenti[index].nome);
  192.     printf("Codice Fiscale: %s\n", docenti.docenti[index].code_fisc);
  193.     printf("Carico didattico: %d\n", docenti.docenti[index].num_cfu);
  194.     printf("Numero corsi assegnati: %d\n", docenti.docenti[index].corsi.num_corsi);
  195.     for (int i = 0; i < docenti.docenti[index].corsi.num_corsi; i++) {
  196.         printf("%d. %s;\n\n", i + 1, docenti.docenti[index].corsi.corsi[i].titolo);
  197.     }
  198. }
  199.  
  200. //AZZERAMENTO ARCHIVI
  201. void init_num_docenti(archivio_docenti *docenti) {
  202.     docenti->num_docenti = 0;
  203. }
  204.  
  205. void init_num_corsi(archivio_corsi *corsi) {
  206.     corsi->num_corsi = 0;
  207. }
  208.  
  209.  
  210.  
  211. int main(int argc, char** argv) {
  212.  
  213.     //DICHIARAZIONE DELLE VARIABILI
  214.     int menu, esito, index_docente, index_corso;
  215.  
  216.  
  217.     docente nuovo_docente;
  218.     corso nuovo_corso;
  219.  
  220.     archivio_docenti docenti;
  221.     archivio_corsi corsi;
  222.  
  223.     //AZZERAMENTO ARCHIVI
  224.     init_num_docenti(&docenti);
  225.     init_num_corsi(&corsi);
  226.  
  227.     do {
  228.         system("clear");
  229.  
  230.         printf("----------------------------------MENU'------------------------------------\n\n"
  231.                 "Cosa vuoi fare?\n"
  232.                 "1. Inserisci docente.\n"
  233.                 "2. Inserisci corso.\n"
  234.                 "3. Assegnare corso ad un docente.\n"
  235.                 "4. Carico didattico docenti.\n"
  236.                 "5. Scheda docente.\n"
  237.                 "0. Esci.\n\n"
  238.                 "---------------------------------------------------------------------------\n\n"
  239.                 "Scelta: ");
  240.         scanf("%d", &menu);
  241.  
  242.         switch (menu) {
  243.  
  244.             case INSERISCI_DOCENTE:
  245.                 system("clear");
  246.                 nuovo_docente = leggi_docente();
  247.                 esito = inserisci_docente(&docenti, nuovo_docente);
  248.                 if (esito == OPERAZIONE_RIUSCITA) {
  249.                     printf("\nDocente inserito nell'archivio con successo!!\n\n");
  250.                 } else {
  251.                     printf("\nOperazione annullata!!\n\n");
  252.                 }
  253.                 system("read -n 1 -s -p \"Premi un tasto per continuare...\"");
  254.                 break;
  255.  
  256.             case INSERISCI_CORSO:
  257.                 system("clear");
  258.                 nuovo_corso = leggi_corso();
  259.                 esito = inserisci_corso(&corsi, nuovo_corso);
  260.                 if (esito == OPERAZIONE_RIUSCITA) {
  261.                     printf("\nCorso inserito nell'archivio con successo!!\n\n");
  262.                 } else {
  263.                     printf("\nOperazione annullata!!\n\n");
  264.                 }
  265.                 system("read -n 1 -s -p \"Premi un tasto per continuare...\"");
  266.                 break;
  267.  
  268.             case ASSEGNAZIONE:
  269.                 //system("clear");
  270.                 index_docente = ricerca_docente(docenti);
  271.                 index_corso = ricerca_corso(corsi);
  272.                 if ((index_docente == OPERAZIONE_FALLITA)&&(index_corso == OPERAZIONE_FALLITA)) {
  273.                     printf("Docente o corso oppure entrambi inesistenti!!\n\n");
  274.                 } else {
  275.                     esito = assegnazione_docente_corso(&docenti, &corsi, index_docente, index_corso);
  276.                     if (esito == OPERAZIONE_FALLITA) {
  277.                         printf("\nOperazione annullata!!\n\n");
  278.                     } else {
  279.                         printf("\nAssegnazione riuscita con successo!!\n\n");
  280.                     }
  281.                 }
  282.  
  283.                 system("read -n 1 -s -p \"Premi un tasto per continuare...\"");
  284.                 break;
  285.  
  286.             case CARICO_DIDATTICO:
  287.                 system("clear");
  288.                 stampa_carico(docenti);
  289.                 system("read -n 1 -s -p \"Premi un tasto per continuare...\"");
  290.                 break;
  291.  
  292.             case SCHEDA_DOCENTE:
  293.                 system("clear");
  294.                 index_docente = ricerca_docente(docenti);
  295.                 stampa_docente(docenti, index_docente);
  296.                 system("read -n 1 -s -p \"Premi un tasto per continuare...\"");
  297.                 break;
  298.  
  299.             case ESCI:
  300.                 system("clear");
  301.                 break;
  302.  
  303.             default: printf("Scelta errata!!\n\n");
  304.         }
  305.  
  306.     } while (menu != 0);
  307.  
  308.     return (EXIT_SUCCESS);
  309. }
RAW Paste Data
Top