Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vhbsouza

Arquivo com classe [Problema]

Recommended Posts

Olá pessoal,

 

Estou com o seguinte problema:

 

Tenho que fazer um programa simples que lê algumas informações do teclado inseridas pelo usuário e no final salva em um arquivo. E se o arquivo já existir ele anexa as novas informações ao final do arquivo.

E como eu qro criar um arquivo CSV, precisaria adicionar um ;(ponto e virgula) no fim de cada string lida.

 

Alguém pode me ajudar?

 

As informações são:

 

Nome:

Nome do Club:

Sócio desde:

Data Nascimento:

Profissão:

Email:

Telefone:

 

 

O que acontece é que pensei em fazer uma classe em C++ com essas informações e usar fstream pra salvar só que não está dando certo :S

Ele não salva o arquivo.

E tem outro problema, o CIN. Ele só finaliza a string no " "(space), ao invés de ser no '\n'.

 

Alguém pode me ajudar?

 

#include <fstream>
#include <cstdlib>
#include <string.h>
#include <iostream>

using namespace std;

class Pessoa
{
    private:
        char nome[80],club[100],tempo[50],nasc[20],prof[30],email[50],fone[20];
    public:
        Pessoa();
        void cadastra();
};

Pessoa :: Pessoa()
{
    strcpy(nome,"");
    strcpy(club,"");
    strcpy(tempo,"");
    strcpy(nasc,"");
    strcpy(prof,"");
    strcpy(email,"");
    strcpy(fone,"");
}

void Pessoa :: cadastra()
{

    cout << "Digite o Nome: " << endl;
    cin >> nome;
    cout << "Digite o Club: "<< endl;
    cin >> club;
    cout << "Digite seu Tempo de Rotaract: "<< endl;
    cin >> tempo;
    cout << "Digite seu Nascimento: "<< endl;
    cin >> nasc;
    cout << "Digite sua Profissao: "<< endl;
    cin >> prof;
    cout << "Digite seu EMAIL: "<< endl;
    cin >> email;
    cout << "Digite seu Telefone: "<< endl;
    cin >> fone;
}

int main()
{

    int i;

    fstream fgrava;
    fgrava.open("Pessoa.txt", ios::ate | ios::out | ios::in);

    Pessoa cad1;
    cout << "Deseja cadastrar um aluno? Tecle 0(zero) para sair e 1 para confirmar." << endl;
    cin >> i;

    while(i!=0)
    {

        cad1.cadastra();
        fgrava.write((char*)&cad1,sizeof(Pessoa));
        cout << "Deseja cadastrar um aluno? Tecle 0(zero) para sair e 1 para confirmar." << endl;
        cin >> i;
    }

    fgrava.seekg(0);
}

Aguando uma resposta : )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está fazendo a gravação em formato binário, logo, o arquivo está armazenando a estrutura toda e não apenas os valores de cada atributo.

Para salvar o conteúdo usando a classe, você terá de criar as funções de 'get', e a partir do conteúdo retornado por cada uma dela, adicionar o ';' no final e então salvar em arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está fazendo a gravação em formato binário, logo, o arquivo está armazenando a estrutura toda e não apenas os valores de cada atributo.

Para salvar o conteúdo usando a classe, você terá de criar as funções de 'get', e a partir do conteúdo retornado por cada uma dela, adicionar o ';' no final e então salvar em arquivo.

 

E como faço pra gravar só os valores das variaveis em modo texto?

Não entendi sobre as funções GET!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa salvar apenas o conteúdo do atributo usando as funções "GET".

Exemplo:

class Pessoa
{
   private:
       char nome[80],club[100],tempo[50],nasc[20],prof[30],email[50],fone[20];
   public:
       Pessoa();
       void cadastra();
       void setNome(char *);
       void setClub(char *);
       char* getNome();
       char* getClub();
};

 

usando as funções 'get*()', retornará o conteúdo do atributo, e será esse valor que você armazenará em arquivo, separando por ';' para montar o arquivo CSV.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa salvar apenas o conteúdo do atributo usando as funções "GET".

Exemplo:

class Pessoa
{
   private:
       char nome[80],club[100],tempo[50],nasc[20],prof[30],email[50],fone[20];
   public:
       Pessoa();
       void cadastra();
       void setNome(char *);
       void setClub(char *);
       char* getNome();
       char* getClub();
};

 

usando as funções 'get*()', retornará o conteúdo do atributo, e será esse valor que você armazenará em arquivo, separando por ';' para montar o arquivo CSV.

 

 

Cara, nao consegui entender esse negócio dos gets mais mesmo assim obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse negócio de get e set eu aprendi na faculdade, que eu me lembro é algo assim:

Seu código será uma "caixa-preta" digamos, e os unicos modos de capturar valores seram atraves das funções 'getAlgo();', e para armazenar os 'setAlgo();', deve ter ficado meio vago neh kkk.

+ continua com seu código, e vamos ver oq sai.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.