Ir para conteúdo

POWERED BY:

Arquivado

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

DesenvolvedorC

Mini Sistema de Estoque em C

Recommended Posts

Pessoal , por favor me ajudem nesse trabalho da faculdade, eu sei como criar os registros , mas na hora de criar os arquivos eu me confundo
1. Faça um programa que crie o arquivo com a estrutura abaixo. O arquivo de estoque armazena as informações sobre produtos disponíveis.

estoque

 
int cod_prod

char

nome[20]

float preco

int quantidade

Para fins de testes, o programa deverá armazenar as informações abaixo a partir do teclado. A entrada de dados deve terminar com um código de produto igual a zero.

 
1 TV 1000 5
2 RADIO 200 3
3 GELADEIRA 1500 2
4 MICROONDAS 400 1
5 BATEDEIRA 100 0

2. Faça um programa que crie o arquivo com a estrutura abaixo. O arquivo de movimento armazena os produtos que foram vendidos e/ou recebidos.

movimento

 
int cod_mov

int

cod_prod

int quantidade

Para fins de testes, o programa deverá armazenar as informações abaixo a partir do teclado. A entrada de dados deve terminar com um código de movimento igual a zero.

 
1 2 -1
2 1 -3
3 4 -1
4 3 +1
5 5 -1

3. Faça um programa que consulte o arquivo de estoque a partir de um nome digitado pelo usuário e mostre todas as informações do produto. Implemente uma função para determinar se o produto existe ou não. Caso exista, as informações sobre o produto deverão ser exibidas, caso contrário, uma mensagem de erro deverá ser exibida. Considere que o arquivo de estoque pode ter um número desconhecido de registros.
4. Faça um programa que leia o arquivo de movimento e gere um novo arquivo de estoque atualizado, a partir do arquivo criado anteriormente. O programa deverá ler o arquivo de estoque e armazena-lo na memória principal, processá-lo e depois gravá-lo em um outro arquivo em disco. Considere que os arquivos de estoque e movimentação podem ter um número desconhecido de registros. Considere também que o arquivo de estoque pode ter no máximo 50 registros.
Utilize subprogramas para modularizar o programa e passagem de parâmetros sempre que possível, evitando assim a repetição de código e o uso de variáveis globais. Utilize os procedimentos abaixo no programa principal (main). Os parâmetros foram omitidos, mas devem ser implementados.
carrega_estoque();
processa_movimento();
grava_estoque();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

# include <stdio.h>

