LordHk Moderatore
Numero di messaggi : 140 Data d'iscrizione : 28.09.07
| Titolo: [C]Inutility per la gestione file Ven Ott 19, 2007 11:05 pm | |
| Ma io qua non vi ho messo il mio passatempo prima di Ferragosto... XD @Black: questo è il vecchio codice, quello senza variabili globali è nel mio mp3 rotto... Siccome sono pigro per rifare il lavoro, posto questo con quellepiccole mancanze... - Codice:
-
/*Programma per la gestione anagrafica su file. 14/08/2007 Lord Hk (corretto da BlackLight)*/
#include <stdio.h> #include <string.h>
#define DIM 31 #define MENU 0 #define INS 1 #define CAN 2 #define RIC 3 #define VIS 4 #define OUT 100
//Dati persona struct per { char cognome[DIM]; char nome[DIM]; char ind[DIM]; int eta; };
//Puntatore al file FILE *fp;
//Variabile di appoggio per operazioni su file struct per anag;
int menPer(void); void insPer(void); void ricPer(void); void canPer(void); long cerPer(char *, char *, int); void eliPer(long pos); void visPer(void); void visAnagrafe(void);
//Menù e funzione scelta int main() { int scelta = MENU; while(scelta!=OUT) { switch(scelta) { case MENU: scelta = menPer(); if(scelta == MENU) scelta = OUT; break; case INS: insPer(); scelta = MENU; break; case CAN: canPer(); scelta = MENU; break; case RIC: ricPer(); scelta = MENU; break;} } }
//Menù int menPer(void) { int scelta; char invio; int vero = 1;
while(vero){ printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\t\t\t GESTIONE CONTATTI"); printf("\n\n\n\t\t\t 1. Immissione Persona"); printf("\n\n\t\t\t 2. Cancellazione Persona"); printf("\n\n\t\t\t 3. Ricerca Persona"); printf("\n\n\t\t\t 4. Visualizza elenco"); printf("\n\n\t\t\t 0. Chiudi"); printf("\n\n\n\t\t\t\t Scegliere una opzione: "); scanf("%d", &scelta); getchar(); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); switch(scelta) { case 0: case 1: case 2: case 3: case 4: return(scelta); default: break; } } return(0); }
//Inserimento persona in anag.dat void insPer(void) { char invio; fp = fopen("anag.dat", "a+");
printf("\n\t\tINSERIMENTO PERSONA"); printf("\n\t\t---------------\n\n"); printf("\nCognome : ");
fgets(anag.cognome,sizeof(anag.cognome),stdin); anag.cognome[strlen(anag.cognome)-1]=0;
printf("\nNome : "); fgets(anag.nome,sizeof(anag.nome),stdin); anag.nome[strlen(anag.nome)-1]=0;
printf("\nEmail : "); fgets(anag.ind,sizeof(anag.ind),stdin); anag.ind[strlen(anag.ind)-1]=0;
printf("\nEta' : "); scanf("%d", &anag.eta), scanf("%c", &invio);
fwrite(&anag, sizeof(struct per), 1, fp); fclose(fp); }
//Cancella persona dall'anagrafe void canPer(void) { char pausa; char cognome[DIM], nome[DIM]; int eta; long pos; printf("\n\t\tCANCELLA PERSONA"); printf("\n\t\t------\n\n");
printf("\nCognome : "); getchar(); fgets(cognome,sizeof(cognome),stdin); cognome[strlen(cognome-1)]=0;
printf("\nNome : "); fgets(nome,sizeof(nome),stdin); nome[strlen(nome)-1]=0;
printf("\Eta' : "); scanf("%d", &eta); scanf("%c", &pausa); //Chiama ricerca persona pos = cerPer(cognome, nome, eta); if(pos == -1) { printf("\nPersona non presente"); scanf("%c", &pausa); return; } //Chiama visulizza persona visPer(); printf("\nConfermi cancellazione ? (S/N) "); scanf("5c", &pausa); if(pausa=='S' || pausa=='s') { eliPer(pos); return; } } //Elimina persona void eliPer(long pos) { strcpy(anag.cognome, ""); strcpy(anag.nome, ""); strcpy(anag.ind, ""); anag.eta = 0; fp = fopen("anag.dat", "r+"); fseek(fp,pos,0); fwrite(&anag, sizeof(struct per), 1, fp); fclose(fp); }
//Ricerca persona void ricPer(void) { char pausa; char cognome[DIM], nome[DIM]; int eta; long pos; //Inserimento dati persona da ricercare printf("\n\t\tRICERCA PERSONA"); printf("\n\t\t------\n\n");
printf("\nCognome : "); fgets(cognome,sizeof(cognome),stdin); cognome[strlen(cognome)-1]=0;
printf("\nNome : "); fgets(nome,sizeof(nome),stdin); nome[strlen(nome)-1]=0;
printf("\nEta' : "); scanf("%d", &eta); scanf("%c", &pausa); //Chiama la funzione di scansione sequenziale pos = cerPer(cognome, nome, eta); if(pos == -1) { printf("\nPersona non presente"); scanf("%c", &pausa); return; } visPer(); scanf("%c", &pausa); }
//Scansione sequenziale di anag.dat long cerPer(char *cg, char *nm, int et) { int n; long pos = 0L;
fp = fopen("anag.dat", "r");
for(;;) { n = fread(&anag, sizeof(struct per), 1, fp); if(n==0) { fclose(fp); pos = -1; return (pos); } else if(strcmp(cg, anag.cognome) == 0) if(strcmp(nm, anag.nome) == 0) if(et == anag.eta) { pos = ftell(fp); fclose(fp); return(pos-sizeof(struct per)); } } }
//Visualizza persona void visPer(void) { printf("\n\n--------------------\n"); printf("\n\t\tCognome : %s", anag.cognome); printf("\n\t\tNome : %s", anag.nome); printf("\n\t\tEmail : %s", anag.ind); printf("\n\t\tEta' : %d", anag.eta); printf("\n\n--------------------\n"); }
//Visualizza anagrafe completa void visAnagrafe(void) { int n; char pausa; fp = fopen("anag.dat", "r"); do { n = fread(&anag, sizeof(struct per), 1, fp); if(n==0) fclose(fp); else { visPer(); scanf("%c", &pausa); } } while(n!=0); }
| |
|
BlackLight Moderatore
Numero di messaggi : 277 Età : 37 Data d'iscrizione : 22.08.07
| Titolo: Re: [C]Inutility per la gestione file Sab Ott 20, 2007 12:25 am | |
| Si si...me lo ricordo | |
|