/*
  Ejercicio # 3
  Nombre: Registro de Pacientes del Hospital de Chimaltenango
  Autor: Carlos Rolando Calán Ajquill
  Fecha: 24/06/06 00:45
  Descripción: Programa que lleva el control de pacientes del Hospital Nacional
               de Chimaltenango.
  Versión: 1.0 
*/

/*Librerías a utilizar en el programa de Carlos Calán*/
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <conio.c>
#include <string.h>
#include <dos.h>
#include <stdlib.h>
#include <ctime>
#define TotalPacientes 200

using namespace std;
/*Estructura para guardar direcciones de los pacientes*/
struct Direccion
{     
  char Calle[15]; 
  int Numero; 
  int Zona;
  char Ciudad[20]; 
};
/*Estructura para guardar fechas de nacimiento e ingreso de pacientes*/
struct Fecha
{
  int Dia;
  int Mes;
  int Ano; 
};
/*Registro para guardar los datos personales*/
struct DatosPacientes
{
  char Nombre[30];
  char Apellido[30];
  char Telefono[10];
  struct Fecha FecNacimiento;
  struct Direccion Direccion1[2];
  struct Fecha FecIngreso;
  char Diagnostico[100];
};
/*Procedimiento para calcular la edad del paciente de acuerdo a la fecha de nacimiento*/
void CalcularEdad(int Dia, int Mes, int Ano);
/*Procedimiento para guardar datos del paciente*/
void AgregarPaciente();
/*Procedimiento para buscar datos del paciente*/
void BuscarDatosPaciente();
/*Procedimiento para modificar datos de los pacientes*/
void ModificarDatosPaciente();
/*Procedimiento para imprimir los datos de los pacientes*/
void ImprimirDatosPaciente();
/*Procedimiento que contiene las opciones del menu principal*/
void MenuCalan();
/*Se crea un vector de 200 pacientes para manejar la información*/
DatosPacientes Personas [TotalPacientes];
/*Para saber si existen o no pacientes en el hospital*/
int CantidadPacientes = 0; 

int main(int argc, char *argv[])
{
  system("CLS");
  MenuCalan();
  system("PAUSE");
  return EXIT_SUCCESS;
}

void CalcularEdad(int Dia, int Mes, int Ano) 
{
  struct Fecha Fechita;
  
  int anio = system("YEAR");   
  int mes = system("MONTH");
  int dia = system("DAY");
  int edad = anio;
	if ( mes > Mes )
	{
    cout<<"Su edad es...: ";
	  cout<<edad;
	  cout<<"  anos";
	}
	else 
    if(mes = Mes)
	  {
      if (dia >=Dia)
	    {
	      cout<<"Edad...: ";
	      cout<<edad;
      }
		  else
		  {
		    cout<<"Edad...:  ";
		    edad=edad-1;
		    cout<<edad;
		  }
    }
    else
    {
	    cout<<"Edad...:  ";
	    edad=edad-1;
	    cout<<edad;
    }  
}

void AgregarPaciente()
{
	char Opcion;
	do
	{
	  system("CLS");
	  cout<<"REGISTRO NUEVO # "<<CantidadPacientes + 1;
    cout<<"\n \n";
	  cout<<"NOMBRE(s): \t";
    cin>>Personas[++CantidadPacientes].Nombre;
	  cout<<"APELLIDO(s): \t";
    cin>>Personas[CantidadPacientes].Apellido;
	  cout<<"TELEFONO : \t";
    cin>>Personas[CantidadPacientes].Telefono;
	  cout<<"FECHA DE NACIMIENTO: "<<"\n";
    cout<<"DIA: \t";
    cin>>Personas[CantidadPacientes].FecNacimiento.Dia;
	  cout<<"MES: \t";
    cin>>Personas[CantidadPacientes].FecNacimiento.Mes;
    cout<<"ANO: \t";
    cin>>Personas[CantidadPacientes].FecNacimiento.Ano;
    for (int j=0; j<2; j++)
    {
      cout<<"Calle Direccion :  \t"<<j+1<<"\n";
      cin>>Personas[CantidadPacientes].Direccion1[j].Calle;
      cout<<"Numero Direccion :  \t"<<j+1<<"\n";
      cin>>Personas[CantidadPacientes].Direccion1[j].Numero;
      cout<<"Zona Direccion :  \t"<<j+1<<"\n";
      cin>>Personas[CantidadPacientes].Direccion1[j].Zona;
      cout<<"Ciudad Direccion :  \t"<<j+1<<"\n";
      cin>>Personas[CantidadPacientes].Direccion1[j].Ciudad;      
    }	
	  cout<<"FECHA DE INGRESO: "<<"\n";
    cout<<"DIA: \t";
    cin>>Personas[CantidadPacientes].FecIngreso.Dia;
	  cout<<"MES: \t";
    cin>>Personas[CantidadPacientes].FecIngreso.Mes;
    cout<<"ANO: \t";
    cin>>Personas[CantidadPacientes].FecIngreso.Ano;
	  cout<<"DIAGNOSTICO: \t";
	  cin>>Personas[CantidadPacientes].Diagnostico;
	  cout<<"\n";
    CalcularEdad(Personas[CantidadPacientes].FecNacimiento.Dia,
                 Personas[CantidadPacientes].FecNacimiento.Mes,
                 Personas[CantidadPacientes].FecNacimiento.Ano);
    cout<<"\n";    
	  cout<<"DESEA AGREGAR OTRO PACIENTE s/n \n \n";
	  cin>>Opcion;
  }
	while((Opcion == 's')||(Opcion == 'S') && (CantidadPacientes < TotalPacientes));
  getch();  
}

