Ir ao conteúdo
  • Cadastre-se

Cadastro de produtos


franckgore

Posts recomendados

Olá, será que alguém pode me ajudar nesse parte desse exercício em C: tenho dois registros (Struct), um para CATEGORIA e outro para PRODUTOS. Eu estou cadastrando as CATEGORIAS e os PRODUTOS, cada produto tem que ter um codigo já cadastrado da categoria.


typedef struct //PRODUTOS
{
int codigo_prod;
char descricao [20];
int cod_categ;
} tipo_produtos

//CATEGORIA
typedef struct
{
int codigo;
char descricao [20];
} tipo_categ

//Eu estou armazenando tudo em dois arquivos: FILE *prod, *categ.

Essa parte de cadastro tá tudo certo, agora eu preciso fazer uma funcao para "CATEGORIA COM MAIS PRODUTOS CADASTRADOS" e uma funcao para "COLOCAR OS NOMES DAS CATEGORIAS EM ORDEM ALFABETICA".

Quando eu peço a lista de produtos fica assim:



Categoria: ESCRITORIO
Lapis
Caneta
Papel

Categoria: HIGIENE
Escova de dente
Sabonete

Mas não consigo colocar as categorias em ordem alfabética e nem mostrar a categoria q tem mais produtos cadastrados. Já estou ficando maluco:muro::muro::wacko::wacko:

Por favor será que alguém pode me ajudar!?!?

Link para o comentário
Compartilhar em outros sites

você precisa nos mostrar como está armazenando esses dados.

é uma lista de ponteiros? array?

Já posso te adiantar que, para colocar as categorias em ordem alfabética, você precisará comparar cada posição nos nomes, e realocar conforme necessário.

Se for uma lista dinâmica, basta realocar os ponteiros, caso contrário, trocar o conteúdo de uma posição para a outra.

Link para o comentário
Compartilhar em outros sites

Pra fazer a parte da categoria com mais códigos cadastrados:

Lê uma categoria e guarda o código dela, depois lê cada produto e vê se ele tem o mesmo código de categoria... vai armazenando o número de produtos que tem aquele código.

Depois lê outra categoria e repete tudo... se o número de produtos com aquele número for maior, essa categoria passa a ser a com mais produtos cadastrados.

Daí vai repetindo isso pra cada categoria.

A parte de colocar elas em ordem alfabética, pelo que entendi você precisa organizar elas no arquivo em ordem alfabética? ou apenas imprimir elas na tela em ordem?

Existem centenas de meios de fazer isso...

Você pode:

- Varrer o arquivo inteiro e procurar o menor nome, imprimir ele

- Varrer o arquivo inteiro de novo e procurar o menor nome, que seja maior que o que você imprimiu anteriormente, imprimir ele

- Varrer o arquivo de novo e procurar o menor nome, que seja maior que o anterior, imprimir ele

- etc... até imprimir tudo.

Pode também:

- Criar uma lista encadeada e ir inserindo os elementos do arquivo na lista em ordem alfabética

- depois imprimir todos os elementos da lista

Ou ainda:

- fazer a mesma coisa de cima, só que em vez de usar uma lista encadeada, pegar apenas um vetor com os índices em ordem alfabética (ex: [3, 1, 5, 2, etc])

- Imprimir os elementos do arquivo na ordem dos índices

E tem ainda a maneira "trapaceando", que é você colocar na struct um campo a mais, tipo "int ordem;" e daí quando você adicionar algum categoria, você já define a ordem dela em relação a anterior.

Link para o comentário
Compartilhar em outros sites

Pra fazer a parte da categoria com mais códigos cadastrados:

Lê uma categoria e guarda o código dela, depois lê cada produto e vê se ele tem o mesmo código de categoria... vai armazenando o número de produtos que tem aquele código.

Depois lê outra categoria e repete tudo... se o número de produtos com aquele número for maior, essa categoria passa a ser a com mais produtos cadastrados.

Daí vai repetindo isso pra cada categoria.

dontpanic, eu tô fazendo assim



