#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct agenda{ /*Creación de la estructura*/
char *name /*Variable que guarda el nombre de la persona*/;
char *paterno; /*Variable que guarda el apellido paterno de la persona*/
char *materno; /*Variable que guarda el apellido materno de la persona*/
char *mail; /*Variable que guarda el correo electronico de la persona*/
int rut; /*Variable que guarda el rut de la persona*/
char *phone; /*Variable que guarda el telefono de la persona*/
}; /*Estructura Creada*/
/*Declaracion de Funciones*/
int menu ();
int validacion();
void llenado (struct agenda personas);
void modificado (struct agenda people);
void busqueda (struct agenda files);
/*Fin de declaracion de funciones*/
int menu () /*Funcion de Menu Principal*/
{
int opcion; /*Variable que guarda la decision tomada por el usuario*/
system ("clear");
printf ("\n");
printf ("___________ Menu Principal ___________\n");
printf ("(1)Ingresar datos al sistema.\n");
printf ("(2)Modificar datos del sistema.\n");
printf ("(3)Buscar datos.\n");
printf ("(4)Salir.\n");
printf ("Escoja Opcion:\n");
printf ("________ Hecho por Pablo Munoz. _______\n");
scanf ("%d",&opcion);
return (opcion);
}
void llenado (struct agenda personas)
{
struct agenda *c; /*puntero de tipo agenda que apunta a la estructura*/
struct agenda nodo[n]; /*Cadena de tipo agenda que contiene cada campo de la estructura (cadena de estructura)*/
FILE *puntero; /*Puntero de tipo FILE que apuntara al archivo que queramos crear/modificar*/
int i=0;
int j;
int b; /*Variable que almacena el valor del rut para ser enviado a la funcion validacion*/
int k; /*Guarda el valor que retorna la funcion validacion i.e almacena el codigo verificador*/
int v; /*Almacena el codigo verificador ingresado por el usuario y lo compara con k para validar si son iguales*/
int opc; /*Variable que indica si estan los datos ingresados por el usuario de manera correcta*/
int opi; /*Variable que indica si el usuario quiere seguir ingresando usuarios*/
char buffer[50]; /*Buffer temporal que almacena los datos ingresados como NOMBRE por el usuario*/
char buffer1[50]; /*Buffer temporal que almacena los datos ingresados como APELLIDO PATERNO por el usuario*/
char buffer2[50]; /*Buffer temporal que almacena los datos ingresados como APELLIDO MATERNO por el usuario*/
char buffer3[50]; /*Buffer temporal que almacena los datos ingresados como TELEFONO por el usuario*/
char buffer4[50]; /*Buffer temporal que almacena los datos ingresados como MAIL por el usuario*/
c=(struct agenda *)malloc(sizeof(struct agenda));
printf ("Ingrese RUT, sin codigo verificador: ");
scanf ("%d",&b);
k=validacion(b);
do{
printf ("Ingrese Codigo Verificador.\nEn caso de ser K, reemplazelo por un 0 (cero): ");
scanf ("%d",&v);
if (k!=v) printf ("Ingrese un codigo valido:\n");
}
while (k!=v);
personas.rut=b;
printf ("\nIngrese Nombre: ");
scanf("%s",buffer);
c->name=(char *)malloc(strlen(buffer)+1);
if (c->name) strcpy(c->name,buffer);
printf ("Ingrese Apellido Paterno: ");
scanf("%s",buffer1);
c->paterno=(char *)malloc(strlen(buffer1)+1);
if (c->paterno) strcpy(c->paterno,buffer1);
printf ("Ingrese Apellido Materno: ");
scanf("%s",buffer2);
c->materno=(char *)malloc(strlen(buffer2)+1);
if (c->materno) strcpy(c->materno,buffer2);
printf ("Ingrese Numero de Telefono: ");
scanf("%s",buffer3);
c->phone=(char *)malloc(strlen(buffer3)+1);
if (c->phone) strcpy(c->phone,buffer3);
printf ("Ingrese Correo Electronico: ");
scanf("%s",buffer4);
c->mail=(char *)malloc(strlen(buffer4)+1);
if (c->mail) strcpy(c->mail,buffer4);
do
{
printf ("\n");
printf ("_____________________________________\n");
printf ("RUT: %d-%d\n",personas.rut,v);
printf ("Nombre: %s\n",c->name);
printf ("Apellido Paterno: %s\n",c->paterno);
printf ("Apellido Materno: %s\n",c->materno);
printf ("Telefono: %s\n", c->phone);
printf ("Correo Electronico: %s\n",c->mail);
printf ("¿Estan los datos correctos?\n 1) Si \n 2) No (volvera al menu principal)\n");
scanf ("%d",&opc);
if (opc==1)
{
system ("clear");
printf ("¿Desea Agregar Otra Persona?\n1) Si \n2) No\n");
scanf("%d",&opi);
if (opi==1){
puntero=fopen("datos.txt","a");
if (puntero == '\0') printf ("Error al abrir el archivo");
fprintf(puntero,"%d %s %s %s %s %s\n",personas.rut,c->name,c->paterno,c->materno,c->phone,c->mail);
fclose(puntero);
llenado(*c);
}
if (opi==2){
puntero=fopen("datos.txt","a");
if (puntero == '\0') printf ("Error al abrir el archivo");
fprintf(puntero,"%d %s %s %s %s %s\n",personas.rut,c->name,c->paterno,c->materno,c->phone,c->mail);
fclose(puntero);
printf ("Datos Guardados de forma exitosa.");
main();
}
}
if (opc==2) main();
if (opc!=1 && opc!=2) printf ("Ingrese una opcion valida por favor.\n");
}
while (opc>2 || opc<1);
}
void modificado (struct agenda people)
{
struct agenda *c;
struct agenda nodo[50];
char cad[80];
int rut;
FILE *puntero;
c=(struct agenda *)malloc(sizeof(struct agenda));
printf ("Ingrese RUT de la persona que desea modificar, sin codigo verificador: ");
scanf ("%d",&rut);
puntero=fopen("datos.txt","r");
if (puntero == '\0') printf ("Error al abrir el archivo");
while (feof!=0){
/*fread( *buffer, tamaño, nº de veces, puntero_fichero );*/
fclose(puntero);
}
}
void busqueda (struct agenda files)
{
}
int validacion (int rut) /*Funcion de validacion del RUT*/
{
int acumulador=0; /*Variable que va sumando la multiplicacion del ultimo digito del rut por el contador*/
int multiplo; /*Variable que almacena la multiplicacion el digito del RUT por un contador*/
int contador=2; /*Variable que es multiplicada por el digito del RUT (es 2 porque el algoritmo de validacion es asi*/
int digito; /*Variable que almacena el digito verificador*/
int rutdigito; /*Variable que almacena el codigo verificador ingresado por el usuario validado para el K y el 0*/
while (rut!=0){
multiplo=(rut%10)*contador;
acumulador=acumulador+multiplo;
rut=rut/10;
contador=contador+1;
if(contador==8) contador=2;
}
digito=11-(acumulador%11);
rutdigito=digito;
if (digito==10) rutdigito=0;
if (digito==11) rutdigito=0;
return (rutdigito);
}
/*Main*/
main ()
{
struct agenda *gente;/*Creamos un puntero del tipo agenda de nombre gente i.e cuando queramos enviar la estructura a una funcion, solo utilizaremos *gente*/
int op;/*Variable que almacena el valor que retorna la funcion menu (es decir la decision de lo que quiera hacer el usuario con el programa*/
op=menu();
switch (op)
{
case 1: llenado(*gente);
main();
break;
case 2: modificado(*gente);
main();
break;
case 3: busqueda(*gente);
main();
break;
case 4: system ("clear");
printf ("Hecho por Pablo Muñoz Moreno.\n");
break;
default:printf ("\n\nOpcion no valida. Reintente por favor.");
main();
break;
}
}