#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Data
{
int gg;
int mm;
int aaaa;
};
struct Anagrafica
{
char nome[30];
char cognome[30];
char matricola[6];
struct Data Data_Nascita;
int cancellato;
};
struct Anagrafica Nuovo;
void Inserisci (void)
{
FILE *f_input;
if((f_input=fopen("dati.txt","a"))==NULL){
printf("Error inexistent file");
exit(1);
}else
{
printf("Inserisci nome: \n");
scanf("%s",Nuovo.nome);
printf("Iserisci cognome:\n");
scanf("%s",Nuovo.cognome);
printf("Iserisci matricola:\n");
scanf("%s",Nuovo.matricola);
printf("Iserisci data di nascita:\n");
scanf("%d %d %d",&Nuovo.Data_Nascita.gg,&Nuovo.Data_Nascita.mm,&Nuovo.Data_Nascita.aaaa);
fprintf(f_input,"%s %s %s %d %d %d \n",Nuovo.nome,Nuovo.cognome,Nuovo.matricola,Nuovo.Data_Nascita.gg,Nuovo.Data_Nascita.mm,Nuovo.Data_Nascita.aaaa);
}
fclose(f_input);
return;
};
void Cancella (void)
{char matricola_richiesta[6];
int trovato = 0;
FILE *f_input;
if ((f_input=fopen("dati.txt","r+"))==NULL){
printf("Impossibile aprire il file\n");
exit(1);
}else {
printf("\Inserire la matricola da cancellare: ");
scanf("%s", matricola_richiesta);
while ((!trovato) && (!feof(f_input))){
fread(&Nuovo, sizeof(struct Anagrafica), 1, f_input);
if (!strcmp(Nuovo.matricola, matricola_richiesta)==0) {
trovato = 1;
Nuovo.cancellato=1;
fseek(f_input,-48,SEEK_CUR);
fwrite(&Nuovo, sizeof(struct Anagrafica), 1, f_input);
printf("\nCancellazione effettuata!\n");
}
}
fclose(f_input);
if (!trovato)
printf("\n La matricola cercata non esiste!\n");
}
return;
};
void Modifica (void)
{char matricola_richiesta[6];
int trovato = 0;
FILE *f_input;
if ((f_input=fopen("dati.txt","r+"))==NULL){
printf("Impossibile aprire il file\n");
exit(1);
}else {
printf("\Inserire la matricola da modificare: ");
scanf("%s", matricola_richiesta);
while ((!trovato) && (!feof(f_input))){
fread(&Nuovo, sizeof(struct Anagrafica), 1, f_input);
if (!strcmp(Nuovo.matricola, matricola_richiesta)==0) {
trovato = 1;
printf("inserisci la nuova matricola (5 valori alfanumerici)\n");
scanf("%s",Nuovo.matricola);
printf("inserisci il nuovo nome\n");
scanf("%s",Nuovo.nome);
printf("inserisci il nuovo cognome\n");
scanf("%s",Nuovo.cognome);
printf("inserisci la nuova data di nascita \n");
scanf("%d %d %d",&Nuovo.Data_Nascita.gg,&Nuovo.Data_Nascita.mm,&Nuovo.Data_Nascita.aaaa);
fprintf(f_input, " %s %s %s %d %d %d \n", Nuovo.matricola, Nuovo.nome, Nuovo.cognome, Nuovo.Data_Nascita.gg, Nuovo.Data_Nascita.mm, Nuovo.Data_Nascita.aaaa);
}
}
}
fclose(f_input);
return;
}
void Stampa_Singolo_Record (void)
{FILE *f_output;
char matricola_richiesta[6];
int trovato = 0;
if((f_output=fopen("dati.txt","r"))==NULL)
{
printf("\nFile non esistente\n");
exit(1);
}else {printf("\nInserire la matricola da ricercare\n");
scanf("%s",&matricola_richiesta);
while ((!trovato)&&(!feof(f_output))) {fread(&Nuovo,sizeof(struct Anagrafica),0,f_output);
if (strcmp(Nuovo.matricola,matricola_richiesta)==0) {
trovato=1;
printf("Matricola:%s\n",Nuovo.matricola);
printf("Nome:%s\n",Nuovo.nome);
printf("Cognome:%s\n",Nuovo.cognome);
printf("Data di nascita: %d /%d /%d \n",Nuovo.Data_Nascita.gg,Nuovo.Data_Nascita.mm,Nuovo.Data_Nascita.aaaa);
}
}
fclose(f_output);
if(!trovato)
printf("La matricola cercata non esiste\n");
}
return;
};
void Stampa_Totale (void)
{
FILE *f_output;
if((f_output=fopen("dati.txt","r"))==NULL){
printf("Error inexistent file");
exit(1);
}else
{
while(fscanf(f_output,"%s %s %s %d %d %d \n",&Nuovo.nome,&Nuovo.cognome,&Nuovo.matricola,&Nuovo.Data_Nascita.gg,&Nuovo.Data_Nascita.mm,&Nuovo.Data_Nascita.aaaa) !=EOF)
{
printf("Nome: %s\n",&Nuovo.nome);
printf("Cognome: %s\n",&Nuovo.cognome);
printf("Matricola: %s\n",&Nuovo.matricola);
printf("Data di nascita: %d/%d/%d \n",Nuovo.Data_Nascita.gg,Nuovo.Data_Nascita.mm,Nuovo.Data_Nascita.aaaa);
}
fclose(f_output);
}
{
{
}
}
return;
};
/* Procedura Menu */
void Menu (void){
/* variabili locali */
int Scelta;
/* istruzioni */
printf("Gestione dei file\n\n");
printf("1. Inserisci nuovo record\n");
printf("2. Cancella Record\n");
printf("3. Modifica di un record\n");
printf("4. Stampa singolo Record\n");
printf("5. Stampa tutti i Record\n");
printf("0. Uscita\n");
do{
printf("Inserire una scelta: ");
scanf("%d",&Scelta);
switch (Scelta){ /* Test multiplo */
case 0: break;
case 1: Inserisci();
break;
case 2: Cancella();
break;
case 3: Modifica();
break;
case 4: Stampa_Singolo_Record();
break;
case 5: Stampa_Totale();
break;
default: printf("Inserire una scelta valida\n");
}
}while(Scelta != 0);
return;
}
int main()
{
Menu();
}
Spero di aver fatto correttamente... comunque grazie per il suggerimento.Se però dovessi fare in modo che la stampa singola vada in più sessioni come potrei fare?