Indice Telefónico Personal

Ideado por:

TSE Rafael Basualdo
TSE Gustavo Lucero
TSE Sergio Vigna

   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.


#include 
#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');
}

Volver al home de Gustavo