Reading and writing binary file in iteration

0

I'm doing a college job that requires us to create a system that writes various structures read from the standard output into a binary file, leading to the need (?) of iteration usage.

Unlike the ease we have in text files, I'm having trouble writing (function InsertData, I'm not sure it's right) and reading (DataList):

#include <iostream>
#include <fstream>
using namespace std;

struct PersonagemDesenho {//declarando a estrutura que vai carregar os dados do personagem
   string nomePersonagem, nomeCriador;
   string tituloDesenho, relacoesPersonagem;
};


void InserirDados () {

    //variavel para criacao do vetor de registro que sera informado pelo usuario
    int quantidade;

    cout << "Quantos personagens voce pretende inserir nesta sessao?" << endl;
    cin >> quantidade;

    //criando espaco na memoria para utilizacao de um vetor dinamico
    PersonagemDesenho* objPersonagem = new PersonagemDesenho[quantidade];

    //declarando o fluxo de dados e criando o arquivo em modo de escrita
    ofstream arquivo ("personagens.dat", ios::binary);

    //conferir se o arquivo foi criado com sucesso
    if (!arquivo) {
        ofstream arquivo ("personagens.dat", ios::binary);
    }

    //limpa o buffer do cin
    cin.ignore ();

    //como usaremos getline, espacos serao permitidos
    cout << "(A utilizacao de espacos e' permitida para todos os itens a seguir)" << endl;

    //descricao das caracteristicas e tudo mais dos personagens
    for (int i = 0; i < quantidade; i++) {
        cout << " - PERSONAGEM NUMERO: " << i + 1 << endl;

        cout << "Digite o nome do personagem a ser inserido" << endl;
        //getline para pegar o sobrenome e/ou nomes compostos
        getline(cin, objPersonagem[i].nomePersonagem);

        cout << "Digite o nome do criador do personagem" << endl;
        getline(cin, objPersonagem[i].nomeCriador);

        cout << "Digite o titulo do desenho ao qual o personagem pertence" << endl;
        getline(cin, objPersonagem[i].tituloDesenho);

        cout << "Digite personagens relacionados ao personagem principal" << endl;
        getline(cin, objPersonagem[i].relacoesPersonagem);

        //CODIGO DE GRAVAÇÃO
        arquivo.write(reinterpret_cast<const char*> (&objPersonagem[i]), sizeof(PersonagemDesenho));
        }
    cout << "As informacoes serao salvas no arquivo \"personagens.dat\"" << endl;
    //fechamento do arquivo
    arquivo.close();
    //if conferindo se o arquivo criado corretamente
    if(arquivo){
        cout << "As informacoes foram salvas com sucesso!" << endl;
    }
}

void AtualizaDados () {

}

void BuscaDados () {

}

void ListaDados () {

    ifstream arquivo ("personagens.dat", ios::binary);
    int i = 0;

    while (???) {
        arquivo.read(reinterpret_cast<const char*> (&objPersonagens[i]) sizeof(PersonagemDesenho))
        i++;
    }
}

int main () {

    char opcaoEscolhida;

    cout << "Digite o numero referente a opcao que procura" << endl << endl;
    cout << "Digite \"1\" para inserir dados no sistema" << endl;
    cout << "Digite \"2\" para atualizar os dados existentes" << endl;
    cout << "Digite \"3\" para realizar uma busca nos dados salvos" << endl;
    cout << "Digite \"4\" para listar os dados salvos em ordem alfabetica" << endl;
    cout << "Pressione qualquer outra tecla para sair do sistema" << endl;

    cin >> opcaoEscolhida;

    if (opcaoEscolhida == '1') {
        InserirDados ();
    }
        else if (opcaoEscolhida == '2') {
            AtualizaDados ();
        }
            else if (opcaoEscolhida == '3') {
                BuscaDados ();
            }
                else if (opcaoEscolhida == '4') {
                    ListaDados ();
                }
                    else {
                        cout << "Valor invalido" << endl;
                    }

    return 0;
}
    
asked by anonymous 08.01.2018 / 23:26

0 answers