"Realizzare un breve programma applicativo che utilizza un vettore di record TStudente, destinato a conservare i dati anagrafici relativi agli studenti di una certa scuola. I campi dei record TStudente devono contenere il nome e il cognome dello studente, la classe di appartenenza, il luogo di nascita, il giorno, il mese e l'anno di nascita.
Il programma deve consentire di caricare e visualizzare i dati di N studenti (N deciso dall'utente, max 1000) in un archivio, attraverso apposite funzioni.
Il programma deve poter individuare, attraverso due apposite funzioni, lo studente più giovane e quello più anziano della scuola.
Il programma deve consentire, attraverso una apposita funzione, la ricerca di un certo studente presente nell'elenco, a partire dal suo nominativo.
Il programma deve consentire, attraverso una apposita funzione, la ricerca di un certo studente presente nell'elenco, a partire dalla sua data di nascita.
Il programma deve consentire, attraverso una apposita funzione, la selezione dell'elenco di tutti gli studenti appartenenti a una certa classe."
Io ho fatto praticamente tutto il programma(ovviamente da correggere qualcosa) ma mi trovo davanti a questa problematica:
Il codice è il seguente:
Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>
// costanti
#define MAXSTU 1000 // numero max di studenti ammissibile
#define STR 30 // lunghezza stringa
//struttura
typedef struct {
char nome[STR+1];
char cognome[STR+1];
char classe[STR+1];
char luogonasc[STR+1];
int g,m,a; // giorno,mese,anno
}Tstudente;
//prototipi
void acquisisci(int *numeff,int max,int min, const char frase[]);
void carica(Tstudente stud[],int numeff);
void ricercanom(Tstudente ve[],int numeff,int str);
void ricercaclass(Tstudente ve[],int numeff,int str);
void ricercadat(Tstudente ve[],int numeff);
void visualizza(Tstudente ve[],int numeff);
// main
int main()
{
int neff; // numero effettivo studenti
Tstudente ve[MAXSTU];
acquisisci(&neff,MAXSTU,0,"Inserisci numero alunni da caricare dentro l'archivio: ");
carica(ve,neff);
selezione(ve,neff);
//ricercanom(ve,neff,STR); // funzione che ricerca per nominativo
//ricercaclass(ve,neff,STR); //funzione che ricerca per classe
ricercadat(ve,neff); //funzione che ricerca per data di nascita
//ricercagiovanz(ve,neff); studente più giovane e studente più anziano
//visualizza(ve,neff);
return 0;
}
//acquisizione del numero effettivo
void acquisisci(int *numeff,int max,int min, const char frase[])
{
int app;
printf("%s",frase);
scanf("%d",&app);
while((app > max)||(app < min))
{
printf("Errore, inserisci un numero compreso tra %d e %d: ",min,max);
scanf("%d",&app);
}
*numeff=app;
}
// caricamento dell'archivio
void carica(Tstudente stud[],int numeff)
{
int j;
for(j=0;j<numeff;j++){
printf("Inserisci nome: ");
scanf("%s",stud[j].nome);
printf("Inserisci cognome: ");
scanf("%s",stud[j].cognome);
printf("Inserisci classe: ");
scanf("%s",stud[j].classe);
printf("Inserisci luogo di nascita: ");
scanf("%s",stud[j].luogonasc);
printf("Inserisci giorno: ");
scanf("%d",&stud[j].g);
printf("Inserisci mese: ");
scanf("%d",&stud[j].m);
printf("\nInserisci anno: ");
scanf("%d",&stud[j].a);
}
}
void selezione()
{
char c;
printf("Seleziona: \n 1) Se vuoi ricercare il nome di uno studente: \n2)Se vuoi ricercare uno studente in base alla data di nascita: \n 3)Se vuoi ricercare uno studente per anzianità: \n4)Se vuoi ricercare uno studente per classe di appartenenza: ");
scanf("%c",&c);
if(c==1)
ricercanom();
else if(c==2)
ricercadat();
else if(c==3)
ricercagiovanz();
else if(c==4)
ricercaclass();
}
void ricercanom(Tstudente ve[],int numeff,int str)
{
//variabili di appoggio per nome e cognome
char n[str+1];
char c[str+1];
int j=0; //indice
printf("Inserisci nome da ricercare all'interno dell'archivio: ");
scanf("%s",n);
printf("Inserisci cognome da ricercare all'interno dell'archivio: ");
scanf("%s",c);
while(j<numeff)
{
//comparo le due stringhe / == 0 stringhe identiche
strcmp(n,ve[j].nome);
strcmp(c,ve[j].cognome);
if((strcmp(n,ve[j].nome)==0) && (strcmp(c,ve[j].cognome)==0)) // stringhe identiche
{
//stampo nome e cognome
printf("\nNome: %s",ve[j].nome);
printf("\nCognome: %s",ve[j].cognome);
printf("\n\n");
}
// se non ha trovato nessuna corrispondenza
else {
printf("Nessun elemento corrisponde ai criteri richiesti");
}
j++;
}
}
void ricercaclass(Tstudente ve[],int numeff,int str)
{
int j=0;
char class[str+1];
printf("Inserisci classe da ricercare: ");
scanf("%s",class);
while(j<numeff)
{
strcmp(class,ve[j].classe);
if(strcmp(class,ve[j].classe)==0){
printf("\nNome: %s",ve[j].nome);
printf("\nCognome: %s",ve[j].cognome);
}
j++;
}
}
void ricercadat(Tstudente ve[],int numeff)
{
int j;
int appg,appm,appa;
printf("Inserisci giorno da ricercare: ");
scanf("%d",&appg);
printf("Inserisci mese da ricercare: ");
scanf("%d",&appm);
printf("Inserisci anno da ricercare: ");
scanf("%d",&appa);
for(j=0;j<numeff;j++)
{
if((appg==ve[j].g)&&(appm==ve[j].m)&&(appa==ve[j].a))
{
printf("\nNome: %s",ve[j].nome);
printf("\nCognome: %s",ve[j].cognome);
}
else{
printf("Nessun elemento corrisponde ai criteri richiesti");
}
}
}
void visualizza(Tstudente ve[],int numeff)
{
int j;
for(j=0;j<numeff;j++)
{
printf("\nNome: %s",ve[j].nome);
printf("\nCognome: %s",ve[j].cognome);
printf("\nClasse: %s",ve[j].classe);
printf("\nLuogo di nascita: %s",ve[j].luogonasc);
printf("\nGiorno: %d",ve[j].g);
printf("\nMese: %d",ve[j].m);
printf("\nAnno: %d",ve[j].a);
}
}
Grazie in anticipo
Andrea
