#include"Persona.h"
#include<fstream>
using namespace std;
/* Implantacion de  los metodos de la clase 
 * Persona*/


//Los constructores no tienen valor de retorno
//Constructor por omision
Persona::Persona(){ 
	//Valores asignados por omision
	strcpy(nombre, "Ninguno");
	strcpy(apellido,"Ninguno");
	strcpy(cedula,"Ninguna");
	edad=0;
	telefonoHogar=0;
	telefonoCelular=0;
	strcpy(direccion,"Ninguna");
}
//Constructor por copia
Persona::Persona(const Persona& p1){
	strcpy(nombre, p1.nombre);
	strcpy(apellido, p1.apellido);
	strcpy(cedula, p1.cedula);
	edad=p1.edad;
	strcpy(direccion, p1.direccion);
	telefonoHogar = p1.telefonoHogar;
	telefonoCelular = p1.telefonoCelular;
}
//Constructor parametrico
Persona::Persona(const char _nom[],
const char _apel[], const char _ced[],
const short _edad, const char _dir[],
const short _telH, const short _telC){
	strcpy(nombre, _nom);
	strcpy(apellido, _apel);
	strcpy(cedula, _ced);
	edad=_edad;
	strcpy(direccion, _dir);
	telefonoHogar = _telH;
	telefonoCelular = _telC;
}

/*Métodos de acceso*/
char* Persona:: obtenerNombre() {return this->nombre; }

//Es equivalente retornar this->apellido 
char* Persona:: obtenerApellido() { return apellido ;} 
char* Persona:: obtenerCedula() {return cedula; }
short Persona:: obtenerEdad() {return edad; }
char* Persona:: obtenerDireccion() {return direccion; }
short Persona:: obtenerTelefonoHogar() {return telefonoHogar; }
short Persona:: obtenerTelefonoCelular() {return telefonoCelular; }

/*Métodos de Modificación*/
void Persona:: asignarNombre(const char _nom[]){
	strcpy(nombre, _nom);
}
void Persona:: asignarApellido(const char _apel[]){
	strcpy(apellido, _apel);
}
void Persona:: asignarCedula(const char _ced[]){
	strcpy(cedula, _ced);
}
void Persona:: asignarEdad(const short& _edad){
	edad=_edad;
}
void Persona:: asignarDireccion(const char  _dir[]){
	strcpy(direccion, _dir);
}
void Persona:: asignarTelefonoHogar(const short& _telH){
	telefonoHogar=_telH;
}
void Persona:: asignarTelefonoCelular(const short& _telC){
	telefonoCelular=_telC;
}
/*Métodos para leer imprimir y asignar*/
void  Persona:: scan(){
	cout<<"Nombre: ";
	cin>>nombre;
	cout<<"Apellido: ";
	cin>>apellido;
	cout<<"Edad: ";
	cin>>edad;
	cout<<"Cedula: ";
	cin>>cedula;
	cout<<"Direccion: ";
	cin>>direccion;
	cout<<"Telefono Casa: ";
	cin>>telefonoHogar;
	cout<<"Telefono celular: ";
	cin>>telefonoCelular;
}
//Metodo para mostrar los valores de los atributos
void Persona::print(){
	cout<<"Nombre: "<<nombre<<endl;
	cout<<"Apellido: "<<apellido<<endl;
	cout<<"Edad: "<<edad<<endl;
	cout<<"Cedula: "<<cedula<<endl;
	cout<<"Direccion: "<<direccion<<endl;
	cout<<"telefonoHogar: "<<telefonoHogar<<endl;
	cout<<"telefonoCelular: "<<telefonoCelular<<endl;
}

//Metodo para mostrar los valores de los atributos
void Persona::print2(){
	cout<<nombre << ":" <<apellido << ":" 
	<<edad <<":"<<cedula <<":"<<direccion
	<<":"<<telefonoHogar <<":"<<telefonoCelular
	<<endl;
}


//Destructor 
Persona::~Persona(){
/*Vacio*/	
}

/*
//----------REESCRITURA DE SALIDA-----------

ostream& operator << (ostream &s, persona p){
	s << "\t\tNombre: " << p.nombre;
	s << "\t\tNombre: " << p.apellido;
	s << "\n\t\tCédula: " << p.cedula;
	s << "\n\t\tCédula: " << p.edad;
	s << "\n\t\tDirección: " << p.direccion;
	s << "\n\t\tTelefono: " << p.telefonoHogar;
	return s;
}

//--------REESCRITURA DE ENTRADA------------

istream& operator >> (istream &e, persona &p){
	string a;
	cout << "\t\tNombre: ";
	getline(e,a);
	p.nombre = a;
	cout << "\t\tCédula: ";
	getline(e,a);
	p.cedula = a;
	cout << "\t\tDirección: ";
	getline(e,a);
	p.direccion = a;
	cout << "\t\tTelefono: ";
	getline(e,a);
	p.telefono = a;
	return e;
}
//------------OPERATOR = ------------------

void persona::operator = (persona p){
	nombre = p.nombre;
	cedula = p.cedula;
	direccion = p.direccion;
	telefono = p.telefono;
}

*/
//-------------OPERADOR == ----------------

bool Persona::operator == (Persona p){
	if (strcmp(cedula, p.cedula) == 0)
		return true;
	else
		return false;
}


