Anuncios Google

Directorio telefonico en C

Hola amigos, estoy desarrollando un programa de directorio telefonico en lenguaje C que me han mandado, pero no tengo idea de como hacer ciertas cosas, y es en Linux. Entonces queria saber si me podian ayudar con unas preguntas, y como podria hacerlo, se las dejo aca, gracias!

El programa debe ser capaz de guardar el contenido del directorio encriptado en disco

El acceso al directorio debe estar protegido por una clave.

Se pueden clasificar y filtrar las entradas del directorio en categorías: todos, personales, trabajo.

No se como encriptar ni colocar clave, alguien puede ayudarme?, y eso de clasificar y filtrar las entradas del directorio en categorias, no tengo mucha idea de como hacerlo, tampoco.


Canal de youtube        


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

El archivo que generes para

El archivo que generes para guardar el directorio (ya sea un simple txt, o incluso una base de datos), se encripta muy muy fácil. Checa primero si tienes instalado el programa gpg, tecleando gpg en la terminal (si sale "gpg no está instalado bla,bla,bla" toca instalarlo a mano), y después trabajar con los archivos es fácil:

//Para encriptar:
system("gpg -c tuarchivo");
 
//Para desencriptar
system("gpg -d tuarchivoEncriptado");

Convendría borrar el archivo original después de encriptarlo, por seguridad. gpg te pide la contraseña, no necesitas guardarla ni nada.
Las categorías... pues al pedir nombre y teléfono del contacto también debes pedir la categoría (personal o trabajo), y guardarlas junto al resto de información (cómo hacerlo depende de ti, como te acomode mejor). Así, cuando lees el directorio, sabrás a que categoría pertenece cada contacto y filtrarlos será un juego de niños ;)

Imagen de Carl's

Tengo mas problemas :S

Mira, les dejo el planteamiento de lo que debo hacer aca : http://pastebin.com/eGWnjpwv 

Y mi codigo, lo que llevo hecho , entonces para que porfavor, me ayudes a implementar en mi codigo, eso de la encriptacion.

Y bueno ahora me dio otro problema, es que, intento buscar por categoria y explota... alguna ayuda?

#include <stdio.h>
#include <conio.h>
#include <string.h>
 
struct datos{
     //char nombre[20];
     //long telno;
     char nombre[20]; //Categoria tambien
     char apellido[20];
     char organizacion[20];
     char email[20];
     int   casa;
     int   trabajo; //Forma parte de categoria
     int   movil;
     int   categoria;
};
 
void ingresar_data(){
      FILE *fp;
      struct datos obj;
   system("cls");
      fp=fopen("datos.txt","a");
      printf("*****Agregar datos****\n");
      printf("Ingrese Nombre : ");
      scanf("%s",obj.nombre);
      printf("\nIngrese Apellido : ");
      scanf("%s",obj.apellido);
      printf("\nIngrese Organizacion : ");
      scanf("%s",obj.organizacion);
      printf("\nIngrese Email : ");
      scanf("%s",obj.email);
      printf("\nIngrese telefono: ");
      scanf("%d",&obj.movil);
      do{
      printf("\nIngrese Categoria :\n 1. Todos \n 2. Personal \n 3. Trabajo ");
      scanf("%d",obj.categoria);
      }while(obj.categoria <= 0 && obj.categoria >= 4);
 
 
      fprintf(fp,"%20s %20s %20s %20s %32d %32d",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,obj.categoria);
      fclose(fp);
}
 
void  MostrarTodo(){ //Esto es una categoria
      FILE *fp;
      struct datos obj;
      system("cls");
      fp=fopen("datos.txt","r");
      printf("*****Mostrando todos los registros*****\n");
      printf("\n\n\t\tNombre\t\t\tApellido\t\tOrganizacion\t\temail\t\tMovil\t\tCategoria");
      printf("\n\t\t=====\t\t\t===============\t\t\t============\t\t\t===========\t\t\t===========\t\t\t===========\t\t\t===========\n\n");
      while(!feof(fp))
      {
      fscanf(fp,"%20s %20s %20s %20s %32d %32d",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,&obj.categoria);
      printf("%20s %20s %20s %20s %32d %32d\n",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,obj.categoria);
      }
      fclose(fp);
      getch();
}
 
