Código:
/*Se necesita un programa para gestión de una agencia matrimonial. Por cada cliente se
almacenarán los siguientes datos: nombre, edad, sexo (M,F), aficiones (Lectura,
Viajes, Deportes, Cine, Gastronomía, Ordenadores,
JuegosDeRol, Modelismo,Perros). Una persona puede tener ninguna, uno o
más aficiones. Implementar los subalgoritmos que permitan (definir previamente el tipo
de datos adecuado para almacenar esta información):
a) Introducir en la estructura los datos de una persona
b) Buscar una persona (por el nombre)
c) Dar de baja una persona (eliminar sus datos, se localiza por el nombre)
d) Casar. Dado el nombre de una persona, se busca una afín a ella, se presentan
por pantalla sus datos y se eliminan los dos de la base de datos. Una persona
será afín a otra (a efectos de Casar) si coinciden todas sus aficiones.*/
#include<iostream>
#include<string>
using namespace std;
typedef int listaficiones[3];
typedef struct{
string nombre;
unsigned edad;
char sexo;
listaficiones aficiones;
}cliente;
typedef cliente NClientes[100];
typedef struct {
unsigned numero_de_clientes;
NClientes NC;
}TListaClientes;
void inicializar_registro(TListaClientes &);
void menu();
void registrar(TListaClientes &);
bool buscar(string , int&,TListaClientes);
void mostrar(int , TListaClientes);
bool casar(string , TListaClientes &);
bool borrar(string, TListaClientes &);
bool afic_iguales(int, int&, TListaClientes);
void mosafi(int ,int,TListaClientes );
int main(){
TListaClientes lista;
string n;
char c='\n';
int nr;
inicializar_registro(lista);
menu();
while(c!='E'){
cin>>c;
//toupper(c);
switch(toupper(c)){
case 'A' :
registrar(lista);
cout<<"Persona registrada."<<endl;
break;
case 'B' :
cout<<"Nombre buscado: ";
getline(cin, n);
buscar(n,nr,lista);
mostrar(nr,lista);
break;
case 'C' :
cout<<"Nombre del cliente que desea borrar: ";
getline(cin, n);
if (borrar(n,lista)){
cout<<endl<< "cliente borrardo."<<endl;
}
else cout<<"cliente no existe!!"<<endl;
break;
case 'D' : cout<<"Nombre del cliente que desea casar: ";
getline(cin, n);
if(casar(n,lista)) cout<<"operacion realizada"<<endl;
else cout<<"afin no encontrado.";
}
}
}
void inicializar_registro(TListaClientes &lis){
lis.numero_de_clientes=0;
}
void menu(){
cout<<"A.Registrar persona."
<<endl<<"B.Buscar persona por nombre."
<<endl<<"C.Eliminar una persona."
<<endl<<"D.Casar. Hay que dar un nombre."
<<endl<<"E.Salir."<<endl;
}
void registrar(TListaClientes &l){
int sexo;
cout<<"Este es el registro numero"<<l.numero_de_clientes+1<<endl;
cout<<"NOMBRE: ";
getline(cin,l.NC[l.numero_de_clientes].nombre);
//cin.ignore();
//cin.get();
cout<<"Sexo, 1.(masculino) 2.(femenino): ";
cin>>sexo;
if(sexo==1){
l.NC[l.numero_de_clientes].sexo='M';
}
else l.NC[l.numero_de_clientes].sexo='F';
cout<<"Edad: ";
cin>>l.NC[l.numero_de_clientes].edad;
cout<<"Elige 3 aficiones: "<<endl<<" 1.Lectura "<<endl<<" 2.Viajes "<<endl<<" 3.Deportes "<<endl<<" 4.Cine "<<endl<<" 5.Gastronomía "<<endl<<" 6.Ordenadores "<<endl<<" 7.JuegosDeRol "<<endl<<" 8.Modelismo "<<endl<<" 9.Perros "<<endl;
for(int j=0; j<3 ;j++){
cin>>l.NC[l.numero_de_clientes].aficiones[j];
}
l.numero_de_clientes++;
}
bool buscar(string nomb,int& i,TListaClientes lista){
bool a=false;
for(int j=0;j<lista.numero_de_clientes;j++){
if(nomb==lista.NC[j].nombre){
a=true;
i=j;
}
}
return a;
}
void mostrar(int s,TListaClientes l){
cout<<endl<<"Nombre: "<<l.NC[s].nombre;
cout<<endl<<"Sexo: "<<l.NC[s].sexo;
cout<<endl<<"Edad: "<<l.NC[s].edad;
cout<<endl<<"Aficiones: "<<endl;
for(int i=0; i<3; i++){
mosafi(i,s,l);
}
}
void mosafi(int af,int s,TListaClientes lista){
switch(lista.NC[s].aficiones[af]){
case 1: cout<<"Lectura"<<endl;
break;
case 2: cout<<"Viajes"<<endl;
break;
case 3: cout<<"Deportes"<<endl;
break;
case 4: cout<<"Cine"<<endl;
break;
case 5: cout<<"Gastronomía"<<endl;
break;
case 6: cout<<"Ordenadores"<<endl;
break;
case 7: cout<<"JuegosDeRol"<<endl;
break;
case 8: cout<<"Modelismo"<<endl;
break;
case 9: cout<<"Perros"<<endl;
}
}
bool borrar(string n,TListaClientes &l){
int i;
bool a;
a=buscar(n,i,l);
if(a){
for(int j=i; j<l.numero_de_clientes ; j++){
l.NC[j]=l.NC[j+1];
}
l.numero_de_clientes--;
}
return a;
}
bool casar(string n,TListaClientes &lista){
bool a,b;
int i,j,parej;
a=buscar(n,i,lista);
if (a){
a=false;
for(j=0; j<lista.numero_de_clientes || a==false ; j++){
if (lista.NC[j].nombre!=n){
if(afic_iguales(i,j,lista)) parej=j;a=true ;
}
}
}
return a;
}
bool afic_iguales(int i, int &j, TListaClientes l){
bool b=true;
for(int k=0; k<3 ;k++){
for(int y=0; y<3 && b==true; y++){
if(l.NC[i].aficiones[k]!=l.NC[j].aficiones[y]) {
b=false;
}
}
}
return b;
}