-4
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <fstream>
#include "pessoa.h"
using namespace std;
int main()
{
//CADASTRA PESSOAS
ofstream fout("pessoas.dat");
Pessoa p;
do{
p.novaPessoa();
fout.write((char *)&p, sizeof(Pessoa));
cin.ignore();
cout << "\nDeseja inserir uma nova pessoa (s/n)?";
}while(getch() != 'n');
//FIM CADASTRA PESSOAS
char pNome[60];
int nTipBusca;
ifstream fin("pessoas.dat", ios::binary);
int leituras = 0;
do{
//ESCOLHE UM TIPO DE BUSCA (BINARIA OU SEQUENCIAL)
cout << "\n\n----------TIPOS DE BUSCA-----------\n";
cout << "\n1 - BUSCA SEQUENCIAL";
cout << "\n2 - BUSCA BINARIA";
cout << "\n0 - SAIR";
cout << "\nEscolha o tipo de busca: ";
cin >> nTipBusca;
switch (nTipBusca){
//SE BUSCA FOR SEQUENCIAL
case 0:
system("pause");
return 0;
case 1:
cout << "\n\nDigite um nome para a busca: ";
gets(pNome);
fin.read((char *)&p, sizeof(Pessoa));
while(fin){
leituras++;
if(strncmp(p.nome, pNome, strlen(pNome)) == 0){
p.imprime();
break;
}
fin.read((char *)&p, sizeof(Pessoa));
}
if(!fin) cout << "\nNome nao encontrado!\n";
//FIM SE BUSCA FOR SEQUENCIAL
//SE BUSCA FOR BINÁRIA
case 2:
long inicio=0, fim, meio;
bool achou = false;
fin.seekg(0, ios::end);
fim = (fin.tellg())/sizeof(Pessoa) - 1;
meio = (inicio+fim)/2;
cout << "\n\nDigite o nome para busca: ";
gets(pNome);
while(fim >= inicio){
fin.seekg(meio*sizeof(Pessoa), ios::beg);
fin.read((char *)&p, sizeof(Pessoa));
cout << meio << ": " << p.nome <<endl;
leituras++;
if (strncmp(p.nome, pNome, strlen(pNome)) == 0){
p.imprime();
achou = true;
break;
}
if(strncmp(p.nome, pNome, strlen(pNome))<0)
inicio = meio+1;
else
fim = meio-1;
meio = (inicio+fim)/2;
}
if (!achou) cout << "\nNome nao encontrado!\n";
//FIM SE BUSCA FOR BINÁRIA
}
}while(getch() != 0);
//FIM TIPO DE BUSCA
return 0;
}
//cpp person.
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include "pessoa.h"
using namespace std;
void Pessoa::novaPessoa(){
cout << "\nENTRE COM O NOME: ";
gets(nome);
cout << "\nENTRE COM O SOBRENOME: ";
gets(sobrenome);
cout << "\nENTRE COM O SEXO: ";
gets(sexo);
cout << "\nENTRE COM O RG: ";
cin >> rg;
}
void Pessoa::imprime(){
cout << "\nNome: " << nome << endl;
cout << "\nSobrenome: " << sobrenome << endl;
cout << "\nSexo: " << sexo << endl;
cout << "\nRG: " << rg << endl;
}
//person. h
#ifndef PESSOA_H
#define PESSOA_H
using namespace std;
class Pessoa
{
public:
void imprime();
void novaPessoa();
char nome[61];
char sobrenome[61];
char sexo[2];
int rg;
};
#endif // PESSOA_H
Hi Stefhany. You shared a lot of code, but what’s your question? Please edit the question to make it clear where you are in trouble. Otherwise, someone will hardly be able to help you.
– Luiz Vieira
There’s not much to know about the problems, but it seems to have to do with the person switch.ccp. I think, I’m not sure, that you forgot to put the breaks. Because there’s only one break inside the if. Another tip would be to divide your code into methods and functions it will become clearer and easier to read.
– Augusto