Ciao Ragazzi ho cercato di modificare un po le cose portando il tutto alla struttura struct, ma ora davvero mi serve una mano per uscire dal fango degli errori...
/*
Name: Agenda Elettronica
Copyright: 0124000773
Author: Giacomo Gargiulo
Description: Gestione di un agenda elettronica
Si vuole simulare la gestione di un’agenda elettronica contenente appuntamenti.
L’agenda è suddivisa in giorni, per 12 mesi complessivi. Ogni giorno è identificato
da 24 ore. Dato un mese, un giorno e un’ora permettere all’utente di:
• Inserire un appuntamento
• Disdire un appuntamento
Inoltre permettere all’utente di
• Data un’ora visualizzare tutti gli appuntamenti in un mese
*/
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX_ORA 23
#define MAX_LUNGHEZZA_STRINGA 100
#define MAX_GIORNI 31
#define MAX_MESE 12
#define MAX_IMPEGNI 5
#define g_31 31
#define g_28 28
#define g_29 29
#define g_30 30
typedef struct
{
char description[MAX_LUNGHEZZA_STRINGA];
int ora[MAX_ORA],mese[MAX_MESE],giorno[MAX_GIORNI];
} impegno;
typedef struct
{
impegno commission[MAX_IMPEGNI];
int num_impegni;
}giorno;
typedef struct
{
giorno date[MAX_GIORNI];
int num_giorni;
}agenda;
void inserisci_impegno(impegno *i);
void componi_agenda(agenda *a);
void inserisci_giorno(giorno *g);
void disdire_impegno(impegno *i);
void visualizza_agenda(impegno *i)
void anno(int *);
void anno(int *bisestile)
{
int anno;
while(anno < 1990)
{
printf("Inserisci anno:\t");
scanf("%d",&anno);
}
anno=anno%2;
if(anno == 0)
{
*bisestile = 0;
}
else
{
*bisestile = 1;
}
}
void inserisci_impegno(impegno *i)
{
int bis,mese,bisestile;
//int anno(int bisestile);
bis=anno(&bisestile);
fflush(stdin);
printf("Che impegno devo inserire?\n");
fflush(stdout);
gets(i->description);
printf("In che mese hai questo impegno\? inserisci solo il mese ( formato mm\\**)\n");
fflush(stdout);
scanf("%d",i -> mese);
while(*i ->mese > MAX_MESE)
{
printf("Mese non supportato,reinserisci mese valido\n");
scanf("%d",i->mese);
}
if(mese == 1 || mese == 3 || mese == 5 || mese == 7 || mese == 8 || mese == 10 || mese == 12) // Utilizo il costrutto if per controllore la gestione dei mesi i cui giorni sono 31
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_31)
{
printf("Giorno non supportato, reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata, reinserisci un' ora valida:\t");
scanf("%d",i->ora);
}
printf("Quanti impegni devo inserire per il giorno %d :\t",giorno);
scanf("%d",&num_impegni);
fflush(stdout);
while(num_impegni == 0)
{ //evita inserimenti di numeri errati
printf("Non hai inserito un numero valido\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
while(num_impegni > MAX_IMPEGNI)
{ //evita di inserire un numero troppo alto
printf("Non puoi prendere tutti questi impegni, rischi un collasso da stress!!\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
}
else if(mese == 4 || mese == 6 || mese == 9 || mese == 11) //Gestione dei mesi i cui giorni sono 30
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_30)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
else //Gestione del mese i cui giorni sono 28 o 29 se l' anno e' bisestile
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
if(bis == 0)
{
while(*i ->giorno > g_28)
{
printf("Giorno non supportato, reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
else
{
while(*i ->giorno > g_29)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? (inserisci solo l'ora) (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
}
printf("*********************************\n");
printf("*\tAppuntamento inserito!! *\n");
printf("*********************************\n");
}
void componi_agenda(agenda *a)
{
int i=0,num_giorno,num_impegni,ripeti;
do
{
printf("In quale giorno vuoi inserire uno o piu impegni?\n");
scanf("%d",&num_giorno);
while(num_giorno > MAX_GIORNI||num_giorno==0)
{ //evito di inserire numeri errati o caratteri
getchar();
printf("Questo giorno non esiste, inseriscine uno corretto!!!!\n");
scanf("%d",&num_giorno);
}
printf("Quanti impegni devo inserire per il giorno %d \?\n",num_giorno);
scanf("%d",&num_impegni);
fflush(stdout);
while(num_impegni == 0)
{ //evita inserimenti di numeri errati
printf("Non hai inserito un numero valido\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
inserisci_giorno(&a->date[num_giorno],num_impegni);
printf("Digita 1 per inserire un nuovo impegno, altrimenti digita un tasto qualsiasi\nper visualizzare l'agenda\n");
scanf("%d",&ripeti);
}
while(ripeti == 1);
}
void disdire_impegno(impegno i)
{
int bis,bisestile,mese;
//int anno(int bisestile);
bis=anno(&bisestile);
fflush(stdin);
printf("In che mese vuoi disdire l' impegno? inserisci solo il mese ( formato mm\\**)\n");
fflush(stdout);
scanf("%d",i -> mese);
while(*i ->mese > MAX_MESE)
{
printf("Mese non supportato, reinserisci mese valido\n");
scanf("%d",i->mese);
}
if(mese == 1 || mese == 3 || mese == 5 || mese == 7 || mese == 8 || mese == 10 || mese == 12) // Utilizo il costrutto if per controllore la gestione dei mesi i cui giorni sono 31
{
printf("In che giorno impegno? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_31)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora vuoi disdire l' impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata, reinserisci un' ora valida:\t");
scanf("%d",i->ora);
}
//Utilizzo la funzione strcpy per copiare nell'array gli spazi vuoti x disdire l'appuntamento
strcpy(i," ");
}
else if(mese == 4 || mese == 6 || mese == 9 || mese == 11) //Gestione dei mesi i cui giorni sono 30
{
printf("In che giorno vuoi disdire l' impegno? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_30)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
//Utilizzo la funzione strcpy per copiare nell'array gli spazi vuoti x disdire l'appuntamento
strcpy(i," ");
}
else //Gestione del mese i cui giorni sono 28 o 29 se l' anno e' bisestile
{
printf("In che giorno vuoi disdire l' impegno\? Inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
if(bis == 0)
{
while(*i ->giorno > g_28)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora vuoi disdire l' impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
//Utilizzo la funzione strcpy per copiare nell'array gli spazi vuoti x disdire l'appuntamento
strcpy(i," ");
}
else
{
while(*i ->giorno > g_29)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
//Utilizzo la funzione strcpy per copiare nell'array gli spazi vuoti x disdire l'appuntamento
strcpy(i," ");
}
}
printf("*********************************\n");
printf("*\tAppuntamento disdetto!! *\n");
printf("*********************************\n");
}
void componi_agenda(agenda *a)
{
int i=0,num_giorno,num_impegni,ripeti;
do
{
printf("In quale giorno vuoi inserire uno o piu impegni?\n");
scanf("%d",&num_giorno);
while(num_giorno > MAX_GIORNI||num_giorno==0)
{ //evito di inserire numeri errati o caratteri
getchar();
printf("Questo giorno non esiste, inseriscine uno corretto!!!!\n");
scanf("%d",&num_giorno);
}
printf("Quanti impegni devo inserire per il giorno %d \?\n",num_giorno);
scanf("%d",&num_impegni);
fflush(stdout);
while(num_impegni == 0)
{ //evita inserimenti di numeri errati
printf("Non hai inserito un numero valido\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
inserisci_giorno(&a->date[num_giorno],num_impegni);
printf("Digita 1 per inserire un nuovo impegno, altrimenti digita un tasto qualsiasi\n per visualizzare l'agenda\n");
scanf("%d",&ripeti);
}
while(ripeti == 1);
}
void visualizza_agenda(agenda *a)
{
printf("Inserisci il mese di cui si vuole visualizzare gli appuntamenti, (formato hh\\**)\t");
scanf("%d",i -> mese);
while(*i ->mese > MAX_MESE)
{
printf("Mese non supportato,reinserisci mese valido\n");
scanf("%d",i->mese);
}
if(mese == 1 || mese == 3 || mese == 5 || mese == 7 || mese == 8 || mese == 10 || mese == 12) // Utilizo il costrutto if per controllore la gestione dei mesi i cui giorni sono 31
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_31)
{
printf("Giorno non supportato, reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata, reinserisci un' ora valida:\t");
scanf("%d",i->ora);
}
printf("Quanti impegni devo inserire per il giorno %d :\t",num_giorno);
scanf("%d",&num_impegni);
fflush(stdout);
while(num_impegni == 0)
{ //evita inserimenti di numeri errati
printf("Non hai inserito un numero valido\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
while(num_impegni > MAX_IMPEGNI)
{ //evita di inserire un numero troppo alto
printf("Non puoi prendere tutti questi impegni, rischi un collasso da stress!!\n");
fflush(stdin);
scanf("%d",&num_impegni);
}
}
else if(mese == 4 || mese == 6 || mese == 9 || mese == 11) //Gestione dei mesi i cui giorni sono 30
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
while(*i ->giorno > g_30)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
else //Gestione del mese i cui giorni sono 28 o 29 se l' anno e' bisestile
{
printf("In che giorno hai questo impegno\? inserisci solo il giorno ( formato gg\\**)\n");
fflush(stdout);
scanf("%d",i -> giorno);
if(bis == 0)
{
while(*i ->giorno > g_28)
{
printf("Giorno non supportato, reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? Inserisci solo l'ora (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
else
{
while(*i ->giorno > g_29)
{
printf("Giorno non supportato,reinserisci giorno valido\n");
scanf("%d",i->giorno);
}
printf("A che ora hai questo impegno\? (inserisci solo l'ora) (formato hh\\**)\n");
fflush(stdout);
scanf("%d",i->ora);
while(*i->ora > MAX_ORA)
{
printf("Ora non supportata,reinserisci ora valida\n");
scanf("%d",i->ora);
}
}
}
}
int main()
{
int anno,flag=0;
int bisestile;
printf("Benvenuto/a nella propria Agenda Elettronica, ora inserisca il proprio nome:\t");
scanf("%s",&nome);
if(nome[20]!='\0')
{
while( flag != 1)
{
anno(&bisestile);
printf("%s cosa desideri fare?\n",nome);
printf("'V' per Visualizzare un appuntamento\n");
printf("'I' per Inserire un appuntamento\n");
printf("'D' per Disdire un appuntamento\n");
printf("'S' per Uscire dall'agenda elettronica\n");
printf("Inserire la scelta:\t");
fflush(stdin);
cosa_fare= getchar();//Uso la funzione getchar per inserire i caratteri per la scelta dell'operazione da eseguire
if(cosa_fare == 'v' || cosa_fare == 'V') //Utilizzo il costrutto di controllo if per gestire i vari casi di inseriemnto da parte dell' utente
{
visualizzare_agenda(agenda);
}
if(cosa_fare == 'i' || cosa_fare == 'I')
{
inserire_impegno(agenda);
}
if(cosa_fare == 'D' || cosa_fare == 'd')
{
disdire_impegno(agenda);
}
if(cosa_fare == 'S' || cosa_fare == 's')
{
printf("Ciao %s e' stato un piacere esserti utile\n",nome);
flag=1;
}
}
}
system("PAUSE");
return 0;
}