void  personales(){ //Esto es una categoria
      FILE *fp;
      struct datos obj;
      system("cls");
      fp=fopen("datos.txt","r");
      printf("*****Mostrando registros por categoria personal*****\n");
      printf("\n\n\t\tNombre\t\t\tApellido\t\tOrganizacion\t\temail\t\tMovil");
      printf("\n\t\t=====\t\t\t===============\t\t\t============\t\t\t===========\t\t\t===========\t\t\t===========\n\n");
      while(!feof(fp))
      {
      fscanf(fp,"%20s %20s %20s %20s %32d %32d",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,&obj.categoria);
      if (obj.categoria == 2)
      printf("%20s %20s %20s %20s %32d %32d\n",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil);
      }
      fclose(fp);
      getch();
}
 
void  trabajo(){ //Esto es una categoria
      FILE *fp;
      struct datos obj;
      system("cls");
      fp=fopen("datos.txt","r");
      printf("*****Mostrando registros por categoria personal*****\n");
      printf("\n\n\t\tNombre\t\t\tApellido\t\tOrganizacion\t\temail\t\tMovil");
      printf("\n\t\t=====\t\t\t===============\t\t\t============\t\t\t===========\t\t\t===========\t\t\t===========\n\n");
      while(!feof(fp))
      {
      fscanf(fp,"%20s %20s %20s %20s %32d %32d",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,&obj.categoria);
      if (obj.categoria == 3)
      printf("%20s %20s %20s %20s %32d %32d\n",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil);
      }
      fclose(fp);
      getch();
}
 
/*void findData(){
      FILE *fp;
      struct datos obj;
      char name[20];
      int totrec=0;
     system("cls");
      fp=fopen("data.txt","r");
      printf("*****Display Specific Records*****\n");
      printf("\nEnter Name : ");
      scanf("%s",&name);
      while(!feof(fp))
      {
      fscanf(fp,"%20s %7ld",obj.name,&obj.telno);
         if(strcmpi(obj.name,name)==0){
        printf("\n\nName   :  %s",obj.name);
        printf("\nTelephone No : %ld",obj.telno);
        totrec++;
         }
      }
      if(totrec==0)
         printf("\n\n\nNo Data Found");
      else
         printf("\n\n===Total %d Record found===",totrec);
      fclose(fp);
      getch();
}*/
 
void buscar_por_cadena()
{
    FILE *fp;
    char *cadena;
      struct datos obj;
      system("cls");
      fp=fopen("datos.txt","r");
      printf("Introduce la cadena : ");
      scanf("%s",cadena);
      while(!feof(fp))
      {
          fscanf(fp,"%20s %20s %20s %20s %32d %32d",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil,&obj.categoria);
          if(strcmpi(obj.nombre,cadena)==0)
          {
              printf("\n\n Nombre: %20s \n Apellido: %20s \n Organizacion: %20s \n Email : %20s \n Movil: %32d \n\n",obj.nombre,obj.apellido,obj.organizacion,obj.email,obj.movil);
          }
      }
      fclose(fp);
      getch();
}
 
void main(){
      char choice;
      while(1){
    system("cls");
    printf("*****DIRECTORIO TELEFONICO*****\n\n");
    printf("1) Ingresar datos\n");
    printf("2) Mostrar por categoria\n");
    printf("3) Mostrar registros ordenados\n");
    printf("4) Guardar contenido encriptado\n");
    printf("5) Buscar\n");
    printf("6) salir\n");
    printf("\nOpcion: ");
    fflush(stdin);
    choice = getche();
    switch(choice){
         case'1' : //call append record
            ingresar_data();
            break;
         case'2' : //call find record
             printf("\n\n1) Todos\n");
             printf("2) Personales\n");
             printf("3) Trabajo\n");
             int opc=0;
             fflush(stdin);
             scanf("%d",opc);
             if (opc == 1)
             {
                MostrarTodo();
 
             }else if (opc == 2){
 
                     personales();
 
                    } else if (opc == 3){
 
                             trabajo();
 
                            }
            break;
         //case'3' : //Read all record
            //RegistrosOrdenados();
           // break;
 
        // case'4' :
 
            // GuardarEncriptado();
            // break;
 
        case'5' :
 
             buscar_por_cadena();
             break;
 
         case '6'  :
 
             exit(1);
             break;
 
         default:
            printf("Debe ingresar una opcion valida.");
 
    }
      }
}


Canal de youtube        

Imagen de Carl&#039;s

Gracias Rober!

Siempre me has ayudado, es bueno contar con gente como tu.

Ya entendi la idea, es que no me cuadraba bien..! Gracias! Cualquier otra duda la posteo acá


Canal de youtube        

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.