Herramientas Para el Desarrollo de Videojuegos y Lenguajes de Programación en Español
sábado, 26 de septiembre de 2015
STL Agenda Telefonica Usando Contenedores Map en Visual Studio 2013
Persona.h
//Clase que define el nombre y apellido de una persona
#pragma once
#include <string>
#include <iostream>
using namespace std;
class Persona
{
public:
//constructor
Persona(const string &nombre = "", const string &apellido = "") : nombrePersona(nombre) , apellidoPersona(apellido) {}
//constructor Move
Persona(string &&nombre, string &&apellido) : nombrePersona( move(nombre) ), apellidoPersona( move(apellido) ) {}
//constructor Move
Persona(Persona &&persona) :
nombrePersona( move(persona.nombrePersona) ),
apellidoPersona( move(persona.apellidoPersona) ) {}
//Move operador de asignacion
Persona &operator=(Persona &&persona)
{
nombrePersona = move(persona.nombrePersona);
apellidoPersona = move(persona.apellidoPersona);
}
//operador <
bool operator<(const Persona &p) const
{
return (apellidoPersona < p.apellidoPersona ||
((apellidoPersona == p.apellidoPersona) && (nombrePersona < p.nombrePersona)));
}
//Obtener nombre o get
string getNombre() const
{
return nombrePersona + " " + apellidoPersona;
}
private:
string nombrePersona ;
string apellidoPersona;
};
Main.cpp
//STL Agenda Telefonica Usando Contenedores Map
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <map>
#include "Persona.h"
using namespace std;
using AgendaTelefonica = map < Persona, string > ;
using Entrada = pair < Persona, string > ;
//Registramos personas
Persona registrarPersona()
{
string nombre, apellido;
cout << "Introduce tu nombre: ";
getline(cin, nombre);
cout << "Introduce tu apellido: ";
getline(cin, apellido);
return Persona{ move(nombre), move(apellido) };
}
Entrada introducirTelefono()
{
Persona persona{ registrarPersona() };
string numero;
cout << "Introduce el numero de telefono para " << persona.getNombre() << " : ";
getline(cin, numero);
return make_pair(move(persona), move(numero));
}
//Registramos el telefono
void insertarTelefono(AgendaTelefonica &agenda)
{
auto pr = agenda.insert(introducirTelefono());
if (pr.second)
cout << "Inserto Correctamente" << endl;
else
{
cout << "Entrada coincide con " << pr.first->first.getNombre()
<< "Y el numero es " << pr.first->second << endl;
}
}
//lista de contenidos de la agenda telefonica
void listarAgenda(const AgendaTelefonica &agenda)
{
if (agenda.empty())
{
cout << "La agenda esta vacia" << endl;
return;
}
cout << setiosflags(ios::left); //para justificar la salida a la izquierda
for (const auto &entrada : agenda)
{
cout << setw(30) << entrada.first.getNombre()
<< setw(12) << entrada.second << endl;
}
cout << resetiosflags(ios::right); //justificamos a la derecha la salida
}
//Recibimos las entradas de la agenda telefonica
void obtenerEntradas(const AgendaTelefonica &agenda)
{
Persona persona{ registrarPersona() };
auto iter = agenda.find(persona);
if (iter == agenda.end())
{
cout << "No encontro a la persona " << persona.getNombre() << endl;
}
else
{
cout << "El numero para la persona " << persona.getNombre()
<< " es " << iter->second << endl;
}
}
//Eliminamos un registro de la agenda telefonica
void eliminarDeAgenda(AgendaTelefonica &agenda)
{
Persona persona{ registrarPersona() };
auto iter = agenda.find(persona);
if (iter == agenda.end())
cout << "No encontro a la persona " << persona.getNombre() << endl;
else
{
agenda.erase(iter);
cout << persona.getNombre() << " eliminada" << endl;
}
}
int main()
{
AgendaTelefonica agenda;
char respuesta{};
while (true)
{
cout << "Quieres introducir algo a la agenda(S o N): ";
cin >> respuesta;
while (cin.get() != '\n'); //ignora la entrada de una nueva linea
if (toupper(respuesta) == 'N')
break;
if (toupper(respuesta) != 'S')
{
cout << "Respuesta invalida, intentalo de nuevo" << endl;
continue;
}
insertarTelefono(agenda);
}
//Consultamos la agenda
while (true)
{
cout << "\nEscoge una de las siguientes opciones:" << endl
<< "A - Agrega un registro E - Elimina un Registro B - Buscar Registro" << endl
<< "L - Listar agenda C - Cerrar programa" << endl;
cin >> respuesta;
while (cin.get() != '\n'); //ignoramos la nueva linea
switch (toupper(respuesta))
{
case 'A':
insertarTelefono(agenda);
break;
case 'B':
obtenerEntradas(agenda);
break;
case 'E':
eliminarDeAgenda(agenda);
break;
case 'L':
listarAgenda(agenda);
break;
case 'C':
return 0;
default:
cout << "Opcion invalida. Intentalo de nuevo" << endl;
break;
}
}
system("pause");
return 0;
}
No hay comentarios:
Publicar un comentario