domingo, 12 de abril de 2009

Agenda C

Este es un tipo agenda para C, hecho a base de puras funciones espero les sea de utilidad, implementaciones o aportaciones post como comentario, gracias!

//ISmael asis//
//Agenda//
//23-MArzo-2009/
#include
#include
#include
#include



/*Estructura agenda*/
typedef struct{

char id[5];
char nom[25];
char apellidos[50];
char tel[13];
char dir[35];
}agenda;

void menu(void);
/*Funciones de acciones*/
void agregar(agenda* apu[],int *num);
void eliminar(agenda* apu[],int *num);
void listar(agenda* apu[],int *num);
void modificar(agenda* apu[],int *num);

char cad[6]; /*Resolver problemas de lectura hacemos conversiones*/

main(){

menu();

return 0;
}


/*Funcion que imprime un menu de las opciones del programa*/
void menu(void){
int opc,i,x=0;
agenda *apu[20];

/*Rellando el arreglo de apunteadores con la Constante NULL*/
for(i=0;i<20;i++)
apu[i] = NULL;
do{
clrscr();
printf("1. Agregar nuevo registro \n");
printf("2. Eliminar registro\n");
printf("3. Mostrar registros\n");
printf("4. Modificar registros\n");
printf("5. Salir\n");
printf("Selecciona la opcion\n");
scanf("%i",&opc);;
while(opc<0 || opc>5) /*Limitando la entrada de las opciones*/
scanf("%i",&opc);
clrscr();
switch(opc)
{
case 1:
if(x<20)
agregar(apu,&x);
else
printf("Ya no se pueden agragar mas elementos, ya que todos los espacios estan ocupados.");
break;
case 2:
if(x>0)
eliminar(apu,&x);
else
printf("No se puede Eliminar algun elemento, ya que no existe ninguno.");
break;
case 3:
if(x>0)
listar(apu,&x);
else
printf("No se pueden Listar los elementos, ya que no existe ninguno.");

break;
case 4:
if(x>0)
modificar(apu,&x);
else
printf("No se pueden modificar los elementos, ya que no existe ninguno.");
}

/*Solo parar cuando sean de las opciones a bajo de las 4 que hay*/
if(opc<5){
system("PAUSE");

}

}while(opc !=5);
}

/*Funcion que agrega un elemento a la agenda en la posicion num*/
void agregar(agenda* apu[],int *num){


apu[*num] = (agenda*)malloc(sizeof(agenda));

/*Pidiendo la Informacion*/
printf("ID:\n");
scanf("%s",&apu[*num]->id);
printf("Nombre:\n");
scanf("%s",&apu[*num]->nom);
printf("Apellidos:\n");
scanf("%s",&apu[*num]->apellidos);
printf("Telefono:\n");
scanf("%s",&apu[*num]->tel);
printf("Direccion:\n");
scanf("%s",&apu[*num]->dir);



printf("Registro agregado\n");
*num = *num+1; /*Sumamos 1 depues de haber agregado*/


}
/*Funcion que modifica un registro, lo busca y si lo encuentra lo elimina para
para ingresar uno nuevo*/
void modificar (agenda* apu[],int *num){
char aux[25]="";
int i,j,indicador=0;

printf("Introduce el ID del registro a modificar: ");
scanf("%s",&aux);




/*Recorriendo el Vector y comparando y ver si lo encuentra*/
for(i=0;i<*num;i++){
if(stricmp(aux,apu[i]->id)==0){
free(apu[i]);
*num = *num-1;
/*Recorriendo a los demas elementos, solo cuando hay elementos, ya que si hay uno solo.. pues
fue el que se elimino, ya no se puede hacer dicho recorrido*/
if(*num > 0){
for(j=i;j<*num;j++){
apu[j]=apu[j+1];
}
}
indicador++; /*Indica si se ha eliminado algun elemento con ese nombre*/


}
}

apu[*num] = (agenda*)malloc(sizeof(agenda));

printf("ID:\n");
scanf("%s",&apu[*num]->id);
printf("Nombre:\n");
scanf("%s",&apu[*num]->nom);
printf("Apellidos:\n");
scanf("%s",&apu[*num]->apellidos);
printf("Telefono:\n");
scanf("%s",&apu[*num]->tel);
printf("Direccion:\n");
scanf("%s",&apu[*num]->dir);



printf("Registro agregado\n");
*num = *num+1; /*Suma 1 depues de haber agregado*/


}
/*Funcion que elimina un elemento a la agenda y modifica a num que es el numero de elementos*/
void eliminar(agenda* apu[],int *num){
char aux[25]="";
int i,j,indicador=0;

printf("Introduce el ID del registro a eliminar: ");
scanf("%s",&aux);




/*Recorriendo el Vector y comparando y ver si lo encuentra*/
for(i=0;i<*num;i++){
if(strcmp(aux,apu[i]->id)==0){
free(apu[i]);
*num = *num-1;
/*Recorriendo a los demas elementos, solo cuando hay elementos, ya que si hay uno solo.. pues
fue el que se elimino, ya no se puede hacer dicho recorrido*/
if(*num > 0){
for(j=i;j<*num;j++){
apu[j]=apu[j+1];
}
}
indicador++; /*Indica si se ha eliminado algun elemento con ese nombre*/


}
}

if(indicador==0)
printf("No se econtro ningun elemento con el id: %s\n",aux);
else
printf("Se ha eliminado %d elemento(s) con el id: %s\n",indicador,aux );




}
/*Funcion que lista todos los elemento de la agenda*/
void listar(agenda* apu[],int *num){
int i;

for(i=0;i<*num;i++){
printf("=> Datos del registro %d \n",i+1);
printf("ID: %s\n",apu[i]->id);
printf("Nombre: %s \n",apu[i]->nom);
printf("Apellidos: %s\n",apu[i]->apellidos);
printf("Telefono: %s\n",apu[i]->tel);
printf("Direccion: %s\n",apu[i]->dir);
}

}

0 comentarios: