How could I insert the structs into a list? [closed]

0
#include "stdafx.h"
#include <iostream>

using namespace std;

struct FICHA_INSCRICAO
{
    char nome[50];
    char cpf[10];
    char logradouro[100];
    char bairro[20];
    char cidade[20];
    char estado[1];
    char email[50];
    char telefone[10];
    double salario_familiar = 0;
    int pessoas_quant = 0;
    double renda_percapita = 0;

    void INSERE() {

        cout << "Nome: ";
        cin >> nome;
        cout << "CPF: ";
        cin >> cpf;
        cout << "Logradouro: ";
        cin >> logradouro;
        cout << "Bairro: ";
        cin >> bairro;
        cout << "Cidade: ";
        cin >> cidade;
        cout << "Estado: ";
        cin >> estado;
        cout << "Email: ";
        cin >> email;
        cout << "Telefone: ";
        cin >> telefone;
        cout << "Salario Total da Familia: ";
        cin >> salario_familiar;
        cout << "Quantidade de pessoas na sua casa: ";
        cin >> pessoas_quant;

        renda_percapita = salario_familiar / pessoas_quant;
    }
};

int main()
{
    int op = 1, tamanho = 0;
    FICHA_INSCRICAO *ficha = new FICHA_INSCRICAO[tamanho];

    while (op == 1)
    {
        ficha[tamanho].INSERE();
        tamanho++;

        cout << "\nNovo cadastro?\n"
            << "1 - SIM\n"
            << "0 - NAO\n";
        cin >> op;
    }

    system("pause");
    return 0;
}
    
asked by anonymous 07.10.2016 / 23:09

2 answers

2

Just to complement, this is the same source created by @bigown, but with two things I think are cool: smart pointers, and use "move" operation instead of copying the object.

#include <iostream>
#include <map>
#include <memory>
#include <string>

using namespace std;

class FichaInscricao
{
   public:
      string Nome;
      string Cpf;
      string Logradouro;
      string Bairro;
      string Cidade;
      string Estado;
      string Email;
      string Telefone;
      double SalarioFamiliar = 0;
      int QuantidadePessoas = 0;
      double RendaPerCapita = 0;
};

int main()
{
   // mapa de smart pointers
   map<string, unique_ptr<FichaInscricao>> fichario;

   int op;

   do
   {
      // cria no heap uma instancia da classe FichaInscricao,
      // e guarda o endereco em um smart pointer
      auto ficha = make_unique<FichaInscricao>(); // COOL!
      ficha->Inserir();

      // move o endereco de dentro do smart pointer para dentro do mapa
      fichario[ficha->Nome] = std::move(ficha); // COOL!

      cout << "\nNovo cadastro?\n"
           << "1 - SIM\n"
           << "0 - NAO\n";
      cin >> op;
   } while (op == 1);

   for (const auto& ficha: fichario)
   {
      cout << ficha.first << " => " << ficha.second->Cpf << '\n';
   }

}

void FichaInscricao::Inserir()
{
   cout << "Nome: ";
   cin >> Nome;
   cout << "CPF: ";
   cin >> Cpf;
   cout << "Logradouro: ";
   cin >> Logradouro;
   cout << "Bairro: ";
   cin >> Bairro;
   cout << "Cidade: ";
   cin >> Cidade;
   cout << "Estado: ";
   cin >> Estado;
   cout << "Email: ";
   cin >> Email;
   cout << "Telefone: ";
   cin >> Telefone;
   cout << "Salario Total da Familia: ";
   cin >> SalarioFamiliar;
   cout << "Quantidade de pessoas na sua casa: ";
   cin >> QuantidadePessoas;
   RendaPerCapita = SalarioFamiliar / QuantidadePessoas;
}
    
08.10.2016 / 05:06
4

I'm going to redo the code for C ++ without using what's C style.

It is appropriate to use a map , which was described as a requirement. If the requirement is wrong then the solution would be another.

I changed to class because it is more idiomatic for this type of use in C ++. I used string instead of array of char which is C. thing. I used better names.

I do not like this Inserir() in the class, but for an exercise it's fine. Also should not use double for monetary value .

There are other minor problems that are not serious for an exercise.

I printed it at the end and tested it with out-of-order data to show it is in alphabetical order.

There is probably a more complex solution that is better than this that has its own difficulties.

#include <iostream>
#include <string>
#include <map>
using namespace std;

class FichaInscricao {
public:
    string Nome;
    string Cpf;
    string Logradouro;
    string Bairro;
    string Cidade;
    string Estado;
    string Email;
    string Telefone;
    double SalarioFamiliar = 0;
    int QuantidadePessoas = 0;
    double RendaPerCapita = 0;

    void Inserir() {
        cout << "Nome: ";
        cin >> Nome;
        cout << "CPF: ";
        cin >> Cpf;
        cout << "Logradouro: ";
        cin >> Logradouro;
        cout << "Bairro: ";
        cin >> Bairro;
        cout << "Cidade: ";
        cin >> Cidade;
        cout << "Estado: ";
        cin >> Estado;
        cout << "Email: ";
        cin >> Email;
        cout << "Telefone: ";
        cin >> Telefone;
        cout << "Salario Total da Familia: ";
        cin >> SalarioFamiliar;
        cout << "Quantidade de pessoas na sua casa: ";
        cin >> QuantidadePessoas;
        RendaPerCapita = SalarioFamiliar / QuantidadePessoas;
    }
};

int main() {
    map<string, FichaInscricao> fichario;
    int op = 1;
    while (op == 1)  {
        FichaInscricao ficha;
        ficha.Inserir();
        fichario.emplace(ficha.Nome, ficha);
        cout << "\nNovo cadastro?\n"
             << "1 - SIM\n"
             << "0 - NAO\n";
        cin >> op;
    }
    for (const auto &ficha : fichario) {
        std::cout << ficha.first << " => " << ficha.second.Cpf << '\n';
    }
}

See working on ideone and in C ++ Shell .

    
08.10.2016 / 04:13