Advertisement
BiRabittoh

Pesc a pesc

Apr 23rd, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.26 KB | None | 0 0
  1. /*Un supermercato vuole implementare un sistema per la  gestione  della  coda  al  banco pesce.
  2. Il banco del pesce utilizza una coda per memorizzare l’ordine di arrivo dei clienti e una lista
  3. per memorizzare le vendite effettuate.
  4. La coda contiene solamente l’identificativo del cliente costituito da una stringa di 5 caratteri
  5. che permette di selezionare il prossimo cliente.
  6. Ogni volta che un elemento viene estratto dalla coda viene inserito nella lista degli acquisti
  7. effettuate. In tale lista saranno inserite le seguenti informazioni:
  8. · Codice del cliente(5 caratteri)
  9. · Codice dell’articolo acquistato(10 caratteri)
  10. · Numero di pezzi acquistati
  11. · Costo unitario(in euro)
  12. Funzioni da implementare:
  13. 1. Definizione della struttura dati coda di clienti e lista di acquisti
  14. 2. Menu testuale
  15. 3. Stampa della lista di acquisti
  16. 4. Inserimento di un nuovo cliente in coda
  17. 5. Estrazione del primo cliente dalla coda e inserimento della lista degli acquisti (il Codice
  18. dell’articolo acquistato, il Numero di pezzi acquistati e il costo unitario sono forniti da
  19. tastiera
  20. 6. Calcolo del totale degli acquisti
  21. 7. Calcolo dell’acquisto di importo maggiore
  22. 8. Salvataggio dell’intera lista degli acquisti in un file testo
  23. */
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27.  
  28. ///////////
  29. //TYPEDEF//
  30. ///////////
  31. typedef struct s1 {
  32.     char cod_cliente[6];
  33.     struct s1 * next;
  34. } NodoCoda, *Coda;
  35.  
  36. typedef struct s2 {
  37.     char cod_cliente[6];
  38.     char cod_articolo[11];
  39.     int npezzi;
  40.     float costo;
  41. } InfoAcquisto;
  42.  
  43. typedef struct s3 {
  44.     InfoAcquisto info;
  45.     struct s3 * next;
  46. } NodoLista, *Lista;
  47.  
  48. ////////////
  49. //FUNZIONI//
  50. ////////////
  51. void stampaAcquisti(Lista lis){
  52.     puts("Cliente Articolo N.Pezzi Costo\n__________________________________________");
  53.     while (lis != NULL) {
  54.         printf("\n%s %s %d %f\n__________________________________________", lis->info.cod_cliente, lis->info.cod_articolo, lis->info.npezzi, lis->info.costo);
  55.         lis = lis->next;
  56.     }
  57. }
  58. int inserisciInCoda(Coda * cod, char codice[]){
  59.     Coda aux = *cod;
  60.  
  61.     if (aux == NULL){
  62.         aux = (Coda)malloc(sizeof(NodoCoda));
  63.         if (aux == NULL) {
  64.             puts("Errore nell'allocazione di memoria.");
  65.             exit(0);
  66.         }
  67.         strcpy(aux->cod_cliente, codice);
  68.         aux->next = NULL;
  69.         *cod = aux;
  70.     } else {
  71.         while (aux->next != NULL) {
  72.             aux = aux->next;
  73.         }
  74.         aux->next = (Coda)malloc(sizeof(NodoCoda));
  75.         if (aux->next == NULL) {
  76.             puts("Errore nell'allocazione di memoria.");
  77.             exit(0);
  78.         }
  79.         aux = aux->next;
  80.     }
  81.     strcpy(aux->cod_cliente, codice);
  82.     aux->next = NULL;
  83. }
  84. void stampaCoda(Coda cod){
  85.     int i = 0;
  86.     puts("Ecco la coda:");
  87.     while (cod != NULL){
  88.         i++;
  89.         printf("%d. %s\n", i, cod->cod_cliente);
  90.         cod = cod->next;
  91.     }
  92.     puts("");
  93. }
  94. int completaAcquisto(Coda * cod, Lista * lis){
  95.     if ((*cod) == NULL) {
  96.         printf("Il tuo pesce fa schifo, infatti non c'e' nessuno in coda. Considera il suicidio.\n");
  97.         return 0;
  98.     }
  99.     InfoAcquisto temp;
  100.     printf("\nTurno di %s. Inserisci in ordine <codice_articolo>, <n.pezzi> e <costo>.\n", (*cod)->cod_cliente);
  101.     scanf("%s %d %f", temp.cod_articolo, &temp.npezzi, &temp.costo);
  102.     strcpy(temp.cod_cliente, (*cod)->cod_cliente);
  103.     Coda aux = *cod;
  104.     *cod = (*cod)->next;
  105.     free(aux);
  106.  
  107.     //Aggiungo un nodo in testa alla lista acquisti
  108.     Lista aux2 = NULL;
  109.     aux2 = (Lista)malloc(sizeof(NodoLista));
  110.     if (aux2 == NULL) {
  111.         puts("Errore nell'allocazione di memoria.");
  112.         exit(0);
  113.     }
  114.     aux2->info = temp;
  115.     aux2->next = *lis;
  116.     *lis = aux2;
  117.     puts("Fatto!\n");
  118.     return 1;
  119. }
  120. float calcolaTotale(Lista lis){
  121.     float x = 0;
  122.     while (lis != NULL) {
  123.         x = (float)x + (lis->info.npezzi * lis->info.costo);
  124.         lis = lis->next;
  125.     }
  126.     return x;
  127. }
  128. InfoAcquisto calcolaMaggiore(Lista lis){
  129.     float curr = 0;
  130.     InfoAcquisto eccolo;
  131.     eccolo.costo = 0;
  132.     while (lis != NULL) {
  133.         curr = (float)lis->info.npezzi * lis->info.costo;
  134.         if (curr > eccolo.costo){
  135.             eccolo = lis->info;
  136.             lis = lis->next;
  137.         }
  138.     }
  139.     if (eccolo.costo == 0)
  140.         eccolo.costo = -1;
  141.         return eccolo;
  142. }
  143. void salvaAcquisti(Lista lis, FILE *fp){
  144.     fprintf(fp, "Cliente Articolo N.Pezzi Costo\n__________________________________________");
  145.     while (lis != NULL) {
  146.         fprintf(fp, "\n%s %s %d %f\n__________________________________________", lis->info.cod_cliente, lis->info.cod_articolo, lis->info.npezzi, lis->info.costo);
  147.         lis = lis->next;
  148.     }
  149. }
  150.  
  151. int menu(){
  152.     puts("\n1. Inserisci un cliente in coda");
  153.     puts("2. Completa l'acquisto di un cliente");
  154.     puts("3. Stampa la lista degli acquisti");
  155.     puts("4. Calcola il totale degli acquisti");
  156.     puts("5. Calcola l'acquisto di importo maggiore");
  157.     puts("6. Salva la lista degli acquisti in un file di testo");
  158.     puts("7. Stampa la coda");
  159.     puts("0. Esci dal programma");
  160.     puts("Choose your destiny: ");
  161.     int kek;
  162.     scanf("%d", &kek);
  163.     return kek;
  164. }
  165.  
  166. ////////
  167. //MAIN//
  168. ////////
  169. int main(void){
  170.     //Variabili locali
  171.     char tempstring[11];
  172.     int scelta;
  173.     float totale = 0;
  174.     Coda coda = NULL;
  175.     Lista lista = NULL;
  176.     InfoAcquisto maggiore;
  177.     FILE * fp;
  178.     do {
  179.         scelta = menu();
  180.         switch (scelta){
  181.         case 0: break;
  182.         case 1: //Inserisci un cliente in coda
  183.             puts("Inserire codice cliente:");
  184.             scanf("%s", tempstring);
  185.             inserisciInCoda(&coda, tempstring);
  186.             puts("Fatto!\n");
  187.             break;
  188.         case 2: //Completa l'acquisto di un cliente
  189.             completaAcquisto(&coda, &lista);
  190.             break;
  191.         case 3: //Stampa la lista degli acquisti
  192.             stampaAcquisti(lista);
  193.             break;
  194.         case 4: //Calcola il totale degli acquisti
  195.             totale = calcolaTotale(lista);
  196.             printf("Oggi hai guadagnato ben %f euro.\n", totale);
  197.             break;
  198.         case 5: //Calcola l'acquisto di importo maggiore
  199.             maggiore = calcolaMaggiore(lista);
  200.             if (maggiore.costo == -1)
  201.                 puts("Mi spiace ma sei troppo povero.");
  202.             else
  203.                 printf("\nL'acquisto maggiore l'ha fatto %s, comprando %d unita' di %s a un costo di %f\n", maggiore.cod_cliente, maggiore.npezzi, maggiore.cod_articolo, maggiore.costo);
  204.             break;
  205.         case 6: //Salva la lista degli acquisti in un file di testo
  206.             fp = fopen("output.txt", "w");
  207.             salvaAcquisti(lista, fp);
  208.             fclose(fp);
  209.             puts("Lista salvata nel file output.txt");
  210.             break;
  211.         case 7: //Stampa la coda
  212.             stampaCoda(coda);
  213.             break;
  214.         default:
  215.             puts("Si prega di inserire un numero dell'elenco.\n");
  216.         }
  217.     } while (scelta != 0);
  218.     puts("Arrivederci!");
  219.     return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement