Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
questo è l'intero programma....lavora su un file in modo da creare una procedura anagrafrafica
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
int inserisci (int);
int ricerca (int);
int cancella (int);
struct voce_menu{char*msg;
int(*funz)(int);};
struct voce_menu menu[]={" ARCHIVIO STUDENTI\n\n1.Inserisci studente\n",inserisci,
"2.Ricerca studente\n",ricerca,
"3.Cancella studente\n",cancella,
"0.Fine\n",NULL,NULL,NULL};
struct data{int giorno;
int mese;
int anno;};
struct studente{
char cognome[30];
char nome[30];
char ind[30];
struct data dat;};
struct studente stud;
FILE*fp;
main(){
int ritorno;
int posizione;
int scelta;
int loop=0;
struct voce_menu *c;
while(loop==0){
for(c=menu;c->msg!=NULL;c++)
printf("%s",c->msg);
printf("\n scegliere opzione:");
scanf("%d",&scelta);
if(scelta==0)loop=1;
else
switch(scelta){
case 1:
(*menu[scelta-1].funz)(10);
break;
case 2:
posizione=(*menu[scelta-1].funz)(50);
if(posizione==-1)
printf("persona non presente");
else
printf("persona presente in pos %d",&posizione);
break;
case 3:
ritorno=(*menu[scelta-1].funz)(10);
if(ritorno==0)
printf("Persona eliminata");
else
printf("Persona non eliminata");
break;}
system("PAUSE"); }}
int inserisci(int niente){
fp=fopen("studenti","a+");
printf("Inserisci cognome:");
scanf("%s",stud.cognome);
printf("Inserisci nome:");
scanf("%s",stud.nome);
printf("Inserisci indirizzo:");
scanf("%s",stud.ind);
printf("Inserisci giorno di nascita:");
scanf("%d",&stud.dat.giorno);
printf("Inserisci mese di nascita:");
scanf("%d",&stud.dat.mese);
printf("Inserisci anno di nascita:");
scanf("%d",&stud.dat.anno);
fwrite(&stud,sizeof(struct studente),1,fp);
fclose(fp);
return 100;}
int ricerca (int riniente){
int n;
int pos;
fp=fopen("studenti","r");
char cogn[30];
char nm[30];
int an;
printf("Inserisci cognome:");
scanf("%s",cogn);
printf("Inserisci nome:");
scanf("%s",nm);
printf("Inserisci anno:");
scanf("%d",&an);
for(;{
n=fread(&stud,sizeof(struct studente),1,fp);
if(n==0){
fclose(fp);
pos=-1;
return (pos);}
else
if(strcmp(cogn,stud.cognome)==0)
if(strcmp(nm,stud.nome)==0)
if(an==stud.dat.anno){
pos=ftell(fp);
fclose(fp);
return (pos-sizeof(struct studente));}}}
int cancella(int nothing){
int z;
int n;
int pos;
fp=fopen("studenti","w+");
char cog[30];
char nm[30];
int an;
printf("Inserisci cognome:");
scanf("%s",cog);
printf("Inserisci nome:");
scanf("%s",nm);
printf("Inserisci anno:");
scanf("%d",&an);
for(;{
n=fread(&stud,sizeof(struct studente),1,fp);
if(n==0)
pos=-1;
else
if(strcmp(cog,stud.cognome)==0)
if(strcmp(nm,stud.nome)==0)
if(an==stud.dat.anno){
pos=ftell(fp);}}
if(pos!=-1){
strcpy(stud.cognome,"");
strcpy(stud.nome,"");
strcpy(stud.ind,"");
stud.dat.giorno=0;
stud.dat.mese=0;
stud.dat.giorno=0;
fseek(fp,pos,0);
fwrite(&stud,sizeof(struct studente),1,fp);
fclose(fp);
z=0;
return (z);}
else
z=1;
fclose(fp);
return (z); }
il programma funziona sl che la funzione 3 non mi ritorna la printf che uso nel main...
Ultima modifica effettuata da domi90 il 28/05/2010 alle 10:01