Sei sulla pagina 1di 3

#include <stdio.

h>
#include<stdlib.h>

struct fritto{
char Nome[30];
float Prezzo;
char Fresco;
};

struct node{
struct fritto Fri;
struct node *next;
};

typedef struct fritto FRITTO;


typedef struct node NODO;

void stampa(NODO* primo);


NODO* inserisciInTesta(NODO* primo);
NODO* cancellaInCoda(NODO* primo);
int controllo(FRITTO f1, FRITTO f2);

NODO* ordinaFritto(NODO* primo);

int main(){

NODO* head = (NODO*) malloc(sizeof(NODO));


head->next = NULL;
int check = -1;

printf("\t\t\t\t\t\t--------MENU FRITTO--------\n\n");
while(check != 0){
printf("\nOperazioni disponibili: ");
printf("\n1. Inserisci in testa della lista un fritto");
printf("\n2. Elimina l'ultimo elemento della lista");
printf("\n3. Ordina i fritti sia per freschezza sia per prezzo");
printf("\n4. Pulisci lo schermo");
printf("\n5. Stampa la lista");
printf("\n0. Termina il programma");
printf("\n\nScegli cosa fare: ");
scanf("%d", & check);

if(check == 1){
head = inserisciInTesta(head);
}
else if(check == 2){
head = cancellaInCoda(head);
}
else if(check == 3){
head = ordinaFritto(head);
}
else if(check == 4){
system("cls");
}
else if(check == 5){
stampa(head);
}
else if(check == 0){
printf("\n\nChiusura progeramma in corso...\n\n");
}
else{
printf("\n\nOperazione non valida, riprovare\n");
}
}
system("pause");
return 0;
}

void stampaFritto(FRITTO f1){


printf("\n\nNome: %s", f1.Nome);
printf("\nPrezzo: %.2f", f1.Prezzo);
if(f1.Fresco == 'y'){
printf("\nFresco");
}
else if(f1.Fresco == 'n'){
printf("\nSurgelato");
}
else{
printf("\nInserimento non valido, riprovare");
}
}

void stampa(NODO* primo){


NODO* list = (NODO*) malloc(sizeof(NODO));
list = primo;
while(list != NULL){
stampaFritto(list->Fri);
list = list->next;
}
printf("\n");
}

NODO* inserisciInTesta(NODO* primo){


NODO* New = (NODO*) malloc(sizeof(NODO));
New->next = NULL;
FRITTO box;
printf("\n\nInserisci il nome del fritto: ");
scanf("%s", & (box.Nome));
printf("\nInserisci il prezzo del prodotto: ");
scanf("%f%*c", & (box.Prezzo));
printf("\nInserisci 'y' se il prodotto %c fresco, altrimenti inserisci 'n':
");
scanf("%c", & (box.Fresco));
New->Fri = box;
New->next = primo;
printf("\n\nInserimento completato\n\n");
return primo;
}

NODO* cancellaInCoda(NODO* primo){

if(primo == NULL){
printf("\n\nNulla da cancellare\n\n");
}
else if(primo->next == NULL){
primo = NULL;
}
else{
NODO* list = (NODO*) malloc(sizeof(NODO));
list = primo;
while(list->next->next != NULL){
list = list->next;
}
NODO* trash = (NODO*) malloc(sizeof(NODO));
trash = list->next;
list->next = NULL;
free(trash);
}
return primo;
}

int controllo(FRITTO f1, FRITTO f2){

return ((f1.Fresco == 'y' && f2.Fresco == 'n' ) || ((f1.Fresco ==f2.Fresco)


&& (f1.Prezzo <= f2.Prezzo)));

NODO* ordinaFritto(NODO* primo){

NODO* list = (NODO*) malloc(sizeof(NODO));


int cambio = 1;
FRITTO temp;

while(cambio != 0){
cambio = 0;
for(list=primo;list->next != NULL; list = list->next){
if(controllo(list->next->Fri, list->Fri)){
temp = list->next->Fri;
list->next->Fri = list->Fri;
list->Fri = temp;
cambio = 1;
}
}
}
return primo;
}

Potrebbero piacerti anche