#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
// Costanti Globali
const int MAX_STRING = 30; // Massimi caratteri del nome e del cognome
const int MAX_NUMBER = 15; // Massimi caratteri per il numero di telefono
const int MAX_ADDRESS = 100; // Massimi caratteri per l'indirizzo
const int MAX_CONTACT = 500; // Numero di contatti massimi nella rubrica
// Funzione per aggiungere un contatto nella rubrica
int addContact(char *fileName)
{
FILE *fp; // Puntatore a file
struct contact c; // Struttura contatto
if(!(fp=fopen(fileName, "a"))) // Se non riesce ad aprire il file
{
printf("\nErrore nell'apertura del file \"%s\" in modalita' append.\n", fileName);
return FALSE; // Ritorna FALSE
}
fflush(stdin); // Pulisco il buffer dello stdin
c.name = (char *) malloc(MAX_STRING*sizeof(char)); // Alloco dinamicamente il nome
printf("\nInserisci il nome del contatto: ");
c.name = fgets(c.name, MAX_STRING+1, stdin); // Prendo in input il nome
c.surname = (char *) malloc(MAX_STRING*sizeof(char)); // Alloco dinamicamente il cognome
printf("Inserisci il cognome: ");
c.surname = fgets(c.surname, MAX_STRING+1, stdin);
c.number = (char *) malloc(MAX_NUMBER*sizeof(char)); // Alloco dinamicamente il numero
printf("Inserisci il numero: ");
c.number = fgets(c.number, MAX_NUMBER+1, stdin);
c.address = (char *) malloc(MAX_ADDRESS*sizeof(char)); // Alloco dinamicamente l'indirizzo
printf("Inserisci l'indirizzo (max. 100 caratteri): ");
c.address = fgets(c.address, MAX_ADDRESS+1, stdin); // Prendo in input l'indirizzo
// Se riesce a scrivere su file più di 0 Byte
if(fwrite(&c, sizeof(c), 1, fp)>0)
{
printf("\nContatto inserito con successo.\n");
}
fclose(fp); // Chiudo il file
// Libero la memoria allocata dinamicamente
free(c.name);
free(c.surname);
free(c.number);
free(c.address);
return TRUE; // Ritorna TRUE se va a buon fine
}
// Funzione che mostra a schermo i contatti presenti nella rubrica
int showContacts(char *fileName)
{
FILE *fp; // Puntatore a file
struct contact *cts; // Puntatore a struttura contatto
int i=0; // Contatore
if(!(fp=fopen(fileName, "r"))) // Se non riesce ad aprire il file
{
printf("\nErrore nell'apertura del file \"%s\" in modalita' lettura.\n", fileName);
return FALSE; // Ritorna FALSE
}
cts = (struct contact *) malloc((MAX_CONTACT+1)*sizeof(struct contact)); // Alloco dinamicamente
while(fread(&cts[i], sizeof(cts[i]), 1, fp) > 0)
{
printf("\nNome: %s\nCognome: %s\nNumero: %s\nIndirizzo: %s\n", cts[i].name, cts[i].surname, cts[i].number, cts[i].address);
i++; // incremento il contatore
}
free(cts); // Libero la memoria allocata dinamicamente
fclose(fp); // Chiudo il file
return TRUE; // Ritorna TRUE se tutto va a buon fine
}