Exercicio C(Filas)

1. Exercicio C(Filas)

Andrew
drk1

(usa Ubuntu)

Enviado em 08/11/2012 - 17:12h

Boa tarde,

Estou me batendo pra resolver um problema, eu entendi "errado" o X da questão e acabei de confundindo na minha gambiarra;
Eis a questão:


•Elaborar um programa que controle o estoque de uma empresa.

-O programa deve conter um menu com as seguintes opções:
1 – Exibir estoque;
2 – Dar entrada no estoque;
3 – Remover item do estoque.

Regras:
-Capacidade do estoque é infinita;
-Para cada entrada no estoque deve-se armazenar o número da nota fiscal e a quantidade comprada;
-Para remover o item do estoque deve-se informar apenas a quantidade. Deve ser removido do mais antigo para o mais atual;
-Validar se há produto em estoque antes de remover;
-Para exibir o estoque deve-se listar a nota fiscal e a quantidade de itens daquela nota disponível.

e o que eu fiz:

Gostaria que ajudasm na parte do remover, pois o meu está removendo o atual e não o antigo como diz a questão, se puderem ajudar fico grato!
Obs: se tiver alguma tag pra codigo, me avisem que eu edito, tentei umas que são padroes em outros foruns e não consegui.

#include <stdio.h>

struct loja{
        char nota_fiscal[100];
        int quant;
        struct loja *prox;
};

typedef struct loja estoque;

int cont = 0;

estoque *estrut;

menu(){
       int caso;
       system("cls");
       printf("[1] Adicionar NF\n");
       printf("[2] Mostrar Estoque\n");
       printf("[3] Remover NF\n");
       printf("[0] Sair\n");
       scanf("%d",&caso);
       system("cls");
       switch(caso){
         case 1: inserir();
                 break;
         case 2: imprimir();
                 break;
         case 3: remover();
                 break;
         case 0: (1); 
                 break;
         default: 
             printf("Opcao invalida!\n");
             getch();
             menu();         
       }
       
}
inserir(){
        char nota_fiscal[100];
        int quant;

        fflush(stdin);
        printf("Digite o numero da Nota Fiscal: ");
        gets(nota_fiscal);
        printf("Digite a quantidade do produto: ");
        scanf("%d",&quant);
        printf("%d",strlen(estrut->nota_fiscal));
        getchar();
        if (strlen(estrut->nota_fiscal) == 0){
           strcpy(estrut->nota_fiscal,nota_fiscal);
           estrut->quant = quant;
        }else{
          estoque *novo;
          
          novo = (estoque*) malloc(sizeof(estoque));
          strcpy(novo->nota_fiscal,nota_fiscal);
          novo->quant = quant;
          novo->prox = NULL;
          
          estoque *atual;

          atual = estrut;
          
          while (atual->prox != NULL)
                atual = atual->prox;      
          
          atual->prox = novo;
          
        }
        cont++;
        menu();
}
imprimir(){
       estoque *mostrar;  
       mostrar = estrut;
       if(cont == 0){
       printf("Sem Dados");
       }
       else{
       do{
          printf("Nota Fiscal: %s\n", mostrar->nota_fiscal);
          printf("Quantidade: %d\n\n", mostrar->quant);
          mostrar = mostrar->prox;

          if (mostrar ==NULL)
             break;
          
       } while (1==1);
       }
       getch();
       menu();
       
}
remover(){
       if (estrut->prox==NULL){
         strcpy(estrut->nota_fiscal,"");
         estrut->quant = NULL;
       }else{
         estoque *atual, *anterior;
         atual = estrut;
         while(atual->prox != NULL){
           anterior = atual;
           atual    = atual->prox;
         }
         anterior->prox = NULL;
         free(atual);
       }
       if(cont == 0){
               printf("Sem Dados");
               }else{
       printf("Ultimo registro removido!");
       cont--;
       }
       getch();
       menu();
}
main(){
       estrut = (estoque*) malloc(sizeof(estoque));
       strcpy(estrut->nota_fiscal,"");
       estrut->prox=NULL;
       menu();
}

 



  


2. Re: Exercicio C(Filas)

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/11/2012 - 17:31h

Cara, edite sua postagem e coloque seu código entre as tags [code] e [/code]. Do contrário, fica muito ruim de se ler.


3. Re: Exercicio C(Filas)

???
gokernel

(usa Linux Mint)

Enviado em 08/11/2012 - 17:35h

para postar codigos usar a tag (code), assim SEM ASPAS:

"


// codigo aqui ...

 
"

ou usar ( http://codepad.org ) e enviar o link ...


4. Re: Exercicio C(Filas)

Andrew
drk1

(usa Ubuntu)

Enviado em 08/11/2012 - 17:38h

feito, alguem editou pra mim, obrigado :)


5. Re: Exercicio C(Filas)

Andrew
drk1

(usa Ubuntu)

Enviado em 08/11/2012 - 17:56h

Obs: consegui "arrumar" a parte de remover, só que agora quando eu removo o primeiro da fila, o segundo nao substitui o primeiro :S, e na proxima inserçao ele grava em cima


6. Re: Exercicio C(Filas)

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/11/2012 - 18:07h

Tem certas partes a melhorar como esta, e o while pode ser while(1) que seria o mesmo que 1==1


do{
          printf("Nota Fiscal: %s\n", mostrar->nota_fiscal);
          printf("Quantidade: %d\n\n", mostrar->quant);
          mostrar = mostrar->prox;
           
       } while (mostrar != NULL);
 


Talvez isso resolva, não tenho como testar agora. Mais tarde eu vejo direito caso não resolva


remover(){
         
         estoque *remover;

         if( estrut->nota_fiscal != "" )
         {
           remover = estrut;
           estrut = estrut->prox;
           free(remover);
           printf("Ultimo registro removido!");
           cont--;
         }
         
         else
         {
           //strcpy(estrut->nota_fiscal,"");
           //estrut->quant = NULL;
           printf("Sem Dados");
         }

       getch();
       menu();
}
 



7. Re: Exercicio C(Filas)

???
gokernel

(usa Linux Mint)

Enviado em 08/11/2012 - 20:11h

veja se esse axemplo ajuda, OBS: fiz nas pressas ...



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

typedef struct loja loja;

struct loja
{
    char  nota_fiscal[100];
    int   quant;
    loja  *prox;
};

loja *first;
int count = 0;

void add (char *text, int quant)
{
    loja *v = (loja*) malloc (sizeof(loja));

    if (v && text)
    {
        strcpy (v->nota_fiscal, text);
        v->quant = quant;
        v->prox = NULL;

        count++;

        if (!first) {
            first = v;
        } else {
            loja *aux = first;

            while (aux->prox != NULL)
                aux = aux->prox;

            aux->prox = v;
        }
    }
}

void del (void)
{
    loja *a = first;
    loja *end;

    if (count)
    {
        count--;

        while (a->prox != NULL)
        {
            end = a;
            a = a->prox;
        }
        end->prox = NULL;
        free (a);
    }
}

int main (int argc, char *argv[])
{
    // add ...
    add ("nota feijao", 2);
    add ("nota leite", 5);
    add ("nota arroz", 8);
    add ("nota farinha", 100);

    del (); // DELETE: "nota farinha", 100

    // list: ...
    loja *i = first;

    while (i) {
        printf ("NOTA: %s - %d\n", i->nota_fiscal, i->quant);
        i = i->prox;
    }

    return 0;
}

 








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts