Показать векторную структуру в векторной структуре - PullRequest
0 голосов
/ 02 декабря 2018

Я настоящий новичок, и это действительно сложно для меня.Я искал ответ, но я не смог найти его здесь или, если я видел его ... мне кажется, это сложно.

Вот что я пытаюсь сделать:

У меня есть эти заголовки

#include <iostream>
#include <string>
#include <vector>

И у меня есть эти структуры

struct stFecha {
    int dia;
    int mes;
    int ano;
};

struct stPersona {
    string cedula;
    string nombre;
    string apellido;
    stFecha fechaNacimiento;
    char estado;
};

struct stCuentaBancaria{
    string numeroCuenta;
    string nombreOficialBancario;
    double totalDebito;
    double totalCredito;
    vector<stPersona> clientesCuenta;
    char estado;

Я объявил эти векторы, с которыми буду работать

vector<stPersona> clientes;
vector<stCuentaBancaria> cuentas;

И это код, который я использую, чтобы перебрать структуры и проверить, существует ли уже человек в записи.

for( vector<stPersona>::iterator it = clientes.begin();  !existe && it != clientes.end(); ++it )
{
    existe = cedula.compare( (*it).cedula ) == 0 ;
    if ( existe )
    {
        cout << "NOMBRE :"   << (*it).nombre   << '\n' 
             << "APELLIDO :" << (*it).apellido << '\n' 
             << "CEDULA :" << (*it).cedula << '\n'
             << "FECHA DE NACIMIENTO DD/MM/AAAA:\n"
             << "DIA: " << (*it).fechaNacimiento.dia << '\n'
             << "MES: " << (*it).fechaNacimiento.mes << '\n'
             << "A\xA5O: " << (*it).fechaNacimiento.ano << '\n'
             << "ESTADO: "<< (*it).estado << '\n';
    }

Я вижу, что, хотя fechaNacimiento являетсяstruct Я могу легко получить доступ к данным в этой структуре, потому что это не вектор.

С другой стороны, прежде чем добавить новую учетную запись в вектор cuentas, мне нужно проверить, является ли идентификатор или cedulaзарегистрирован в данных моего клиента clientes.поэтому я использую следующий код, чтобы найти, существует ли запись.

stCuentaBancaria cuenta;
cout << "CEDULA DEL CLIENTE: ";
cin >> cedula;

bool existe = false;

for ( vector<stPersona>::iterator it = clientes.begin(); !existe && it != clientes.end(); ++it )
{
existe = cedula.compare( (*it).cedula ) == 0;
if ( existe )
{
    cuenta.clientesCuenta.push_back((*it));                             
}

С моей точки зрения, предполагается скопировать найденную в clientes запись типа stPersona в clientesCuenta, которая также является структурой stPersona внутри структуры stCuentas, котораявыступает за банковские счета.пока я не получаю ошибок.

Но здесь я не вижу, как заставить все работать на меня ...

Я хочу просмотреть записи и когда он найдет нужную запись дляотображать данные в записи, но когда я это сделал, как и раньше с итератором клиентов clientes, этот не работает.Он содержит вектор внутри, он дает мне ошибку

cout<<"\n\n2.CONSULTA POR CUENTA\n";
string cuenta;
cout << "INTRODUCIR CUENTA A CONSULTAR .:";
cin  >> cuenta;

bool existe = false;


for( vector<stCuentaBancaria>::iterator it = cuentas.begin();  !existe && it != cuentas.end(); ++it )
                    {
existe = cuenta.compare( (*it).numeroCuenta ) == 0 ;
if ( existe )
{
    cout << "NUMERO DE CUENTA :"   << (*it).numeroCuenta   << '\n' 
         << "NOMBRE OFICIAL DE CUENTA :" << (*it).nombreOficialBancario << '\n' 
         << "TOTAL DEBITO : " << (*it).totalDebito << '\n'
         << "TOTAL CREDITO: " << (*it).totalCredito << '\n'
         << "ESTADO: "<< (*it).estado << '\n'
         << "TUTORIALES DE CUENTA: " << (*it).clientesCuenta << '\n'; 
}

Я пытался использовать (*it).clientesCuenta, но это векторная структура stPersonas внутри вектора cuentas, ранее объявленного.

Iне знаю, как мне получить доступ к отображению этих данных или как получить доступ к их изменению в будущем, если я их найду.

Пожалуйста, помогите.

дополнительное примечание : Я получаю доступ к этим данным через функции

int manejoCuentas(vector<stCuentaBancaria> &cuentas,vector<stPersona> &clientes, int &opcionMenu)

И вот как я отправляю данные из основной функции

manejoCuentas(cuentas, clientes, opcion);

Мой английский не очень хорош, спасибо, что прочитали это илюбая помощь будет приветствоваться

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Определяя следующие три перегрузки оператора <<, мы можем упростить код, который выводит элементы ваших POD.Поскольку stFecha, stPersona и stCuentaBancaria являются типами POD и все их члены общедоступны, нам не нужно определять для них функции-друзья:

#include <ostream>

std::ostream& operator<<(std::ostream& o, const stFecha& fecha)
{
    o << "DIA   : " << fecha.dia  << '\n';
    o << "MES   : " << fecha.mes  << '\n';
    o << "A\\xA5O: " << fecha.ano;

    return o;
}

std::ostream& operator<<(std::ostream& o, const stPersona& persona)
{
    o << "NOMBRE   : " << persona.nombre   << '\n';
    o << "APELLIDO : " << persona.apellido << '\n';
    o << "CEDULA   : " << persona.cedula   << '\n';

    o << "FECHA DE NACIMIENTO DD/MM/AAAA:\n";
    o << persona.fechaNacimiento << '\n';

    o << "ESTADO   : " << persona.estado;

    return o;
}

std::ostream& operator<<(std::ostream& o, const stCuentaBancaria& bancaria)
{
    o << "NUMERO DE CUENTA         : " << bancaria.numeroCuenta          << '\n';
    o << "NOMBRE OFICIAL DE CUENTA : " << bancaria.nombreOficialBancario << '\n';
    o << "TOTAL DEBITO             : " <<bancaria.totalDebito            << '\n';
    o << "TOTAL CREDITO            : " << bancaria.totalCredito          << "\n\n";

    o << "TUTORIALES DE CUENTA\n"; 
    for(const auto& ceunta_i : bancaria.clientesCuenta){
        o << ceunta_i << "\n\n";
    }

    o << "ESTADO: "<< bancaria.estado;

    return o;
}

Затем вы можете вывести данныекаждый элемент от std::vector<stCuentaBancaria> cuentas до std::cout или некоторый другой выходной поток только с одним вкладышем, как показано ниже.

DEMO

std::cout << *it << std::endl;
0 голосов
/ 02 декабря 2018

Переопределить функцию для вывода вектора stCuentaBancaria

ostream & operator << (ostream & os, const vector & cuentas) для (int i = 0; i <cuentas.size (); i ++) {os <<"TUTORIALES DE CUENTA:" << i << '' << cuentas [i] << '\ n';} return * os;} </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...