void grava_estoque()
{
typedef struct {
int cod_prod;
char nome[20];
float preco;
int quantidade;
} tp_estoque;
tp_estoque estoque ;
FILE *ESTOQUE;
ESTOQUE = fopen("estoque", "wb");
printf("Digite PRODUTO: ");
scanf(" %d", &estoque.cod_prod);
while (estoque.cod_prod != 0)
{
fflush(stdin);
printf("Digite o nome: ");
gets(estoque.nome);
printf("Digite o preco: ");
scanf(" %f", &estoque.preco);
printf("Digite a quantidade: ");
scanf(" %d", &estoque.quantidade);
printf("Digite PRODUTO: ");
scanf(" %d", &estoque.cod_prod);
}
fclose(ESTOQUE);
}
void processa_movimento(){
typedef struct {
int cod_mov;
int cod_prod;
int quantidade;
} tp_movimento;
tp_movimento movimento;
FILE *MOVIMENTO;
MOVIMENTO = fopen("movimento", "wb");
printf("Digite o codigo do movimento: ");
scanf(" %d", &movimento.cod_mov);
while (movimento.cod_mov != 0 )
{
fflush(stdin);
printf("Digite o codigo do produto: ");
scanf(" %d", &movimento.cod_prod);
printf("Digite a quantidade: ");
scanf(" %d", &movimento.quantidade);
printf("Digite o codigo do movimento: ");
scanf(" %d", &movimento.cod_mov);
}
fclose(MOVIMENTO);
}
void carrega_estoque()
{
const int na = 1;
char arquivo[] ="estoque.dat";
char nome[20];
int i,ret;
typedef struct{
int cod_prod;
char nome[20];
float preco;
int quantidade;
} tp_estoque;
tp_estoque estoque;
FILE *ESTOQUE;
ESTOQUE = fopen(arquivo,"rb");
printf("Digite o produto que deseja consultar: ");
fflush(stdin);
gets(nome);
ret = fread(&estoque,sizeof(tp_estoque),na,ESTOQUE);
while (ret != 0){
if(nome == estoque.nome)
{
printf("Numero: %d, Nome: %s, Preco %d, Quant: %d",estoque.cod_prod,estoque.nome,estoque.preco,estoque.quantidade);
printf("OK");
ret = fread(&estoque,sizeof(tp_estoque),na,ESTOQUE);
}
else
{
printf("Produto nao encontrado");
}
}
fclose(ESTOQUE);
}
main ()
{
carrega_estoque();
//processa_movimento();
//grava_estoque();
}
- Consegui fazer o carrega_estoque só que não sei como passar por procedimento
- Eu vou ter que fazer 2 arquivos apenas :
estoque.c
movimento.c
Como vou manipulá-los ?
E o arquivo do estoque final eu vou ter que criar um novo arquivo para ele ?
- A questão 03 eu coloquei nesse carrega_estoque , mas o certo é criar um novo arquivo(programa) para fazer uma pesquisa ou fazer do jeito que eu fiz ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que eu fiz está errado.

 

Eu criei 4 programas diferentes

 

1 - para incializar o estoque

2 - para inicializar o movimento

3 - para fazer a pesquisa

4 - para fazer as passagens dos parâmetros e gravar o estoque modificado

 

Estou encontrando problemas no de realizar pesquisa, como realizar a pesquisa ?

 

Eu fiz esse codigo abaixo , só que a resposta é sempre não achou

 

Obs : O registro de estoque já foi inicializado no programa 01 e se o produto for achado é preciso printar todas as suas informações

 

#include <stdio.h>
typedef struct{
int cod_prod;
char nome[20];
float preco;
int quantidade;
}tp_estoque;
main(){
FILE *est;
int ret, i = 0;
char nome_estoque[] = "estoque.dat";
tp_estoque estoque;
int achou = 0;
char nome[20];
est = fopen(nome_estoque, "rb");
printf("Entre com o nome do produto para ser pesquisado : ");
gets(nome);
if (est != NULL){
ret = fread(&estoque, sizeof(tp_estoque), 1, est);
do{
if(nome == estoque.nome){
achou = 1;
printf("Achou");
printf("Cod_Prod : %d",estoque.cod_prod);
printf("Nome : %s",estoque.nome);
printf("Preco : %f",estoque.preco);
printf("Quantidade : %d",estoque.quantidade);
}
else
ret = fread(&estoque, sizeof(tp_estoque), 1, est);
}while((!achou) && (ret != 0));
if (achou == 1){
printf("Achou");
}
else
printf("Nao achou");
fclose(est);
}
else
puts("Erro: Abertura do arquivo");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
 int ... i = 0;

Por que há essa variável no seu código?

 

- - - - - - - - -

Na sequência abaixo, você está gastando processamento à toa.

est = fopen(nome_estoque, "rb");
 
     printf("Entre com o nome do produto para ser pesquisado : ");
     gets(nome);
 
     if (est != NULL){

Sugiro que faça a verificação e veja se o arquivo existe, SE NÃO existir nem faça a leitura de dados, apenas mostre uma mensagem que o arquivo não existe e encerre o programa. No seu código, mesmo que o arquivo não exista, será lido um nome para ser procurado... à toa.

 

- - - - - - - - -

fread(&estoque, sizeof(tp_estoque), 1, est);

fread retorna 1 se não for NULL. Aproveitando isto, podemos percorrer o arquivo inteiro desta forma.

while ((fread (&estoque, sizeof(estoque), 1, file)) && (!achou))

Não é necessário atribuir o valor de retorno à uma variável (no caso, "ret"). Mas claro, é apenas uma sugestão.

 

- - - - - - - - -

Não é possível comparar strings desta forma:

if(nome == estoque.nome){

Use a função strcmp da biblioteca string.h.

 

- - - - - - - - -

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TEMP 20

struct tEstoque
{
    char nome [TEMP];
    int codigoProduto, quantidade;
    float preco;
};


int main (void)
{
    FILE *file;

    if (!(file = fopen("estoque.dat", "rb")))
    {
        printf("Arquivo nao encontrado!\n");
        return EXIT_FAILURE;

    } else {

        int achou = 0;
        char nome [TEMP];

        printf("Entre com o nome do produto para ser pesquisado: ");
        fgets (nome, TEMP, stdin);

        struct tEstoque estoque;
        while ((fread (&estoque, sizeof(estoque), 1, file)) && (!achou))
            if (strcmp (nome, estoque.nome))
            {
                achou = 1;
                printf("Codigo: %i\nNome: %s\nQuantidade: %i\nPreco: %.2f\n",
                       estoque.codigoProduto, estoque.nome, estoque.quantidade, estoque.preco);
            }
        fclose(file);

        if (!achou)
            printf("Nome nao encontrado");
    }
    return EXIT_SUCCESS;
}

 

Eu ainda não entendi porque é preciso fazer 4 programas diferentes...

Não seria melhor fazer 4 funções dentro de um programa único?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda , o programa funcionou agora só preciso colocar essa pesquisa numa função

OBS: É preciso ter o main e uma função para efetuar a pesquisa

 

O jeito que eu fiz está funcionando , só que eu queria que ficasse assim no main e não do jeito que eu fiz usando o return :

if(achou(est, nome, estoque)){

printf("Codigo: %d\nNome: %s\nPreco: %.2f\nQuantidade: %d\n", estoque.cod_prod, estoque.nome, estoque.preco, estoque.quantidade);

else

printf("Nao achou");

 

 

1) Tem como fazer isso ?

2) O jeito que eu passei o arquivo ( FILE *est) para a função está de acordo com as melhores práticas de programação ?

 

 

 


 

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


typedef struct
{
    int cod_prod;
    char nome [20];
    float preco;
    int quantidade;
}tp_estoque;


int achou(FILE *est , char nome[], tp_estoque estoque)
{
    int ach = 0;


     while ((fread (&estoque, sizeof(estoque), 1, est)) && (!ach)){
            if (strcmp (nome, estoque.nome) == 0)
            {
                ach = 1; 
                printf("Codigo: %d\nNome: %s\nPreco: %.2f\nQuantidade: %d\n",                     estoque.cod_prod, estoque.nome, estoque.preco, estoque.quantidade);             
            }
     }
     if (!ach)
       printf("Nome nao encotrado");
     return ach;


}


main(){
   FILE *est;
    char nome_estoque[] = "estoque.dat";


    est= fopen(nome_estoque, "rb");
    if (est != NULL){


        char nome [20];
        tp_estoque estoque;


         printf("Entre com o nome do produto para ser pesquisado: ");
         gets (nome);
         return achou(est,nome, estoque)
             
         fclose(est);
     }
     else
         puts("Erro: Abertura do arquivo");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
return achou(est,nome, estoque)

 

Ele vai retornar se achou ou não e se achou ele vai printar as informações do produto.

Esse programa que eu fiz funcionou. Mas é possivel fazer no main isso :

 

 

 if(achou(est, nome, estoque)){
            printf("Codigo: %d\nNome: %s\nPreco: %.2f\nQuantidade: %d\n",  estoque.cod_prod, estoque.nome, estoque.preco, estoque.quantidade);  
     else
          printf("Nao achou");  

 

E Também o que é melhor passar o arquivo por parâmetro ou declarar FILE *est no inicio do programa antes da função e antes do main ?

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.