#include <iostream>
#include <cstdio>
#include <string.h>
#define rutaCandidatos "DatosCandidatos.dat"
#define rutaVive "Vive.dat"
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct candidato {
char nombre[50];
unsigned fechaNacimiento;
char paisCuatro [50];
char puesto [15];
};
struct vive{
char nombre[50];
char pais [50];
char provincia [50];
};
struct NodolistaCandidatos{
candidato info;
NodolistaCandidatos*sgte;
};
struct NodolistaVive{
vive info;
NodolistaVive*sgte;
};
void insertarNodoCandidatosalfinal(NodolistaCandidatos *&lista, candidato a)
{
if (lista==NULL)
{
lista= new NodolistaCandidatos();
lista->info = a;
lista->sgte = NULL;
}
else
{
NodolistaCandidatos *aux=lista;
while (aux->sgte!=NULL)
{
aux= aux->sgte;
}
aux->sgte= new NodolistaCandidatos();
aux = aux->sgte;
aux->info= a;
aux->sgte = NULL;
}
return;
}
void insertarNodoVivealfinal(NodolistaVive *&lista, vive j)
{
if (lista==NULL)
{
lista= new NodolistaVive();
lista->info = j;
lista->sgte = NULL;
}
else
{
NodolistaVive *aux=lista;
while (aux->sgte!=NULL)
{
aux= aux->sgte;
}
aux->sgte= new NodolistaVive();
aux = aux->sgte;
aux->info= j;
aux->sgte = NULL;
}
return;
}
NodolistaCandidatos*crearListaCandidatos (FILE*data)
{ NodolistaCandidatos*Lcandidatos =NULL;
candidato a;
while(fread(&a, sizeof(candidato),1, data))
{ insertarNodoCandidatosalfinal(Lcandidatos, a);
}
fclose(data);
return Lcandidatos;
}
NodolistaVive *crearListaVive(FILE *data)
{
NodolistaVive *lvive=NULL;
vive b;
while (fread(&b, sizeof(vive),1,data))
{
insertarNodoVivealfinal(lvive, b);
}
fclose(data);
return lvive;
}
void DatosMemoria (FILE*candidatos, FILE*vive, NodolistaCandidatos*&listacandidatos, NodolistaVive*&listaVive)
{listacandidatos=crearListaCandidatos (candidatos);
listaVive=crearListaVive(vive);
return;
}
NodolistaCandidatos* BuscarNodoCandidato(NodolistaCandidatos *lista, char nombre [])
{
while (lista)
{
if (lista->info.nombre==nombre)
return lista;
lista= lista->sgte;
}
return lista; }
NodolistaVive* BuscarNodoVive(NodolistaVive*lista, char nombre[])
{
while (lista)
{
if (lista->info.nombre==nombre)
return lista;
lista= lista->sgte;
}
return lista;
}
int edadCandidato(int Fechanacimiento)
{
int z = 2017 - Fechanacimiento / 10000;
return z;
}
bool NoCumpleRequisitos (NodolistaVive*listaVive, NodolistaCandidatos*listacandidatos, char nombre [], char pais[], char paisCuatro [], char provincia [])
{
while ( listaVive!=NULL )
{ if(( listaVive-> info.nombre == nombre) &&( (strcmp(listacandidatos->info.paisCuatro, "argentina")==0)))
{
if ( (strcmp(listaVive ->info.provincia, "buenos aires"))==0)
return false; // encuentra el candidato y residio los ultimos 4 años en argentina y reside en buenos aires desde hace 2 años
else
return true;
}
return true;
}
}
bool puedeSerCandidato (char provincia[], char paisCuatro [], char puesto[], char nombre[], char pais[], NodolistaCandidatos*listacandidatos, NodolistaVive*listaVive)
{ if ( strcmp (puesto, "senador")==0)
{if (!NoCumpleRequisitos (listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>30)
return true;
else return false;
}
if ( strcmp (puesto, "diputado")==0)
{if (!NoCumpleRequisitos(listaVive, listacandidatos, nombre, pais, paisCuatro, provincia) && edadCandidato ((BuscarNodoCandidato (listacandidatos, nombre))->info.fechaNacimiento)>22)
return true;
else
return false;
}
}
int main() {
candidato c;
FILE* p;
p=fopen(rutaCandidatos,"w");
strcpy(c.nombre,"Carlos Gomez");
c.fechaNacimiento=19670803;
strcpy(c.puesto, "senador");
strcpy(c.paisCuatro,"venezuela"); // pais en el que vivio los ultimos por lo menos 4 años,
fwrite(&c,sizeof(c),1,p);
strcpy(c.nombre,"Carla Robles");
c.fechaNacimiento=20130807;
strcpy(c.puesto, "senador");
strcpy(c.paisCuatro,"argentina");
fwrite(&c,sizeof(c),1,p);
strcpy(c.nombre,"Luis Alberto");
c.fechaNacimiento= 19689612;
strcpy(c.puesto, "diputado");
strcpy(c.paisCuatro,"argentina");
fwrite(&c,sizeof(c),1,p);
strcpy(c.nombre,"Fabiana Riez");
c.fechaNacimiento=19859394;
strcpy(c.paisCuatro,"argentina");
strcpy(c.puesto, "diputado");
fwrite(&c,sizeof(c),1,p);
fclose(p);
vive d;
FILE *f;
f=fopen(rutaVive,"w");
// strcpy(d.pais,"Argentina");
strcpy(d.nombre,"Carlos Gomez");
strcpy(d.provincia, "buenos aires");
fwrite(&d,sizeof(d),1,f);
strcpy(d.nombre,"Fabiana Riez");
strcpy(d.provincia, "buenos aires");
fwrite(&d,sizeof(d),1,f);
strcpy(d.nombre,"Luis Alberto");
strcpy(d.provincia, "cordoba");
fwrite(&d,sizeof(d),1,f);
strcpy(d.nombre,"Carla Robles");
strcpy(d.provincia, "buenos aires"); //provincia en la que residio por lo menos los ultimos dos años
fwrite(&d,sizeof(d),1,f);
fclose(f);
FILE *fcand;
FILE *fviv;
NodolistaVive *lvive=NULL;
NodolistaCandidatos *Lcandidatos =NULL;
NodolistaCandidatos *aux;
bool puede;
//muestro los archivos
if ((fcand =fopen(rutaCandidatos,"r")) && (fviv =fopen(rutaVive,"r")))
{
DatosMemoria(fcand, fviv, Lcandidatos, lvive);
fclose(fcand);
fclose(fviv);
aux = Lcandidatos;
while (aux)
{
puede =puedeSerCandidato(lvive->info.provincia, aux->info.paisCuatro, aux->info.puesto, aux->info.nombre, lvive->info.pais, Lcandidatos, lvive);
if (puede==true)
cout << aux->info.nombre << " puede ser candidato " << endl;
if(puede==false)
cout << aux->info.nombre << " NO puede ser candidato " << endl;
aux= aux->sgte;
}
}
else
cout << "Error al intentar abrir un archivo" << endl;
return 0;
}