#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;
}
// person.cpp
#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