Advertisement
Dany1858

Esercizio 8.2 (Lista con array e funzioni)

Nov 15th, 2014
506
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.13 KB | None | 0 0
  1. /*Si scriva un programma in grado di gestire un listino prezzi, ovvero deve
  2. gestire un elenco di prodotti e i loro relativi prezzi in €. Il programma
  3. utilizza una matrice di caratteri chiamata 'warehouse' di dimensione NxM
  4. e un vettore di numeri decimali chiamato 'price' di dimensione N.
  5.  
  6. Nel vettore 'price', il valore -2 indica linea libera, -1 indica che la linea
  7. contiene un prodotto valido a cui non è stato ancora attribuito un prezzo.
  8. All’avvio del programma, il vettore 'price' è totalmente inizializzato a -2.
  9.  
  10. Il programma deve permettere all'utente di invocare tramite menu le
  11. seguenti operazioni per manipolare il listino:
  12.  
  13. a. 'insert_product': è una funzione che permette di includere un nuovo
  14. prodotto nel listino; restituisce il valore 1 se il prodotto non era ancora
  15. presente, 0 se già inserito in precedenza; il prezzo associato al nuovo
  16. prodotto è -1
  17.  
  18. int insert_product(char products[][M], float price[], int n, char new_product[]);
  19.  
  20. b. 'print_all': è una funzione che permette di visualizzare a video il
  21. contenuto del listino. Inoltre, la funzione restituisce 2 valori: il prezzo
  22. medio ed il prezzo massimo
  23.  
  24. void print_all(char products[][M], float price[], int n, float *avg, float *max);
  25.  
  26. c. 'update_product': è una funzione che permette di aggiornare il prezzo
  27. di uno specifico prodotto; restituisce 1 se l’aggiornamento è avvenuto
  28. con successo, 0 se il prodotto non esiste.
  29.  
  30. int update_product(char products[][M], float price[], int n, char product[], int new_price);
  31.  
  32. d. 'remove_product': è una funzione che permette di rimuovere un
  33. prodotto dal listino; restituisce 1 se la rimozione è avvenuto con
  34. successo, 0 se il prodotto non esiste; la funzione deve impostare il
  35. valore -2 nel vettore prezzi in corrispondenza dell’elemento rimosso
  36.  
  37. int remove_product(char products[][M], float price[], int n, char old_product[]);
  38. */
  39.  
  40.         /*Librerie*/
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43. #include <string.h>
  44.  
  45.         /*Define*/
  46. #define N 100
  47. #define M 20
  48.  
  49.         /*Funzioni*/
  50. int insert_product();
  51. void print_all();
  52. int update_product();
  53. int remove_product();
  54.  
  55.         /*Vettori*/
  56.   char warehouse[N][M+1], products[M+1];
  57.   float price[N];
  58.  
  59.         /*Variabili Globali*/
  60. int n=0;
  61. float avg, max=-2;
  62.  
  63.         /*Main*/
  64. int main()
  65. {
  66.   int menu, insert, update, i;
  67.   char risp;
  68.  
  69.              /*Inizializziamo price*/
  70.   for(i=0; i<N; i++) price[i]=-2;  
  71.  
  72.                 /*Menu'*/
  73.   while(menu!=0){
  74.     printf("\n------------- MENU'------------\n");
  75.     printf("\n1. Inserisci prodotto\n\n2. Aggiorna prezzo\n\n3. Rimuovi prodotto\n\n4. Stampa listino\n\n5. Exit\n\n ");
  76.     scanf("%d", &menu);
  77.     getchar();
  78.     switch(menu){
  79.         case 1: {
  80.              risp='s';
  81.              while(risp=='s'){
  82.                  system("cls");
  83.                  printf("Prego inserire nome prodotto\t");
  84.                  scanf("%s", products);
  85.                  insert=insert_product();
  86.                  if(insert==1) printf("\nProdotto aggiunto correttamente\n");
  87.                  else printf("\nProdotto gia' presente\n");
  88.                  printf("\nVuoi inserire un altro prodotto? s o n\t");
  89.                  scanf("%1s", &risp);
  90.                  getchar();}
  91.              break;}
  92.         case 2: {
  93.              risp='s';
  94.              while(risp=='s'){
  95.                  system("cls");
  96.                  update=update_product();
  97.                  if(update==1) printf("\nPrezzo aggiornato correttamente\n");
  98.                  else printf("\nProdotto non presente\n");
  99.                  printf("\nVuoi aggiornare un altro prodotto? s o n\t");
  100.                  scanf("%1s", &risp);
  101.                  getchar();}
  102.              break;}
  103.         case 3: {
  104.              risp='s';
  105.              while(risp=='s'){
  106.                  system("cls");
  107.                  update=remove_product();
  108.                  if(update==1) printf("\nProdotto rimosso correttamente\n");
  109.                  else printf("\nProdotto non presente\n");
  110.                  printf("\nVuoi rimuovere un altro prodotto? s o n\t");
  111.                  scanf("%1s", &risp);
  112.                  getchar();}
  113.              break;}
  114.         case 4: {
  115.              system("cls");
  116.              print_all();
  117.              printf("\nIl prezzo medio dei prodotti in listino e': %.2f, quello massimo e': %.2f", avg, max);
  118.              printf("\n\n\nIn attesa...\t");
  119.              getchar();
  120.              break;}
  121.         case 5: menu=0; break;
  122.         default:{ printf("opzione non ammessa");
  123.         printf("\n\n\nIn attesa...\t");
  124.         getchar();}
  125.     }  
  126.     system("cls");
  127.   }
  128.   return 0;
  129. }
  130.  
  131.         /*Inserisci elementi*/
  132. int insert_product()
  133. {
  134.     int i, j=0, str;
  135.                         /*ricerca se già presente e ferma j sul primo elemento libero*/
  136.     for(i=1; i<=n; i++){
  137.              str=strcmp(warehouse[i], products);
  138.              if(str==0){ return 0;}
  139.              if(price[i]==-2){ if(j==0) j=i;}
  140.     }
  141.     n++;
  142.     strcpy(warehouse[j], products);
  143.     price[j]=-1;
  144.     return 1;
  145. }
  146.  
  147.         /*Funzione stampa*/
  148. void print_all()
  149. {
  150.      int i=0, j=0;
  151.      printf("    Prodotto             Prezzo\n\n");
  152.      for(i=0, j=0; i<n && price[i]>-2; i++){
  153.      printf("   %-20s", warehouse[i]);
  154.      printf("\t%.2f\n", price[i]);
  155.      j=j+price[i];
  156.      avg=j/n;
  157.      if(price[i]>-1)if(max<price[i]) max=price[i];}
  158. }  
  159.  
  160.         /*Inserisci prezzo*/
  161. int update_product()
  162. {
  163.     int i, j;
  164.     char prodagg[M];
  165.     float aggprice;
  166.    
  167.     print_all();
  168.     printf("\nNome prodotto da aggiornare?\t");
  169.     scanf("%s", prodagg);
  170.     getchar();
  171.     for(i=0, j=0; i<n && j==0; i++)
  172.         if(strcmp(warehouse[i], prodagg)==0) j=1;
  173.     if(j==0) return 0;
  174.     else{
  175.     printf("\nNuovo prezzo?\t");
  176.     scanf("%f", &aggprice);
  177.     price[i-1]=aggprice;
  178.     return 1;
  179.     getchar();}
  180. }
  181.  
  182.         /*Rimuovi elemento*/
  183. int remove_product()
  184. {
  185.     int i, j;
  186.     char prodagg[M];
  187.     float aggprice;
  188.    
  189.     print_all();
  190.     printf("\nNome prodotto da rimuovere?\t");
  191.     scanf("%s", prodagg);
  192.     getchar();
  193.     for(i=0, j=0; i<n && j==0; i++)
  194.         if(strcmp(warehouse[i], prodagg)==0) j=1;
  195.     if(j==0) return 0;
  196.     else{
  197.     warehouse[i-1][0]='\0';
  198.     price[i-1]=-2;
  199.     return 1;}
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement