Xhack

Un forum dedicato all'hacking
 
IndiceIndice  PortalePortale  CalendarioCalendario  FAQFAQ  CercaCerca  RegistrareRegistrare  Lista utentiLista utenti  GruppiGruppi  Connessione  

Condividere | 
 

 [C]Inutility per la gestione file

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
LordHk
Moderatore
Moderatore


Numero di messaggi: 140
Data d'iscrizione: 28.09.07

MessaggioOggetto: [C]Inutility per la gestione file   Ven Ott 19, 2007 9: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);
}
Tornare in alto Andare in basso
Vedere il profilo dell'utente
BlackLight
Moderatore
Moderatore


Numero di messaggi: 277
Età: 25
Data d'iscrizione: 22.08.07

MessaggioOggetto: Re: [C]Inutility per la gestione file   Ven Ott 19, 2007 10:25 pm

Si si...me lo ricordo Very Happy

_________________
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/CM/CC/E/IT/LS/M d-(--) s:- a-- C+++$ UBL++++$ P+++ L+++++$ E- W+++ N+ o? K? w-- !O !M>+ !V PS+++ PE-- Y++ PGP+ !t !5 !X R+ tv-- b++>+++ DI? D+ G>+++ e++>++++ h r++ y+++
------END GEEK CODE BLOCK------

Codice:
blacklight@nightmare:/$ touch figa
touch: cannot touch `figa': Permission denied
Tornare in alto Andare in basso
Vedere il profilo dell'utente http://blacklight.gotdns.org
 

[C]Inutility per la gestione file

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 su1

 Argomenti simili

-
» 66) Flash: gestione musica e slideshow mediante quattro pulsanti
» [GUIDA]Tradurre Server(NPC, DIALOGHI E QUEST)
» LO SCOPO COME CREARE UN SERVER DEDICATO
» NUOVA ZELANDA: PUBBLICATI I DOSSIER TOP SECRET SUGLI UFO
» COME CREARE UN RETRO V40

Permesso del forum:Non puoi rispondere agli argomenti in questo forum
Xhack :: Programmazione :: C/C++-