Source: http://docplayer.it/6996256-Magazzino-cpp-january-2-2008-page-1.html
Timestamp: 2018-05-25 23:07:42+00:00

Document:
MAGAZZINO.CPP January 2, 2008 Page 1 - PDF
Download "MAGAZZINO.CPP January 2, 2008 Page 1"
Ladislao Randazzo
1 MAGAZZINO.CPP January 2, 2008 Page 1 1 #include <conio.h> 2 #include <stdio.h> 3 #include <string.h> 4 // ==================================================================== 5 // Versione 1.1 1/1/2008 Autore prof. Vicenzi G. 6 // 7 // aggiornamenti dalla versione // lettura e scrittura su file di tutti gli articoli a magazzino 9 // ======================================================================= // Semplice programma per la gestione di un magazzino 13 // per componenti elettronici 14 // 15 // Analisi di massima: 16 // occorre per ogni componente 17 // - Descrizione, Es: Resistore a strato di carbone 18 // - Valore, Es: // - Unita di misura, Es: Ohm 20 // - quantita disponibile in magazzino 21 // - quantita minima di riordino 22 // - prezzo unitario #define MAXARTICOLI struct ArticoloMag { 27 char Desc[40]; // descrizone del componente 28 float Valore; // valore del comp. 29 char Unita[5]; // unità di misura max 4 char 30 int Quantita; // num. di componenti in magazzino 31 int QtaRio; // num. di comp. minimi al di sotto del quale si riordina 32 float Prezzo; 33 char Attivo; //'S' se attivo, 'N' se "cancellato" 34 }; // funzione per l'inserimento dei dati di ogni singolo articolo Roncadi + Incerti +Piccinn i 38 struct ArticoloMag InputArticolo( ); // // funzione per ricalcolare la quantità di riordino.. D'IORIO +Ferrari + D'Ambrosio 41 struct ArticoloMag RicalcoloRiordino(struct ArticoloMag Art ); // funzione per stampare a video in modo ordinato l' articolo e gli altri suoi dati 44 void StampaArticolo(struct ArticoloMag Art ); // LAI + Carlotta + Venosino // funzione per stampare a video TUTTO IL MAGAZzINO 47 void StampaMag( struct ArticoloMag *PtrArt ); // Polelli + Vannini // funzione per aggiornare (modificare) un articolo 50 struct ArticoloMag AggiornaArticolo(struct ArticoloMag Art ); // Crocettti+Gozzi + Lape ruta // funzione per aggiornare solo la quantità di un articolo // Flagiello +DAmoia + Mil ani 53 struct ArticoloMag AggiornaQtaArticolo(struct ArticoloMag Art,int NQuantita ); // funzione di cancellazione articolo... // Zaccariello, Salata, Gaddi 56 struct ArticoloMag CancellaArticolo(struct ArticoloMag Art ); //cerca una stringa in una altra 59 int StrFind( char *PtrDescrizione, char *PtrPezzo); // stampa un messaggio a video e attende la pressione di un tasto 62 void StampaMessaggio(char *PtrS); // legge da file tutto il magazzino 65 int LeggeDaFile (struct ArticoloMag *PtrArt ); // salva su file tutto il magazzino
2 MAGAZZINO.CPP January 2, 2008 Page 2 68 int SalvaSuFile (struct ArticoloMag *PtrArt ); // funzione che si occuperà di riordinare il magazzino 72 // void main () 76 { 77 struct ArticoloMag Magazzino[MAXARTICOLI]; // vettore di 100 elementi di dati 78 // di tipo struct ArticoloMag 79 int Ch; // tasto per scelta del comando 80 int i; // indice per ircerca all'interno del magazzino 81 int NArticolo; // n. dell'articolo 82 int QuantitaNew; //nuova quantità di una articolo di magazzino 83 char StrPezzo[200]; struct ArticoloMag ArtLetto; LeggeDaFile (Magazzino ); // menu' principale del programma 90 do { 91 clrscr(); 92 printf("programma SEMPLIFICATO PER LA GESTIONE DI MAGAZZINO"); 93 printf("\n scegli la voce che ti interessa"); 94 printf("\n 1) - inserisci un articolo "); 95 printf("\n 2) - modifica un articolo "); 96 printf("\n 3) - modifica quantità di un articolo "); 97 printf("\n 4) - cerca un articolo in base a parte descrizione"); 98 printf("\n 5) - Cancella un articolo "); 99 printf("\n 6) - Calcola quantità di riordino "); 100 printf("\n 7) - Stampa un articolo "); 101 printf("\n 8) - Stampa tutti gli articoli "); 102 printf("\n 9) - Stampa elenco articoli da riordinare"); printf("\n W) - scrivi tutto il magazzino su disco"); 105 printf("\n batti ESC per uscire "); Ch=getch(); 109 switch (Ch) { 110 case '1' : // inserimento di un articolo 111 ArtLetto=InputArticolo( ); 112 // cerca un elemento del vettore in cui mettere l'articolo inserito 113 for (i=0; i <MAXARTICOLI; i++ ) { 114 if (Magazzino[i].Attivo!='S' ) { 115 Magazzino[i]=ArtLetto; 116 i=maxarticoli; 117 } 118 } if (i==maxarticoli) StampaMessaggio("\nERRORE!! magazzino pieno"); break; case '2' : // MODIFICARE di un art. di magazzino 125 printf ("\ndigita il numero dell'articolo da modificare"); 126 fflush(stdin); 127 scanf ("%d", &NArticolo); 128 printf ("\n stai per modificare: \n"); 129 StampaArticolo(Magazzino[NArticolo]); // se articolo attivo lo modifica, altrimenti segnala errore 132 if (Magazzino[NArticolo].Attivo=='S' ) { 133 Magazzino[NArticolo]=AggiornaArticolo(Magazzino[NArticolo]); 134 StampaMessaggio("Articolo modificato "); 135 } 136 else 137 StampaMessaggio("Articolo inesistente");
3 MAGAZZINO.CPP January 2, 2008 Page break; case '3' : // modifica la quantita'a magazzino di un articolo 142 printf ("\ndigita il numero dell'articolo di cui modificare la quan tita"); 143 fflush(stdin); 144 scanf ("%d", &NArticolo); 145 if (Magazzino[NArticolo].Attivo=='S' ) { 146 printf ("\ninserire la nuova quantita'per l'articolo:\n"); 147 StampaArticolo(Magazzino[NArticolo]); 148 scanf ("%d", &QuantitaNew); 149 Magazzino[NArticolo]=AggiornaQtaArticolo(Magazzino[NArticolo], Q uantitanew ); 150 } 151 else 152 StampaMessaggio("Errore!!, articolo non attivo"); break; case '4' : // ricerca e Stampa tutti gli articoli in base a parte della descrizi one 157 printf ("\n Digita parte della descrizione in base alla quale esegui re la ricerca \n>"); 158 gets(strpezzo); 159 printf ("\n"); 160 printf (" Descrizione... Valore Unit Qta Q.Rio Prezzo ID\n"); 161 for (i=0; i <MAXARTICOLI; i++ ) { 162 if (Magazzino[i].Attivo=='S' ) { 163 //cerca se StrPezzo è contenuto in Magazzino[i] 164 if ( StrFind(Magazzino[i].Desc, StrPezzo)!=0 ) { 165 StampaArticolo(Magazzino[i]); 166 printf ("%3d\n", i); 167 } 168 } 169 } //fine for 170 StampaMessaggio("Fine elenco degli articoli trovati"); 171 break; case '5' : // cancella un articolo 174 printf ("\ndigita il numero dell'articolo da cancellare"); 175 fflush(stdin); 176 scanf ("%d", &NArticolo); 177 Magazzino[NArticolo]= CancellaArticolo(Magazzino[NArticolo] ); 178 break; case '6' : // calcola qtaà di riordino 181 for (i=0; i <MAXARTICOLI; i++ ) { 182 if (Magazzino[i].Attivo=='S' ) { 183 Magazzino[i]=RicalcoloRiordino( Magazzino[i] ); 184 } 185 } 186 StampaMessaggio("ricalcolo quantita'di riordino effettuato"); 187 break; case '7' : // Stampa un articolo 190 printf ("\ndigita il numero dell'articolo da stampare"); 191 fflush(stdin); 192 scanf ("%d", &NArticolo); 193 StampaArticolo(Magazzino[NArticolo]); 194 printf ("ID=%3d", NArticolo); 195 StampaMessaggio("... "); 196 break; case '8' : // Stampa di tutti gli articoli 199 printf ("\n"); 200 printf (" Descrizione... Valore Unit Qta Q.Rio Prezzo ID\n"); 201 for (i=0; i <MAXARTICOLI; i++ ) {
4 MAGAZZINO.CPP January 2, 2008 Page if (Magazzino[i].Attivo=='S' ) { 203 StampaArticolo(Magazzino[i]); 204 printf ("%3d\n", i); 205 } 206 } 207 StampaMessaggio("Fine elenco di tutti gli articoli "); 208 break; case '9' : // stampa elenco di tutti gli articoli con quantità minore di quella minima di riordino 211 printf ("\n"); 212 printf (" Descrizione... Valore Unit Qta Q.Rio Prezzo ID\n"); 213 for (i=0; i <MAXARTICOLI; i++ ) { 214 if (Magazzino[i].Attivo=='S' ) { 215 if (Magazzino[i].Quantita < Magazzino[i].QtaRio) { 216 // quantità bassa.. occorre riordinare 217 StampaArticolo(Magazzino[i]); 218 printf ("%3d\n", i); 219 } 220 } 221 } 222 StampaMessaggio("Fine elenco di tutti gli articoli "); break; case 'w' : 227 case 'W' : // salva su disco tutto il contenuto del magazzino 228 if (SalvaSuFile(&Magazzino[0])!=NULL) 229 StampaMessaggio("Salvataggio effettuato"); 230 else 231 StampaMessaggio("ERRORE Salvataggio FILE "); // } // fine switch } while (Ch!=27); // 27 e' il codice ascii del tasto ESC getch(); 239 } // fine main // funzione per l'inserimento dei dati di ogni singolo articolo 245 struct ArticoloMag InputArticolo( ) 246 { struct ArticoloMag Temp; printf ("\n digita la descrizione (max 40 char):"); 249 fflush(stdin); 250 gets (Temp.Desc); printf ("\n digita il valore del comp.:"); 253 fflush(stdin); 254 scanf("%f",&temp.valore); printf ("\n digita l'unita'di misura (max 4 char):"); 257 fflush(stdin); 258 gets (Temp.Unita); printf ("\n digita la quantità:"); 261 fflush(stdin); 262 scanf("%d",&temp.quantita); printf ("\n digita la quantità di riordino:"); 265 fflush(stdin); 266 scanf("%d",&temp.qtario); printf ("\n digita il prezzo :"); 269 fflush(stdin);
5 MAGAZZINO.CPP January 2, 2008 Page scanf("%f",&temp.prezzo); Temp.Attivo='S'; return Temp; 275 } // funzione per ricalcolare la quantità di riordino struct ArticoloMag RicalcoloRiordino(struct ArticoloMag Art ) 279 { // se l'articolo è attivo e la qta' di riordino è zero, 280 // assegna la qtà di riordino pari al 10% della quantità attuale 281 if (( Art.Attivo=='S') &&(Art.QtaRio==0) ) 282 Art.QtaRio= Art.Quantita / 10; 283 return Art; } //fine funzione // funzione per stampare a video in modo ordinato l' articolo e gli altri suoi dati 288 void StampaArticolo(struct ArticoloMag Art ) 289 { 290 if (Art.Attivo=='S') { 291 printf (" %-40s ", Art.Desc); 292 printf ("%6.2f ", Art.Valore); 293 printf ("%4s ", Art.Unita); 294 printf ("%5d ", Art.Quantita); 295 printf ("%5d ", Art.QtaRio); 296 printf ("%6.2f ", Art.Prezzo); 297 } 298 } //fine funzione // funzione per stampare a video TUTTO IL MAGAZzINO 303 void StampaMag( struct ArticoloMag *PtrArt ) 304 { } //fine funzione // funzione per aggiornare (modificare) un articolo 313 struct ArticoloMag AggiornaArticolo(struct ArticoloMag Art ) 314 { 315 struct ArticoloMag Temp; 316 int Ch; printf ("\ndescrizione:(%40s)",art.desc); 319 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 320 fflush(stdin); 321 Ch=getche(); 322 if (Ch== 'M' Ch=='m') { 323 printf ("\n>"); 324 gets (Temp.Desc); 325 } 326 else 327 strcpy(temp.desc,art.desc); //copia stringhe printf ("\nvalore:(%f)",art.valore); 330 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 331 fflush(stdin); 332 Ch=getche(); 333 if (Ch== 'M' Ch=='m') { 334 printf ("\n>"); 335 scanf("%f",&temp.valore); 336 } 337 else 338 Temp.Valore=Art.Valore; 339
6 MAGAZZINO.CPP January 2, 2008 Page printf ("\nunita di misura :(%5s)",Art.Unita); 342 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 343 fflush(stdin); 344 Ch=getche(); 345 if (Ch== 'M' Ch=='m') { 346 printf ("\n>"); 347 gets (Temp.Unita); 348 } 349 else 350 strcpy(temp.unita,art.unita); //copia stringhe printf ("\nquantita:(%d)",art.quantita); 353 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 354 fflush(stdin); 355 Ch=getche(); 356 if (Ch== 'M' Ch=='m') { 357 printf ("\n>"); 358 scanf("%d",&temp.quantita); 359 } 360 else 361 Temp.Quantita=Art.Quantita; printf ("\nquantita di riordino:(%d)",art.qtario); 364 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 365 fflush(stdin); 366 Ch=getche(); 367 if (Ch== 'M' Ch=='m') { 368 printf ("\n>"); 369 scanf("%d",&temp.qtario); 370 } 371 else 372 Temp.QtaRio=Art.QtaRio; printf ("\nprezzo:(%f)",art.prezzo); 376 printf ("\nbatti M per modificare, qualsiasi altro tasto per confermare"); 377 fflush(stdin); 378 Ch=getche(); 379 if (Ch== 'M' Ch=='m') { 380 printf ("\n>"); 381 scanf("%f",&temp.prezzo); 382 } 383 else 384 Temp.Prezzo=Art.Prezzo; Temp.Attivo='S'; 388 return Temp; } //fine funzione // funzione per aggiornare solo la quantità di un articolo 395 struct ArticoloMag AggiornaQtaArticolo(struct ArticoloMag Art,int NQuantita ) 396 { // se l'articolo è attivo modifica solo la quantità attuale 397 if ( Art.Attivo=='S' ) 398 Art.Quantita= NQuantita; return Art; 401 } // funzione di cancellazione articolo struct ArticoloMag CancellaArticolo(struct ArticoloMag Art ) 406 { 407 Art.Attivo='N'; 408 return Art; 409 }
7 MAGAZZINO.CPP January 2, 2008 Page // cerca se una stringa è presente nell'altra 412 int StrFind( char *PtrDescrizione, char *PtrPezzo) 413 { 414 int Lung1, Lung2; //lunghezza delle due stringhe 415 int i; //contatore generico per ciclo for 416 char *OldPtr; // valore iniziale del puntatore 417 int NCar; // numero dei caratteri trovati uguali Lung2=strlen(PtrDescrizione); 420 Lung1=strlen(PtrPezzo); 421 // se il pezzo è più lungo.. è impossibile che sia contenuta in descrizione 422 if (Lung1 > Lung2) return 0; OldPtr=PtrPezzo; 425 NCar=0; for (i=0; i< Lung2; i++ ){ 428 if (*PtrPezzo == *PtrDescrizione) { 429 // trovato almeno un carattere corrispondente e confornta i rimanenti 430 NCar++; 431 if (NCar==Lung1) return 1; //trovato prima corrispondenza PtrPezzo++; 434 } 435 else { // diverso ricomincia confronto da capo 436 NCar=0; 437 PtrPezzo=OldPtr; // riparti con il puntatore dall'inizio stringa 438 } PtrDescrizione++; 441 } 442 return 0; // non trovato 443 } // fine funzione int LeggeDaFile (struct ArticoloMag *PtrArt ) 447 { 448 FILE *Fh; 449 int i; 450 struct ArticoloMag Art; if ((Fh =fopen ("Magazzino.txt", "rb")) == NULL) 453 { 454 printf("cannot open input file.\n"); 455 return NULL; 456 } for (i=0; i <MAXARTICOLI; i++ ) { 459 fread(ptrart, sizeof(art), 1, Fh); /* write struct s to file */ 460 PtrArt++; 461 } // for fclose(fh); 464 return 123; 465 } // fine funzione int SalvaSuFile (struct ArticoloMag *PtrArt ) 470 { 471 FILE *Fh; 472 int i; if ((Fh =fopen ("Magazzino.txt", "wb")) == NULL) 475 { 476 printf("cannot open output file.\n"); 477 return NULL; 478 } 479
8 MAGAZZINO.CPP January 2, 2008 Page for (i=0; i <MAXARTICOLI; i++ ) { 481 if (PtrArt->Attivo=='S' ) { 482 fwrite(ptrart, sizeof(*ptrart), 1, Fh); /* write struct s to file */ 483 PtrArt++; 484 } //if 485 } // for fclose(fh); 488 return 123; 489 } // fine funzione // stampa un messaggio a video e attende un tasto 493 void StampaMessaggio(char *PtrS) 494 { 495 printf("\n"); 496 puts (PtrS); 497 printf("\n \n batti un tasto per continuare"); 498 fflush(stdin); 499 getch(); 500 } /* Esempio di esecuzione 503 PROGRAMMA SEMPLIFICATO PER LA GESTIONE DI MAGAZZINO scegli la voce che ti interessa 505 1) - inserisci un articolo 506 2) - modifica un articolo 507 3) - modifica quantitó di un articolo 508 4) - cerca un articolo in base a parte descrizione 509 5) - Cancella un articolo 510 6) - Calcola quantitó di riordino 511 7) - Stampa un articolo 512 8) - Stampa tutti gli articoli 513 9) - Stampa elenco articoli da riordinare 514 W) - scrivi tutto il magazzino su disco 515 batti ESC per uscire 516 Descrizione... Valore Unit Qta Q.Rio Prezzo ID 517 aaaaa bbbbbbb condensatore elettrolitico uf con con con xx uf potenziometro ohm Fine elenco di tutti gli articoli batti un tasto per continuare */

References: articolo 50
 articolo 111
 articolo 142
 articolo 174
 articolo 190
 articolo 245
 articolo 313
 articolo 395
 articolo 506
 articolo 507
 articolo 508
 articolo 510
 articolo 512