Skip to content

Instantly share code, notes, and snippets.

@moscoquera
Created November 9, 2016 02:22
Show Gist options
  • Save moscoquera/c631e219aa8cf480d8777e14f10ecff8 to your computer and use it in GitHub Desktop.
Save moscoquera/c631e219aa8cf480d8777e14f10ecff8 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIMIT 30 //Define el limite
#define M 100 //Define el otro limite (?)
typedef struct //Definiendo la estructura
{
int dni;
char apellido[LIMIT];
char nombre[LIMIT];
int celular;
char mail[LIMIT];
int nac_y;
int nac_m;
int nac_d;
}contacto;
contacto AgregarContacto(int *CantCont);
void GuardarContacto(contacto *Agenda[], int max,int *CantCont);
void FindDNI(contacto *agenda[], int max);
void ImprimirContacto(contacto *agenda);
int main(void) {
contacto Agenda[M];
int CantCont = 0;
int menu;
do
{
printf("\n1: Agregar contacto\n");
printf("2: Busqueda por DNI\n");
printf("3: Listado ordenado\n");
printf("4: \n");
printf("5: Listado por cumpleaños\n");
printf("6: Borrar contacto\n");
printf("7: Salir\n");
printf("Opcion: ");
scanf("%d", &menu);
switch (menu)
{
case 1:Agenda[CantCont] = AgregarContacto(&CantCont);
GuardarContacto(&Agenda, M, &CantCont);
break;
case 2:FindDNI(&Agenda, M);
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
printf("\n Salida exitosa. \n\n\n"); //Mensaje de salida
system("pause"); //Para el programa
return EXIT_SUCCESS;
break;
default: printf("Opcion incorrecta.\n");
break;
}
} while (menu <= 7); //Loopea el menu
system("pause");
return EXIT_SUCCESS;
}
contacto AgregarContacto(int *CantCont){ //AGREGA EL CONTACTO
contacto AG_Contacto;
char add_name[LIMIT]; //Cadenas auxiliares
char add_lname[LIMIT];
char add_mail[LIMIT];
int add_dni=0; // Inicializa las variables
int add_cel=0;
int add_bd=0;
int add_bm=0;
int add_by=0; // ^
printf("\nNombre:"); //Muestra en pantalla para ingresar el nombre
scanf("%s",&add_name); //Ingresa nombre
add_name[29]='/0'; //Corta la cadena para que no haya basura
printf("\nApellido:");
scanf("%s",&add_lname);
add_lname[29]='/0';
printf("\nDni:");
scanf("%d",&add_dni);
getc(stdin);
AG_Contacto.dni=add_dni; //Al ser un entero se pasa directamente a la estructura
printf("\nMail:");
scanf("%s",&add_mail);
add_mail[29]='/0';
printf("\nCelu:");
scanf("%d",&add_cel);
AG_Contacto.celular=add_cel; //Lo mismo que antes, entero, directo.
printf("\nFecha Nacimiento: (dd/mm/aa/) ");
scanf("%d",&add_bd);
AG_Contacto.nac_d=add_bd; //Se pasa la fecha de nacimiento a la estructura
scanf("%d",&add_bm);
AG_Contacto.nac_m=add_bm; //same
scanf("%d",&add_by);
AG_Contacto.nac_y=add_by; //same
strcpy(AG_Contacto.nombre, add_name); //Pasa el nombre mediante una copia de cadena
strcpy(AG_Contacto.apellido, add_lname); //Pasa el apellido igual
strcpy(AG_Contacto.mail, add_mail); //El mail de la misma manera
*CantCont=+1; //Suma la cantidad de contactos de la agenda
return AG_Contacto; //Retorna la estructura
}
void GuardarContacto(contacto *agenda[], int max, int *CantCont) {
int i = 0;
FILE *contagenda; //Puntero al archivo
contagenda = fopen("ContAgenda.dat", "ab"); //Abre el archivo
if (contagenda == NULL) {
printf("no se pudo abrir el archivo");
exit(EXIT_FAILURE);
}
if (CantCont>100) {
fwrite(&agenda[i], sizeof(contacto), 1, contagenda); //Gaurda en el archivo
}
fclose(contagenda);
}
void FindDNI(contacto *agenda[], int max) { //Retorna la posicion del DNI solicitado
int dni = 0;
int i = 0;
printf("\n Busqueda por DNI.");
printf("\n Ingrese DNI: ");
scanf("%d", &dni);
contacto auxcont;
FILE *contagenda;
contagenda = fopen("ContAgenda.dat", "rb");
if (contagenda == NULL) {
printf("no se pudo abrir el archivo");
exit(EXIT_FAILURE);
}
while (!feof(contagenda)) {
fread(&auxcont, sizeof(contacto), 1, contagenda); //ACA DEBERIA ESTAR EL PROBLEMA.
if (auxcont.dni == dni) {
fclose(contagenda);
ImprimirContacto(&auxcont);
return;
}
i++;
}
printf("\n Dni no encontrado");
}
void ImprimirContacto(contacto *agenda) {
printf("%s\n", agenda->nombre);
printf("%s\n", agenda->apellido);
printf("%d\n", agenda->dni);
printf("%s\n", agenda->mail);
printf("%d\n", agenda->celular);
printf("%d/", agenda->nac_d);
printf("%d/", agenda->nac_m);
printf("%d/\n", agenda->nac_y);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment