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