Estou a começar na area de programaçao, e mim pediram para CRIAR UM PROGRAMA PARA GESTAO de algo que eu queira, sendo que este programa tenha funçao de PESQUISAR, LISTAR, INSERIR, ATUALIZAR, APAGAR um ficheiro binario.
Alguem pode mim ajudar a fazer??
Comecei a fazer esse, para uma relação de pagamentos de uma empresa por exemplo, mas este não esta funcionar, com a função Salário, posso inserir NOME e IDADE, mas quando vou colocar SALÁRIO da um erro e não corre mais..... Alguém teria uma ideia de uma solução??? Por favor...
Pergunta
sumaya
Oi...
Estou a começar na area de programaçao, e mim pediram para CRIAR UM PROGRAMA PARA GESTAO de algo que eu queira, sendo que este programa tenha funçao de PESQUISAR, LISTAR, INSERIR, ATUALIZAR, APAGAR um ficheiro binario.
Alguem pode mim ajudar a fazer??
Comecei a fazer esse, para uma relação de pagamentos de uma empresa por exemplo, mas este não esta funcionar, com a função Salário, posso inserir NOME e IDADE, mas quando vou colocar SALÁRIO da um erro e não corre mais..... Alguém teria uma ideia de uma solução??? Por favor...
-----------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define FICH "Dados.dat"
#define OP_INSERIR '1'
#define OP_ALTERAR '2'
#define OP_APAGAR '3'
#define OP_LISTAR '4'
#define OP_PESQUISAR '5'
#define OP_SAIR '0'
#define OP_PESQ_IDADE '1'
#define OP_PESQ_NOME '2'
char *MainMenu[]={
"1. Inserir Registo",
"2. Alterar Registo",
"3. Apagar Registo",
"4. Listar Registos",
"5. Pesquisas",
"0. Sair",
NULL
};
char *PesqMenu[]= {
"1. Pesquisar por Intervalo de Idades",
"2. Pesquisar por Nome",
"0. Voltar",
NULL
};
FILE *fp;
typedef struct
{
char Nome[30+1];
int Idade;
float Salario;
char Status;
} PESSOA;
void Mensagem(char *msg);
void Ler_Pessoa(PESSOA *p)
{
printf("Nome :"); gets(p->Nome);
printf("Idade :"); scanf("%d", &p->Idade);
printf("Nome :"); scanf("&f",p->Salario);
p->Status=' ';
fflush(stdin);
}
void Mostrar_Pessoa(PESSOA p)
{
printf("%-30s %3d %10.2f\n",p.Nome,p.Idade,p.Salario);
}
void Adicionar_Pessoa(PESSOA p)
{
fseek(fp,0L, SEEK_END);
if(fwrite(&p,sizeof(p),1,fp)!=1)
Mensagem("Adicionar Pessoa: Falhou a escrita do Registo");
}
void Mensagem(char *msg)
{
printf(msg);
getchar();
}
void Inic()
{
fp=fopen(FICH, "r+b");
if(fp==NULL)
{
fp=fopen(FICH,"w+b");
if(fp==NULL)
{
fprintf(stderr, "ERRO FATAL: Impossivel Criar o Ficheiro de Dados\n");
exit(1);
}
}
}
char Menu(char *Opcoes[])
{
int i;
char ch;
while(1)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
for(i=0; Opcoes != NULL; i++)
printf("\t\t%s\n\n",Opcoes);
printf("\n\n\n\t\tOpcao: ");
ch= getchar();
fflush(stdin);
for(i=0; Opcoes != NULL; i++)
if(Opcoes [0] ==ch)
return ch;
}
}
void Inserir_Pessoa()
{
PESSOA x;
Ler_Pessoa (&x);
Adicionar_Pessoa(x);
}
void Alterar_Pessoa()
{
PESSOA x;
long int n_reg;
printf("Qual o Nº do Registo: ");
scanf("%ld", & n_reg);
fflush(stdin);
if(fseek(fp,(n_reg-1) * sizeof(PESSOA), SEEK_SET)!=0)
{
Mensagem("Registo Inexistente");
return;
}
if(fread(&x, sizeof(PESSOA), 1,fp) !=1)
{
Mensagem("Problemas no registo");
return;
}
if (x.Status=='*')
{
Mensagem("Um Registo Apagado nao pode ser alterado\n\n\n");
return;
}
printf("\n\nDados Actuais\n\n");
Mostrar_Pessoa(x);
printf("\n\nNovos Dados\n\n");
Ler_Pessoa(&x);
fseek(fp, -(long) sizeof(PESSOA), SEEK_CUR);
fwrite(&x,sizeof(PESSOA), 1, fp);
fflush(fp);
}
void Apagar_Pessoa()
{
PESSOA x;
long int n_reg;
char resp;
printf("Qual o Nº do Registo: ");
scanf("%ld", &n_reg);
fflush(stdin);
if (fseek(fp, (n_reg-1) *sizeof(PESSOA),SEEK_SET)!= 0)
{
Mensagem("Registo Inexistente");
return;
}
if(fread(&x,sizeof(PESSOA),1,fp)!=1)
{
Mensagem("Problemas na Leitura do Registo");
return;
}
if (x.Status=='*')
{
Mensagem("Registo ja esta apagado\n\n");
return;
}
printf("\n\nDados atuais\n\n");
Mostrar_Pessoa(x);
printf("\n\nApagar o Registo (s/n)? ");
resp=getchar();
fflush(stdin);
if(toupper(resp) !='S') return;
x.Status='*';
fseek(fp,-(long) sizeof(PESSOA),SEEK_CUR);
fwrite(&x,sizeof(PESSOA), 1, fp);
fflush(fp);
}
void Listar(){
long int N_Linhas = 0;
PESSOA reg;
rewind(fp);
while(1)
{
if(fread(®,sizeof(reg),1,fp) !=1)
break;
if(reg.Status=='*')continue;
Mostrar_Pessoa(reg);
N_Linhas++;
if(N_Linhas%20==0)
Mensagem("PRIMA <ENTER> para continuar...");
}
Mensagem("\n\nPRIMA <ENTER> para continuar...");
}
void Pesquisar_Idades(int ini, int fim)
{
PESSOA reg;
rewind(fp);
while(fread(®,sizeof(PESSOA),1,fp))
if(reg.Status !='*' && reg.Idade >=ini && reg.Idade <=fim)
Mostrar_Pessoa(reg);
Mensagem("\n\nPRIMA <ENTER> para continuar... ");
}
void Pesquisar_Nome(char *s)
{
PESSOA reg;
rewind(fp);
while(fread(®,sizeof(PESSOA),1,fp))
if(reg.Status!='*' && strstr(reg.Nome,s))
Mostrar_Pessoa(reg);
Mensagem("\n\nPRIMA <ENTER> para continuar...");
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.