Anteprima
Vedrai una selezione di 3 pagine su 8
Programmazione C , Esercizio: Rubrica in C, Calcolatori Pag. 1 Programmazione C , Esercizio: Rubrica in C, Calcolatori Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Programmazione C , Esercizio: Rubrica in C, Calcolatori Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

case 4:

rubrica = elimina(rubrica);

printf("\n...contatto eliminato!");

break;

}

stampa(rubrica);

printf("\n\nCosa vuoi fare?\n");

printf("1. Visualizza dettagli\n");

printf("2. Aggiungi\n");

printf("3. Modifica\n");

printf("4. Elimina\n");

printf("5. Esci\n");

scanf("%d",&scelta);

if( scelta < 1 || scelta > 5 ) printf("\n************Scelta

non valida*****************\n");

} while( scelta != 5 );

// Alla chiusura, il programma aggiorna il file rubrica.txt

aggiorna(rubrica);

return 0;

}

/* DEFINIZIONE FUNZIONI */

/*

* Stampa la rubrica ( solo nome e cognome )

* @param p puntatore alla testa della lista

* @return void

*/

void stampa(struct contact *p) {

fflush(stdin);

p = ordina(p);

ptr = p;

i=0;

if ( p == NULL )

printf("\nNessun contatto presente.");

else {

printf("\nContatti:");

while ( ptr != NULL ) {

printf("\n%d. ",i+1);

if ( strcmp(ptr->nome," ") != 0 )

printf("%s ",ptr->nome);

if ( strcmp(ptr->cognome," ") != 0 )

printf("%s",ptr->cognome);

ptr = ptr->next;

i++;

}

}

}

/*

* Stampa la rubrica con i dettagli dei contatti.

* @param p puntatore alla testa della lista

* @return void

*/

void stampa_dettagli(struct contact *p) {

fflush(stdin);

ptr = p;

printf("\n");

if ( p == NULL )

printf("\nNessun contatto presente.");

else while ( ptr != NULL ) {

printf("\n");

if ( strcmp(ptr->nome," ") != 0 )

printf("%s ",ptr->nome);

if ( strcmp(ptr->cognome," ") != 0 )

printf("%s",ptr->cognome);

printf("\n");

if ( strcmp(ptr->tel," ") != 0 )

printf("%s",ptr->tel);

printf("\n");

ptr = ptr->next;

}

}

/*

* Stampa i dettagli di un singolo contatto

* @param p puntatore alla testa della lista

* @param n nodo da visualizzare

* @return void

*/

void stampa_contatto(struct contact *p,int n) {

fflush(stdin);

ptr = p;

for ( i=1; i<n; i++)

ptr = ptr->next;

printf("\n");

if ( strcmp(ptr->nome," ") != 0 )

printf("%s ",ptr->nome);

if ( strcmp(ptr->cognome," ") != 0 )

printf("%s",ptr->cognome);

printf("\n");

if ( strcmp(ptr->tel," ") != 0 )

printf("%s",ptr->tel);

printf("\n");

}

/*

* Inizializza la lista concatenata a partire dal file rubrica.txt

* @param void

* @return p La lista appena creata

*/

struct contact *inizializza() {

fflush(stdin);

struct contact *p;

char c;

if( (pf = fopen("rubrica.txt","r")) == NULL ){

printf("\nErrore apertura file");

fclose(pf);

return NULL;

}

if( (c=fgetc(pf)) == EOF ) {

fclose(pf);

return NULL; // Se il file e' vuoto restituisco NULL

}

// Creo primo elemento

p = (struct contact *)malloc(sizeof(struct contact));

// Leggo NOME

for( i=0; (c=fgetc(pf)) != '-'; i++)

bNome[i] = c;

bNome[i] = '\0';

strcpy(p->nome,bNome);

// Leggo COGNOME

for( i=0; (c=fgetc(pf)) != '-'; i++)

bCognome[i] = c;

bCognome[i] = '\0';

strcpy(p->cognome,bCognome);

// Leggo TELEFONO

for( i=0; (c=fgetc(pf)) != '\n'; i++)

bTel[i] = c;

bTel[i] = '\0';

strcpy(p->tel,bTel);

// Se non ci sono altri elementi ritorno la lista con un solo

elemento

if ( (c=fgetc(pf)) == EOF ) {

fclose(pf);

p->next = NULL;

return p;

} else { // Altrimenti continuo a leggere il file

ptr = p; // Faccio puntare p alla testa della lista

do { ptr->next = (struct contact *)malloc(sizeof(struct

contact)); ptr = ptr->next;

// Leggo NOME

for( i=0; (c=fgetc(pf)) != '-'; i++)

bNome[i] = c;

bNome[i] = '\0';

strcpy(ptr->nome,bNome);

// Leggo COGNOME

for( i=0; (c=fgetc(pf)) != '-'; i++)

bCognome[i] = c;

bCognome[i] = '\0';

strcpy(ptr->cognome,bCognome);

// Leggo TELEFONO

for( i=0; (c=fgetc(pf)) != '\n'; i++)

bTel[i] = c;

bTel[i] = '\0';

strcpy(ptr->tel,bTel);

} while ( (c=fgetc(pf)) != EOF );

ptr->next = NULL;

fclose(pf);

return p;

}

}

