Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Un supermercato vuole implementare un sistema per la gestione della coda al banco pesce.
- Il banco del pesce utilizza una coda per memorizzare l’ordine di arrivo dei clienti e una lista
- per memorizzare le vendite effettuate.
- La coda contiene solamente l’identificativo del cliente costituito da una stringa di 5 caratteri
- che permette di selezionare il prossimo cliente.
- Ogni volta che un elemento viene estratto dalla coda viene inserito nella lista degli acquisti
- effettuate. In tale lista saranno inserite le seguenti informazioni:
- · Codice del cliente(5 caratteri)
- · Codice dell’articolo acquistato(10 caratteri)
- · Numero di pezzi acquistati
- · Costo unitario(in euro)
- Funzioni da implementare:
- 1. Definizione della struttura dati coda di clienti e lista di acquisti
- 2. Menu testuale
- 3. Stampa della lista di acquisti
- 4. Inserimento di un nuovo cliente in coda
- 5. Estrazione del primo cliente dalla coda e inserimento della lista degli acquisti (il Codice
- dell’articolo acquistato, il Numero di pezzi acquistati e il costo unitario sono forniti da
- tastiera
- 6. Calcolo del totale degli acquisti
- 7. Calcolo dell’acquisto di importo maggiore
- 8. Salvataggio dell’intera lista degli acquisti in un file testo
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- ///////////
- //TYPEDEF//
- ///////////
- typedef struct s1 {
- char cod_cliente[6];
- struct s1 * next;
- } NodoCoda, *Coda;
- typedef struct s2 {
- char cod_cliente[6];
- char cod_articolo[11];
- int npezzi;
- float costo;
- } InfoAcquisto;
- typedef struct s3 {
- InfoAcquisto info;
- struct s3 * next;
- } NodoLista, *Lista;
- ////////////
- //FUNZIONI//
- ////////////
- void stampaAcquisti(Lista lis){
- puts("Cliente Articolo N.Pezzi Costo\n__________________________________________");
- while (lis != NULL) {
- printf("\n%s %s %d %f\n__________________________________________", lis->info.cod_cliente, lis->info.cod_articolo, lis->info.npezzi, lis->info.costo);
- lis = lis->next;
- }
- }
- int inserisciInCoda(Coda * cod, char codice[]){
- Coda aux = *cod;
- if (aux == NULL){
- aux = (Coda)malloc(sizeof(NodoCoda));
- if (aux == NULL) {
- puts("Errore nell'allocazione di memoria.");
- exit(0);
- }
- strcpy(aux->cod_cliente, codice);
- aux->next = NULL;
- *cod = aux;
- } else {
- while (aux->next != NULL) {
- aux = aux->next;
- }
- aux->next = (Coda)malloc(sizeof(NodoCoda));
- if (aux->next == NULL) {
- puts("Errore nell'allocazione di memoria.");
- exit(0);
- }
- aux = aux->next;
- }
- strcpy(aux->cod_cliente, codice);
- aux->next = NULL;
- }
- void stampaCoda(Coda cod){
- int i = 0;
- puts("Ecco la coda:");
- while (cod != NULL){
- i++;
- printf("%d. %s\n", i, cod->cod_cliente);
- cod = cod->next;
- }
- puts("");
- }
- int completaAcquisto(Coda * cod, Lista * lis){
- if ((*cod) == NULL) {
- printf("Il tuo pesce fa schifo, infatti non c'e' nessuno in coda. Considera il suicidio.\n");
- return 0;
- }
- InfoAcquisto temp;
- printf("\nTurno di %s. Inserisci in ordine <codice_articolo>, <n.pezzi> e <costo>.\n", (*cod)->cod_cliente);
- scanf("%s %d %f", temp.cod_articolo, &temp.npezzi, &temp.costo);
- strcpy(temp.cod_cliente, (*cod)->cod_cliente);
- Coda aux = *cod;
- *cod = (*cod)->next;
- free(aux);
- //Aggiungo un nodo in testa alla lista acquisti
- Lista aux2 = NULL;
- aux2 = (Lista)malloc(sizeof(NodoLista));
- if (aux2 == NULL) {
- puts("Errore nell'allocazione di memoria.");
- exit(0);
- }
- aux2->info = temp;
- aux2->next = *lis;
- *lis = aux2;
- puts("Fatto!\n");
- return 1;
- }
- float calcolaTotale(Lista lis){
- float x = 0;
- while (lis != NULL) {
- x = (float)x + (lis->info.npezzi * lis->info.costo);
- lis = lis->next;
- }
- return x;
- }
- InfoAcquisto calcolaMaggiore(Lista lis){
- float curr = 0;
- InfoAcquisto eccolo;
- eccolo.costo = 0;
- while (lis != NULL) {
- curr = (float)lis->info.npezzi * lis->info.costo;
- if (curr > eccolo.costo){
- eccolo = lis->info;
- lis = lis->next;
- }
- }
- if (eccolo.costo == 0)
- eccolo.costo = -1;
- return eccolo;
- }
- void salvaAcquisti(Lista lis, FILE *fp){
- fprintf(fp, "Cliente Articolo N.Pezzi Costo\n__________________________________________");
- while (lis != NULL) {
- fprintf(fp, "\n%s %s %d %f\n__________________________________________", lis->info.cod_cliente, lis->info.cod_articolo, lis->info.npezzi, lis->info.costo);
- lis = lis->next;
- }
- }
- int menu(){
- puts("\n1. Inserisci un cliente in coda");
- puts("2. Completa l'acquisto di un cliente");
- puts("3. Stampa la lista degli acquisti");
- puts("4. Calcola il totale degli acquisti");
- puts("5. Calcola l'acquisto di importo maggiore");
- puts("6. Salva la lista degli acquisti in un file di testo");
- puts("7. Stampa la coda");
- puts("0. Esci dal programma");
- puts("Choose your destiny: ");
- int kek;
- scanf("%d", &kek);
- return kek;
- }
- ////////
- //MAIN//
- ////////
- int main(void){
- //Variabili locali
- char tempstring[11];
- int scelta;
- float totale = 0;
- Coda coda = NULL;
- Lista lista = NULL;
- InfoAcquisto maggiore;
- FILE * fp;
- do {
- scelta = menu();
- switch (scelta){
- case 0: break;
- case 1: //Inserisci un cliente in coda
- puts("Inserire codice cliente:");
- scanf("%s", tempstring);
- inserisciInCoda(&coda, tempstring);
- puts("Fatto!\n");
- break;
- case 2: //Completa l'acquisto di un cliente
- completaAcquisto(&coda, &lista);
- break;
- case 3: //Stampa la lista degli acquisti
- stampaAcquisti(lista);
- break;
- case 4: //Calcola il totale degli acquisti
- totale = calcolaTotale(lista);
- printf("Oggi hai guadagnato ben %f euro.\n", totale);
- break;
- case 5: //Calcola l'acquisto di importo maggiore
- maggiore = calcolaMaggiore(lista);
- if (maggiore.costo == -1)
- puts("Mi spiace ma sei troppo povero.");
- else
- 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);
- break;
- case 6: //Salva la lista degli acquisti in un file di testo
- fp = fopen("output.txt", "w");
- salvaAcquisti(lista, fp);
- fclose(fp);
- puts("Lista salvata nel file output.txt");
- break;
- case 7: //Stampa la coda
- stampaCoda(coda);
- break;
- default:
- puts("Si prega di inserire un numero dell'elenco.\n");
- }
- } while (scelta != 0);
- puts("Arrivederci!");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement