#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <fstream>
using namespace std;
class fecha{
private:
int dd,mm,aa;
bool valido;
public:
// solicitamos al usuario los datos de fecha
friend istream& operator >> (istream &medio, fecha &f2){
do{
cout << "Introduce el dia: "; medio >> f2.dd; medio.ignore();
cout << "Introduce el mes: "; medio >> f2.mm; medio.ignore();
cout << "Introduce el anyo: "; medio >> f2.aa; medio.ignore();
f2.valido=f2.comprobar();
}while (f2.valido==false);
return(medio);
}
//mostramos al usuario los datos de fecha
friend ostream& operator << (ostream &medio, fecha f2){
medio << f2.dd << "/" << f2.mm << "/" << f2.aa << endl;
return(medio);
}
//comprobamos si la fecha es correcta
bool comprobar (){
valido=true;
if (dd<1 || dd>31) valido=false;
if (mm<1 || mm>12) valido=false;
if (aa<1950 || aa>2011) valido=false;
return (valido);
}
};
class direccion{
private:
string calle, localidad;
int numero;
public:
//solicitamos al usuario los datos de direccion
friend istream& operator >> (istream &medio, direccion &d2){
cout << "Introduce la calle: ";getline (medio,d2.calle);
cout << "Introuce el numero: "; medio >> d2.numero; medio.ignore();
cout << "Introduce la localidad: "; getline (medio,d2.localidad);
return(medio);
}
//mostramos al usuario los datos de direccion
friend ostream& operator << (ostream &medio, direccion d2){
cout << "Calle: "; medio << d2.calle << endl;
cout << "Numero: "; medio << d2.numero << endl;
cout << "Localidad: "; medio << d2.localidad << endl;
return(medio);
}
};
class contacto{
friend class agenda;
friend class menu;
private:
fecha f1;
direccion d1;
string nombre, apellidos;
public:
//solicitamos los datos del contacto
friend istream& operator >> (istream &medio, contacto &c1){
cout <<"Introduce el nombre: "; getline (medio,c1.nombre);
cout << "Introduce los apellidos: "; getline (medio,c1.apellidos);
medio >> c1.f1;
medio >> c1.d1;
return(medio);
}
//mostramos los datos del contacto
friend ostream& operator << (ostream &medio, contacto c1){
cout << "Nombre: "; medio << c1.nombre<< endl;
cout << "Apellidos: "; medio << c1.apellidos<< endl;
medio << c1.f1;
medio << c1.d1;
cout << endl;
return(medio);
}
};
class agenda{
private:
string buscarnombre;
contacto *lista;
bool centinela;
int n;
public:
//constructor de agenda
agenda (){
cout << "constructor agenda" << endl;
if (n<0){
n=0;
lista = NULL;
}
centinela=true;
return;
}
//destructor de agenda
~agenda (){
cout << "destructor de agenda" << endl;
if (lista!=NULL)
delete []lista;
return;
}
//constructor de copia de agenda
agenda (const agenda &copialista){
cout << "constructor de copia" << endl;
n=copialista.n;
lista= new contacto[n];
for (int i=0; i<n; i++){
lista[i]=copialista.lista[i];
}
return;
}
//añadir un contacto a la agenda void operator+= (agenda micontacto1)
void operator++(int){
// creamos un objeto vector auxiliar de la clase contacto y le asignamos un tamaño mayor que el actual
// de la lista de contactos
contacto *aux=new contacto [n+1];
//copiamos el contenido de la lista de contactos en el vector auxiliar
for (int i=0;i<n;i++){
aux[i]=lista[i];
}
// borramos el vector de la lista de contactos
delete []lista;
//igualamos ambos vectores
lista=aux;
// metemos el nuevo contacto en eñ vector de la lista de contactos
cout << "operador de carga" << endl;
cin >> lista[n];
//incrementamos el numero de la lista de contactos para su proxima ejecucion
n++;
return;
}
//mostrar todos los contactos de la agenda
friend ostream& operator << (ostream &medio, agenda ag1){
if (ag1.n==0){
cout << "La lista de contactos esta vacia" << endl;
}else{
for (int i=0;i<ag1.n;i++)cout << ag1.lista[i];
}
cout << endl << "Presiona una tecla para volver al menu";
return(medio);
}
// buscar un contacto en la agenda
void buscar (void){
if (lista!=NULL){
cout << "Introduce el nombre del contacto: ";
getline (cin,buscarnombre);
for (int i=0;i<n;i++){
if (lista[i].nombre==buscarnombre){
cout << endl;
cout << lista[i];
centinela=false;
}
}
if (centinela==true){
cout << endl << "No existe ningun contacto con ese nombre";
}
}
cout << endl << "Presiona una tecla para volver al menu";
return;
}
};
class menu{
private:
agenda miagenda;
int eleccion;
public:
int solicitar (void){
do{
cout << "1- Nuevo contacto" << endl;
cout << "2- Listar contactos" << endl;
cout << "3- Buscar contacto" << endl;
cout << "4- Salir" << endl << endl;
cout << "Introduce tu eleccion: ";
cin >> eleccion; cin.ignore();
}while (eleccion<1 || eleccion>4);
return (eleccion);
}
void seleccion (void){
do{
eleccion=solicitar();
switch(eleccion){
case 1:
miagenda++;
break;
case 2:
cout << miagenda;
break;
case 3:
miagenda.buscar();
break;
}
}while (eleccion!=4);
}
};
int main (void){
menu m1;
m1.seleccion();
return(0);
}