/*

* Aggiorna il file rubrica.txt

* @param p puntatore alla testa della lista

* @return void

*/

void aggiorna(struct contact *p) {

fflush(stdin);

ptr = p;

if( (pf = fopen("rubrica.txt","w")) == NULL )

printf("\nErrore apertura file");

else while( ptr != NULL) {

fprintf(pf," %s-",ptr->nome);

fprintf(pf,"%s-",ptr->cognome);

fprintf(pf,"%s\n",ptr->tel);

ptr = ptr->next;

}

fclose(pf);

}

/*

* Aggiunge un nodo alla lista

* @param p puntatore alla testa della lista

* @return p la lista aggiornata con il nuovo elemento

*/

struct contact *aggiungi(struct contact *p) {

fflush(stdin);

// Se la lista e' vuota creo il primo elemento

if ( p == NULL ) {

p = (struct contact *)malloc(sizeof(struct contact));

printf("\nInserisci nome: ");

gets(bNome);

if ( strcmp(bNome,"\0") == 0 ) // Controllo se non e'

stato inserito nessun valore

strcpy(bNome," ");

strcpy(p->nome,bNome);

printf("\nInserisci cognome: ");

gets(bCognome);

if ( strcmp(bCognome,"\0") == 0 ) // Controllo se non e'

stato inserito nessun valore

strcpy(bCognome," ");

strcpy(p->cognome,bCognome);

printf("\nInserisci telefono: ");

gets(bTel);

if ( strcmp(bTel,"\0") == 0 ) // Controllo se non e'

stato inserito nessun valore

strcpy(bTel," ");

strcpy(p->tel,bTel);

p->next = NULL;

return p;

} else {

ptr = p;

while( ptr->next != NULL ) ptr = ptr->next; // Scorro

la lista fino all'ultimo nodo

ptr->next = (struct contact *)malloc(sizeof(struct contact));

// Creo il nuovo nodo

ptr = ptr->next;

printf("\nInserisci nome: ");

gets(bNome);

if ( strcmp(bNome,"\0") == 0 )

strcpy(bNome," ");

strcpy(ptr->nome,bNome);

printf("\nInserisci cognome: ");

gets(bCognome);

if ( strcmp(bCognome,"\0") == 0 )

strcpy(bCognome," ");

strcpy(ptr->cognome,bCognome);

printf("\nInserisci telefono: ");

gets(bTel);

if ( strcmp(bTel,"\0") == 0 )

strcpy(bTel," ");

strcpy(ptr->tel,bTel);

}

ptr->next = NULL;

return p;

}

/*

* Ordina la lista.

* @param p puntatore alla testa della lista

* @return p la lista ordinata

*/

struct contact *ordina(struct contact *p) {

fflush(stdin);

struct contact *ptr1, *ptr2;

char temp[N];

if ( p == NULL) return NULL;

else {

ptr1 = p;

while( ptr1->next != NULL) {

ptr2 = ptr1->next;

while( ptr2 != NULL ) {

if ( strcmp(ptr2->nome,ptr1->nome) < 0 ){

strcpy(temp,ptr1->nome);

strcpy(ptr1->nome,ptr2->nome);

strcpy(ptr2->nome,temp);

strcpy(temp,ptr1->cognome);

strcpy(ptr1->cognome,ptr2->cognome);

strcpy(ptr2->cognome,temp);

strcpy(temp,ptr1->tel);

strcpy(ptr1->tel,ptr2->tel);

strcpy(ptr2->tel,temp);

}

ptr2 = ptr2->next;

}

ptr1 = ptr1->next;

}

return p;

}

}

/*

* Modifica un contatto

* @param p puntatore alla testa della lista

* @return p la lista modificata

*/

struct contact *modifica(struct contact *p) {

fflush(stdin);

ptr = p;

int n, risp;

printf("\nInserisci il numero dell'elemento da modificare: ");

scanf("%d",&n);

fflush(stdin);

for ( i=1; i<n; i++)

Dettagli
Publisher
A.A. 2014-2015
8 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher wdv94 di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Palermo o del prof Seidita Valeria.