void mais_prod_cad()
{
int maior, aux = 0;
.
.
.
while (fread (&tipo_produtos, sizeof(tipo_produtos), 1, prod)) {
if (tipo_produtos.coodigo_prod == tipo_categ.codigo) {
cont++;
aux = 1;
}
}
if (aux) {
maior = cont;
}

Eu tô comparando código do produto com o codigo da categoria, eu coloquei um contador pra ir armazenando quando forem iguais. Mas esse contador me mostra quantos produtos eu tenho no total.

Como eu faço pra contar os produtos de cada categoria???????

Link para o comentário
Compartilhar em outros sites

Eu tô comparando código do produto com o codigo da categoria, eu coloquei um contador pra ir armazenando quando forem iguais. Mas esse contador me mostra quantos produtos eu tenho no total.

Como eu faço pra contar os produtos de cada categoria???????

uma variável pra guardar o código da categoria que você tá lendo agora, outro pra guardar o codigo da categoria com mais produtos, outra pra guardar o número de produtos da categoria que você tá lendo agora e mais uma pra guardar o número de produtos da categoria com mais produtos.

Resumindo:

int categoria, categoriaMaior;

int produtos, produtosMaior;

- Você lê um codigo de categoria do arquivo de categorias

- Guarda o valor dele em 'categoria'

- Da primeira vez que rodar 'categoriaMaior' vai ser igual a 0... e 'produtosMaior' vai ser igual a 0.

Daí você lê o arquivo de produtos, comparando o codigo da categoria dos produtos com o codigo que ta armazenado na variável 'categoria'... quando forem iguais, aumenta mais 1 na variavel 'produtos'.

Quando terminar de ler o arquivo, você faz a comparação 'produtos' > 'produtosMaior' ?

Se for maior, você faz:

- categoriaMaior = categoria;

- produtosMaior = produtos;

Daí volta pro arquivo de categorias, lê o código da próxima categoria e armazena em 'categoria' e coloca o valor de 'produtos' em 0.

Depois é só repetir tudo de novo... lê o numero de produtos com aquela categoria no arquivo de produtos, no final compara com produtosMaior... se for maior você coloca o valor dele em categoriaMaior e produtosMaior.


categoriaMaior = 0;
produtosMaior = 0;

ArqCategorias = fopen(thururururu);

while (!ArqCategorias.feof()) {
// lê uma categoria aqui e armazena em uma variável temporária
categoria = categoria.da.variavel.que.você.leu;
produtos = 0;

ArqProdutos = fopen(blablablabla);

while (!ArqProdutos.feof()) {
// lê um produto aqui e coloca em uma variavel temporária
if (produtoQueVocêLeu.categoria == categoria) produtos++;
}

fclose(ArqProdutos);

if (produtos > produtosMaior) {
categoriaMaior = categoria;
produtosMaior = produtos;
}
}

fclose(ArqCategorias);

Acho que é mais ou menos isso...

Link para o comentário
Compartilhar em outros sites

uma variável pra guardar o código da categoria que você tá lendo agora, outro pra guardar o codigo da categoria com mais produtos, outra pra guardar o número de produtos da categoria que você tá lendo agora e mais uma pra guardar o número de produtos da categoria com mais produtos.

Resumindo:

int categoria, categoriaMaior;

int produtos, produtosMaior;

- Você lê um codigo de categoria do arquivo de categorias

- Guarda o valor dele em 'categoria'

- Da primeira vez que rodar 'categoriaMaior' vai ser igual a 0... e 'produtosMaior' vai ser igual a 0.

Daí você lê o arquivo de produtos, comparando o codigo da categoria dos produtos com o codigo que ta armazenado na variável 'categoria'... quando forem iguais, aumenta mais 1 na variavel 'produtos'.

Quando terminar de ler o arquivo, você faz a comparação 'produtos' > 'produtosMaior' ?

Se for maior, você faz:

- categoriaMaior = categoria;

- produtosMaior = produtos;

Daí volta pro arquivo de categorias, lê o código da próxima categoria e armazena em 'categoria' e coloca o valor de 'produtos' em 0.

Depois é só repetir tudo de novo... lê o numero de produtos com aquela categoria no arquivo de produtos, no final compara com produtosMaior... se for maior você coloca o valor dele em categoriaMaior e produtosMaior.


categoriaMaior = 0;
produtosMaior = 0;

ArqCategorias = fopen(thururururu);

while (!ArqCategorias.feof()) {
// lê uma categoria aqui e armazena em uma variável temporária
categoria = categoria.da.variavel.que.você.leu;
produtos = 0;

ArqProdutos = fopen(blablablabla);

while (!ArqProdutos.feof()) {
// lê um produto aqui e coloca em uma variavel temporária
if (produtoQueVocêLeu.categoria == categoria) produtos++;
}

fclose(ArqProdutos);

if (produtos > produtosMaior) {
categoriaMaior = categoria;
produtosMaior = produtos;
}
}

fclose(ArqCategorias);

Acho que é mais ou menos isso...

dontpanic, muito obrigado pela sua ajuda... você é um ótimo profissional.:joia::aplausos::aplausos::joia:

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!