Ciao ragazzi volevo far in modo che la stampa degli appuntamenti sia stampata in ordine e ho provato a creare un Selection Sort, ma manda in loop l' esecuzione, cosa ho sbagliato?' vi scrivo il codice
/*
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<stdlib.h>
#include<string.h>
#include<time.h>
#include<ctype.h>
#define MAX_ORA 23
#define MAX_LUNGHEZZA_STRINGA 50
#define MAX_GIORNI 31
#define MAX_MESE 12
#define MAX_IMPEGNI 5
#define MAX_UTENTE 20
#define MAX_ANNO 2015
struct
{
char Nome[MAX_UTENTE][MAX_LUNGHEZZA_STRINGA];
char Cognome[MAX_UTENTE][MAX_LUNGHEZZA_STRINGA];
int indice[MAX_UTENTE];
int num_utenti;
char Password[MAX_UTENTE][MAX_IMPEGNI];
}agenda;
struct
{
int libero;
int num_impegni;
char description[MAX_IMPEGNI][MAX_LUNGHEZZA_STRINGA];
int ora[MAX_IMPEGNI];
int mese[MAX_IMPEGNI];
int giorno[MAX_IMPEGNI];
int anno[MAX_IMPEGNI];
}utente[MAX_UTENTE]; //facciamo un array di struct per ogni persona
void crea_agenda();
void inizializza();
int controllo_password(char [MAX_IMPEGNI]); // Riferimento per indirizzo del primo elemento dell' array che puo' essere visto come un puntatore
void visualizza();
void disdire();
void aggiorna();
void inizializza()
{
int i,j;
agenda.num_utenti=0;
for(i=0;i<MAX_UTENTE;i++)
{
utente[i].libero=1;
for(j=0;j<MAX_IMPEGNI;j++)
{
utente[i].ora[j]=-1;
}
}
}
void crea_agenda()
{
int n_utente=0;
int loop;
int i,j;
printf("Inserisci il numero di utenti da registrare:\t");
do
{
loop=1;
scanf("%d",&n_utente);
fflush(stdin);
if(n_utente+agenda.num_utenti > MAX_UTENTE)
{
printf("Non posso gestire tutti questi utenti! Ridefinire numeri di utenti:\a\t");
loop=0;
}
}while(loop==0);
agenda.num_utenti=agenda.num_utenti+n_utente;
for(i=agenda.num_utenti-n_utente;i<agenda.num_utenti;i++)
{
printf("Inserire il proprio nome:\t");
scanf("%s",&agenda.Nome[i]);
printf("Inserire il proprio cognome:\t");
scanf("%s",&agenda.Cognome[i]);
do
{
printf("Inserire Password di almeno 4 caratteri:\t");
scanf("%s",&agenda.Password[i]);
}while(strlen(agenda.Password[i])>=MAX_IMPEGNI || controllo_password(agenda.Password[i])==1);
do
{
agenda.indice[i]=rand()%MAX_UTENTE; //GESTIONE RANDOM DELLA POSIZIONE DEGLI UTENTI
}while(utente[agenda.indice[i]].libero!=1);
do
{
loop=1;
printf("Definire il numero di impegni:\t");
scanf("%d",&utente[agenda.indice[i]].num_impegni);
fflush(stdin);
if(utente[agenda.indice[i]].num_impegni > MAX_IMPEGNI)
{
printf("Troppi impegni, Rischi di collassare! Ridefinire impegni:\a\t");
loop=0;
}
}while(loop == 0);
for(j=0;j<utente[agenda.indice[i]].num_impegni;j++)
{
printf("Definire impegno %d.\n",j+1);
do
{
printf("Inserisci l' ora in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].ora[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].ora[j] > MAX_ORA || utente[agenda.indice[i]].ora[j] < 0);
do
{
printf("\nInserisci il giorno in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].giorno[j]);
fflush(stdin);
}while((utente[agenda.indice[i]].giorno[j] > MAX_GIORNI) || (utente[agenda.indice[i]].giorno[j] <= 0));
do
{
printf("\nInserisci l' anno in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].anno[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].anno[j] < MAX_ANNO);
do
{
printf("\nInserisci il mese in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].mese[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].mese[j] > MAX_MESE || utente[agenda.indice[i]].mese[j] <= 0);
printf("\nInserisci la descrizione del tuo impegno %d:\t",j+1);
scanf("%s",&utente[agenda.indice[i]].description[j]);
system("cls");
}
}
}
int controllo_password( char buffer[MAX_IMPEGNI]) //Passaimo il primo indirizzo dell' array mia_password
{
int i;
int count=0;
for(i=0;i < agenda.num_utenti ;i++ )
{
if(!strcmp(buffer,agenda.Password[i]))
{
count++;
if(count>1)
{
return 1;
}
}
}
return 0;
}
void visualizza()
{
char mia_password[MAX_IMPEGNI];
int i;
printf("Inserire Password:\t");
scanf("%s",&mia_password);
for(i=0;i<agenda.num_utenti;i++)
{
if(!strcmp(mia_password,agenda.Password[i]))
{
int mia_ora,j,mio_mese,mio_giorno;
printf("Inserci l' ora degli appuntamenti :\t");
scanf("%d",&mia_ora);
printf("Inserisci il mese dove cercare:\t");
scanf("%d",&mio_mese);
int count=0;
//Selection Sort e stampa
do{
j=0;
if((mia_ora==utente[agenda.indice[i]].ora[j]) && (mio_mese==utente[agenda.indice[i]].mese[j]))
{
int k;
mio_giorno=utente[agenda.indice[i]].giorno[j];
for(k=j+1;k<MAX_GIORNI;k++)
{
if(utente[agenda.indice[i]].giorno[k] < mio_giorno)
{
mio_giorno=utente[agenda.indice[i]].giorno[k];
utente[agenda.indice[i]].giorno[k]=mio_giorno=utente[agenda.indice[i]].giorno[j];
mio_giorno=utente[agenda.indice[i]].giorno[j]=mio_giorno;
}
}
printf("Gli appuntamenti del mese %d del giorno %d dell ora %d sono :\n",mio_mese,mio_giorno,mia_ora);
printf("Impegno %d Descrizione: %s\n",j+1,utente[agenda.indice[i]].description[j]);
count++;
}
j++;
}while(count<utente[agenda.indice[i]].num_impegni || j < MAX_GIORNI );
break;
}
}
}
void disdire()
{
char mia_password[MAX_IMPEGNI];
int i;
printf("Inserire Password:\t");
scanf("%s",&mia_password);
for(i=0;i<agenda.num_utenti;i++)
{
if(!strcmp(mia_password,agenda.Password[i]))
{
int mia_ora,j,mio_mese,mio_giorno,mio_anno;
printf("Inserci l' ora dell' appuntamento da disdire :\t");
scanf("%d",&mia_ora);
printf("Inserire il giorno dell' appuntamento da disdire:\t");
scanf("%d",&mio_giorno);
printf("Inserisci il mese dove cercare:\t");
scanf("%d",&mio_mese);
printf("Inserisci l' anno:\t");
scanf("%d",&mio_anno);
for(j=0;j<utente[agenda.indice[i]].num_impegni;j++)
{
if(mia_ora==utente[agenda.indice[i]].ora[j] && mio_mese==utente[agenda.indice[i]].mese[j] && mio_anno==utente[agenda.indice[i]].anno[j] && mio_giorno==utente[agenda.indice[i]].giorno[j])
{
strcpy(utente[agenda.indice[i]].description[j],"DELETED");
printf("\n");
utente[agenda.indice[i]].ora[j]=utente[agenda.indice[i]].mese[j]=-1;
utente[agenda.indice[i]].num_impegni--;
printf("%s",utente[agenda.indice[i]].description[j]);
break;
}
}
break;
}
}
}
void aggiorna()
{
int i,j;
char mia_password[MAX_IMPEGNI];
printf("Inserire Password:\t");
scanf("%s",&mia_password);
for(i=0;i<agenda.num_utenti;i++)
{
if(!strcmp(mia_password,agenda.Password[i]))
{
for(j=0;j<MAX_IMPEGNI;j++)
{
if(utente[agenda.indice[i]].ora[j]==-1)
{
printf("Definire impegno\n");
do
{
printf("Inserisci l' ora in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].ora[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].ora[j] > MAX_ORA || utente[agenda.indice[i]].ora[j] < 0);
do
{
printf("\nInserisci il giorno in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].giorno[j]);
fflush(stdin);
}while((utente[agenda.indice[i]].giorno[j] > MAX_GIORNI) || (utente[agenda.indice[i]].giorno[j] <= 0));
do
{
printf("\nInserisci l' anno in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].anno[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].anno[j] < MAX_ANNO);
do
{
printf("\nInserisci il mese in cui vuoi inserire l' impegno:\t");
scanf("%d",&utente[agenda.indice[i]].mese[j]);
fflush(stdin);
}while(utente[agenda.indice[i]].mese[j] > MAX_MESE || utente[agenda.indice[i]].mese[j] <= 0);
printf("\nInserisci la descrizione del tuo impegno:\t");
scanf("%s",&utente[agenda.indice[i]].description[j]);
utente[agenda.indice[i]].num_impegni++;
break;
}
}
break;
}
}
}
int main()
{
srand(time(NULL));
char cosa_fare;
int flag=0;
inizializza();
crea_agenda();
while(flag==0)
{
printf("***********************************************\n");
printf("* Benvenuto/a nella proria agenda elettronica *\n");
printf("***********************************************\n");
printf("Digitare la propria scelta\n");
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 propria scelta:\t");
cosa_fare= getchar();//Uso la funzione getchar per inserire i caratteri per la scelta dell'operazione da eseguire
fflush(stdin);
system("cls");
if(cosa_fare == 'v' || cosa_fare == 'V') //Utilizzo il costrutto di controllo if per gestire i vari casi di inseriemnto da parte dell' utente
{
visualizza();
}
if(cosa_fare == 'i' || cosa_fare == 'I')
{
aggiorna();
}
if(cosa_fare == 'D' || cosa_fare == 'd')
{
disdire();
}
if(cosa_fare == 'S' || cosa_fare == 's')
{
printf("Ciao e' stato un piacere esserti stato utile\n");
flag=1;
}
system("pause");
}
return 0;
}