Gestione archivio studenti C
Inviato: domenica 13 aprile 2014, 21:42
Salve a tutti, mi trovo davanti un piccolo programma per la gestione di un archivio di studenti. Il testo è il seguente:
"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:
Osservate la funzione che ho scritto "selezione" che deve poter far scegliere all'utente un opzione che poi andrà a richiamare una determinata funzione. Cercando su Internet non ho trovato nulla. Qual'è la logica per fare un "selettore" di opzioni? Come richiamo una funzione dentro un'altra funzione? Compilandolo mi dice che le funzioni da me richiamate dentro "selezione" necessitano di più parametri.
Grazie in anticipo
Andrea
"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