codice:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX 50
struct cliente
{
char nome[20];
char cognome[20];
int codice;
struct cliente *next;
};
struct prenotazione
{
int codicecliente;
int stanza;
int giornoarrivo;
int giornopartenza;
int mesearrivo;
int mesepartenza;
}lista[100];
struct data
{
int arrivo;
int partenza;
}calend[100];
int calendario[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int numero;
struct cliente *crea();
struct cliente *inserisci(struct cliente *);
void cerca(struct cliente *);
void visualizza(struct cliente *);
void menuprenotazione(struct cliente *);
void menu(struct cliente *);
void elenca();
int gestionedata (int giornoa,int mesea,int giornop,int mesep);
int controllo(int giornoarrivo,int giornopartenza);
void salvalista(struct cliente *);
struct cliente *caricalistaprimo();
struct cliente *caricalistanext(struct cliente *);
int i=1;
int j=0;
main()
{
int c=-1;
struct cliente *p, *new;
while(c!=0)
{
printf("\nNella lista sono presenti %d clienti",i-1);
printf("\nE [%d] prenotazioni",j);
printf("\n\n\t1.crea nuovo cliente");
printf("\n\t2.cerca clienti");
printf("\n\t3.visualizza lista clienti");
printf("\n\t4.crea prenotazione");
printf("\n\t5.elenca lista prenotazioni");
printf("\n\t6.Salva lista cliente sul file di testo [listaclienti.txt]");
printf("\n\t7.Carica lista clienti da file [listaclienti.txt]");
printf("\n\nDigita la scelta ---->");
scanf("%d",&c);
switch(c)
{
case 1:
if (i==1)
{
p = crea();
i++;
new = p;
break;
}
else
{
new->next=malloc(sizeof(struct cliente));
new = inserisci(new->next);
break;
}
case 2: cerca(p); break;
case 3: visualizza(p); break;
case 4: menuprenotazione(p); break;
case 5: elenca(); break;
case 6: salvalista(p); break;
case 7:
if (i==1)
{
p = caricalistaprimo();
i++;
new = p;
}
else
{
new->next=malloc(sizeof(struct cliente));
new = caricalistanext(new->next);
break;
}
}
}
}
struct cliente * crea(){
struct cliente *p;
p = malloc(sizeof(struct cliente));
printf("\nInserisci nome del cliente ");
scanf("%s", p->nome);
printf("\nInserisci cognome ");
scanf("%s", p->cognome);
p->codice = 1;
printf("\nAl cliente è stato assegnato il codice [1]\n");
p->next=NULL;
return p;
}
struct cliente * inserisci(struct cliente *p){
printf("\nInserisci nome del cliente ");
scanf("%s", p->nome);
printf("\nInserisci cognome ");
scanf("%s", p->cognome);
p->codice = i;
printf("\nAl cliente è stato assegnato il codice [%d]\n",i);
i++;
p->next= NULL;
return p;
}
void cerca(struct cliente *p)
{
int codice;
printf("\ndigita il codice cliente---->");
scanf("%d", &codice);
do
{
if (p->codice==codice)
{
printf("\n\nil codice cliente appartiene a [ %s %s ]",p->nome,p->cognome);
}
}
while ((p = p->next) !=NULL);
}
void visualizza(struct cliente *p)
{
int d=1;
printf("[codice] [nome] [cognome]");
while (p!=NULL)
{
printf("\n [%d] %s %s\n",d,p->nome,p->cognome);
d++;
p = p->next;
}
}
void menuprenotazione(struct cliente *p)
{
int sel;
printf("\nIl cliente che vuole prenotare e' gia' nella lista clienti?");
printf("\n1.si");
printf("\n2.no\nscelta---> ");
scanf("\n%d",&sel);
switch(sel)
{
case 1: menu(p); break;
case 2: printf("\nBisogna immettere i dati del cliente prima"); break;
default : printf("\nscelta non valida"); break;
}
}
void menu(struct cliente *p)
{
int state=0;
int giornoa;
int mesea;
int giornop;
int mesep;
int sel;
printf("\nImmettere codice cliente ->");
scanf("%d",&sel);
while (p!=NULL)
{
if (p->codice==sel)
{
printf("\nImmettere dati di arrivo per cliente [%s %s codice(%d)]",p->nome,p->cognome,p->codice);
do{
printf("\nImmettere mese di arrivo ");
scanf("%d",&mesea);
if(mesea>12)
do
{
printf("\nERRORE DATA NON VALIDA!\n");
printf("MESE: ");
scanf("%d",&mesea);
}
while(!(mesea<=12));
printf("\nImmettere giorno di arrivo ");
scanf("%d",&giornoa);
if(mesea==11||mesea==4||mesea==6||mesea==9)
if(giornoa>30)
do{
printf("\nERRORE DATA NON VALIDA!\n");
printf("GIORNO: ");
scanf("%d",&giornoa);
}
while(!(giornoa<=30)||(giornoa>=31));
if(mesea==2)
if(giornoa>29)
do{
printf("\nERRORE DATA NON VALIDA!\n");
printf("GIORNO: ");
scanf("%d",&giornoa);
}
while(!(giornoa<=29));
printf("\nImmettere mese di partenza ");
scanf("%d",&mesep);
if((mesep>12)||(mesep<mesea))
do
{
printf("\nERRORE DATA NON VALIDA!\n");
printf("MESE: ");
scanf("%d",&mesep);
}
while(!((mesep<=12)&&(mesep>=mesea)));
printf("\nImmettere giorno di partenza ");
scanf("%d",&giornop);
if(mesep==11||mesep==4||mesep==6||mesep==9)
if(giornop>30)
do{
printf("\nERRORE DATA NON VALIDA!\n");
printf("GIORNO: ");
scanf("%d",&giornop);
}
while(!(giornop<=30)||(giornop>=31));
if(mesep==2)
if(giornop>29)
do{
printf("\nERRORE DATA NON VALIDA!\n");
printf("GIORNO: ");
scanf("%d",&giornop);
}
while(!(giornop<=29));
state=gestionedata(giornoa,mesea,giornop,mesep);
lista[j].codicecliente=p->codice;
}while(state==1);
}
p = p->next;
}
lista[j].giornoarrivo=giornoa;
lista[j].mesearrivo=mesea;
lista[j].giornopartenza=giornop;
lista[j].mesepartenza=mesep;
j++;
}
void elenca()
{
int t;
for(t=0;t<j;t++)
{
printf("\nPer il cliente con codice [%d]",lista[t].codicecliente);
printf("\ngiorno arrivo [%d] mese [%d]\n",lista[t].giornoarrivo,lista[t].mesearrivo);
printf("\ngiorno partenza [%d] mese [%d]\n\n\n",lista[t].giornopartenza,lista[t].mesepartenza);
}
}
int gestionedata(int giornoa,int mesea,int giornop,int mesep)
{
int sta=0;
int t;
int giornoarrivo=giornoa;
int giornopartenza=giornop;
for (t=0;t<mesea;t++)
{
giornoarrivo=giornoarrivo+calendario[t];
}
calend[j].arrivo=giornoarrivo;
for (t=0;t<mesep;t++)
{
giornopartenza=giornopartenza+calendario[t];
}
calend[j].partenza=giornopartenza;
if (j>0)
{
sta=controllo(giornoarrivo,giornopartenza);
return sta;
}
}
int controllo(int giornoarrivo,int giornopartenza)
{
int t;
for (t=0;t<j;t++)
{
if ((giornoarrivo>=calend[t].arrivo)&&(giornoarrivo<=calend[t].partenza)||(giornopartenza>=calend[t].arrivo)&&(giornopartenza<=calend[t].partenza))
{
printf("\nData non disponibile visualizzare l'elenco prenotazione e scegliere una prenotazione valida");
elenca();
return 1;
}
else
{
return 0;
}
}
}
void salvalista(struct cliente *p)
{
FILE *fp;
fp=fopen("listaclienti.txt","a+");
while (p!=NULL)
{
fprintf(fp,"%d %s %s\n",p->codice,p->nome,p->cognome);
p = p->next;
}
fclose(fp);
}
struct cliente * caricalistaprimo()
{
FILE *fp;
fp=fopen("listaclienti.txt","a+");
struct cliente *p;
p = malloc(sizeof(struct cliente));
fscanf(fp,"%d %s %s",&p->codice,p->nome,p->cognome);
p->next=NULL;
return p;
fclose(fp);
}
struct cliente *caricalistanext(struct cliente *p)
{
FILE *fp;
fp = fopen("listaclienti.txt","a+");
char c[100];
fgets(c,100,fp);
while(!feof(fp))
{
while(p!=NULL)
{
fscanf(fp,"%d %s %s\n",&p->codice,p->nome,p->cognome);
p = p->next;
i++;
}
}
return p;
fclose(fp);
}
Scusate ancora ragazzi, ho un problema non riesco a capire perchè le ultime 2 funzioni non riescono a caricare delle stringhe contenute in un file per poi salvarle in una lista, avete qualche suggerimento?