void BuscarDatosPaciente()
{
  system("CLS");
  char Nombre[30];
  cout<<"Ingrese el Nombre de la persona \n";
  cin>>Nombre;
	for(int i=0; i<=CantidadPacientes; i++)
  {
	  if (strcmp(Nombre,Personas[i].Nombre)==0)
		{		  
		  cout<<"Paciente esta en la posicion -> "<<i<<"\n";
		  cout<<"Nombre "<<Personas[i].Nombre<<"\n";
		  cout<<"Apellido "<<Personas[i].Apellido<<"\n";
		  cout<<"Telefono "<<Personas[i].Telefono<<"\n";
		  cout<<"Diagnostico "<<Personas[i].Diagnostico<<"\n";		 
		  for (int j=0; j<2; j++)
		  {
        cout<<"Direccion "<<j+1<<"\n";
        cout<<"Calle "<<Personas[i].Direccion1[j].Calle<<"\n";
        cout<<"Numero "<<Personas[i].Direccion1[j].Numero<<"\n";
        cout<<"Zona "<<Personas[i].Direccion1[j].Zona<<"\n";
        cout<<"Ciudad "<<Personas[i].Direccion1[j].Ciudad<<"\n";
      }
      cout<<"Fecha de Nacimiento";
      cout<<Personas[i].FecNacimiento.Dia<<"/"<<Personas[i].FecNacimiento.Mes<<
          "/"<<Personas[i].FecNacimiento.Ano<<"\n";
		}
		else
		{
		  system("CLS");
		  cout<<"Datos no Encontrados"<<"\n";
		  cout;		  
		}
	}
  getch();
}

void ModificarDatosPaciente()
{
  system("CLS");
	char Nombre[30];  
  cout<<"Ingrese el Nombre de la persona \n";
  cin>>Nombre;
	for(int i=0; i<=CantidadPacientes;i++)
  {
	  if (strcmp(Nombre,Personas[i].Nombre)==0)
    {       
		  cout<<"Paciente esta en la posicion -> "<<i; 		
		  cout<<"Datos Actuales";
	    cout<<"Nombre "<<Personas[i].Nombre<<"\n";
		  cout<<"Apellido "<<Personas[i].Apellido<<"\n";
		  cout<<"Telefono "<<Personas[i].Telefono<<"\n";
		  cout<<"Diagnostico "<<Personas[i].Diagnostico<<"\n";		 
		  for (int j=0; j<2; j++)
		  {
        cout<<"Direccion "<<j+1<<"\n";
        cout<<"Calle "<<Personas[i].Direccion1[j].Calle<<"\n";
        cout<<"Numero "<<Personas[i].Direccion1[j].Numero<<"\n";
        cout<<"Zona "<<Personas[i].Direccion1[j].Zona<<"\n";
        cout<<"Ciudad "<<Personas[i].Direccion1[j].Ciudad<<"\n";
      }
      cout<<"Fecha de Nacimiento";
      cout<<Personas[i].FecNacimiento.Dia<<"/"<<Personas[i].FecNacimiento.Mes<<
          "/"<<Personas[i].FecNacimiento.Ano<<"\n";
      cout<<"\n";		  
		  cout<<"Ingrese los datos a Modificar"<<"\n";
		  cout<<"\n \n";
	    cout<<"NOMBRE(s): \t";
      cin>>Personas[i].Nombre;
	    cout<<"APELLIDO(s): \t";
      cin>>Personas[i].Apellido;
	    cout<<"TELEFONO : \t";
      cin>>Personas[i].Telefono;
	    cout<<"FECHA DE NACIMIENTO: ";
      cout<<"DIA: \t";
      cin>>Personas[i].FecNacimiento.Dia;
	    cout<<"MES: \t";
      cin>>Personas[i].FecNacimiento.Mes;
      cout<<"ANO: \t";
      cin>>Personas[i].FecNacimiento.Ano;  
  		cout;
		  cout<<"Datos Modificados";
		}
		else
		{
		  cout;
		  cout<<"No se encontraron Datos"<<"\n";
		}
  }
  getch();
}

