Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Weinnie

problema com trabalho sobre structs e arquivos em c

Recommended Posts

OLÁ,

Então, eu to com uma dificuldade pra concluir esse trabalho:


==================================================

*** TRABALHO 3 ***

Faça um programa que utilize os registros a seguir.

-------------------------------------------

|CLIENTES | DOCUMENTOS |

| Cod_cli | Num_doc |

| Nome | Cod_cli |

| Fone | Data_venc |

| Endereco | Data_pag |

------------------------------------------

Sabe-se que um documento só pode ser cadastrado para um cliente que já exista. Considere que podem existir no máximo 15 clientes e 10 documentos. Crie um arquivo de registro para clientes e outro para documentos. Crie um menu para a realização de cada uma das operações especificadas a seguir.



a) Cadastrar clientes – não pode existir mais de um cliente com o mesmo código;

B) Cadastrar documentos – ao cadastrar um documento;

c) Excluir clientes – um cliente só pode ser excluídos se não existir documento algum associado a ele;

d) Excluir documentos individuais – por meio de seu número. Caso o documento não exista, mostre a mensagem Documento não encontrado;

e) Excluir documentos por cliente – informar o código do cliente e excluir todos os seus documentos. Caso o cliente não exista, mostre a mensagem Cliente não encontrado;

f) Alterar as informações sobre os clientes – só não pode ser alterado o código do cliente;

g) Exibir documentos do Cliente – Pedir o código do cliente e listar o(s) número(s) do(s) documento(s) associado ao cliente.

=================================================



Eu ja fiz toda a parte de CLIENTES, mas nao to conseguindo fazer a associação com o registro DOCUMENTOS!!

me ajudem por genteleza: preciso de alguma dica de como fazer a associação entre os CLIENTES e os DOCUMENTOS, que como podem ver nem declarei ainda!

 

 

