codice:
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
struct veicolo
{
char *targa;
char *modello;
char *nomeP;
char *cognomeP;
char *intervento;
char *data;
int ingressi;
struct veicolo *next;
};
void inserimento(char *tar, char *mod, char *no, char *cog, char *inte, char *dat);
void cerca(char *tar);
void modifica(char *t);
void stampa_auto(char *tar);
void stampa();
struct veicolo *officina;
const int dimS=30;
main()
{
char risp='\0', targa[dimS], modello[dimS], nomeP[dimS], cognomeP[dimS], intervento[dimS], data[dimS];
int ingressi;
struct veicolo *v;
while (risp!='u'){
printf("***che operazione vuoi eseguire?***\n");
printf("i per inserire un nuovo veicolo\n");
printf("c per cercare un veicolo inserendo la targa\n");
printf("m per modificare i dati di un veicolo\n");
printf("p per la stampa\n");
printf("s per stampare un veicolo inserendo la targa\n");
printf("u per uscire\n");
scanf("%c",&risp);
fflush(stdin);
switch(risp){
case 'i' :
printf("inserire targa\n");
gets(targa);
fflush(stdin);
printf("inserire modello\n");
gets(modello);
fflush(stdin);
printf("inserire nome\n");
gets(nomeP);
fflush(stdin);
printf("inserire cognome\n");
gets(cognomeP);
fflush(stdin);
printf("inserire la riparazione\n");
gets(intervento);
fflush(stdin);
printf("Inserire la data \n");
gets(data);
fflush(stdin);
inserimento(targa,modello,nomeP,cognomeP,intervento,data);
break;
case 'c' :
printf("Inserisci la targa:\n");
gets(targa);
fflush(stdin);
cerca(targa);
break;
case 'm':
printf("Inserisci la targa del veicolo da modificare:\n");
gets(targa);
fflush(stdin);
modifica(targa);
break;
case 'p' :
stampa();
break;
case 's':
printf("Inserisci la targa del veicolo da stampare:\n");
gets(targa);
fflush(stdin);
stampa_auto(targa);
break;
case 'u' :
break;
default:
printf("Scelta errata.\n");
break;
}
system("PAUSE");
}
void inserimento(char *t,char *mod,char *n,char *cog, int c,char *inte, char *dat)
{
struct veicolo *v,*curr, *prev;
int ingresso =1;
v=malloc(sizeof(struct veicolo));
v->targa=malloc((strlen(t)+1)*sizeof(char));
strcpy(v->targa,t);
v->modello=malloc((strlen(mod)+1)*sizeof(char));
strcpy(v->modello,mod);
v->nomeP=malloc((strlen(n)+1)*sizeof(char));
strcpy(v->nomeP,n);
v->cognomeP=malloc((strlen(cog)+1)*sizeof(char));
strcpy(v->cognomeP, cog);
v->intervento=malloc((strlen(inte)+1)*sizeof(char));
strcpy(v->intervento,inte);
v->data=malloc((strlen(dat)+1)*sizeof(char));
strcpy(v->data, dat);
v->ingressi=ingresso;
v->next=NULL;
prev=NULL;
curr=officina;
if (!officina || strcmp(curr->targa,t)>=0){
v->next=officina;
officina=v;
}
else{
while (curr && strcmp(curr->targa,t)<0){
prev=curr;
curr=curr->next;
}
prev->next=v;
v->next=curr;
}
}
void modifica(char *t){
struct veicolo *v;
char risp,temp[dimS], temp2[dimS];
int cil;
v=officina;
while(v && strcmp(v->targa,t)!=0)
v=v->next;
if(v){
printf("che dato vuoi modificare?\n");
printf("0 targa\n");
printf("1 tipo\n");
printf("2 nome\n");
printf("3 cilindrata\n");
printf("4 riparazione\n");
scanf("%c",&risp);
fflush(stdin);
switch (risp){
case '0':
printf("inserire nuova targa\n");
gets(temp);
fflush(stdin);
strcpy(v->targa,temp);
break;
case '1':
printf("inserire nuovo modello\n");
gets(temp);
fflush(stdin);
strcpy(v->modello,temp);
break;
case '2':
printf("inserire nuovo nome\n");
gets(temp);
fflush(stdin);
printf("inserire cognome\n");
gets(temp2);
fflush(stdin);
strcpy(v->nomeP,temp);
strcpy(v->cognomeP, temp2);
break;
case '3':
printf("inserire nuova cilindrata\n");
scanf("%d",&cil);
fflush(stdin);
break;
case '4':
printf("inserire nuova intervento\n");
gets(temp);
fflush(stdin);
strcat(v->intervento,temp);
v->ingressi++;
break;
default:
printf("scelta errata,riselezionare\n");
break;
}
}
else
printf("veicolo non trovato\n");
}
void cerca(char *t)
{
struct veicolo *v;
v=officina;
while(v)
{
if(strcmp(v->targa, t)==0)
{
printf("L'auto cercata e' stata riparata nell'officina.\n");
return;
}
else
printf("Auto non presente nell'archivio.\n");
v=v->next;
}
if(!v)
printf("Auto non presente.\n");
return;
}
void stampa(){
struct veicolo *v;
v=officina;
while (v){
printf("Targa veicolo: %s\n", v->targa);
printf("modello: %s\n", v->modello);
printf("nome proprietario: %s\n", v->nomeP);
printf("cognome proprietario: %s\n", v->cognomeP);
printf("intervento effettuato: %s\n", v->intervento);
printf("data : %s\n", v->data);
printf("numero di interventi: %d\n", v->ingressi);
v=v->next;
}
return;
}
void stampa_auto(char *t)
{
struct veicolo *v;
v=officina;
if(strcmp(v->targa, t)==0)
{
printf("Targa veicolo: %s\n", v->targa);
printf("modello: %s\n", v->modello);
printf("nome proprietario: %s\n", v->nomeP);
printf("cognome proprietario: %s\n", v->cognomeP);
printf("intervento effettuato: %s\n", v->intervento);
printf("data : %s\n", v->data);
printf("numero di interventi: %d\n", v->ingressi);
}
else
printf("Auto non trovata.\n");
}