Este es el código fuente en Lenguaje C del programa "indice.c". Se trata de una agenda telefónica, que permite
guardar, buscar, borrar, actualizar, visualizar, y
crear un archivo "txt" de los datos (Número telefónico, apellido, nombre, dirección, observaciones) que elijamos.
Esta agenda limita su capacidad a "x" personas. Antes de compilar este programa, debe ejecutarse el programa "creador.c",
con el que se elige la cantidad "x" para crear espacio en la memoria.
#includeVolver al home de Gustavo#include #include #define NRO 499 char bapellido[15],bnombre[15]; int k,c,fin,fran[NRO]; char bop,aux; void buscar(FILE *); int seleccion (void); void agregar (FILE *); void actualizar (FILE *); void datosabuscar (void); int buscador (FILE *); void borrar (FILE *); void txt (FILE *); void masdeuno (FILE *); void visualizar (FILE *); void cuestionario (void); void lineas (void); struct persona { char apellido[15]; char nombre[15]; char telefono[18]; char direccion[28]; char obs[70]; }; struct persona dato; main () { FILE *indptr; int op=0; clrscr(); if ((indptr = fopen ("indice.dat","r+"))==NULL) printf ("El archivo no pudo ser abierto"); else { while ( op >='1' || op <='7') { switch (op) { case '1': txt (indptr); break; case '2': agregar (indptr); break; case '3': actualizar (indptr); break; case '4': buscar (indptr); break; case '5': borrar (indptr); break; case '6': visualizar(indptr); break; case '7': exit(0); } op = seleccion() ; } } } int seleccion (void) { char opcion; printf ("\nINDICE TELEFONICO PERSONAL"); printf ("\n**************************\n" "Por:\n\tRafael Basualdo\n\tGustavo Lucero\n\tSergio Vigna\n"); printf ("\n\t\t\tFavor elija una opcion\n\n" "\t\t1- Almacenar determinado contenido del\n" "\t\tindice-.txt- como para imprimir desde edit\n" "\t\t2- Agregar nuevo dato\n" "\t\t3- Actualizar un dato \n" "\t\t4- Buscar un n£mero de tel‚fono\n" "\t\t5- Borrar dato\n" "\t\t6- Visualizar totalidad\n" "\t\t7- Terminar\n" "\tOpci¢n:"); opcion=getche(); return opcion; } void agregar (FILE *fptr) { int pos; char x[] = ""; strcpy(bapellido,x); bop='1', c=-1; rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof(struct persona), 1, fptr); if (strcmp(dato.apellido,x) == 0){ /*verificacion de que este vacio*/ cuestionario(); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fwrite (&dato, sizeof(struct persona), 1, fptr); } else printf ("no esta vac¡o\n"); printf("\nDato agregado" "\nPresione una tecla para continuar"); getch(); clrscr(); } void actualizar (FILE *fptr) { int i, pos; c=-1, bop='3', fin=0; printf ("\n\nIntroducir apellido\n?"); gets (bapellido); printf ("\nIntroducir nombre\n?"); gets (bnombre); if(*bapellido==NULL || *bnombre==NULL) { clrscr(); return 0; } rewind (fptr); masdeuno(fptr); if (k==2){ c=-1, fin=0; rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof(struct persona), 1, fptr); if (strcmp(dato.apellido,bapellido) == 0){ /*verificacion */ printf ("Ingrese los sigtes.datos actuales:\n"); cuestionario (); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fwrite (&dato, sizeof(struct persona), 1, fptr); } printf("\nDato actualizado\nPresione una tecla para continuar"); getch(); clrscr(); } if (k>2){ c=-1, fin=0; rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); while ((strcmp(dato.apellido,bapellido)==0)||(strcmp(dato.nombre,bnombre)==0)){ if (fin==101) break; printf ("%-16s%-16s%-18s%-28s\n%s \tPosici¢n=%d\n", dato.apellido, dato.nombre, dato.telefono, dato.direccion ,dato.obs, pos); lineas(); fran[pos]=pos; pos=buscador (fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr);} /* del while*/ printf ("Favor ingrese el valor que sigue al registro deseado:\n"); scanf ("%d",&pos); gets(aux); if (pos<=0 || pos >=NRO) return 0; for (i=0; i<=NRO; i++) if (fran[i]==pos) { printf ("Ingrese los sigtes.datos actuales:\n"); cuestionario (); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fwrite (&dato, sizeof(struct persona), 1, fptr); printf("\nDato actualizado\nPresione una tecla para continuar"); getch(); clrscr(); } return 0; } } void buscar (FILE *fptr) { int pos; c=-1, fin=0, k=0; *bapellido="a", *bnombre="a"; datosabuscar(); if (*bapellido==NULL || *bnombre==NULL) { clrscr(); return 0;} rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); while ((strcmp(dato.apellido,bapellido)==0)||(strcmp(dato.nombre,bnombre)==0)){ if (fin==101) break; k++; printf ("%-16s%-16s%-18s%-28s\n%s\n", dato.apellido, dato.nombre, dato.telefono, dato.direccion ,dato.obs); lineas(); if(k==6) { k=0; printf ("1-Desea continuar 2-Terminar\n?"); aux=getche(); while (aux<'1' || aux>'2') { printf ("\n1-Desea continuar 2-Terminar\n?"); aux=getche(); } if (aux=='2') { clrscr(); return 0; } clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); } pos=buscador (fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); } printf("\nFin de los datos" "\nPresione una tecla para continuar"); getch(); clrscr(); } void datosabuscar (void) { printf ("\n\nDesea seleccionar por 1-Apellido 2-Nombre 3-Ambos\n?"); bop=getche(); while (bop<'1'||bop>'3') { printf ("Desea seleccionar por 1-Apellido 2-Nombre 3-Ambos \n?"); bop=getche(); } switch (bop) { case '1': printf ("\nIntroducir apellido\n?"); gets (bapellido); break; case '2': printf ("\nIntroducir nombre\n?"); gets (bnombre); break; case '3': printf ("\nIntroducir apellido\n?"); gets (bapellido); printf ("\nIntroducir nombre\n?"); gets (bnombre); break; } } int buscador (FILE *fptr) { switch (bop) { case '1': c++; fread(&dato, sizeof(struct persona), 1, fptr); while (strcmp(dato.apellido,bapellido)!=0){ c++; fread(&dato, sizeof(struct persona), 1, fptr); if (c>=NRO){ fin=101;break;} } return c; break; case '2': c++; fread(&dato, sizeof(struct persona), 1, fptr); while (strcmp(dato.nombre,bnombre)!=0){ c++; fread(&dato, sizeof(struct persona), 1, fptr); if (c>=NRO) {fin=101;break;} } return c; break; case '3': c++; fread(&dato, sizeof(struct persona), 1, fptr); while (strcmp(dato.nombre,bnombre)!=0||strcmp(dato.apellido,bapellido)!=0){ c++; fread(&dato, sizeof(struct persona), 1, fptr); if (c>=NRO) {fin=101;break;} } return c; break; } } void borrar (FILE *fptr) { int pos,i; struct persona blank = {"", "", "", "",""}; c=-1, bop='3', fin=0; printf ("\n\nIntroducir apellido\n?"); gets (bapellido); printf ("\nIntroducir nombre\n?"); gets (bnombre); if (*bapellido==NULL || *bnombre==NULL) { clrscr(); return 0; } rewind (fptr); masdeuno(fptr); if (k==2){ c=-1, fin=0; rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fwrite (&blank, sizeof (struct persona), 1, fptr); printf ("\nDato borrado\n"); printf("Presione una tecla para continuar"); getch(); clrscr(); } if (k>2){ c=-1, fin=0; rewind (fptr); pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); while ((strcmp(dato.apellido,bapellido)==0)||(strcmp(dato.nombre,bnombre)==0)){ if (fin==101) break; printf ("%-16s%-16s%-18s%-28s\n%s \tPosici¢n=%d\n", dato.apellido, dato.nombre, dato.telefono, dato.direccion ,dato.obs, pos); lineas(); fran[pos]=pos; pos=buscador (fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); } /* del while*/ printf ("Favor ingrese el valor que sigue al registro deseado:\n"); scanf ("%d",&pos); gets(aux); if (pos<=0 || pos >=NRO) return 0; for (i=0; i<=NRO; i++) if (fran[i]==pos) { fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fwrite (&blank, sizeof(struct persona), 1, fptr); printf ("\nDato borrado\n"); printf("Presione una tecla para continuar"); getch(); clrscr(); } } } void txt(FILE *fptr) { int pos; FILE *writeptr; c=-1, fin=0; *bapellido="a", *bnombre="a"; if ((writeptr = fopen ("indice.txt","w"))==NULL) printf ("\El archivo no se pudo abrir\n"); else { rewind (fptr); fprintf (writeptr, "%-16s%-16s%-18s%-28s\n","Apellido","Nombre","Tel‚fono","Direcci¢n\n"); datosabuscar(); if (*bapellido==NULL || *bnombre==NULL) { clrscr(); return 0; } pos=buscador(fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); while (strcmp(dato.apellido,bapellido)==0 || strcmp(dato.nombre,bnombre)==0){ if (fin==101) break; fprintf (writeptr, "%-16s%-16s%-18s%-28s\n%s\n-----\n", dato.apellido,dato.nombre,dato.telefono,dato.direccion,dato.obs); pos=buscador (fptr); fseek (fptr, pos*sizeof (struct persona), SEEK_SET); fread (&dato, sizeof (struct persona), 1, fptr); } } fclose (writeptr); printf("\nPresione una tecla para continuar"); getch(); clrscr(); } void masdeuno (FILE *fptr) { int pos; k=0; while (fin != 101){ pos=buscador(fptr); k++; } return 0; } void visualizar (FILE *indptr) { char *s2 = ""; k=0; rewind (indptr); clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); while (!feof(indptr)){ fread (&dato, sizeof (struct persona), 1, indptr); if ( strcmp (dato.apellido,s2) !=0 ) { k++; printf ("%-16s%-16s%-18s%-28s\n%s\n", dato.apellido, dato.nombre, dato.telefono, dato.direccion ,dato.obs); lineas(); if (k==6) { k=0; printf ("1-Desea continuar 2-Terminar\n?"); aux=getche(); while (aux<'1'|| aux>'2') { printf ("\n1-Desea continuar 2-Terminar\n?"); aux=getche(); } if (aux=='2') { clrscr(); return 0; } clrscr(); printf ("%-16s%-16s%-18s%-28s\n","\nApellido","Nombre","Tel‚fono","Direcci¢n\n"); } } } printf("\nFin de los datos" "\nPresione una tecla para continuar"); getch(); clrscr(); return 0; } void cuestionario (void) { printf ("\n\nIntroducir apellido:\n?"); gets (dato.apellido); while (strlen(dato.apellido)>=15 || strlen(dato.apellido)==0) { printf("Es necesario que ingrese su apellido limit ndose a 14 caracteres."); printf("\nIntroducir apellido:\n"); gets (dato.apellido); } printf ("\nIntroducir nombre:\n?"); gets (dato.nombre); while (strlen(dato.nombre)>=15 || strlen(dato.nombre)==0) { printf("Es necesario que ingrese su nombre limit ndose a 14 caracteres."); printf("\nIntroducir nombre:\n"); gets (dato.nombre); } printf ("\nIntroducir tel‚fono:\n?"); gets (dato.telefono); while (strlen(dato.telefono)>=18 || strlen(dato.telefono)==0) { printf("Es necesario que ingrese su tel‚fono limit ndose a 17 caracteres."); printf("\nIntroducir tel‚fono:\n"); gets (dato.telefono); } printf ("\nIntroducir direcci¢n:\n?"); gets (dato.direccion); while (strlen(dato.direccion)>=28) { printf("Favor lim¡tese a 27 caracteres."); printf("\nIntroducir direcci¢n:\n"); gets (dato.direccion); } printf ("\nIntroducir observaci¢n:\n?"); gets (dato.obs); while (strlen(dato.obs)>=70) { printf("Favor lim¡tese a 69 caracteres."); printf("\nIntroducir observaci¢n:\n"); gets (dato.obs); } } #define LIM 75 void lineas (void) { int cont; for (cont=1; cont<=LIM; cont++) putchar('-'); putchar('\n'); }