SEGUE ABAIXO A PARTE QUE JÁ CONSEGUI FAZER:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct pessoa{
char nome[30];
int codi;
unsigned int tel;
char rua[15];
int num;
char bairro[20];
}cli;
typedef struct pessoa pessoa;
FILE *arq,*arq2,*arq3;
int cont;
//PROTOTIPO DA FUNÇÃO COMPARA
int compara(int vet[],int num ,int tam);
// 1° FUNÇAO : CADASTRAR CLIENTES
cadastrar(){
int i,vetor[8];
char op;
arq2 =fopen("varcontrole.dat","rb");
fscanf(arq2,"%d",&cont);
fclose(arq2);
printf("%d",cont);
do{
if((arq = fopen("mostraa.dat","ab"))== 0 ){
printf("\n\n\n IMPOSSIVEL CADASTRAR NO MOMENTO!\n\n");
exit(1);
}
if(cont>10){
system("cls");
printf("\n\n\n\n NUMERO MAXIMO DE CADASTROS ATINGIDO\n\n\n!!!");
getch();
return 0;
}
printf("\n\t CADASTRAR NOVO CLIENTE\n");
printf("\tCADASTRO N%c0%d \n\n",248,cont+1);
printf("\tdigite o nome: ");
fflush(stdin);
gets(cli.nome);
printf("\tdigite o codigo: ");
ponto:
scanf("%d",&cli.codi);
arq3=fopen("vetor.dat","rb");
fread(vetor,4,cont+1,arq3);
if(compara(vetor,cli.codi,cont+1)==1){
system("cls");
printf("\n\n\n\t Codigo ja Cadastrado\n entre com um diferente ");
Sleep(500);
goto ponto;
}
fclose(arq3);
printf("\tdigite o telefone: ");
scanf("%d",&cli.tel);
printf("\tdigite a rua: ");
fflush(stdin);
gets(cli.rua);
printf("\tdigite o num da casa: ");
scanf("%d",&cli.num);
printf("\tdigite o bairro: ");
fflush(stdin);
gets(cli.bairro);
arq3=fopen("vetor.dat","ab");
vetor[cont]= cli.codi;
fwrite(&vetor[cont],4,1,arq3);
fclose(arq3);
if(fwrite(&cli,sizeof(struct pessoa),1,arq)==1){
system("cls");
printf("\n\n\n CADASTRO REALIZADO COM SUCESSO...");
}
fclose(arq);
cont++;
arq2 =fopen("varcontrole.dat","wb");
fprintf(arq2,"%d",cont);
fclose(arq2);
printf("\n\n\t 1-NOVO CADASTRO\n\n\t 2-VOLTAR PRA O MENU PRINCIPAL");
op=getch();
system("cls");
}while(op=='1');
system("cls");
}
//FIM DA FUNÇAO CADASTRAR
// 2° FUNÇAO: EXIBIR CLIENTES CADASTRADOS
exibir(){
arq2 =fopen("varcontrole.dat","rb");
fscanf(arq2,"%d",&cont);
fclose(arq2);
printf("%d",cont);
if(cont==0){
printf("\n\n\n\tNENHUM CLIENTE CADASTRADO\n\n\tPressione Qualquer Tecla pra Voltar ao Menu Principal");
getch();
return 0;
}
int i;
arq = fopen("mostraa.dat","rb");
puts(" LISTA DE USUARIOS\n");
puts("\t=============================================================");
for(i=0;i<cont;i++){
Sleep(300);
fseek(arq,sizeof(struct pessoa)*i,SEEK_SET);
fread(&cli,sizeof(struct pessoa),1,arq);
printf("\t NOME: %s",cli.nome);
printf("\n\n\t CODIGO: %d",cli.codi);
printf("\t TEL: %d",cli.tel);
printf("\n\n\t ENDERECO Rua: %s, N: %d \n\n\t Bairro: %s\n",cli.rua,cli.num,cli.bairro);
puts(" \t-------------------------------------------------------------");
}
puts(" \t=============================================================\n\n\n");
fclose(arq);
getch();
}
//FIM DA FUNÇAO EXIBIR CLIENTES
// 3° FUNÇAO: PESQUISAR CLIENTES
pesquisar(){
arq2 =fopen("varcontrole.dat","rb");
fscanf(arq2,"%d",&cont);
close(arq2);
printf("%d",cont);
int pesq,i=0,x=0;
arq = fopen("mostraa.dat","rb");
printf("\n\t PESQUISAR CADASTROS\n\n");
printf("\t Digite O Codigo: ");
scanf("%d",&pesq);
while(i<=cont){
fseek(arq,sizeof(pessoa)*i,SEEK_SET);
fread(&cli,sizeof(struct pessoa),1,arq);
if(cli.codi == pesq){
system("cls");
puts("\n\n\n\t CLIENTE ENCONTRADO");
puts("\t=============================================================");
printf("\t NOME: %s",cli.nome);
printf("\n\n\t CODIGO: %d",cli.codi);
printf("\t TEL: %d",cli.tel);
printf("\n\n\t ENDERECO Rua: %s, N: %d \n\n\t Bairro: %s\n",cli.rua,cli.num,cli.bairro);
puts("\t-------------------------------------------------------------");
puts("\t=============================================================");
getch();
return 0;
}
i++;
}
system("cls");
printf("\n\n\n\t CLIENTE NAO CADASTRADO\n\n\n");
fclose(arq);
getch();
}
//FIM DA FUNÇAO EXIBIR CLIENTES
// 4° FUNÇAO: ALTERAR DADOS DE CLIENTES
alterar(){
int pesq,i=0,num;
char op1,op2;
arq2 =fopen("varcontrole.dat","rb");
fscanf(arq2,"%d",&cont);
fclose(arq2);
printf("%d",cont);
printf("-\n\n\t ALTERAR INFORMACOES DE CLIENTES:\n\n");
printf("\t- Digite o Codigo DO Cliente: ");
scanf("%d",&pesq);
while(i<=cont){
arq = fopen("mostraa.dat","r+b");
fseek(arq,sizeof(pessoa)*i,SEEK_SET);
fread(&cli,sizeof(struct pessoa),1,arq);
if(cli.codi == pesq){
system("cls");
puts("\n\n\n\tCLIENTE ENCONTRADO...");
puts("\t=======================================================");
printf("\t NOME: %s",cli.nome);
printf("\n\n\t CODIGO: %d",cli.codi);
printf("\t TEL: %d",cli.tel);
printf("\n\n\t ENDERECO Rua: %s, N: %d \n\n\t Bairro: %s\n",cli.rua,cli.num,cli.bairro);
puts("\t-------------------------------------------------------");
puts("\t=======================================================");
printf("\n\n\n\t TEM CERTEZA QUE DESEJA ALTERAR INFORMACOES DO CLIENTE? ");
printf("\n\t ----------------\n\t 1-SIM\n\t ----------------\n\t 2-VOLTAR AO MENU\n\t ---------------- ");
op1 = getch();
system("cls");
while(1){
switch(op1){
case '1':
printf("\n\t 1 - Alterar Nome ");
printf("\n\t 2 - Alterar Telefone ");
printf("\n\t 3 - Alterar Rua ");
printf("\n\t 4 - Alterar Numero da casa");
printf("\n\t 5 - Alterar Bairro");
printf("\n\t 0 - Voltar ao Menu ");
printf("");
op2 = getch();
system("cls");
switch(op2){
case '1':
printf("\tdigite o nome: ");
fflush(stdin);
gets(cli.nome);
break;
case '2':
printf("\n\n\tdigite o telefone: ");
scanf("%d",&cli.tel); break;
case '3':
printf("\n\n\tdigite a rua: ");
fflush(stdin);
gets(cli.rua);
break;
case '4':
printf("\n\n\tdigite o num da casa: ");
scanf("%d",&cli.num); break;
case '5':
printf("\n\n\tdigite o bairro: ");
fflush(stdin);
gets(cli.bairro);
break;
default:
return 0;
break;
}
case '2': return 0;
default: printf("\n\n\n\n\tOpcao Incorreta"); Sleep(500); continue;
}
fseek(arq,sizeof(pessoa)*i,SEEK_SET);
if(fwrite(&cli,sizeof(struct pessoa),1,arq)==1){
system("cls");
printf("\n\n\n Dados Alterados c/ Sucesso\n\n\n");
fclose(arq);
getch();
}else{
printf("erro ao salvar!!!");
getch();
return 0;
}
}
}
}
}
//FIM DA FUNÇAO ALTERAR DADOS DE CLIENTES
// 5° FUNÇAO: EXCLUIR UM CLIENTE
excluirum(){
int pesq,i=0,j,x=0,vet[15];
FILE *aux,*aux2;
arq2 =fopen("varcontrole.dat","rb");
fscanf(arq2,"%d",&cont);
close(arq2);
printf("%d",cont);
arq = fopen("mostraa.dat","rb");
printf("\n\t PESQUISAR CADASTROS\n\n");
printf("\t Digite O Codigo: ");
scanf("%d",&pesq);
while(i<=cont){
fseek(arq,sizeof(pessoa)*i,SEEK_SET);
fread(&cli,sizeof(struct pessoa),1,arq);
if(cli.codi == pesq){
system("cls");
puts("\n\n\n\t CLIENTE ENCONTRADO");
puts("\t=======================================================");
printf("\t NOME: %s",cli.nome);
printf("\n\n\t CODIGO: %d",cli.codi);
printf("\t TEL: %d",cli.tel);
printf("\n\n\t ENDERECO Rua: %s, N: %d \n\n\t Bairro: %s\n",cli.rua,cli.num,cli.bairro);
puts("\t-------------------------------------------------------");
puts("\t=======================================================");
getch();
x++;
}
i++;
}
if(x==0){
system("cls");
printf("\n\n\n\t CLIENTE NAO CADASTRADO\n\n\n");
fclose(arq);
getch();
return 0;
}
aux = fopen("auxiliar.dat","ab");
for(j=0;j<cont;j++){
fseek(arq,sizeof(pessoa)*j,SEEK_SET);
fread(&cli,sizeof(pessoa),1,arq);
if(cli.codi != pesq){
fwrite(&cli,sizeof(pessoa),1,aux);
}
}
fclose(arq);
fclose(aux);
//---------------------------------------------
arq3=fopen("vetor.dat","rb");
aux2=fopen("vetoraux.dat","ab");
for(j=0;j<cont;j++){
fseek(arq3,4*j,SEEK_SET);
fread(&vet[j],4,1,arq3);
if(vet[j] != pesq){
fwrite(&vet[j],4,1,aux2);
}
}
fclose(arq3);
fclose(aux2);
if(remove("vetor.dat")==0){
printf("remove vetor OK\n");
}else{
printf("erro ao remover vetor.dat\nO programa sera encerrado");
getch();
exit(1);
}
if(rename("vetoraux.dat","vetor.dat")==0){
printf("vetoraux renomeado com sucesso\n");
}
if(remove("mostraa.dat")==0){
printf("remove mostraa OK\n");
if(rename("auxiliar.dat","mostraa.dat")==0){
printf("Auxiliar renomeado com sucesso\n");
getch();
cont=cont-1;
arq2 =fopen("varcontrole.dat","wb");
fprintf(arq2,"%d",cont);
close(arq2);
system("cls");
printf("\n\ncont ==> %d\n\n",cont);
printf("\n\n\n\tcliente excluido com sucesso\n\n\n");
getch();
}else{
printf("Erro ao renomear auxiliar\n\n\t O programa sera encerrado\n");
getch();
return 0;
}
}else{
printf("Erro ao remover mostraa.dat \n\n\t O programa sera encerrado\n\n\n");
getch();
return 0;
}
}
//FIM DA FUNÇAO EXCLUIR CIENTES
// 6° FUNÇAO: EXLUIR TODOS OS CADASTROS
excluircad(){
char ch1, ch2;
printf("\n\t EXCLUIR TUDO \n\n\n");
printf("\n\t =============================== ");
printf("\n\t Tem Certeza Que Deseja Excluir\n\t Todos os Cadastros?? ");
printf("\n\n\t [ S // N ] ");
printf("\n\t =============================== ");
ch1 = getch();
if(ch1 != 's'){
system("cls");
printf("\n\n\n\t exclusao canselada!!");
getch();
return 0;
}else{
system("cls");
arq = fopen("mostraa.dat","wb");
fclose(arq);
arq2 = fopen("varcontrole.dat","wb");
fclose(arq2);
arq3=fopen("vetor.dat","wb");
fclose(arq3);
printf("\n\tTODOS OS CADASTROS FORAM EXCLUIDOS\n\n\n");
printf("\n\t 1-VOLTAR AO MENU PRINCIPAL\n\n\t");
printf(" 2-SAIR DO PROGRAMA\n\n");
ch2 = getch();
if(ch2=='1')
return 0;
else{ system("cls");
printf("\n\tPROGRAMA ENCERRADO\n\n\n");
exit(0);
}
}
}
//FIM DA FUNÇAO EXCLUIR CIENTES
// 7° FUNÇAO: COMPARA
compara(int vet[],int num,int tam){
int i;
for(i=0;i<tam;i++){
if(num==vet){
return 1;
}
}
return 0;
}
//FIM DA FUNÇAO COMPARA
// 8° FUNÇAO: MAIN
main(){
while(1){
system("cls");
printf("\n TRABALHO DE 'ALGORITMOS E ESTRUTURAS DE DADOS BASICAS' \n");
printf("\n PROF: IVANA \n\n");
printf(" ||==============================|| \n");
printf(" ||_______MENU PRINCIPAL_________|| \n\n");
printf(" ||==============================|| \n");
printf(" || 1-CADASTRAR CLIENTES || \n");
printf(" || ---------------------------- || \n");
printf(" || 2-VER CLIENTES CADASTRADOS || \n");
printf(" || ---------------------------- || \n");
printf(" || 3-ENCONTRAR CLIENTES || \n");
printf(" || ---------------------------- || \n");
printf(" || 4-ALTERAR DADOS DE CLIENTES || \n");
printf(" || ---------------------------- || \n");
printf(" || 5-EXCLUIR UM CADASTRO || \n");
printf(" || ---------------------------- || \n");
printf(" || 6-EXCLUIR TODOS OS CADASTROS || \n");
printf(" || ---------------------------- || \n");
printf(" || 0-SAIR || \n");
printf(" ================================== \n");
printf(" =>");
char op = getche();
system("cls");
switch(op){
case '1' : cadastrar(); break;
case '2' : exibir(); break;
case '3' : pesquisar(); break;
case '4' : alterar(); break;
case '5' : excluirum(); break;
case '6' : excluircad(); break;
case '0' :
puts("\n\n\n\n Programa Encerrado");
exit(1);
default :
puts("\n\n\n\n\t OPCAO INVALIDA\n\n\t Pressione Qualquer Tecla Pra Voltar Ao Menu");
getch(); break;
}
}

 

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode criar incluir no registro do documento o id do cliente. Assim pode determinar de qual cliente é determinado documento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.