Advertisement
APalese

Grocery store algoritm

May 21st, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.15 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <stdbool.h>
  5. #include <string.h>
  6.  
  7. typedef struct {
  8.     char nome[20];
  9.     int quantità;
  10.     char u_m[12];
  11. }element;
  12.  
  13. typedef struct list_element {
  14.     element spesa;
  15.     struct list_element *next;
  16. }item;
  17.  
  18. typedef item* list;
  19.  
  20. bool IsNameEqual(element e1, element e2)
  21. {
  22.     if (strcmp(e1.nome, e2.nome) ==0)
  23.         return 1;
  24.     else
  25.         return 0;
  26. }
  27.  
  28. element copy(element e)
  29. {
  30.     element el;
  31.     el = e;
  32.     return el;
  33. }
  34.  
  35. list emptylist()
  36. {
  37.     return NULL;
  38. }
  39.  
  40. bool empty(list l)
  41. {
  42.     if (l == NULL)
  43.         return 1;
  44.     else
  45.         return 0;
  46. }
  47.  
  48. element head(list l)
  49. {
  50.     if (empty(l))
  51.         abort();
  52.     else
  53.         return l->spesa;
  54. }
  55.  
  56. list tail(list l)
  57. {
  58.     if (empty(l))
  59.         abort();
  60.     else
  61.         l = l->next;
  62.     return l;
  63. }
  64.  
  65. list cons(element e, list l)
  66. {
  67.     list t;
  68.     t = malloc(sizeof(item));
  69.     t->spesa = e;
  70.     t->next = l;
  71.     return t;
  72. }
  73.  
  74. bool yet (list l,element e)
  75. {
  76.     while (!empty(l)) {
  77.         if (IsNameEqual(head(l), e))
  78.             return true;
  79.         l = tail(l);
  80.     }
  81.     return false;
  82. }
  83.  
  84. void print_Higher_quantity(list l, int quantità)
  85. {
  86.     int n = 0;
  87.     element el;
  88.     while (!empty(l)) {
  89.         el = head(l);
  90.         if (el.quantità > quantità) {
  91.             ++n;
  92.             printf("\n Elemento con quantità strettamente maggiore dell' input : %s ;", el.nome);
  93.         }
  94.         l = tail(l);
  95.     }
  96.     if (n == 0)
  97.         printf("\n NESSUN ELEMENTO HA UNA QUANTITA' STRETTAMENTE MAGGIORE DELL' INMPUT");
  98. }
  99.  
  100. char *get_u_m(list l, char *nome)
  101. {
  102.     element el;
  103.     while (!empty(l)) {
  104.         el = head(l);
  105.         if (strcmp(nome, el.nome) == 0)
  106.             break;
  107.         l = tail(l);
  108.     }
  109.     return el.u_m;
  110. }
  111.  
  112. int get_quantità(list l, char *nome)
  113. {
  114.     element el;
  115.     while (!empty(l)) {
  116.         el = head(l);      
  117.         if (strcmp(nome, el.nome) == 0)
  118.             break;
  119.         l = tail(l);
  120.     }
  121.     return el.quantità;
  122. }
  123.  
  124. list tail_insert(list l, element e)
  125. {
  126.     list root = l;
  127.     while (l->next != NULL) {
  128.         l = tail(l);
  129.     }
  130.     list t = emptylist();
  131.     t = cons(e, t);
  132.     l->next = t;
  133.     return root;
  134. }
  135.  
  136. void showlist(list l)
  137. {
  138.     element el;
  139.     while (!empty(l)) {
  140.         el = head(l);
  141.         printf("\n Nome : %s ;\t", el.nome);
  142.         printf("Quantità : %d ;\t", el.quantità);
  143.         printf("U.M : %s ;\t", el.u_m);
  144.         l = tail(l);
  145.     }
  146.     printf("\n");
  147. }
  148.  
  149. void main()
  150. {
  151.     char u_m[12];
  152.     char nome[20];
  153.     element e;
  154.     list l = emptylist();
  155.    
  156.     int menù;
  157.     printf("\t\t\t\t\t\t\t\t LISTA DELLA SPESA\n");
  158.     do {
  159.         printf("\t\t\t\t\t\t\tINSERIRE COMANDO PER ESEGUIRE AZIONE\n\n ");
  160.         printf("0.Esci dal programma.Fine.\n");
  161.         printf("1.Inserisci un elemento da acquistare\n");
  162.         printf("2.Inserisci elemento da acquistare in coda\n");
  163.         printf("3.Fornisci la quantità e l'unità di misura, dato il nome dell' elemento da acquistare\n");
  164.         printf("4.Stampa tutti gli elementi da acquistare\n");
  165.         printf("5.Data una quantità, stampa gli elementi da acquistare che hanno una quantità strettamente maggiore\n");
  166.         scanf("%d", &menù);
  167.  
  168.  
  169.         switch (menù){
  170.  
  171.         case 0:
  172.             printf("\n\n USCITA DAL PROGRAMMA IN CORSO...");
  173.             break;
  174.  
  175.         case 1:
  176.             printf("\n inserisci nome elemento : ");
  177.             scanf("%s", &e.nome);
  178.             printf("\n inserisci quantità : ");
  179.             scanf("%d", &e.quantità);
  180.             printf("\n inserisci unità di misura : ");
  181.             scanf("%s", &e.u_m);
  182.             if (yet(l, e))
  183.                 printf("\nErrore elemento già presente...");
  184.             else
  185.             l = cons(e, l);
  186.             break;
  187.            
  188.         case 2:
  189.             printf("\n inserisci nome elemento : ");
  190.             scanf("%s", &e.nome);
  191.             printf("\n inserisci quantità : ");
  192.             scanf("%d", &e.quantità);
  193.             printf("\n inserisci unità di misura : ");
  194.             scanf("%s", &e.u_m);
  195.             if (yet(l, e))
  196.                 printf("\nErrore elemento già presente...");
  197.             else
  198.             l = tail_insert(l, e);
  199.             break;
  200.  
  201.         case 3:
  202.            
  203.             printf("\n inserisci nome elemento : ");
  204.             scanf("%s", nome);
  205.             int quantità = get_quantità(l, nome);
  206.             strcpy(u_m, get_u_m(l, nome));
  207.             printf("\nquantità : %d", quantità);
  208.             printf("\nunità di misura : %s ", u_m);
  209.             break;
  210.  
  211.         case 4:
  212.             showlist(l);
  213.             break;
  214.                    
  215.         case 5:
  216.             printf("digitare la quantità : ");
  217.             scanf("%d", &quantità);
  218.             print_Higher_quantity(l, quantità);
  219.             break; 
  220.  
  221.         default:
  222.             printf("inserimento errato...riprovare ");
  223.         }      
  224.     } while (menù != 0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement