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;
}