Ir ao conteúdo
  • Cadastre-se
88games16

C selecinar uma informação especifica do arquivo

Recommended Posts

problema no algoritmo a função "void preenche_fornecedor" preencho os dados dos forncedores e depois escrevo no arquivo esses dados com a função "void inputFornecedor()"  com a função "void preenche_produtos" eu faço o mesmo só que para produtos porém eu não queria ter que informar novamente os dados do cnpj e nome da  empresa queria informar apenas o id e com esse id na hora de visualizar buscar as informações referentes a cnpj e nome da empresa ja gravadas no arquivo.

Não sei como fazer isso ou se é possível alguem poderia  me ajudar codigo a abaixo.

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

void menu();
void opcao_menu(); 
void visualizar_fornecedor();
void inputEstoque();
void visualizar_Estoque();
struct Fornecedor {
	char cod[3];
	char cnpj[15];
	char cia[20];
	
};

struct Produto{
	struct Fornecedor f;
	char nome[20];
	int  qtd;
	int custo;
	int valorc;	
	int venda;
	
	 
};

struct Fornecedor fornecedores;
struct Produto produtos;

void quebra_linha(){
	printf("\n");
}
//preencher fornecedores
void preenche_fornecedor (struct Fornecedor *p){

	fflush(stdin);
	printf("codigo do fornecedor: ");
	scanf ("%s", p->cod);
	fflush(stdin);
	printf("informe cnpj do fornecedor: ");
	scanf("%s",p->cnpj);
	fflush(stdin);
    	printf("nome da empresa: ");
   	scanf("%s",p->cia);
}
void preenche_produtos (struct Produto *p){
	
	preenche_fornecedor(&(*p).f);
	
	printf ("informe o produto p/ cadastrar no estoque: ");
	//getchar();
	scanf("%s",p->nome);
	//fgets (p->nome,20,stdin);
	printf ("informe a quantidade da compra: ");
	scanf("%d",&p->qtd);
	printf("informe o preço unitario: ");
	scanf("%d",&p->custo);
	p->valorc=p->custo*p->qtd;
	printf("valor da mercadoria no estoque %d: ",p->valorc);
	p->venda = (p->valorc*1.4) - (p->valorc) ;
	
 }

// cadastrar fornecedor e escrever no arquivo
void inputFornecedor(){
	system("clear");
	int i;		
	char resp;
	FILE* f;
	f = fopen("testeafornecedor.txt", "ab");
	do
	{
		preenche_fornecedor(&fornecedores);
		fwrite(&fornecedores, sizeof(struct Fornecedor), 1, f);
			
		printf("gostaria de cadastrar outro fornecedor (s/n) ? \n");
		getchar();
		scanf("%c",&resp);
		
	}while(resp =='s');
	fclose(f);
	system("clear");
	menu();
}
// visualizar na tela informações escritas no arquivo
void visualizar_fornecedor(){
	system("clear");
			
	FILE* f;
	f = fopen("testeafornecedor.txt", "rb");
	while (fread(&fornecedores, sizeof(struct Fornecedor), 1, f)==1){
		printf("---------------------------------------------");
		quebra_linha();			
		printf("Codigo de registro: %s\n", fornecedores.cod);
		printf("Cnpj: %s\n", fornecedores.cnpj);
		printf("Empresa %s\n", fornecedores.cia); 
		printf("---------------------------------------------");
		quebra_linha();	
	}		
	fclose(f);
	getchar();
	getchar();
	menu();
}
void inputEstoque(){
	char resp;
	system("clear");
	
	FILE* f;
	f = fopen("testeaestoque.txt", "ab");
	do
	{
	preenche_produtos (&produtos);
	fwrite(&produtos, sizeof(struct Produto), 1, f);
	quebra_linha();
	printf("gostaria de cadastrar outro produto (s/n) ? \n");
	getchar();
	
	scanf("%c",&resp);
		
	}while(resp =='s');
	
	fclose(f);
	system("clear");
	menu();

}
void visualizar_Estoque(){
	system("clear");
	
		
	FILE* f;
	f = fopen("testeaestoque.txt", "rb");
	while (fread(&produtos, sizeof(struct Produto), 1, f)==1){
		printf("---------------------------------------------");
		quebra_linha();			
		printf("Codigo de registro: %s\n", produtos.f.cod);
		printf("Cnpj: %s\n", produtos.f.cnpj);
		printf("Empresa %s\n", produtos.f.cia);
		printf ("Produto %s\n", produtos.nome);
		printf ("Quantidade %d\n", produtos.qtd);
		printf("preco unidade %d\n", produtos.custo);
		printf("valor do estoque %d\n", produtos.valorc);	
 		printf("lucro esperado %d\n", produtos.venda);
		printf("---------------------------------------------");
		quebra_linha();	
	}
			
	fclose(f);
	getchar();
	getchar();
	menu();
}
// menu
void menu (){
	system("clear");
    	printf (" --------------ESTOQUE EMPRESA ABC--------------\n");
    	quebra_linha();
	printf("Menu:\n");
	printf("1 - Consultar estoque cadastrado: \n");
	printf("2 - Consultar fornecedores cadastrados: \n");
	printf("3 - Cadastrar novo item no estoque: \n");
	printf("4 - Cadastrar novo fornecedor: \n"); 
	printf("5 - sair\n");
	opcao_menu(); 
}
void opcao_menu(){
	int opcao;
	
	scanf("%d",&opcao);
	
	switch (opcao){
		case 1:
			visualizar_Estoque();
		break;
		
		case 2:
			visualizar_fornecedor();
		break;
		
		case 3:
			inputEstoque();	
		break;
		
		case 4:
			inputFornecedor();
		break;
		
		case 5:
			system("clear");
			printf (" --------------EMPRESA ABC--------------\n");
			quebra_linha();
			quebra_linha();
		break;
		default:
			printf("valor invalido");
			quebra_linha();
			menu();

	}
}
int main(){
 	menu();   
	
		
	
       return 0;

}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@88games16  É só abrir o arquivo pra leitura e usar strcmp pra comparar o ID informado com o ID lido do arquivo, se for igual a próxima informação será o CNPJ (isso levando em consideração que na hora de cadastrar primeiro se informa o ID e depois o CNPJ)
+- assim
 

 Se no cadastro vem ID,CNPJ e depois empresa ficaria +- assim
FILE *x;
char id[100];
char cnpj[100][15];
x = fopen("arq.ini","r");
for(int z = 0; z < 100; z++)
{
 if(strcmp(id,cnpj[z]) == 0)
{ 
  //cnpj[z] seria o ID, z+1 a proxima informação lida (cnpj,nome...) então ésó salvar em um char e prosseguir..
 printf("%s",cnpj[z]); //Aqui seria a ID
 printf("%s",cnpj[z+1]); //Aqui seria o CNPJ
 printf("%s",cnpj[z+2]); //Aqui seria a EMPRESA
//você só teria que copiar para um char e usar na parte do código que você quer
}

 

  • Obrigado 1
  • Confuso 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque o campor cnpj virou um vetor bidimensional ? o campo id só quero armazenar até 2 caracteres mesmo não entendi opq de aumentar

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×