codice:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define DIM 10
#define TRUE 1
#define FALSE 0
#define PATH "laurea"
#define AGE_LIMIT 3
#define PATH_REGALO "regalo"
// Creo la struttura per contenere i dati
typedef struct lista_invitati{
char nome[15];
char cognome[15];
char eta[4];
char sesso[2];
char tipo_invitato[2];
int key;
}invitato;
//struttura dati di ogni regalo ricevuto
typedef struct t_regalo {
char oggetto[30];
float prezzo;
int gradimento;
int key;
}regalo;
//controllo sesso
short int controlla_sesso(char *c)
{
int i=0;
for(i=0; i<=strlen(c); i++)
c[i]= toupper(c[i]);
if((strcmp(c,"M") == 0) || (strcmp(c,"F")==0))
return 1;
return 0;
}
// controllo età
short int controlla_eta(char *c)
{
int i=0;
if(strlen(c)>AGE_LIMIT) // se l'età immessa supera 3 caratteri ritorna 0
return 0;
for(i=0;i<=strlen(c)-1;i++)
if(!isdigit(c[i]))
return 0;
return 1; //se supera i controlli precedenti va bene
}
// controllo invitato
short int controlla_invitato(char *c)
{
int i=0;
for(i=0; i<=strlen(c); i++)
c[i]= toupper(c[i]);
if((strcmp(c,"A") == 0) || (strcmp(c,"P")==0))
return 1;
return 0;
}
//inserisce le informazioni per ogni invitato
invitato acquisisci_invitato()
{
invitato valore;
printf("inserisci il nome:\n");
scanf("%s",valore.nome);
printf("inserisci il cognome:\n");
scanf("%s",valore.cognome);
for(;!controlla_eta(valore.eta);){
printf("inserisci l'eta':\n");
scanf("%s",valore.eta);
}
for(;!controlla_sesso(valore.sesso);){
printf("inserisci il sesso:\n\t (f=femmina,m=maschio)\n");
scanf("%s",valore.sesso);
}
for(;!controlla_invitato(valore.tipo_invitato);){
printf("inserisci il tipo_invitato:\n\t (a=amici, p=parente)\n");
scanf("%s",valore.tipo_invitato);
}
return valore;
}
//inserisce i dati del regalo
regalo acquisisci_regalo()
{
regalo v_regalo;
printf("\t\tInserisci i regali ricevuti\n");
printf("Inserisci il nome dell'oggetto\n");
scanf("%s",v_regalo.oggetto);
printf("inserisci il prezzo dell'oggetto\n");
scanf("%f",&v_regalo.prezzo);
printf("inserisci il gradimento da 0 a 10\n\t0 non mi piace affatto\n\t10 si, mi piace molto)\n");
scanf("%d",&v_regalo.gradimento);
return v_regalo;
}
// funzione che ci consente di memorizzare i dati
int memorizza( const void* dato,size_t typo, char* percorsofile){
FILE *progetto;
progetto=fopen(percorsofile,"a+b");
if(fwrite(dato,typo,1, progetto)>0){
printf ("Dati scritti con successo sul file %s!\n",percorsofile);
fclose(progetto);
return 1;
}
else{
printf ("Errore nella scrittura dei dati su file\n");
fclose(progetto);
return -1;
}
fclose(progetto);
return -1;
}
int lista(){
FILE *progetto;
progetto=fopen("laurea","rb");
while(!(feof(progetto))){
invitato valore;
fread(&valore, sizeof(invitato),1, progetto);
printf("NOME\tCOGNOME\t\tETA\tSESSO\tTIPO\n");
printf("%s\t%s\t\t%s\t%s\t%s\n",
valore.nome, valore.cognome, valore.eta, valore.sesso, valore.tipo_invitato);}
fclose(progetto);
return 1;
}
int lista_regalo(){
FILE *progetto;
progetto=fopen("regalo","r+b");
while(!(feof(progetto))){
regalo v_regalo;
fread(&v_regalo, sizeof(invitato),1, progetto);//leggo una struttura e la memorizzo in ato
printf("REGALO\tPREZZO\tGRADIMENTO\n");
printf("%s\t%f\t%d\n",v_regalo.oggetto, v_regalo.prezzo, v_regalo.gradimento);}
fclose(progetto);
return 1;
}
//controllo parentesi ok
int Menu();
main(){int x=1;do{system("color 4d");x=Menu();}while(x!=0);}// colore
int Menu()
{
// if(controlla_sesso("Z")){printf("FUNZIONA\n");system("PAUSE");}else{printf("NON FUNZIONA");system("PAUSE");}
struct lista_invitati valore;
struct t_regalo v_regalo;
int fine=0, indice;
int j, partecipanti;
printf ("\n\t\t***MENU' PER LA GESTIONE DELLA FESTA DI LAUREA***\n\n");
printf ("\t1: Inserire dati invitati\n");
printf ("\t2: Visualizzare lista invitati\n");
printf ("\t3: Inserire regali ricevuti\n");
printf("Inserisci la tua scelta: ");
scanf("%d",&indice);
while(indice<=0 && indice>=4){ qua nel momento che scrivo un numero diverso da
printf("SCELTA SBAGLIATA \n"); 1,2,3 non mi dice scelta sbagliata perche???
printf("Inserisci ora la tua scelta: ");
scanf("%d",&indice);
}
switch(indice)
{
case(1):{
int p=0;
printf("\n\nQuanti invitati vuoi inserire? ");
scanf ("%d",&partecipanti);
while(p!=partecipanti)
{
printf("Inserisci l'invitato n.%d:\n",p++);
invitato valore = acquisisci_invitato();
printf("\n----->%s\n",valore.nome);
memorizza(&valore,sizeof(invitato),PATH);
} return;
break;
}
case(2):
if(PATH==NULL)
{ vorrei che mi controllasse il mio file se lo trova vuoto mi
printf("\t___Lista invitati vuota___\n"); dice LISTA INVITATI VUOTA altrimenti mi ritorna la
} lista, ma questo non succede
else Credo di averlo fatto sintatticamente giusto..
{
lista(); }
return;
break;
}
system("PAUSE");
return 0;
}