25/11/11 17:22
mimmo91
salve,
vorrei implementare oltre a queste funzioni riportate nel codice, anche la funzione di cancellazione di un contatto dalla rubrica, quindi dal file.txt creato.
mi dareste una mano???
vorrei implementare oltre a queste funzioni riportate nel codice, anche la funzione di cancellazione di un contatto dalla rubrica, quindi dal file.txt creato.
mi dareste una mano???
#include <stdio.h> #include <string.h> #include <stdlib.h> #define dim 35 typedef struct nodo *node_pointer; typedef struct nodo { char cognome[dim]; char nome[dim]; char numero[dim]; node_pointer link_sx; node_pointer link_dx; } nodo; node_pointer davanti=NULL, dietro=NULL; int n; char str1[dim], str2[dim], str3[dim]; void insert(node_pointer *, node_pointer *); void print(node_pointer); void modifica(node_pointer); void trova(node_pointer); void scorri(void); main() { int scelta=-1; FILE *fp; fp=fopen("rubr.txt", "r+"); if(!fp) { fp=fopen("rubr.txt", "w"); } else { while(!feof(fp)) { fscanf(fp, "%s %s %s ", str1, str2, str3); insert(&davanti, &dietro); } rewind(fp); } n=0; printf("\n\t\t\tRUBRICA\n"); while(scelta) { printf("\n\n\n\t(1)\tInserisci nuovo contatto\n\t(2)\tModifica contatto\n\t(3)\tVisualizza contatto singolo\n\t(4)\tScorri rubrica\n\t(0)\tEsci dal programma\n\nSeleziona la tua scelta: "); scanf("%d", &scelta); switch(scelta) { case 1: printf("\n\tNUOVO CONTATTO\n\n"); printf("\nInserisci cognome: "); scanf("%s", str1); printf("\nInserisci nome: "); scanf("%s", str2); printf("\nInserisci numero: "); scanf("%s", str3); insert(&davanti, &dietro); break; case 2: printf("\n\tMODIFICA CONTATTO\n\n"); modifica(davanti); scelta=2; break; case 3: printf("\n\tVISUALIZZA UN CONTATTO\n\n"); trova(davanti); break; case 4: printf("\n\tSCORRI RUBRICA\n\n"); scorri(); scelta=4; break; case 0: break; default: printf("\n\nScelta errata! Seleziona nuovamente la tua scelta\n"); scelta=-1; break; } } while(!feof(fp) && davanti) { fprintf(fp, "%s %s %s\n", davanti->cognome, davanti->nome, davanti->numero); davanti=davanti->link_dx; } fclose(fp); fflush(stdin); getchar(); } void insert(node_pointer *davanti, node_pointer *dietro) { node_pointer ptr, temp=(node_pointer)malloc(sizeof(nodo)); if(!temp) { printf("\nMEMORIA PIENA!"); exit(1); } n++; strcpy(temp->cognome, str1); strcpy(temp->nome, str2); strcpy(temp->numero, str3); if(!*davanti) { temp->link_sx=NULL; temp->link_dx=NULL; *davanti=temp; *dietro=temp; } else if(strcmp((*davanti)->cognome, temp->cognome)>0) { temp->link_sx=NULL; temp->link_dx=*davanti; (*davanti)->link_sx=temp; *davanti=temp; } else { ptr=*davanti; while(ptr->link_dx && (strcmp(ptr->link_dx->cognome, temp->cognome))<0) ptr=ptr->link_dx; if(!ptr->link_dx) { temp->link_sx=*dietro; temp->link_dx=NULL; (*dietro)->link_dx=temp; *dietro=temp; } else { temp->link_sx=ptr; temp->link_dx=ptr->link_dx; ptr->link_dx=temp; } } } void print(node_pointer ptr) { if(!ptr) printf("\nRubrica vuota!"); else while(ptr) { printf("\n%15s%15s%15s", ptr->cognome, ptr->nome, ptr->numero); ptr=ptr->link_dx; } } void modifica(node_pointer ptr) { char scegli; if(!ptr) printf("\nRubrica vuota!"); else { printf("\nInserisci cognome: "); scanf("%s", str1); printf("\nInserisci nome: "); scanf("%s", str2); while(ptr && (strcmp(str1, ptr->cognome)!=0 || strcmp(str2, ptr->nome)!=0)) ptr=ptr->link_dx; if(!ptr) printf("\nContatto assente!"); else { printf("\nContatto: %s %s %s\n", ptr->cognome, ptr->nome, ptr->numero); printf("\nVuoi modificare il cognome?(s/n) "); scanf("%1s", &scegli); if(scegli!='n') { printf("\nInserisci nuovo cognome: "); scanf("%s", str1); strcpy(ptr->cognome, str1); } printf("\nVuoi modificare il nome?(s/n) "); scanf("%1s", &scegli); if(scegli!='n') { printf("\nInserisci nuovo nome: "); scanf("%s", str1); strcpy(ptr->nome, str1); } printf("\nVuoi modificare numero?(s/n) "); scanf("%1s", &scegli); if(scegli!='n') { printf("\nInserisci nuovo numero: "); scanf("%s", str1); strcpy(ptr->numero, str1); } } } } void trova(node_pointer ptr) { printf("\nInserisci cognome: "); scanf("%s", str1); printf("\nInserisci nome: "); scanf("%s", str2); while(ptr && (strcmp(str1, ptr->cognome)!=0 || strcmp(str2, ptr->nome)!=0)) ptr=ptr->link_dx; if(!ptr) printf("\nContatto assente!"); else printf("\n%s %s %s", ptr->cognome, ptr->nome, ptr->numero); } void scorri(void) { char scegli; node_pointer ptr=davanti; while(scegli!='0') { printf("\n%s %s %s\n\nVuoi andare al precedente(p) al successivo(s) o uscire(0)? ", ptr->cognome, ptr->nome, ptr->numero); scanf("%1s", &scegli); switch(scegli) { case 'p': if(ptr==davanti) printf("\nNon ci sono contatti precedenti!"); else ptr=ptr->link_sx; break; case 's': if(ptr==dietro) printf("\nNon ci sono contatti successivi!"); else ptr=ptr->link_dx; break; case '0': break; default: scegli='a'; } } }
aaa