void ImprimirDatosPacientes(int Opcion)
{
  system("CLS");
  if (Opcion == 1)
  {
    cout<<"Nombres        Apellidos     Fec/Ingreso \n";
		for(int i=0; i<=CantidadPacientes;i++)
		{
		  cout<<Personas[i].Nombre<<"\t";
		  cout<<Personas[i].Apellido<<"\t";
      cout<<Personas[i].FecIngreso.Dia<<"/"<<Personas[i].FecIngreso.Mes<<
          "/"<<Personas[i].FecIngreso.Ano;
		  cout;
		}
	}
	else
	{	
	  cout<<"Todos los Datos de los Pacientes";
  	for(int i=0; i<=CantidadPacientes; i++)
	  {
	    cout<<"Nombre "<<Personas[i].Nombre<<"\n";
		  cout<<"Apellido "<<Personas[i].Apellido<<"\n";
		  cout<<"Telefono "<<Personas[i].Telefono<<"\n";
		  cout<<"Diagnostico "<<Personas[i].Diagnostico<<"\n";		 
		  for (int j=0; j<2; j++)
		  {
        cout<<"Direccion "<<j+1<<"\n";
        cout<<"Calle "<<Personas[i].Direccion1[j].Calle<<"\n";
        cout<<"Numero "<<Personas[i].Direccion1[j].Numero<<"\n";
        cout<<"Zona "<<Personas[i].Direccion1[j].Zona<<"\n";
        cout<<"Ciudad "<<Personas[i].Direccion1[j].Ciudad<<"\n";
      }
      cout<<"Fecha de Nacimiento";
      cout<<Personas[i].FecNacimiento.Dia<<"/"<<Personas[i].FecNacimiento.Mes<<
          "/"<<Personas[i].FecNacimiento.Ano<<"\n";
      cout<<"Fecha de Ingreso";
      cout<<Personas[i].FecIngreso.Dia<<"/"<<Personas[i].FecIngreso.Mes<<
          "/"<<Personas[i].FecIngreso.Ano<<"\n";
	  }
	}
  getch();
}

void MenuCalan()
{
	int Opcion = 0;
  while (Opcion != 6)
  {
    system("CLS");
    cout<<"\t \t \t UNIVERSIDAD MARIANO GALVEZ \n \n"; 
    cout<<"\t \t Proyecto Final Estructura De Datos \n";    
    cout<<"\t \t Carlos Rolando Calan Ajquill    Junio/2006 \n";
    cout<<"\t \t Carne: 0910-04-13429         5to. Semestre \n";
    cout<<"\t \t --------------------------------------------------------\n";    
    cout<<"\t \t Registro de Pacientes Hospital Nacional de Chimaltenango\n ";
    cout<<"\t \t --------------------------------------------------------\n\n";    
		cout<<"\t 1.- Ingreso de Paciente \n";
		cout<<"\t 2.- Cambiar Datos \n";	
		cout<<"\t 3.- Buscar Paciente \n";
		cout<<"\t 4.- Impresion de Nombre y Apellido de Pacientes \n";
  	cout<<"\t 5.- Impresion de todos los datos de Pacientes \n";
		cout<<"\t 6.- Salir \n";
    cout<<"\t -----------------------------------------------------------\n";    
		cout<<"\t \t Seleccione una opcion \t";
		cin>>Opcion;
	  switch (Opcion)
		{
		  case 1:
        cout<<"OPCION 1:";
		    AgregarPaciente();
				break;
			case 2:
        cout<<"OPCION 2:";
			  ModificarDatosPaciente();
			  break;
			case 3:
        cout<<"OPCION 3:";
			  BuscarDatosPaciente();
			  break;
			case 4:
        cout<<"OPCION 4:";
				ImprimirDatosPacientes(1);
				break;
			case 5:
        cout<<"OPCION 5:";
        ImprimirDatosPacientes(2);
        break;
			case 6:
        cout<<"OPCION 7:";
		    system("CLS");
        cout<<"Hecho por Carlos Rolando Calán Ajquill, hasta pronto ......\n\n";			        
			  break;
      default:
        cout<<"Opcion Invalida \n\n";
        break;	    
 		}
	}
}