Ir ao conteúdo
  • Cadastre-se
tiiaguiinho

C++ Cadastro de Pessoa C++

Recommended Posts

Olá galera, preciso fazer um programa que no menu tenha as seguintes opções:

1. cadastrar pessoa (codigo, nome, cpf, idade)

2. Listar pessoas

3. encerrar programa

 

Sou meio leigo, então não sei bem o que estou fazendo de errado, mas já fiz o seguinte:

 

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

 

struct Pessoa {
  int codigoPessoa;
  char cpf[15];  // NNN.NNN.NNN-NN
  char nome[30];
  int idade;
};

Pessoa p1, listaPessoas[5];  // 2 variaveis do tipo Pessoa
  FILE * arq;
  int i;

int cadastraPessoa() {
Pessoa p1, listaPessoas[5];  // 2 variaveis do tipo Pessoa
  FILE * arq;
  int i;
  // DADOS DA PESSOA
  p1.codigoPessoa = 123;
  strcpy(p1.cpf,"123.456.789-00");
  strcpy(p1.nome,"Marcos");
  p1.idade = 20;

  arq = fopen("pessoa.dat","wb"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  // gravacao binaria
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
   // ACRESCENTAR PESSOAS
  arq = fopen("pessoa.dat","ab"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
  return 0;
}
int listaPessoas() {
   arq = fopen("pessoa.dat","rb");  // read binario
  if (arq ==  NULL) {
    cout << "Erro na abertura do arquivo!"; return 0;
  }
  fread(&listaPessoas[0], sizeof(struct Pessoa), 4, arq);
  cout << "Lendo arquivo...." << endl << endl;

  for(i=0;i<4;i++) {
  cout << "Codigo: " << listaPessoas.codigoPessoa << endl;
  cout << "CPF: " << listaPessoas.cpf << endl;
  cout << "Nome: " << listaPessoas.nome << endl;
  cout << "Idade: " << listaPessoas.idade << endl << endl;
}
  fclose(arq);
  return 0;
}
int main() {
   int opc;  // opcao escolhida no menu
   
  do {
        cout << "1. Cadastrar pessoa" << endl;
        cout << "2. Listar pessoa cadartrada" << endl;
        cout << "3. Encerrar o programa" << endl;
        
        cout << "escolha opcao: ";
        cin >> opc;
        
  swtich (opc) {
    case 1: cadastraPessoa(); break;
    case 2: listaPessoas(); break;
    case 3: cout << "Encerrando o programa..."; break;
  }
}
  return 0;
}

 

caso queiram a especificação mais detalhada, segue o anexo:

 

MATA37_TP3_2018_1.pdf

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@tiiaguiinho    para postar seu código é melhor usar o botão  <>   que está lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código , e seu código está bom ,  funciona bem  ,  mas você está gravando a mesma informação 4 vezes ,    mas de qualquer forma seu código com algumas modificações ficaria assim  :

#include <iostream>
#include <string.h>
using namespace std;
struct Pessoa{
  int  codigoPessoa;
  char cpf[15];  // NNN.NNN.NNN-NN
  char nome[30];
  int  idade;
};
Pessoa p1,listaPessoas[5];  // 2 variaveis do tipo Pessoa
FILE * arq;
int i;
int cadastraPessoa(){
    Pessoa p1, listaPessoas[5];  // 2 variaveis do tipo Pessoa
    /*FILE * arq;
    int i;*/
    // DADOS DA PESSOA
    p1.codigoPessoa = 123;
    strcpy(p1.cpf,"123.456.789-00");
    strcpy(p1.nome,"Marcos");
    p1.idade = 20;
    arq = fopen("pessoa.dat","wb"); // write binario
    if (arq ==  NULL) {
        cout << "Erro na criacao do arquivo!";
        return 0;
    }
    // gravacao binaria
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fclose(arq);
    // ACRESCENTAR PESSOAS
    arq = fopen("pessoa.dat","ab"); // write binario
    if (arq ==  NULL) {
        cout << "Erro na criacao do arquivo!"; return 0;
    }
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fclose(arq);
    return 0;
}
int listaPessoas2(){
    arq = fopen("pessoa.dat","rb");  // read binario
    if (arq ==  NULL) {
        cout << "Erro na abertura do arquivo!"; return 0;
    }
    fread(&listaPessoas[0], sizeof(struct Pessoa), 4, arq);
    cout << "Lendo arquivo...." << endl << endl;
    for(i=0;i<4;i++) {
        cout<<"Codigo ----: "<<listaPessoas[i].codigoPessoa<<endl;
        cout<<"CPF -------: "<<listaPessoas[i].cpf<<endl;
        cout<<"Nome ------: "<<listaPessoas[i].nome<<endl;
        cout<<"Idade -----: "<<listaPessoas[i].idade<<endl<<endl;
    }
    fclose(arq);
    return 0;
}
int main(){
    int opc;  // opcao escolhida no menu
    do {
        cout<<"1. Cadastrar pessoa"<<endl;
        cout<<"2. Listar pessoa cadartrada"<<endl;
        cout<<"3. Encerrar o programa"<<endl;
        cout<<"   escolha opcao: ";
        cin>>opc;
        switch(opc){
            case 1: cadastraPessoa(); break;
            case 2: listaPessoas2(); break;
            case 3: cout<<"Encerrando o programa . . . !"; break;
        }
    }while(opc != 3);
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá todos... tudo bem?

 

@tiiaguiinho  : quando li as prescrições [pela segunda vez] percebi que os valores para codigoPessoa precisam ser gerados e aleatórios, pra isso use a função rand (...) Cplusplus. Outra coisa, o que o professor quis dizer com Listar Dicio? Tenho minhas dúvidas, pois cabe outra compreensão que listar não seja exibir a lista, e sim criar uma na memória, e para isso, usando Estrutura de Dados, Clique-me! Cplusplus.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, devair1010 disse:

@tiiaguiinho    para postar seu código é melhor usar o botão  <>   que está lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código , e seu código está bom ,  funciona bem  ,  mas você está gravando a mesma informação 4 vezes ,    mas de qualquer forma seu código com algumas modificações ficaria assim  :


#include <iostream>
#include <string.h>
using namespace std;
struct Pessoa{
  int  codigoPessoa;
  char cpf[15];  // NNN.NNN.NNN-NN
  char nome[30];
  int  idade;
};
Pessoa p1,listaPessoas[5];  // 2 variaveis do tipo Pessoa
FILE * arq;
int i;
int cadastraPessoa(){
    Pessoa p1, listaPessoas[5];  // 2 variaveis do tipo Pessoa
    /*FILE * arq;
    int i;*/
    // DADOS DA PESSOA
    p1.codigoPessoa = 123;
    strcpy(p1.cpf,"123.456.789-00");
    strcpy(p1.nome,"Marcos");
    p1.idade = 20;
    arq = fopen("pessoa.dat","wb"); // write binario
    if (arq ==  NULL) {
        cout << "Erro na criacao do arquivo!";
        return 0;
    }
    // gravacao binaria
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fclose(arq);
    // ACRESCENTAR PESSOAS
    arq = fopen("pessoa.dat","ab"); // write binario
    if (arq ==  NULL) {
        cout << "Erro na criacao do arquivo!"; return 0;
    }
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fwrite(&p1, sizeof(struct Pessoa), 1, arq);
    cout << "Gravando arquivo...." << endl << endl;
    fclose(arq);
    return 0;
}
int listaPessoas2(){
    arq = fopen("pessoa.dat","rb");  // read binario
    if (arq ==  NULL) {
        cout << "Erro na abertura do arquivo!"; return 0;
    }
    fread(&listaPessoas[0], sizeof(struct Pessoa), 4, arq);
    cout << "Lendo arquivo...." << endl << endl;
    for(i=0;i<4;i++) {
        cout<<"Codigo ----: "<<listaPessoas[i].codigoPessoa<<endl;
        cout<<"CPF -------: "<<listaPessoas[i].cpf<<endl;
        cout<<"Nome ------: "<<listaPessoas[i].nome<<endl;
        cout<<"Idade -----: "<<listaPessoas[i].idade<<endl<<endl;
    }
    fclose(arq);
    return 0;
}
int main(){
    int opc;  // opcao escolhida no menu
    do {
        cout<<"1. Cadastrar pessoa"<<endl;
        cout<<"2. Listar pessoa cadartrada"<<endl;
        cout<<"3. Encerrar o programa"<<endl;
        cout<<"   escolha opcao: ";
        cin>>opc;
        switch(opc){
            case 1: cadastraPessoa(); break;
            case 2: listaPessoas2(); break;
            case 3: cout<<"Encerrando o programa . . . !"; break;
        }
    }while(opc != 3);
    return 0;
}

 

Olá colega, muito obrigado.

Consegui dar uma melhorada no código aqui, mas ainda to com um probleminha, eu queria montar um programa que fosse capaz de cadastra n(eni) pessoas e listasse todas essas pessoas cadastradas, no caso to limitando esse número de cadastros a 5 no meu programa, mas estou com problemas, pois não consigo cadastrar mais de 1 pessoa, mandarei o meu programa aqui se você conseguir me ajudar nessa ficarei muito agradecido.

 

Meu programa está da seguinte forma:

 

#include <iostream>
#include <string.h>
using namespace std;

struct Pessoa {
  int codigoPessoa;
  char cpf[15];  // NNN.NNN.NNN-NN
  char nome[30];
  int idade;
};

Pessoa p1, lPessoas[5];  // 2 variaveis do tipo Pessoa
  FILE * arq;
  int i;

int cadastraPessoa() {
Pessoa p1;
  FILE * arq;
  int i;
  
  // DADOS DA PESSOA
  p1.codigoPessoa = rand() % 100;
  cout << "informe o cpf: ";
  cin >> p1.cpf;
  cout << "informe o nome: ";
  cin >> p1.nome;
  cout << "informe a idade: ";
  cin >> p1.idade;
  
  arq = fopen("pessoa.dat","wb"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  
  // GRAVACAO BINARIA
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
  
  // ACRESCENTAR PESSOAS
  arq = fopen("pessoa.dat","ab"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  fwrite(&p1, sizeof(struct Pessoa), 2, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 3, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 4, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 5, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
  return 0;
}

int listaPessoas() {
   arq = fopen("pessoa.dat","rb");  // read binario
  if (arq ==  NULL) {
    cout << "Erro na abertura do arquivo!"; return 0;
  }
  fread(&lPessoas[0], sizeof(struct Pessoa), 5, arq);
  cout << "Lendo arquivo...." << endl << endl;

  for(i=0;i<5;i++) {
  cout << "Codigo: " << lPessoas.codigoPessoa << endl;
  cout << "CPF: " << lPessoas.cpf << endl;
  cout << "Nome: " << lPessoas.nome << endl;
  cout << "Idade: " << lPessoas.idade << endl << endl;
}
  fclose(arq);
  return 0;
}
int main() {
   int op;  // opcao escolhida no menu
  // MENU
  do {
    cout << "1. Cadastrar Pessoa" << endl;
    cout << "2. Listar pessoas cadastradas" << endl;
    cout << "3. Encerrar o Programa" << endl;
    
    cout << "escolha opcao: ";
    cin >> op;
    
  switch (op) {
    case 1: cadastraPessoa(); break;
    case 2: listaPessoas(); break;
    case 3: cout << "Encerrando o programa..."; break;
  }
} while (op != 3);
  return 0;
}

  

  

adicionado 1 minuto depois
#include <iostream>
#include <string.h>
using namespace std;

struct Pessoa {
  int codigoPessoa;
  char cpf[15];  // NNN.NNN.NNN-NN
  char nome[30];
  int idade;
};

Pessoa p1, lPessoas[5];  // 2 variaveis do tipo Pessoa
  FILE * arq;
  int i;

int cadastraPessoa() {
Pessoa p1;
  FILE * arq;
  int i;
  
  // DADOS DA PESSOA
  p1.codigoPessoa = rand() % 100;
  cout << "informe o cpf: ";
  cin >> p1.cpf;
  cout << "informe o nome: ";
  cin >> p1.nome;
  cout << "informe a idade: ";
  cin >> p1.idade;
  
  arq = fopen("pessoa.dat","wb"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  
  // GRAVACAO BINARIA
  fwrite(&p1, sizeof(struct Pessoa), 1, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
  
  // ACRESCENTAR PESSOAS
  arq = fopen("pessoa.dat","ab"); // write binario
  if (arq ==  NULL) {
    cout << "Erro na criacao do arquivo!"; return 0;
  }
  fwrite(&p1, sizeof(struct Pessoa), 2, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 3, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 4, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fwrite(&p1, sizeof(struct Pessoa), 5, arq);
  cout << "Gravando arquivo...." << endl << endl;
  fclose(arq);
  return 0;
}

int listaPessoas() {
   arq = fopen("pessoa.dat","rb");  // read binario
  if (arq ==  NULL) {
    cout << "Erro na abertura do arquivo!"; return 0;
  }
  fread(&lPessoas[0], sizeof(struct Pessoa), 5, arq);
  cout << "Lendo arquivo...." << endl << endl;

  for(i=0;i<5;i++) {
  cout << "Codigo: " << lPessoas[i].codigoPessoa << endl;
  cout << "CPF: " << lPessoas[i].cpf << endl;
  cout << "Nome: " << lPessoas[i].nome << endl;
  cout << "Idade: " << lPessoas[i].idade << endl << endl;
}
  fclose(arq);
  return 0;
}
int main() {
   int op;  // opcao escolhida no menu
  // MENU
  do {
    cout << "1. Cadastrar Pessoa" << endl;
    cout << "2. Listar pessoas cadastradas" << endl;
    cout << "3. Encerrar o Programa" << endl;
    
    cout << "escolha opcao: ";
    cin >> op;
    
  switch (op) {
    case 1: cadastraPessoa(); break;
    case 2: listaPessoas(); break;
    case 3: cout << "Encerrando o programa..."; break;
  }
} while (op != 3);
  return 0;
}

  

 

  • Curtir 1
  • Triste 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@tiiaguiinho      seu código está bom , estava com um erro  na abertura do arquivo , e para gravar tem outros modos , então seu código com algumas modificações pode ser assim  :

#include <iostream>
#include <string.h>
#include <windows.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome e números das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letras, int fundo){/* primeiro a letra segundo a cor de fundo */
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
using namespace std;
struct Pessoa{
    int  codigoPessoa;
    char cpf[15];  // NNN.NNN.NNN-NN
    char nome[30];
    int  idade;
};
Pessoa p1,lPessoas[5];  // 2 variaveis do tipo Pessoa
FILE * arq;
int i,cont;
void cadastraPessoa(){
    char op='s';
    do{
        // DADOS DA PESSOA
        lPessoas[cont].codigoPessoa = rand() % 100;
        textcolor(14,0);
        cout<<"informe o cpf ----: ";
        textcolor(11,0);
        cin>>lPessoas[cont].cpf;
        textcolor(14,0);
        cout<<"informe o nome ---: ";
        textcolor(11,0);
        cin>>lPessoas[cont].nome;
        textcolor(14,0);
        cout<<"informe a idade --: ";
        textcolor(11,0);
        cin>>lPessoas[cont].idade;
        arq = fopen("pessoa.dat","ab"); // write binario
        textcolor(15,9);
        if (arq ==  NULL){
            cout<<"Erro na criacao do arquivo !  ";
            return ;
        }
        // GRAVACAO BINARIA
        fwrite(&lPessoas[cont], sizeof(struct Pessoa), 1, arq);
        cout<<"Gravando arquivo . . . . !  "<<endl<<endl;
        fclose(arq);
        cont++;
        // ACRESCENTAR PESSOAS
        textcolor(14,0);
        cout<<"Quer Cdastrar Outra Pessoa  S/N ";
        cin>>op;
    }while(toupper(op) != 'N');
}
void listaPessoas(){
    int j=0;
    arq = fopen("pessoa.dat","rb");  // read binario
    textcolor(15,9);
    if (arq ==  NULL){
        cout<<"Erro na abertura do arquivo !  ";
        return ;
    }
    cout<<"Lendo arquivo . . . . !  "<<endl<<endl;
    textcolor(14,0);
    while(fread(&lPessoas[j], sizeof(struct Pessoa), 1, arq) > 0){
        cout<<"Codigo -: "<<lPessoas[j].codigoPessoa<<endl;
        cout<<"CPF ----: "<<lPessoas[j].cpf<<endl;
        cout<<"Nome ---: "<<lPessoas[j].nome<<endl;
        cout<<"Idade --: "<<lPessoas[j].idade<<endl<<endl;
        j++;
    }
    fclose(arq);
    cout<<"Tecle";
    getch();
}
int main(){
    int op;  // opcao escolhida no menu
    // MENU
    do{
        system("cls");
        textcolor(10,0);
        cout<< "1. Cadastrar Pessoa"<<endl;
        cout<< "2. Listar pessoas cadastradas"<<endl;
        cout<< "3. Encerrar o Programa"<<endl;
        cout<< "   escolha opcao: ";
        cin>>op;
        switch(op){
        case 1:
            cadastraPessoa();
            break;
        case 2:
            listaPessoas();
            break;
        case 3:
            textcolor(12,14);
            cout << "\nEncerrando o programa . . . !  \n\n";
            break;
        }
    }while(op != 3);
    textcolor(7,0);
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×