//Herlander Modesto João Falo
//Engenharia De Telecomunicações
//Universidade Católica de Angola
#include
#include
#include
#include
#include
#include
#define FICH "DADOS.txt"
#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_NUM_BI '1'
#define OP_PESQ_NOME '2'
#define OP_PESQ_NTELEF '3'
//estrutura endereco
typedef struct {
char Muni[50],
Bairro [50],
Rua[50];
int CasaNro;
}MORADA;
//estrutura Data
typedef struct { int Dia,
Mes,
Ano;
}DATA;
typedef struct {
char NomeEmpresa[50],
Funcao[50],
Categoria[50];
float VencMensal,
OutrosRend;
}TRABALHO;
//estrutura conta
typedef struct{
int modalidade,
tipos;
char Outras;
}CONTA;
typedef struct {
char NomeCompleto[30];
char NomePai[30];
char NomeMae[30];
DATA Nasc;
char Est_Civil;
int RegCasamento;
char BI[30];
MORADA Endereco;
long int Telefone;
int CaixaPostal;
int ContribNro;
TRABALHO Empresa;
CONTA Conta;
char Status;
}CLIENTE;
//Menu Principal
char *MainMenu[]={
"1. Cadastrar Cliente",
"2. Alterar Cliente",
"3. Apagar Cliente",
"4. Listar Clientes",
"5. Pesquisar Cliente",
"0. Sair",
NULL //Acabaram as opcoes
};
// Menu de Pesquisa
char *PesqMenu[]={
"1. Pesquisar por Numero BI",
"2. Pesquisar por Nome Completo",
"3. Pesquisar por Numero de Telefone",
"0. Voltar",
NULL
};
// Ficheiro
FILE *fp;
//Mensagem
void Mensagem (char *msg);
//leitura dos dados a inserir pelo utilizador
void Ler_CLIENTE(CLIENTE *p)
{
printf("\tNome Completo :"); gets(p->NomeCompleto);
printf("\tNome do Pai :"); gets(p->NomePai);
printf("\tNome da mae :"); gets(p->NomeMae);
printf("\tNascimento:DD MM AAAA:");scanf ("%d %d %d",&p->Nasc.Dia,&p->Nasc.Mes,&p->Nasc.Ano);fflush(stdin);
printf("Escolhe a opcao do Estado Civil:\n");
printf("\tS-Solteiro(a) \tC-Casado(a)\n \tV-Viuvo(a) \tD-Divrociado(a)\n\t:");scanf("%c",&p->Est_Civil); fflush(stdin);
printf("Escolhe a opcao do regime de casamento:\n");
printf("\t1-Comunhao Parcial de Bens \t2-Comunhao Universao de Bens\n");
printf("\t3-Separacao de Bens \t4-Participacao Final nos Aquestos\n\t:");scanf("%d",&p->RegCasamento); fflush(stdin);
printf("\tBilhete de identidade:"); gets(p->BI);
printf("\tMunicpio :"); scanf("%s",&p->Endereco.Muni);fflush(stdin);
printf("\tBairro :"); scanf("%s",&p->Endereco.Bairro);fflush(stdin);
printf("\tRua :"); scanf("%s",&p->Endereco.Rua);fflush(stdin);
printf("\tCasa Numero :"); scanf("%d",&p->Endereco.CasaNro);fflush(stdin);
printf("\tTelefone :"); scanf("%ld",&p->Telefone);fflush(stdin);
printf("\tCaixa Postal :"); scanf("%d",&p->CaixaPostal);fflush(stdin);
printf("\tNumero Contribuinte :"); scanf("%d",&p->ContribNro);fflush(stdin);
printf("Dados da Empresa onde Trabalha:\n");
printf("\tNome da Empresa :"); scanf("%s",&p->Empresa.NomeEmpresa);fflush(stdin);
printf("\tFuncao :"); scanf("%s",&p->Empresa.Funcao);fflush(stdin);
printf("\tCategoria :"); scanf("%s",&p->Empresa.Categoria);fflush(stdin);
printf("\tVencimento Mensal :"); scanf("%f",&p->Empresa.VencMensal);fflush(stdin);
printf("\tOutros Rendimentos :"); scanf("%f",&p->Empresa.OutrosRend);fflush(stdin);
printf("Modalidade de Conta :\n");
printf("\t1-individual 2-Solidaria 3-conjunta\n\t:"); scanf("%d",&p->Conta.modalidade);fflush(stdin);
printf("Tipos de Conta :\n");
printf("\t1-Deposito a Ordem 2-Deposito a Prazo 3-Conta Juventude \n");
printf("\t4Caderneta 5-Deposito a ordem moeda estrangeira \n\t:"); scanf("%d",&p->Conta.tipos);fflush(stdin);
printf("Outras Contas :");
printf("\tS-Sim \tN-Nao :"); scanf("%c",&p->Conta.Outras);
p->Status=' ';
fflush(stdin);
}
// metodo de leitura do estado civil
void EstadoCivil(char estCivil)
{
switch (estCivil)
{
case 'c':
case 'C': printf("Casado(a) \n");break;
case 'd':
case 'D': printf("Divorciado(a) \n");break;
case 's':
case 'S': printf("Solteiro(a) \n");break;
case 'v':
case 'V': printf("Viuvo \n");break;
default: printf("Estado civil incorrecto! ! !\n");
}
}
// metodo de leitura do Regime de Casamento
void RegimeCasal(int rcasal)
{
switch (rcasal)
{
case 1: printf("Comunhao Parcial de Bens \n");break;
case 2: printf("Comunhao Universao de Bens \n");break;
case 3: printf("Separacao de Bens \n");break;
case 4: printf("Participacao Final nos Aquestos \n");break;
default: printf("Nao casado ! ! !\n");
}
}
//Metodos das modalidade
void Modalidades(int modal)
{
switch (modal)
{
case 1: printf("individual \n");break;
case 2: printf("Solidaria \n");break;
case 3: printf("Conjunta \n");break;
default:printf("Nao casado ! ! !\n");
}
}
//Metodos das tipos de Conta
void TiposConta(int tipoConta)
{
switch (tipoConta)
{
case 1: printf("Deposito a Ordem \n");break;
case 2: printf("Deposito a Prazo \n");break;
case 3: printf("Conta Juventude \n");break;
case 4: printf("Caderneta \n");break;
case 5: printf("Deposito a ordem moeda estrangeira \n");break;
default: printf("Outras ! ! !\n");
}
}
void OutrasContas(char outras)
{
switch (outras)
{
case 's':
case 'S': printf("Sim \n");break;
case 'n':
case 'N': printf("Nao \n");break;
default: printf("opcao incorreta ! ! !\n");
}
}
void Mostrar_Cliente(CLIENTE p)
{
printf("********************************************************\n");
printf("\tNome Completo :%-30s\n", p.NomeCompleto);
printf("\tPai :%s \n",p.NomePai);
printf("\tMae :%s \n",p.NomeMae);
printf("\tNasc. (DD MM AAAA) :%d-%d-%d\n",p.Nasc.Dia, p.Nasc.Mes, p.Nasc.Ano);
printf("\tEstado Civil :");EstadoCivil(p.Est_Civil);
printf("\tRegime de Casamento :");RegimeCasal(p.RegCasamento);
printf("\tBI :%s\n",p.BI);
printf("\tMorada :Municipio %s,Bairro %s,Rua %s, nro %d\n",p.Endereco.Muni,p.Endereco.Bairro,p.Endereco.Rua,p.Endereco.CasaNro); fflush(stdin);
printf("\tTelefone :%ld\n",p.Telefone);
printf("\tCaixa Postal :%d \n",p.CaixaPostal);
printf("\tContribuinte Nro :%d \n",p.ContribNro);
printf("Dados da Empresa\n");
printf("\tNome da Empresa :%s \n",p.Empresa.NomeEmpresa);
printf("\tFuncao :%s \n",p.Empresa.Funcao);
printf("\tCategoria :%s \n",p.Empresa.Categoria);
printf("\tVencimento Mensal :%.4f\n",p.Empresa.VencMensal);
printf("\tOutros Rendimentos :%.4f\n",p.Empresa.OutrosRend);
printf("Conta\n");
printf("\t Modalidae de Conta :");Modalidades(p.Conta.modalidade);
printf("\t Tipo de Conta :");TiposConta(p.Conta.tipos);
printf("\t Outras Contas :");OutrasContas(p.Conta.Outras);
/*
fflush(stdin);*/
printf("********************************************************\n");
// system("PAUSE");
}
void Adicionar_Cliente(CLIENTE p)
{
fseek(fp, 0L, SEEK_END);
if (fwrite(&p,sizeof(p),1,fp)!=1)
Mensagem("Adicionar Pessoa: Falhou a escrita do Registo");
}
//coloca uma mensagem no ecram
void Mensagem (char *msg)
{
printf(msg);
getchar();
}
// Criar ficheiro se nao existir abri na forma de leitura e escrita
void Inic()
{
fp =fopen(FICH, "r+b"); //tentar abrir
if(fp==NULL)
{
fp =fopen(FICH, "w+b");//criar o ficheiro
if(fp==NULL)
{
fprintf(stderr, "ERRO FATAL: Impossivel Criar o ficheiro de Dados\n");
exit(1);
}
}
}
// Menu de opcoes
char Menu(char *Opcoes[])
{ int i;
char ch;
while (1)
{ //Cls
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\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[i]!=NULL; i++)
printf("\t\t%s\n\n",Opcoes[i]);
printf("\n\n\t\tOpcao: ");
ch = getchar(); fflush(stdin);
for (i=0; Opcoes[i]!=NULL; i++)
if (Opcoes[i][0]==ch)
return ch;
}
}
// insercao de dados
void Inserir_Cliente()
{
CLIENTE x;
Ler_CLIENTE(&x);
Adicionar_Cliente(x);
}
//metodo para alterar
void Alterar_Cliente()
{ CLIENTE x;
long int n_reg;
printf("Qual o No do cliente que pretende alterar: ");
scanf("%ld", &n_reg);fflush(stdin);
if (fseek (fp,(n_reg-1)*sizeof(CLIENTE),SEEK_SET)!=0)
{
Mensagem ("clienete Inexistente ou problemas no posicionamento !!!");
return;
}
if(fread(&x,sizeof(CLIENTE),1,fp)!=1)
{
Mensagem ("Problemas na leitura do registo");
return;
}
if(x.Status=='*')
{
Mensagem("Um registro Apagado nao pode ser Alterado !!!\n\n\n");
return ;
}
printf("\n\n Dados Actuais\n\n");
Mostrar_Cliente(x);
printf("\n\nNovos Dados\n\n");
Ler_CLIENTE(&x);
fseek(fp,-(long) sizeof(CLIENTE), SEEK_CUR);
fwrite(&x,sizeof (CLIENTE), 1,fp);
fflush(fp);
}
void Apagar_Cliente()
{
CLIENTE x;
long int n_reg;
char resp;
printf("Qual o Nro do Registo: ");
scanf("%ld", & n_reg); fflush (stdin);
if(fseek (fp,(n_reg-1)*sizeof (CLIENTE),SEEK_SET)!=0)
{
Mensagem ("Registo Inexistente ou problemas no posicionamento!!!");
return ;
}
if(fread(&x,sizeof(CLIENTE),1,fp)!=1)
{
Mensagem("Problema na Leitura do Registro!!!\n\n");
return ;
}
if(x.Status =='*')
{
Mensagem ("Registo ja Esta Apagado!!!\n\n");
return;
}
printf("\n\n Dados Actuais\n\n");
Mostrar_Cliente(x);
printf("\n\n Apagar o registo (s/n)???: "); resp =getchar();
fflush(stdin);
if(toupper(resp)!='S') return;
x.Status='*';
fseek (fp,-(long) sizeof(CLIENTE),SEEK_CUR);
fwrite(&x,sizeof(CLIENTE),1,fp);
fflush(fp);
}
void Listar()
{
long int N_Linhas = 0;
CLIENTE reg;
rewind(fp);
while(1)
{
if(fread(®,sizeof(reg),1,fp)!=1) break;
if(reg.Status=='*') continue;
Mostrar_Cliente(reg);
N_Linhas++;
if(N_Linhas%20==0)
Mensagem("Prima para Continuar . . .");
}
Mensagem("Prima para Continuar . . .");
}
void Pesquisar_NUM_BI(char *s)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && strstr(reg.BI,s))
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
void Pesquisar_Nome(char *s)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && strstr(reg.NomeCompleto,s))
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
void Pesquisar_Telef(int numero)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && reg.Telefone==numero)
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
int main()
{
char Opcao;
Inic();
while((Opcao=Menu(MainMenu))!=OP_SAIR)
switch(Opcao)
{
case OP_INSERIR: Inserir_Cliente(); break;
case OP_ALTERAR: Alterar_Cliente(); break;
case OP_APAGAR: Apagar_Cliente(); break;
case OP_LISTAR: Listar(); break;
case OP_PESQUISAR:
while((Opcao=Menu(PesqMenu))!=OP_SAIR)
switch (Opcao)
{
case OP_PESQ_NUM_BI:
{
char string[BUFSIZ+1];
printf("Qual o numero do BI: ");
gets(string);fflush(stdin);
Pesquisar_Nome(string); break;
}
case OP_PESQ_NOME:
{
char string[BUFSIZ+1];
printf("Qual o Nome a Procurar: ");
gets(string);fflush(stdin);
Pesquisar_Nome(string);
break;
}
case OP_PESQ_NTELEF:
{
long int n1;
printf("Qual o numero do Telefone: ");
scanf("%ld",&n1);fflush(stdin);
Pesquisar_Telef(n1);
}
}
}
}
//Engenharia De Telecomunicações
//Universidade Católica de Angola
#include
#include
#include
#include
#include
#include
#define FICH "DADOS.txt"
#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_NUM_BI '1'
#define OP_PESQ_NOME '2'
#define OP_PESQ_NTELEF '3'
//estrutura endereco
typedef struct {
char Muni[50],
Bairro [50],
Rua[50];
int CasaNro;
}MORADA;
//estrutura Data
typedef struct { int Dia,
Mes,
Ano;
}DATA;
typedef struct {
char NomeEmpresa[50],
Funcao[50],
Categoria[50];
float VencMensal,
OutrosRend;
}TRABALHO;
//estrutura conta
typedef struct{
int modalidade,
tipos;
char Outras;
}CONTA;
typedef struct {
char NomeCompleto[30];
char NomePai[30];
char NomeMae[30];
DATA Nasc;
char Est_Civil;
int RegCasamento;
char BI[30];
MORADA Endereco;
long int Telefone;
int CaixaPostal;
int ContribNro;
TRABALHO Empresa;
CONTA Conta;
char Status;
}CLIENTE;
//Menu Principal
char *MainMenu[]={
"1. Cadastrar Cliente",
"2. Alterar Cliente",
"3. Apagar Cliente",
"4. Listar Clientes",
"5. Pesquisar Cliente",
"0. Sair",
NULL //Acabaram as opcoes
};
// Menu de Pesquisa
char *PesqMenu[]={
"1. Pesquisar por Numero BI",
"2. Pesquisar por Nome Completo",
"3. Pesquisar por Numero de Telefone",
"0. Voltar",
NULL
};
// Ficheiro
FILE *fp;
//Mensagem
void Mensagem (char *msg);
//leitura dos dados a inserir pelo utilizador
void Ler_CLIENTE(CLIENTE *p)
{
printf("\tNome Completo :"); gets(p->NomeCompleto);
printf("\tNome do Pai :"); gets(p->NomePai);
printf("\tNome da mae :"); gets(p->NomeMae);
printf("\tNascimento:DD MM AAAA:");scanf ("%d %d %d",&p->Nasc.Dia,&p->Nasc.Mes,&p->Nasc.Ano);fflush(stdin);
printf("Escolhe a opcao do Estado Civil:\n");
printf("\tS-Solteiro(a) \tC-Casado(a)\n \tV-Viuvo(a) \tD-Divrociado(a)\n\t:");scanf("%c",&p->Est_Civil); fflush(stdin);
printf("Escolhe a opcao do regime de casamento:\n");
printf("\t1-Comunhao Parcial de Bens \t2-Comunhao Universao de Bens\n");
printf("\t3-Separacao de Bens \t4-Participacao Final nos Aquestos\n\t:");scanf("%d",&p->RegCasamento); fflush(stdin);
printf("\tBilhete de identidade:"); gets(p->BI);
printf("\tMunicpio :"); scanf("%s",&p->Endereco.Muni);fflush(stdin);
printf("\tBairro :"); scanf("%s",&p->Endereco.Bairro);fflush(stdin);
printf("\tRua :"); scanf("%s",&p->Endereco.Rua);fflush(stdin);
printf("\tCasa Numero :"); scanf("%d",&p->Endereco.CasaNro);fflush(stdin);
printf("\tTelefone :"); scanf("%ld",&p->Telefone);fflush(stdin);
printf("\tCaixa Postal :"); scanf("%d",&p->CaixaPostal);fflush(stdin);
printf("\tNumero Contribuinte :"); scanf("%d",&p->ContribNro);fflush(stdin);
printf("Dados da Empresa onde Trabalha:\n");
printf("\tNome da Empresa :"); scanf("%s",&p->Empresa.NomeEmpresa);fflush(stdin);
printf("\tFuncao :"); scanf("%s",&p->Empresa.Funcao);fflush(stdin);
printf("\tCategoria :"); scanf("%s",&p->Empresa.Categoria);fflush(stdin);
printf("\tVencimento Mensal :"); scanf("%f",&p->Empresa.VencMensal);fflush(stdin);
printf("\tOutros Rendimentos :"); scanf("%f",&p->Empresa.OutrosRend);fflush(stdin);
printf("Modalidade de Conta :\n");
printf("\t1-individual 2-Solidaria 3-conjunta\n\t:"); scanf("%d",&p->Conta.modalidade);fflush(stdin);
printf("Tipos de Conta :\n");
printf("\t1-Deposito a Ordem 2-Deposito a Prazo 3-Conta Juventude \n");
printf("\t4Caderneta 5-Deposito a ordem moeda estrangeira \n\t:"); scanf("%d",&p->Conta.tipos);fflush(stdin);
printf("Outras Contas :");
printf("\tS-Sim \tN-Nao :"); scanf("%c",&p->Conta.Outras);
p->Status=' ';
fflush(stdin);
}
// metodo de leitura do estado civil
void EstadoCivil(char estCivil)
{
switch (estCivil)
{
case 'c':
case 'C': printf("Casado(a) \n");break;
case 'd':
case 'D': printf("Divorciado(a) \n");break;
case 's':
case 'S': printf("Solteiro(a) \n");break;
case 'v':
case 'V': printf("Viuvo \n");break;
default: printf("Estado civil incorrecto! ! !\n");
}
}
// metodo de leitura do Regime de Casamento
void RegimeCasal(int rcasal)
{
switch (rcasal)
{
case 1: printf("Comunhao Parcial de Bens \n");break;
case 2: printf("Comunhao Universao de Bens \n");break;
case 3: printf("Separacao de Bens \n");break;
case 4: printf("Participacao Final nos Aquestos \n");break;
default: printf("Nao casado ! ! !\n");
}
}
//Metodos das modalidade
void Modalidades(int modal)
{
switch (modal)
{
case 1: printf("individual \n");break;
case 2: printf("Solidaria \n");break;
case 3: printf("Conjunta \n");break;
default:printf("Nao casado ! ! !\n");
}
}
//Metodos das tipos de Conta
void TiposConta(int tipoConta)
{
switch (tipoConta)
{
case 1: printf("Deposito a Ordem \n");break;
case 2: printf("Deposito a Prazo \n");break;
case 3: printf("Conta Juventude \n");break;
case 4: printf("Caderneta \n");break;
case 5: printf("Deposito a ordem moeda estrangeira \n");break;
default: printf("Outras ! ! !\n");
}
}
void OutrasContas(char outras)
{
switch (outras)
{
case 's':
case 'S': printf("Sim \n");break;
case 'n':
case 'N': printf("Nao \n");break;
default: printf("opcao incorreta ! ! !\n");
}
}
void Mostrar_Cliente(CLIENTE p)
{
printf("********************************************************\n");
printf("\tNome Completo :%-30s\n", p.NomeCompleto);
printf("\tPai :%s \n",p.NomePai);
printf("\tMae :%s \n",p.NomeMae);
printf("\tNasc. (DD MM AAAA) :%d-%d-%d\n",p.Nasc.Dia, p.Nasc.Mes, p.Nasc.Ano);
printf("\tEstado Civil :");EstadoCivil(p.Est_Civil);
printf("\tRegime de Casamento :");RegimeCasal(p.RegCasamento);
printf("\tBI :%s\n",p.BI);
printf("\tMorada :Municipio %s,Bairro %s,Rua %s, nro %d\n",p.Endereco.Muni,p.Endereco.Bairro,p.Endereco.Rua,p.Endereco.CasaNro); fflush(stdin);
printf("\tTelefone :%ld\n",p.Telefone);
printf("\tCaixa Postal :%d \n",p.CaixaPostal);
printf("\tContribuinte Nro :%d \n",p.ContribNro);
printf("Dados da Empresa\n");
printf("\tNome da Empresa :%s \n",p.Empresa.NomeEmpresa);
printf("\tFuncao :%s \n",p.Empresa.Funcao);
printf("\tCategoria :%s \n",p.Empresa.Categoria);
printf("\tVencimento Mensal :%.4f\n",p.Empresa.VencMensal);
printf("\tOutros Rendimentos :%.4f\n",p.Empresa.OutrosRend);
printf("Conta\n");
printf("\t Modalidae de Conta :");Modalidades(p.Conta.modalidade);
printf("\t Tipo de Conta :");TiposConta(p.Conta.tipos);
printf("\t Outras Contas :");OutrasContas(p.Conta.Outras);
/*
fflush(stdin);*/
printf("********************************************************\n");
// system("PAUSE");
}
void Adicionar_Cliente(CLIENTE p)
{
fseek(fp, 0L, SEEK_END);
if (fwrite(&p,sizeof(p),1,fp)!=1)
Mensagem("Adicionar Pessoa: Falhou a escrita do Registo");
}
//coloca uma mensagem no ecram
void Mensagem (char *msg)
{
printf(msg);
getchar();
}
// Criar ficheiro se nao existir abri na forma de leitura e escrita
void Inic()
{
fp =fopen(FICH, "r+b"); //tentar abrir
if(fp==NULL)
{
fp =fopen(FICH, "w+b");//criar o ficheiro
if(fp==NULL)
{
fprintf(stderr, "ERRO FATAL: Impossivel Criar o ficheiro de Dados\n");
exit(1);
}
}
}
// Menu de opcoes
char Menu(char *Opcoes[])
{ int i;
char ch;
while (1)
{ //Cls
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\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[i]!=NULL; i++)
printf("\t\t%s\n\n",Opcoes[i]);
printf("\n\n\t\tOpcao: ");
ch = getchar(); fflush(stdin);
for (i=0; Opcoes[i]!=NULL; i++)
if (Opcoes[i][0]==ch)
return ch;
}
}
// insercao de dados
void Inserir_Cliente()
{
CLIENTE x;
Ler_CLIENTE(&x);
Adicionar_Cliente(x);
}
//metodo para alterar
void Alterar_Cliente()
{ CLIENTE x;
long int n_reg;
printf("Qual o No do cliente que pretende alterar: ");
scanf("%ld", &n_reg);fflush(stdin);
if (fseek (fp,(n_reg-1)*sizeof(CLIENTE),SEEK_SET)!=0)
{
Mensagem ("clienete Inexistente ou problemas no posicionamento !!!");
return;
}
if(fread(&x,sizeof(CLIENTE),1,fp)!=1)
{
Mensagem ("Problemas na leitura do registo");
return;
}
if(x.Status=='*')
{
Mensagem("Um registro Apagado nao pode ser Alterado !!!\n\n\n");
return ;
}
printf("\n\n Dados Actuais\n\n");
Mostrar_Cliente(x);
printf("\n\nNovos Dados\n\n");
Ler_CLIENTE(&x);
fseek(fp,-(long) sizeof(CLIENTE), SEEK_CUR);
fwrite(&x,sizeof (CLIENTE), 1,fp);
fflush(fp);
}
void Apagar_Cliente()
{
CLIENTE x;
long int n_reg;
char resp;
printf("Qual o Nro do Registo: ");
scanf("%ld", & n_reg); fflush (stdin);
if(fseek (fp,(n_reg-1)*sizeof (CLIENTE),SEEK_SET)!=0)
{
Mensagem ("Registo Inexistente ou problemas no posicionamento!!!");
return ;
}
if(fread(&x,sizeof(CLIENTE),1,fp)!=1)
{
Mensagem("Problema na Leitura do Registro!!!\n\n");
return ;
}
if(x.Status =='*')
{
Mensagem ("Registo ja Esta Apagado!!!\n\n");
return;
}
printf("\n\n Dados Actuais\n\n");
Mostrar_Cliente(x);
printf("\n\n Apagar o registo (s/n)???: "); resp =getchar();
fflush(stdin);
if(toupper(resp)!='S') return;
x.Status='*';
fseek (fp,-(long) sizeof(CLIENTE),SEEK_CUR);
fwrite(&x,sizeof(CLIENTE),1,fp);
fflush(fp);
}
void Listar()
{
long int N_Linhas = 0;
CLIENTE reg;
rewind(fp);
while(1)
{
if(fread(®,sizeof(reg),1,fp)!=1) break;
if(reg.Status=='*') continue;
Mostrar_Cliente(reg);
N_Linhas++;
if(N_Linhas%20==0)
Mensagem("Prima para Continuar . . .");
}
Mensagem("Prima para Continuar . . .");
}
void Pesquisar_NUM_BI(char *s)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && strstr(reg.BI,s))
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
void Pesquisar_Nome(char *s)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && strstr(reg.NomeCompleto,s))
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
void Pesquisar_Telef(int numero)
{ CLIENTE reg;
rewind(fp);
while (fread(®,sizeof(CLIENTE),1,fp))
if (reg.Status!='*' && reg.Telefone==numero)
Mostrar_Cliente(reg);
Mensagem("\n\nPRIMA para continuar . . . "); /* No fim da Listagem */
}
int main()
{
char Opcao;
Inic();
while((Opcao=Menu(MainMenu))!=OP_SAIR)
switch(Opcao)
{
case OP_INSERIR: Inserir_Cliente(); break;
case OP_ALTERAR: Alterar_Cliente(); break;
case OP_APAGAR: Apagar_Cliente(); break;
case OP_LISTAR: Listar(); break;
case OP_PESQUISAR:
while((Opcao=Menu(PesqMenu))!=OP_SAIR)
switch (Opcao)
{
case OP_PESQ_NUM_BI:
{
char string[BUFSIZ+1];
printf("Qual o numero do BI: ");
gets(string);fflush(stdin);
Pesquisar_Nome(string); break;
}
case OP_PESQ_NOME:
{
char string[BUFSIZ+1];
printf("Qual o Nome a Procurar: ");
gets(string);fflush(stdin);
Pesquisar_Nome(string);
break;
}
case OP_PESQ_NTELEF:
{
long int n1;
printf("Qual o numero do Telefone: ");
scanf("%ld",&n1);fflush(stdin);
Pesquisar_Telef(n1);
}
}
}
}
Sem comentários:
Enviar um comentário