/* Programma 64cppArrayStructFunzioni Compilato con dev-c++ Riontino Raffaele 3AS INF I.T.I.S. Ettore Molinari - Milano - 7-3-'10 1. Esercizio a) Creare un array di strutture i cui campi sono: " nome (stringa) " cognome (stringa) " eta (intero) b) Caricare l'array controllando che tutti i campi siano inseriti correttamente c) Ordinare l'array per cognome , nome , eta' d) Visualizzare l'array ordinato " CONCETTI: Array, Strutture, Stringhe, Ordinamento, Funzione, Passaggi di parametri */ #include #include #include #define max 4 #define let 25 using namespace std; struct nominativi{ char cognome[let]; char nome[let]; int eta; }; int controllolettere(char provvisorio[]); int controlloeta(char provvisorio[]); char menu(); void fine(); void nome(struct nominativi elenco[]); void cognome(struct nominativi elenco[]); void eta(struct nominativi elenco[]); main() { nominativi elenco[max]; char provvisorio[let], scelta,inizio; int errore,i; do{ system("cls"); cout << "\n\n\tArray di strutture con i campi :\n\n"; cout << "\n\t- 1 - Cognome (stringa)\n\t- 2 - Nome (stringa)\n\t- 3 - eta' (intero)\n\n"; cout << "\tControllo degli imput e riordino per cognome\n\t(utilizzo delle funzioni)\n\n"; for (i=0 ; i let) {errore=1; cout << "\tCognome troppo lungo.Ripeti!!\n"; } } if (!errore) {strcpy(elenco[i].cognome,provvisorio);} }while(errore); do{ errore=0; cout << "\tNome : "; cin.getline(provvisorio,50); errore=controllolettere(provvisorio); if (!errore) {if (strlen(provvisorio) > let) {errore=1; cout << "\tNome troppo lungo.Ripeti!!\n"; } } if (!errore) {strcpy(elenco[i].nome,provvisorio);} }while(errore); do{ cout << "\tEta' : "; cin.getline(provvisorio,50); errore=controlloeta(provvisorio); if (!errore) {elenco[i].eta = atoi(provvisorio);} }while(errore); }//chiusura for cout << "\n\n\tCaricamento della struttura completato.\n\n\t"; system("pause"); do{ scelta=menu(); switch (scelta) { case 'n' : nome(elenco); break; case 'c' : cognome(elenco); break; case 'e' : eta(elenco); break; case 'i' : inizio='i'; break; case 'f' : fine(); exit(0); break; default : system("cls"); cout << "\n\n\tAttenzione, scelta non consentita.Riprova!!\n\n\n\t"; system("pause"); }//switch }while (inizio != 'i'); }while(1); }//chiusura main //funzione controllolettere int controllolettere(char provvisorio[]) { int e=0,i,flag,k; flag=1; for (i=0 ; i 122)){ if (provvisorio[k] != 32){ cout << "\tCi sono dei caratteri non consentiti.Ripeti!!\n "; flag=0; e=1; } } k++; } return e; }//chiusura controllolettere //funzione controlloeta int controlloeta(char provvisorio[]) { int k,flag,e=0,i; flag=1; k=0; i=strlen(provvisorio); while((k 57)){ flag=0; cout << "\tSono stati inseriti dei dati non corretti.Ripeti!!\n"; e=1; } k++; } if (!e) { k=atoi(provvisorio); if ((k<0) || (k > 170)){ cout << "\n\n L'eta' inserita non è valida.Riprova!!\n"; } } return e; }//chiusura controlloeta //funzione menu char menu() { char scelta; system("cls"); cout << "\n\n\t\t\tMenu'\n\n\n"; cout << "\t- N - Visualizza i nominativi ordinati per nome\n\n"; cout << "\t- C - Visualizza i nominativi ordinati per cognome\n\n"; cout << "\t- E - Visualizza i nominativi ordinati per eta'\n\n"; cout << "\t- I - Inizio\n\n"; cout << "\t- F - Fine\n\n\t"; scelta = getch(); scelta = tolower(scelta); return scelta; }//chiusura menu //funzione fine void fine() { system("cls"); cout << "\n\n\t\t\tProgramma terminato\n\n"; cout << "\n\n\tRiontino Raffaele 3AS INF ITIS Ettore Molinari - Milano - \n\n"; cout << "\n\n\t\t\t 7 - 3 - 2010\n\n\n\t"; system("pause"); }//chiusura fine //funzione nomi void nome(struct nominativi elenco[]) { char temp[let]; int tempint; system("cls"); cout << "\n\n\tRiordino elenco per nome : \n\n"; int flag,k,i; flag=1; k=max-1; while ((flag)&&(k>0)) { flag=0; for(i=0 ; i 0){ strcpy(temp,elenco[i].nome); strcpy(elenco[i].nome,elenco[i+1].nome); strcpy(elenco[i+1].nome,temp); strcpy(temp,elenco[i].cognome); strcpy(elenco[i].cognome,elenco[i+1].cognome); strcpy(elenco[i+1].cognome,temp); tempint = elenco[i].eta; elenco[i].eta = elenco[i+1].eta; elenco[i+1].eta = tempint; flag=1; } } k--; } for (i=0 ; i0)) { flag=0; for(i=0 ; i 0){ strcpy(temp,elenco[i].cognome); strcpy(elenco[i].cognome,elenco[i+1].cognome); strcpy(elenco[i+1].cognome,temp); strcpy(temp,elenco[i].nome); strcpy(elenco[i].nome,elenco[i+1].nome); strcpy(elenco[i+1].nome,temp); tempint = elenco[i].eta; elenco[i].eta = elenco[i+1].eta; elenco[i+1].eta = tempint; flag=1; } } k--; } for (i=0 ; i0)) { flag=0; for(i=0 ; i elenco[i+1].eta) { tempint = elenco[i].eta; elenco[i].eta = elenco[i+1].eta; elenco[i+1].eta = tempint; strcpy(temp,elenco[i].cognome); strcpy(elenco[i].cognome,elenco[i+1].cognome); strcpy(elenco[i+1].cognome,temp); strcpy(temp,elenco[i].nome); strcpy(elenco[i].nome,elenco[i+1].nome); strcpy(elenco[i+1].nome,temp); flag=1; } } k--; } for (i=0 ; i