duvidas no fread (lendo arquivo binario)
19/10/2007
0
galera, to comecando agora com c/c++
tem um projetinho de faculdade que eh um lance de cadastro de fornecedores, e tenho que utilizar um arquivo binario.
existe uma rotina para listar todos os registros desse arquivo, so que ela lista apenas o ultimo, e em duplicidade.. :shock:
como é que pode?!?!?
tambem estou com dificuldades na rotina de localizar determinado registro...
acredito que seja o mesmo problema da rotina Listar().
segue o codigo.
alguem poderia me ajudar?!
tem um projetinho de faculdade que eh um lance de cadastro de fornecedores, e tenho que utilizar um arquivo binario.
existe uma rotina para listar todos os registros desse arquivo, so que ela lista apenas o ultimo, e em duplicidade.. :shock:
como é que pode?!?!?
tambem estou com dificuldades na rotina de localizar determinado registro...
acredito que seja o mesmo problema da rotina Listar().
segue o codigo.
// ABERTURA DOS ARQUIVOS
void AbrirArquivoSetor(){
arqSetor = fopen(´setor.db´,´rb+´);
if (arqSetor == NULL)
arqSetor = fopen(´setor.db´, ´wb+´);
}
void AbrirArquivoFunc(){
arqFunc = fopen(´func.db´,´rb+´);
if (arqFunc == NULL)
arqFunc = fopen(´func.db´, ´wb+´);
}
void AbrirArquivoFinan(){
arqFinan = fopen(´finan.db´,´rb+´);
if (arqFinan == NULL)
arqFinan = fopen(´finan.db´, ´wb+´);
}
// LOCALIZAR REGISTRO NO ARQUIVO
bool Localizar(int nCodigo, int nTipo){
if (nTipo == 1) { // Setor
rewind(arqSetor);
while (fread(&arqSetor, sizeof(arqSetor), 1, arqSetor ))
if (regSetor.nCodigo == nCodigo) {
fseek(arqSetor, ftell(arqSetor)-sizeof(regSetor), SEEK_SET);
return (true);
}
} else if (nTipo == 2) { // Funcionário
rewind(arqFunc);
while (fread(®Func, sizeof(regFunc), 1, arqFunc))
if (regFunc.DEL == 0 && regFunc.nCodigo == nCodigo){
fseek(arqFunc, ftell(arqFunc)-sizeof(regFunc), SEEK_SET);
return (true);
}
} else if (nTipo == 3) { // Movimentação Financeira
rewind(arqFinan);
while (fread(®Finan, sizeof(regFinan), 1, arqFinan))
if (regFinan.DEL == 0 && regFinan.nCodigo == nCodigo) {
fseek(arqFinan, ftell(arqFinan)-sizeof(regFinan), SEEK_SET);
return (true);
}
}
return (false);
}
// VISUALIZAR TODOS OS REGISTROS DO ARQUIVO
void Listar(int nTipo){
int nValor;
char sSetor[50];
if (nTipo == 1) { // Setor
printf( ´Codigo Descricao ´);
printf(´\n------ ------------------------------------------------------------------------´);
rewind(arqSetor);
while (fread(®Setor, sizeof(regSetor), 1, arqSetor))
if (!regSetor.DEL) {
printf(´\n¬6d ¬-50s´, regSetor.nCodigo, regSetor.sDescricao);
}
} else if (nTipo == 2) { // Funcionário
printf( ´Codigo Nome Setor Salario Data Admissao´);
printf(´\n------ --------------------------------------- -------- --------- -------------´);
rewind(arqFunc);
while (fread(®Func, sizeof(regFunc), 1, arqFunc))
if (!regFunc.DEL) {
if (Localizar(regFunc.nCodSetor,1)) {
strcpy(sSetor,regSetor.sDescricao);
} else { s
trcpy(sSetor,´XXXX´);
}
printf(´\n¬6d ¬-50s ¬2d ¬.2f ¬2d/¬2d/¬4d´, regFunc.nCodigo,
regFunc.sNome, sSetor, regFunc.nSalario, regFunc.nDiaAdmissao,
regFunc.nMesAdmissao, regFunc.nAnoAdmissao);
}
} else if (nTipo == 3) { // Movimentação Financeira
printf( ´Codigo Descricao CodFunc Valor Data Mov ´);
printf(´\n------ --------------------------------------- -------- --------- -------------´);
rewind(arqFunc);
while (fread(®Finan, sizeof(regFinan), 1, arqFinan))
if (!regFinan.DEL) {
if (regFinan.nTipoMov == 0){
nValor = -regFinan.nValor;
} else {
nValor = regFinan.nValor;
}
printf(´\n¬6d ¬-50s ¬2d ¬.2f ¬2d/¬2d/¬4d´, regFinan.nCodigo,
regFinan.sDescricao, regFinan.nCodFunc, nValor,
regFinan.nDiaMov, regFinan.nMesMov, regFinan.nAnoMov);
}
}
}
alguem poderia me ajudar?!
Franciscoguimaraes
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)