Codice PHP:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
/* !
* La struttura Telefono è utilizzata per memorizzare il Numero Telefonico
* del Contatto ed il tipo ( "Etichetta" ) di numero
*/
typedef struct { unsigned int ID; /*!< Variabile intera senza segno di
* indentificazione univoca del numero telefonico */
char NumTel[50]; /*!< Stringa contenente il numero telefonico*/
char Etichetta [50]; /*!< Stringa contenente la tipologia di
* numero telefonico: "Casa" , "Ufficio" , "Fax" , etc...*/
} Telefono;
/*
La struttura Persona utilizzata per allocare un nuovo Contatto
*/
typedef struct { unsigned int ID;
char Cognome [50];
char Nome [50];
Telefono Tel;
char Indirizzo[100];
} Persona;
void Inserisci( Persona **New , int *n);
void stampa( Persona *List , int n );
int main(){
Persona *Contatti;
int start, choice;
start = 0;
Contatti = NULL;
printf("Premi 1 per inserire\n"
"Premi 2 per terminare\n?");
scanf("%d", &choice);
while(choice!=2){
Inserisci(&Contatti, &start );
stampa(Contatti, start );
printf("?");
scanf("%d",&choice);
}
free(Contatti);
system("PAUSE");
return 0;
}
void Inserisci( Persona **New , int *n )
{ int i, dim;
Persona *NewP;
dim=*n;
if (dim == 0){
dim++;
NewP=(Persona*)malloc(sizeof(Persona));
}
else{
dim++;
NewP = (Persona*)realloc(*New, dim);
}
system("CLS");
/* Inserimento dati... */
printf ( "\nInserimento Persona\n" );
NewP[dim].ID=dim;
/* ...stampo l'ID */
printf("\nID: %d\n" , NewP[dim].ID);
/* Inserimento Cognome del Contatto nella struttura di appoggio */
printf("Cognome: ");
scanf("%s" , NewP[dim].Cognome );
/* Inserimento Nome del Contatto nella struttura di appoggio */
printf("Nome: ");
scanf ( "%s" , NewP[dim].Nome );
/* Inserimento Numero Telefonico del Contatto nella struttura di appoggio */
printf("Numero: ");
scanf("%s" , NewP[dim].Tel.NumTel );
/* Inserimento Tipo di Numero Telefonico del Contatto nella struttura di appoggio */
printf("Tipo Numero: ");
scanf("%s" , NewP[dim].Tel.Etichetta );
/* Inserimento Indirizzo del Contatto nella struttura di appoggio */
getchar();
printf("Indirizzo: ");
fgets( NewP[dim].Indirizzo , 100 , stdin );
/* Restutuisco al main i valori aggiornati */
*n = dim;
*New=NewP;
/* Stampo un messaggio di di avviso e termino la procedura */
system("CLS");
printf ( "\nContatto inserito\n" );
system("PAUSE");
system("CLS");
return;
}
void stampa ( Persona *List , int n )
{ int i, /* Variabile di iterazione per i cicli */
system("CLS");
printf("\n");
printf("\t\t +-----------------------------+\n");
printf("\t\t + Stampa Contatti + \n");
printf("\t\t +-----------------------------+\n\n");
printf(" -----------------------------------------------------------------------------------------\n");
printf(" %-6s%-13s%-13s%-13s%-10s%s\n" , "ID" , "Cognome" , "Nome" , "Telefono" , "Tipo" , "Indirizzo" );
printf(" -----------------------------------------------------------------------------------------\n\n");
/* Se non c'è nessun contatto, ossia la lunghezza del file è "zero" */
if ( n == 0 )
{
printf(" -> Nessun Contatto Presente <-\n");
}
/* Altrimenti stampa la lista di contatti */
else
{
for(i=1; i<=n; i++)
{
printf(" %-6d%-13s%-13s%-13s%-9s%s\n" , List[i].ID , List[i].Cognome , List[i].Nome ,
List[i].Tel.NumTel , List[i].Tel.Etichetta ,
List[i].Indirizzo);
}
}
printf("\n -----------------------------------------------------------------------------------------\n\n");
printf("\n\n");
system("PAUSE");
system("CLS");
return;
}