codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10
#define B 4
typedef struct {
char cognome[20];
char nome[20];
} nomi;
typedef struct {
char marca[20];
char modello[20];
int anno;
int prezzo;
char targa [7];
nomi proprietari [B];
} automobili;
int main() {
int c=0,i,n,anno,tot=0; //c = Numero proprietari n = Numero di Auto
automobili autosalone[N];
char marca[20];
FILE *pf;
FILE * fp; // Per usare il file
int scelta = 0, cancello;
do {
printf("\n 1) Inserimento\n 2) Cancellazione\n 3) Ordinamento\n 4) Visualizza risultati\n 5) Salva\n 6) Carica da file\n 0) Esci\n: ");
scanf("%d", &scelta);
switch (scelta) {
case 1:
do{
printf("Quante auto vuoi inserire?: ");
scanf("%d", &n);
if (n>N)
printf ("Posso inserire solo 10 auto\n\n");
if (n<1)
printf ("Non puoi inserire 0 auto\n\n");
} while (n<1 || n>N);
for(i=0; i<n; i++){
printf("\nAuto %d\n", i+1);
printf("\nMarca: ");
scanf("%s", autosalone[i].marca);
printf("\nModello: ");
scanf("%s", autosalone[i].modello);
printf("\nTarga (GENTILMENTE TUTTA ATTACCATA): ");
scanf("%s", autosalone[i].targa);
do {
printf("\nPrezzo: ");
scanf("%d", &autosalone[i].prezzo);
if ((autosalone[i].prezzo) <= 1)
printf ("Non puoi non aver pagato la tua auto\n\n");
} while ((autosalone[i].prezzo) <= 1);
do {
printf("\nAnno immatricolazione: ");
scanf("%d", &autosalone[i].anno);
if ((autosalone[i].anno)<1900)
printf ("La targa non puo' esser stata immatricolata cosi' tanti anni fa'\n");
if ((autosalone[i].anno)<1990 && (autosalone[i].anno)>1901) // || &&
printf ("\nComplimenti, hai proprio una bella auto d'epoca\n");
if ((autosalone[i].anno)>2020)
printf ("La targa non puo' esser stata immatricolata nel futuro\n\n");
} while ((autosalone[i].anno)<1900 && (autosalone[i].anno)>2020); // || &&
do {
printf("\nQuanti proprietari ha l'auto?: ");
scanf("%d", &c);
if (c>3)
printf ("\nL'auto non puo' avere piu' di 3 proprietari\n\n");
}while (c>3);
for (int j = 0; j<c; j++) {
printf("\nNome del %d^ proprietario: ", j+1);
scanf("%s", autosalone[i].proprietari[j].nome);
printf("\nCognome del %d^ proprietario: ", j+1);
scanf("\n%s", autosalone[i].proprietari[j].cognome);
}
} break;
case 2:
do {
printf ("Quale posizione vuoi cancellare? ");
scanf ("\n%d", &cancello);
} while ((cancello< 0) || (cancello > n));
for (int i = cancello ; i < n; i++) {
autosalone[i] = autosalone [i-1]; //cancellazione e spostamento degli elementi nel vettore
}
n--;
break;
case 3: // Ordinamento non ottimizzato
for (int i=0; i<n; i++) { // ripeto il ciclo numFrutti volte
for (int j=0; j<n-1; j++) { // Confronta le coppie
if (strcmp(autosalone[j].proprietari[j].nome, autosalone[j+1].proprietari[j].nome)>0) {
// scambia i valori
automobili fTemp = autosalone[j];
autosalone[j] = autosalone[j+1];
autosalone[j+1] = fTemp;
}
}
}
printf ("Vettore ordinato correttamente");
break;
case 4:
for (int i= 0; i<n; i++) {
printf("\nAuto %d\n", i+1);
printf ("\nMarca: %s\n", autosalone[i].marca);
printf ("Modello: %s\n", autosalone[i].modello);
printf ("Anno: %d\n", autosalone[i].anno);
printf ("Targa: %s\n", autosalone[i].targa);
printf ("Prezzo: %d\n", autosalone[i].prezzo);
printf ("Anno: %d\n", autosalone[i].anno);
for (int j = 0; j<c; j++) {
printf ("Nome del %d proprietario: %s\n", j+1, autosalone[i].proprietari[j].nome);
printf ("Cognome del %d proprietario: %s\n\n", j+1, autosalone[i].proprietari[j].cognome);
}
} break;
case 5: // Salvo la struttura
if (n>0) {
// Apro il file
fp = fopen ("Autosalone.txt","wb");
if (fp!=NULL) { // Se sono riuscito a creare il file
fwrite(autosalone,sizeof(automobili),n, fp);
fclose(fp);
printf("Salvataggio avvenuto con successo di %d auto\n", n);
} else {
printf("Attenzione, errore nella creazione del file");
}
} else {
printf("Spiacente, non c'? nulla da salvare'");
}
break;
case 6: // Carico la struttura
printf("\nAttenzione, caricando i dati perderete tutti i dati in memoria, continuare? (Y/n)");
char f;
fflush(stdin);
scanf("%c",&f);
if (f=='Y') { // Autorizzazione a caricare!
fp = fopen("Autosalone.txt","rb");
if (fp!=NULL) { // Se il file esiste
while (!feof(fp)) {
int res = fread(&autosalone[n],sizeof(automobili),1, fp);
if (res>0) { // Dopo avere letto l'ultimo elemento ne legge sempre uno vuoto
n++;
}
}
fclose(fp);
printf("Caricamento avvenuto con successo di %d auto\n", n);
} else {
printf("Mi spiace, sembra che il file Autosalone.txt non esista\n");
}
};
break;
case 0:
exit (1);
break;
}
} while (scelta <6);
}