Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

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
Postado
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
Postado

@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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!