Array
(
)

Relatório em Turbo C.... me ajudem.......

Tatulegal
   - 29 set 2006

/* Ai pessoal tb??....Na Universidade... dar limguagem C ´Basica´ com Turbo C... O prefessor passou um trabalho... dei conta d fazer quase tudo... + o relatorio não dou conta d fazer corretamente... Algum filho d Deus pode me ajuda.... Eu quero q o relatorio traga todos registro do arquivo....abraço.... t+...... jairobig@hotmail.com...

Os codigo esta abaixo p/ vcs da uma olhada....
*/

//-------------------------------------------------------------------------

# include <stdio.h>
include <stdlib.h>
include <conio.h>
include <string.h>
include <ctype.h>

struct registro{
char nome [40];
char rua [40];
char bairro [20];
char fone [15];
char status;

} reg;

FILE *fp;
void incluir(void),consultar(void),excluir(void),abrir(void),alterar(void),relatorio(void);
int busca(void);

int main (){
char opcao[2],op;
do{

do {
clrscr();
printf(´\n Incluir ´);
printf(´\n Alterar´);
printf(´\n <E> Excluir ´);
printf(´\n <C> Consultar ´);
printf(´\n <R> Relatorio ´);
printf(´\n <S> Sair´);
printf(´\n Op‡Æo... ´);

gets(opcao);
op=tolower(*opcao);

}while (!strchr(´iaecrs´,op));

switch (op){
case ´i´: incluir(); break;
case ´a´: alterar(); break;
case ´e´: excluir(); break;
case ´c´: consultar();break;
case ´r´: relatorio(); break;
case ´s´: exit(1);
}

}while(1);

}
// Funcao abrir o arquivo: recebe uma string com ate 3 caracteres
// e nao devolve nada ao main()

void abrir(char tipo[3]){
if((fp=fopen(´C:\\arquivo.dat´,tipo))==NULL) {
printf(´O arquivo nao pode ser aberto ´);
getch();
exit(1);
}//fim do if
}//fim da funcao abrir

// ----------Funcao incluir() --------------------------------------
void incluir(void){
abrir(´ab+´);
fseek(fp,0L,SEEK_END);
printf(´\nDigite <Nome> ou <fim> para Sair...´);
gets(reg.nome);
while(strcmp(reg.nome,´fim´)!=0){
printf(´\nDigite rua:´);
gets(reg.rua);
printf(´\nDigite Bairro: ´);
gets(reg.bairro);
printf(´\nDigite fone :´);
gets(reg.fone);
reg.status=´1´;
if(fwrite(&reg,sizeof(struct registro),1,fp)!=1){
printf(´\nErro de gravacao. Verifique o motivo ... ´);
getch();
}
else
{printf(´\nInclusao feita com sucesso... ´); }
printf(´\nDigite <nome> ou <fim> para sair...´);
gets(reg.nome);
}
fclose(fp);
} //fim funcao incluir

//--------- Funcao Busca ----------------------------------------
int busca(void){
int achou=-1, posicao=0;
char nomep[40];
abrir(´rb´);
printf(´\nDigite <nome> para ser pesquisado :´);
gets(nomep);
rewind(fp);
while ((!feof(fp)) && (achou==1))
{
fread(&reg,sizeof(struct registro),1,fp);
if(!feof(fp)){
if(strcmp(nomep,reg.nome)==0){
if(reg.status==´0´){
posicao=-2; // registro excluido
}
achou=1;
}
else posicao++;
}
else posicao=-1;// registro inexistente
}
fclose(fp);
return (posicao);
}//fim funcao busca
//------------Consultar----------
void consultar(){
int pos;
pos=busca();

if(pos==-1){
printf(´\nNome inexistente no arquivo...´);
getchar();
}
else{
if(pos==-2)
{
printf(´\nNome excluido do arquivo...´);
getchar();
}
else{
abrir(´rb+´);
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
fread(&reg,sizeof(struct registro),1,fp);
printf(´\nConsulta...´);
printf(´\n Nome =¬s´,reg.nome);
printf(´\n Rua =¬s´,reg.rua);
printf(´\n Bairro=¬s´,reg.bairro);
printf(´\n fone =¬s´,reg.fone);
printf(´\n Tecle <Enter> para continuar...´);
getchar();
}
}
fclose(fp);
}

//------------- Alerar --------
void alterar (void){
int pos;
pos=busca();
if(pos==-1){
printf(´\n Nome inexistente no arquivo...´);
getch();
}
else{
if(pos==-2)
{
printf(´\nNome excluido do arquivo...´);
getch();
}
else{
abrir(´rb+´); //Seek=posiciona o ponteiro interno do arquivo
//CUR=corrente,Atual
fseek(fp,pos*sizeof(struct registro),SEEK_CUR);
fread(&reg,sizeof(struct registro),1,fp);
printf(´\nConsulta...´);
printf(´\n Nome =¬s´,reg.nome);
printf(´\n Rua =¬s´,reg.rua);
printf(´\n Bairro=¬s´,reg.bairro);
printf(´\n fone =¬s´,reg.fone);
reg.status=´1´;
printf(´\n Tecle <Enter> para continuar...´);
getch();
}
printf(´\n\n Alerando...´);
printf(´\n Digite Nome: ´); gets(reg.nome);
printf(´\n Digite Rua : ´); gets(reg.rua);
printf(´\n Digite Bairro: ´); gets(reg.bairro);
printf(´\n Digite fone :´); gets(reg.fone);
reg.status=´1´;
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
if(fwrite(&reg,sizeof(struct registro),1,fp)!=1)
{
printf(´Erro na grava‡Æo...´);
getch();
}
else{
printf(´\nAlteracao feita com sucesso...´);
getch();
}
fclose(fp);
}
}

//---------------Excluir ----------------------
void excluir(void){
int pos;
pos=busca();
if(pos==-1){
printf(´\n Nome inexistente no arquivo...´);
getch();
}
else{
if(pos==-2)
{
printf(´\nNome excluido do arquivo...´);
getch();
}
else{
abrir(´rb+´);
fseek(fp,pos*sizeof(struct registro),SEEK_CUR);
fread(&reg,sizeof(struct registro),1,fp);
printf(´\nConsulta...´);
printf(´\n Nome =¬s´,reg.nome);
printf(´\n Rua =¬s´,reg.rua);
printf(´\n Bairro=¬s´,reg.bairro);
printf(´\n fone =¬s´,reg.fone);
printf(´\n Tecle <Enter> para continuar...´);
getch();
}
reg.status=´0´;
fseek(fp,pos*sizeof(struct registro),SEEK_SET);
if(fwrite(&reg,sizeof(struct registro),1,fp)!=1)
{
printf(´Erro na grava‡Æo...´);
getch();
}
else{
printf(´\nExcluido com sucesso...´);
getch();
}
fclose(fp);

}
}

//-------------- Relatorio -------------------

void relatorio(void) {
rewind(fp);
abrir(´rb+´);
while (!feof(fp) ){
fread(&reg,sizeof(struct registro),1,fp);
printf(´\n Nome =¬s´,reg.nome);
printf(´\n Rua =¬s´,reg.rua);
printf(´\n Bairro=¬s´,reg.bairro);
printf(´\n fone =¬s´,reg.fone);
printf(´\n Tecle <Enter> para continuar...´);
getch();
}
fclose(fp);

}


Tatulegal
   - 11 out 2006

Ninguem tem uma sujestão...