Ir ao conteúdo
  • Cadastre-se

VisualG algoritmo de estoque de loja


Ir à solução Resolvido por Niê,

Posts recomendados

o Estoque

 

  •  Cadastro de item no estoque
    • Descrição / Quantidade / Preço de custo / Preço de venda    
  •  Cadastro de combo promocional
    •  Descrição / Quantidade / Preço de custo / Preço de venda
  •  Retirar item do estoque
    • Retira quantidade do item selecionado
  •  Relatório de itens no estoque.
    • Todos os itens

 

Bom dia, guys.

Como viram estou com esse projeto para fazer, um estoque de ponto de venda, porém estou com dúvida em como iniciarei isso. Tenho ideias, só preciso de um START no cérebro e como estou sem internet boa para ver vídeos sobre, vim recorrer aqui. 

 

Sei que necessitarei de procedimento para criar os menus e vetor para cadastramento de itens. Só que, como? Se puder me dar uma luz agradeço de coração!

adicionado 33 minutos depois
algoritmo "ESTOQUE"
// Função :
// Autor :
// Data : 17/10/2009
// Seção de Declarações
var
OPC,OPC_CAD:INTEIRO



PROCEDIMENTO item_cadastro  //Procedimento que dará inicio ao cadastro de item
inicio
repita
   ESCREVAL("------CADASTRO DE ITEM---------")
   ESCREVAL("          1-Unidade            ")
   ESCREVAL("          2-Combo              ")
   ESCREVAL("          5-Voltar             ")
   ESCREVAL("-------------------------------")
   leia (opc_cad)
     escolha (opc_cad)
ate (opc_cad = 5)
   caso 5
     limpatela
     menu_estoque
fimprocedimento

PROCEDIMENTO menu_estoque  //Procedimento relacionado ao menu princnipal
INICIO
 repita
   ESCREVAL("--------- ESTOQUE - PDV--------")
   ESCREVAL("         1-Cadastro de Item    ")
   ESCREVAL("         3-Retirar Item        ")
   ESCREVAL("         4-DEVOLVER            ")
   ESCREVAL("         5-Sair                ")
   ESCREVAL("-------------------------------")
   leia (opc)
     escolha (opc)
 ate (opc=5)
   caso 1
   limpatela
   item_cadastro
fimprocedimento
INICIO
menu_estoque
fimalgoritmo

FIZ ISSO ATÉ AGORA.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Niê.

 

1#

Primeiramente é necessário definir a estrutura para armazenar os dados... tem pelo menos duas básicas: com registros e vetores; ou apenas com vetores.

 

Com registro poderia ser algo assim:

tipo
   //dados do produto
   Produto = registro
      desc  :caractere  //descricao
      qtd   :inteiro    //quanidade
      pCusto:real       //preco de custo
      pVenda:real       //preco de venda
   fimRegistro

var
   produtos :vetor [1..5] de Produto

Ai, cada posição do vetor terá os dados de um produto...  para ler por exemplo um preço de venda, seria algo assim:

leia(produtos[codItem].pVenda)

Para um outro atributo, acessa outra variável do registro...

 

 

 

Com apenas vetores poderia ser algo assim:

var
   descricoes  :vetor [1..5] de caractere
   quantidades :vetor [1..5] de inteiro
   precosCustos:vetor [1..5] de real
   precosVendas:vetor [1..5] de real

Aqui cada vetor representa um atributo do produto, ou seja, para um índice igual, estará acessando os dados de um mesmo produto. Para ler o preço de venda, seria algo assim:

leia(precosVendas[codItem])

Para outro atributo, acessa o vetor correspondente.

 

 

 

 

Poderia também ser feito com matrizes (vetor de duas coordenadas), onde uma coordenada seria para identificar o item, a outra coordenada para acessar o atributo desse item.... etc.

 

 

 

2#

Após definido a estrutura... começa a implementar... se optar com registros, poderia ser algo assim:

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
tipo
   //dados do produto
   Produto = registro
      desc  :caractere  //descricao
      qtd   :inteiro    //quanidade
      pCusto:real       //preco de custo
      pVenda:real       //preco de venda
   fimRegistro

var
   produtos :vetor [1..5] de Produto
   codItem  :inteiro
   opc      :caractere
   
procedimento cadastro_item
   inicio
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(produtos[codItem].desc)
   escreva ("Quantidade     :")
   leia(produtos[codItem].qtd)

   
   
   

fimProcedimento
   
INICIO
codItem <- 0
repita
   limpaTela
   escreval("--------- ESTOQUE - PDV--------")
   escreval()
   escreval("         1-Cadastro de Item    ")
   escreval("         3-Retirar Item        ")
   escreval("         4-DEVOLVER            ")
   escreval("         5-Sair                ")
   escreval("-------------------------------")
   leia(opc)
   escolha (opc)
      caso "1"
         limpaTela
         cadastro_item()
      caso "3"
         limpaTela
         escreval("EM CONTRUÇÃO")
         
         

   fimEscolha

ate opc="5"



FIMALGORITMO

 

Ai vai indo...

 

Para apenas vetores, a estrutura será parecida, só com os pequenos ajustes para o contexto...

 

 

 

***

 

Em fim, ANTES é necessário definir como vai armazenar os dados... e aos poucos vai implementado e ajustando...

 

Primeiramente APENAS faça a estrutura para cadastrar itens. Após, faça uma estrutura para exibir um item... este último para testar se está cadastrando corretamente... ai posta o código aqui para analisarmos.

 

Não tente fazer tudo que o enunciado pede de uma vez, pois não vai funcionar!!! Vá fazendo aos poucos. Testando e evoluindo...

 

 

No aguardo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

23 minutos atrás, Simon Viegas disse:

ANTES é necessário definir como vai armazenar os dados... e aos poucos vai implementado e ajustando...

 

Tudo bem, percebi agora que extrapolei na empolgação. Vou fazer isso, primeiro estruturar o armazenamento e depois coloco dentro de um menu. 

 

Link para o comentário
Compartilhar em outros sites

@Simon Viegas

 

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
tipo
   //dados do produto
   Produto = registro
      desc  :caractere  //descricao
      qtd   :inteiro    //quantidade
      pCusto:real       //preco de custo
      pVenda:real       //preco de venda
   fimRegistro

var
   produtos :vetor [1..1] de Produto
   i,j        :inteiro
   codItem  :inteiro
   opc      :caractere
   fim_cad  :inteiro

procedimento cadastro_item
   inicio
   para i de 1 ate 1 faca
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(produtos[codItem].desc)
   escreva ("Quantidade     :")
   leia(produtos[codItem].qtd)
   escreva ("Preço:         :")
   leia (produtos[codItem].pVenda)
   fimpara
     escreval ("Você possui no estoque os seguintes itens: ")
   para j de 1 ate 1 faca
  escreval ("Produto      :",produtos[coditem].desc)
  escreval ("Quantidade   :",produtos[coditem].qtd)
  escreval ("Preço        R$:", produtos[coditem].Pvenda ,",00")
   fimpara
escreval ("Para retornar ao menu, digite 1. Caso queira cadastrar outro item")
escreval ("digite 2.")
leia (fim_cad)
escolha (fim_cad)
caso 1
menu
caso 2
cadastro_item

fimProcedimento

procedimento menu
inicio
escreval ("EM CONSTRUÇÃO")
fimprocedimento

inicio
cadastro_item
fimalgoritmo

Está dando erro quando seleciono a opção de cadastrar OUTRO item, sabe me dizer o porquê? Aliás, nunca havia usado o "tipo", gostei bastante dessa função!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Niê, você tá se confundindo um pouco no uso do conceito de MENU. Você não pode invocar novamente o menu dentro de uma método... o correto é deixar o método terminar e assim voltar para o MENU...

 

Antes de tudo, mas criar um glossário.

1-Métedo será os procedimentos e funções... ou seja, o método cadastro_item() é um procedimento do seu código;

2-Invocar será o processo de "entrar" em um procedimento ou método, ou seja, quando o programa executar um método. este é "invocando o método"... algo como "o programa está entrado no procedimento".

 

Vamos lá:

 

Seria mais ou menos assim:

O "CORRETO":

- Exibe o MENU;

- Usuário escolhe uma opção;

- Daí através da estrutura de seleção (case ou se), é invocado o método correspondente;

- O método faz apenas o que tem que fazer e fecha. O programa vai voltar para a linha posterior onde foi invocado o método, que seria no menu.

 

COMO VOCÊ ESTÁ FAZENDO/IMAGINANDO QUE É:

- Exibe o MENU;

- Daí através da estrutura de seleção (case ou se), é invocado o método correspondente; (até aqui tudo igual)

- O método faz o que tem que fazer e ainda dentro do método invoca o MENU novamente.

 

Ai está o erro... você não pode ficar invocando um método dentro de outro método... Fazendo uma analogia com o "Windows Explorer" do Windows... o tal do "Meu computador". Pense assim... o menu seria como a unidade C:. Cada uma das pastas dentro do C seria uma das opções do MENU, certo?. Quando você entrasse numa pasta, imagine que é aberto um novo "Windows Explorer", ou seja, fica um lá selecionado a pasta que você tentou abrir, e um outro que entrar na tal pasta. Aí, quando você quiser voltar pro C, basta fechar a janela da pasta atual... para abrir uma nova pasta, mesma coisa... será aberto uma nova janela coma a pasta escolhida... mas veja que só terão duas janelas abertas no máximo...

 

Já da forma que você está fazendo, ao entrar numa pasta, vão ficar duas janelas... ai quando você invoca o menu de dentro do método, seria como você tivesse tentando abrir o C de dentro da pasta que você está... ou seja, vai ter lá a janela original do C, mais a janela da pasta que você abriu inicialmente, mais a nova janela do C que acabou de abrir... terão 3 janelas... ao abrir uma nova pasta do menu, irá para 4ª. Ao voltar pro C dentro da pasta, abrirá uma 5ª... por ai vai... chegaria o ponto que não iria ter mais memória..

 

Entende?

 

O correto é: o menu abrir a opção, a opção finaliza e o programa volta para o menu.

 

Abaixo segue um exemplo:

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
tipo
   //dados do produto
   Produto = registro
      desc  :caractere  //descricao
      qtd   :inteiro    //quantidade
      pCusto:real       //preco de custo
      pVenda:real       //preco de venda
   fimRegistro

var
   produtos :vetor [1..10] de Produto
   i,j      :inteiro
   codItem  :inteiro
   opc      :caractere
   fim_cad  :inteiro

procedimento cadastro_item
   inicio
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(produtos[codItem].desc)
   escreva ("Quantidade     :")
   leia(produtos[codItem].qtd)
   escreva ("Preço de CUSTO :")
   leia (produtos[codItem].pCusto)
   escreva ("Preço de VENDA :")
   leia (produtos[codItem].pVenda)
fimProcedimento


procedimento imprimir_produtos()
  //aqui você implementa o método
fimProcedimento



procedimento menu()
   inicio
   repita
      limpaTela
      escreval("--------- ESTOQUE - PDV--------")
      escreval()
      escreval("         1-Cadastro de Item    ")
      escreval("         3-EM CONSTRUÇÃO       ")
      escreval("         4-EM CONSTRUÇÃO       ")
      escreval("         5-Sair                ")
      escreval()
      escreval("         0-*Imprimir produtos  ")
      escreval("-------------------------------")
      leia(opc)
      escolha (opc)
         caso "1"
            limpaTela
            cadastro_item() //qdn esse método é invocado, ao finalizar, o programa vai continuar daqui...
         caso "3"
            limpaTela
            escreval("EM CONTRUÇÃO")
         caso "0'
            limpaTela
            imprimir_produtos()





      fimEscolha
   ate opc="5"
fimProcedimento

inicio
codItem <- 0
menu()
fimAlgoritmo



Qualquer coisa, pegue esse código acima, tente implementar o imprimir...

 

Qualquer dúvida é só perguntar.
 

 

No aguardo.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas

 

   Muito obrigado, Simon!

      Mas ainda estou com um problema simples, depois que cadastro um item e tento fechar o menu (5), ele seleciona automaticamente a opção de cadastrar item novamente.

MAS isso eu vou deixar para depois, afinal ainda tenho um menu antes desse de estoque, e quando for acrescentar o procedimento, mudo essa opção.

 

Segue o código do jeito que está por enquanto:

 

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
tipo
   //dados do produto
   Produto = registro
      nome  :caractere  //descricao
      qtd   :inteiro    //quantidade
      pCusto:real       //preco de custo
      pVenda:real       //preco de venda
      cod   :inteiro
   fimRegistro

var
   produtos :vetor [1..10] de Produto
   i,j,s    :inteiro
   codItem  :inteiro
   opc      :caractere
   fim_cad  :caractere
   sair_imp :caractere

procedimento cadastro_item //Procedimento para cadastrar itens
   inicio
   para i de 1 ate 10 faca
   codItem <- codItem+1
    escreval("**  Cadastro de produto **")
    escreva ("Nome              :")
     leia(produtos[codItem].nome)
    escreval ("Código do produto :")
    escreval ("Ex: 001. SEM LETRAS!")
    leia (produtos[codItem].cod)
    escreva ("Quantidade        :")
     leia(produtos[codItem].qtd)
    escreva ("Preço de CUSTO    :")
     leia (produtos[codItem].pCusto)
    escreva ("Preço de VENDA    :")
     leia (produtos[codItem].pVenda)
//Abaixo irá mostrar o último produto cadastrado
    escreval ("Produto        :",produtos[coditem].nome)
    escreval ("Código         :",produtos[coditem].cod)
    escreval ("Quantidade     :",produtos[coditem].qtd)
    escreval ("Preço        R$:", produtos[coditem].Pvenda ,",00")
//Função que realiza o desejo de cadastrar ou não mais produtos
voltar_menu()
    fimpara

i:= 0
fimProcedimento



procedimento voltar_menu() //Procedimento para dar back do cadastro ao menu
inicio                     //Talvez seja inútil, mas deixa mais organizado
 escreval ("Deseja voltar ao menu? S/N")
 leia (fim_cad)
   se fim_cad = "S" então
      limpatela
        menu()
         senao
      limpatela
       cadastro_item()
   fimse
fimprocedimento



procedimento imprimir_produtos()//Prodedimento para imprimir os produtos cadastrados
 inicio
 escreval ("Você possui no estoque os seguintes itens: ")
 para i de 1 ate 10 faca
  escreval ("Produto        :",produtos[i].nome)
  escreval ("Código         :",produtos[i].cod)
  escreval ("Quantidade     :",produtos[i].qtd)
  escreval ("Preço        R$:",produtos[i].Pvenda ,",00")
  escreval ("------------------------------------------")

 fimpara
escreval ("Para voltar ao menu, tecle ENTER")
  leia (sair_imp)
    se sair_imp = "" então
      limpatela
     menu()
    fimse
fimProcedimento



procedimento menu()
   inicio
   repita
      limpaTela
      escreval("--------- ESTOQUE - PDV----------")
      escreval()
      escreval("         1-Cadastro de Item      ")
      escreval("         3-EM CONSTRUÇÃO         ")
      escreval("         4-EM CONSTRUÇÃO         ")
      escreval("         Esc-Sair                ")
      escreval()
      escreval("         0-*Imprimir produtos    ")
      escreval()
      escreval("  Existem",coditem," produtos cadastrados")
      escreval("---------------------------------")
      leia(opc)
      escolha (opc)
         caso "1"
            limpatela
            cadastro_item() //qdn esse método é invocado, ao finalizar, o programa vai continuar daqui...
         caso "3"
            limpatela
            escreval("EM CONTRUÇÃO")
         caso "0"
           limpatela
            imprimir_produtos()
      fimEscolha
      ate (opc = 5)
fimProcedimento

inicio
menu()
codItem <- 0
fimAlgoritmo

Gostaria de arrumar um jeito que impeça o cadastro de produtos com códigos ou nomes iguais.

  • Triste 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

1#

@Niê, por favor, me explique o que significa esse método:

 

9 horas atrás, Niê disse:

procedimento voltar_menu() //Procedimento para dar back do cadastro ao menu

 

O que você está tentando fazer?

Você leu o que disse na minha postagem anterior? tem alguma dúvida?

 

 

  • Haha 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas

 

Não, este procedimento vai servir para voltar ao menu em outras partes do estoque, entende? Se no 2- eu quiser voltar ao terminar? Apenas uso o procedimento voltar_menu()

 

 

Edit:

Ok, entendi a sua tristeza, agora que eu vi que é inútil, afinal o procedimento só vai repetir o cadastro. Vou remover relaxa.

 

procedimento cadastro_item //Procedimento para cadastrar itens
   inicio
   para i de 1 ate 10 faca
   codItem <- codItem+1
    escreval("**  Cadastro de produto **")
    escreva ("Nome              :")
     leia(produtos[codItem].nome)
    escreval ("Código do produto :")
    escreval ("Ex: 001. SEM LETRAS!")
    leia (produtos[codItem].cod)
    escreva ("Quantidade        :")
     leia(produtos[codItem].qtd)
    escreva ("Preço de CUSTO    :")
     leia (produtos[codItem].pCusto)
    escreva ("Preço de VENDA    :")
     leia (produtos[codItem].pVenda)
//Abaixo irá mostrar o último produto cadastrado
    escreval ("Produto        :",produtos[coditem].nome)
    escreval ("Código         :",produtos[coditem].cod)
    escreval ("Quantidade     :",produtos[coditem].qtd)
    escreval ("Preço        R$:", produtos[coditem].Pvenda ,",00")
//Função que realiza o desejo de cadastrar ou não mais produtos
 escreval ("Deseja voltar ao menu? S/N")
 leia (fim_cad)
   se fim_cad = "S" então
      limpatela
        menu()
         senao
      limpatela
       cadastro_item()
   fimse
    fimpara

i:= 0
fimProcedimento

 

 

Aliás, editei meu comentário acima, da uma olhada pfv!

image.png

adicionado 21 minutos depois
14 horas atrás, Simon Viegas disse:

Qualquer coisa, pegue esse código acima, tente implementar o imprimir...

 

Complementei, foi fácil até. Agora só estou consertando as coisas que estão faltando peças. 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Niê, resumidamente seria: "você NÃO pode invocar o menu dentro de um item do próprio menu". Pense assim. Cada método (procedimento) do seu código é como um programa. Cada vez que você invoca um método (usa-o), ele abre um novo processo.

 

Dê uma olhada como implementei o

14 horas atrás, Simon Viegas disse:

procedimento cadastro_item
   inicio
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(produtos[codItem].desc)
   escreva ("Quantidade     :")
   leia(produtos[codItem].qtd)
   escreva ("Preço de CUSTO :")
   leia (produtos[codItem].pCusto)
   escreva ("Preço de VENDA :")
   leia (produtos[codItem].pVenda)
fimProcedimento

 

O método cadastro_item() foi invocado pelo método menu(), correto? Você NÃO PRECISA INVOCAR UM NOVO menu(), apenas vai deixar cadastro_item() fechar, ou seja, o programa vai voltar para o momento onde cadastro_item() foi invocado. E o programa continua.

 

 

***

 

Resumidamente: para treinar, apenas pegue o meu código anterior e termine de implementar o método imprimir_produtos(). Só faça isso. Ai faz os testes.

 

obs.: não tente alterar a estrutura. Apenas implemente o método e teste. Caso tenha dúvidas, é só perguntar... Mais pra frente vai fazer as suas alterações necessárias...

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

@Simon Viegas

Mas e se eu por um vetor de 10 e quiser cadastrar apenas 1? QUal é o modo que consigo armazenar os dados desse tipo sem vetor e laço?

 

Por isso pensei no menu, para sempre que cadastrar 1 perguntar se quer continuar ou não. Só agora entendi o seu ponto de vista e vou devagar, ajeitar o imprima e te mando aqui!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
12 minutos atrás, Niê disse:

Por isso pensei no menu, para sempre que cadastrar 1 perguntar se quer continuar ou não. Só agora entendi o seu ponto de vista e vou devagar, ajeitar o imprima e te mando aqui!

 

O menu já existe. Caso queira cadastrar mais de um, pode colocar um repita ou enquanto no cadastro_item()... não tem problema..  O QUE NÃO PODE É DENTRO DO cadastro_item() invocar novamente o menu(). Entenda que para voltar para o menu, BASTA DEIXAR QUE cadastro_item() TERMINE.

 

ERRADO

- Dentro de cadatro_item() invocar o método menu();

 

CORRETO

- Deixa o cadastro_item() terminar, o programa vai voltar para o menu().

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 minuto atrás, Niê disse:

@Simon Viegas

Entendi. Quando o cadastro_item() está aberto, o menu() também está. Se eu invocar o menu(), estarei cometendo um erro tão grave quanto um pleonasmo. Entendi!

 

Quase isso...

 

A forma como você estava implementando faz sentido... já viu falar em arquivo .bat? Lá, quando se quer "ir para um trecho do código, usam-se o goto... nela, o código é redirecionado para o trecho... ou seja, se quero voltar para o menu, eu dou um "goto menu"... mas no Visualg é diferente... é outro "paradigma"... Aqui, quando quer ir para o menu (que é um procedimento), o computador ABRE UMA ESPÉCIE PROCESSO... como se fosse um subprograma. Daí, o tal método é executado e ao terminar (chegar no fimProcedimento), o computador faz voltar para mesma linha onde este método foi invocado.

 

Veja:

15 horas atrás, Simon Viegas disse:

procedimento menu()
   inicio
   repita
      limpaTela
      escreval("--------- ESTOQUE - PDV--------")
      escreval()
      escreval("         1-Cadastro de Item    ")
      escreval("         3-EM CONSTRUÇÃO       ")
      escreval("         4-EM CONSTRUÇÃO       ")
      escreval("         5-Sair                ")
      escreval()
      escreval("         0-*Imprimir produtos  ")
      escreval("-------------------------------")
      leia(opc)
      escolha (opc)
         caso "1"
            limpaTela
            cadastro_item() //qdn esse método é invocado, ao finalizar, o programa vai continuar daqui...
         caso "3"
            limpaTela
            escreval("EM CONTRUÇÃO")
         caso "0'
            limpaTela
            imprimir_produtos()





      fimEscolha
   ate opc="5"
fimProcedimento

 

Veja ali o que diz o comentário...

 

Ali no menu(), se for escolhido a opção "1", vai limpar a tela e depois invocar o cadastro_item(), beleza? Ai o computador vai ABRIR UM NOVO PROCESSO DE cadastro_item()... ao mesmo tempo que "salva onde esse processo foi invocado"...   ao terminar o cadastro_item(), o programa vai voltar exatamente na mesma linha e vai continuar. Essa é a forma correta!!!

 

 

Da forma que estava fazendo (errada), ao cadastro_item() invocar o menu() (em vez de apenas fechar e voltar), vai abrir uma nova instância de menu(), vamos chamar de menu2()... ai se dentro do menu2() optar por cadastrar mais um, vai abrir um novo cadastro_item(), vamos chamar de cadastro_item2()... esse processo iria acumulando... menu3(), cadastro3()... etc....   ao último finalizar, vai voltar para o menu2(), que vai voltar para cadastro_item(), que vai voltar para o menu(). Entende? se fosse invocado 1000 vezes, iria criar 2000 processos extras...

 

Independe do custo operacional, isso estaria tecnicamente errado... como citado, o correto é apenas deixar o cadastro_item() terminar quando deve terminar, que irá voltar para o menu(). Que poderá abrir novamente o que quiser abrir... mas sempre terá apenas um processo além do menu() aberto.

 

obs.: não funciona exatamente como um novo processo... existe toda uma característica envolvida, como o acesso as mesmas variáveis e tal, mas a ideia seria essa.

 

 

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

E as informações já ficam salvas no "tipo"? É a primeira vez que o uso. Já que produto já possui um vetor:

produtos :vetor [1..1] de Produto

No imprimir aprendi usando o para, o mesmo para cadastrar usuários e produtos, somente em vetor, porém o método do tipo é mais simples e entendi melhor. Só não sei como ARMAZENAR o que fora cadastrado e imprimir depois. Tentei assim:

 escreval ("Você possui no estoque os seguintes itens: ")
  escreval ("Produto        :",produtos[coditem].desc)
  escreval ("Quantidade     :",produtos[coditem].qtd)
  escreval ("Preço        R$:",produtos[coditem].Pvenda) ,",00")
  escreval ("------------------------------------------")

Mas sem sucesso.

 

Me desculpe a ignorância, ainda estou no primeiro período de S.I.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

1#

3 horas atrás, Niê disse:

E as informações já ficam salvas no "tipo"? É a primeira vez que o uso. Já que produto já possui um vetor

 

Se ainda não deu, nem tem problemas. Podemos fazer apenas com vetores. Vou editar o programa e postar daqui a pouco...

 

 

 

3 horas atrás, Niê disse:

No imprimir aprendi usando o para, o mesmo para cadastrar usuários e produtos, somente em vetor, porém o método do tipo é mais simples e entendi melhor. Só não sei como ARMAZENAR o que fora cadastrado e imprimir depois. Tentei assim:

 

Para é o método de repetição, ou seja, a capacidade de fazer determinado trecho repetir... é como o repita e enquanto.

 

Já o tipo, é apenas uma forma de definir um tipo personalizado... por exemplo, o inteiro é um tipo de dados... este é capaz de armazenar certa faixa de números. Já o caractere é outro tipo, este é capaz de armazenar certa quantidade de letras...   já o registro, é uma forma de criar um tipo personalizado e especial... ou seja, nos registros é possível subdividir uma variável em outras... para acessar cada item, basta usar o ".", assim como no exemplo... daí, tipo serviu apenas para "dar um nome" a esse registro... ou seja, em vez de declarar algo assim:

var
   produtos :vetor [1..10] de registro
                                 nome  :caractere  //descricao
                                 qtd   :inteiro    //quantidade
                                 pCusto:real       //preco de custo
                                 pVenda:real       //preco de venda
                                 cod   :inteiro
                              fimRegistro

Entende? o tipo serve apenas para dizer que "onde eu usar Produto, use no lugar isso tudo ai. Só esse monte de linha, por uma linha só...   tipo é como uma variável, só que em vez de armazenar dados, ela armazena tipos...

 

SE NÃO ENTENDEU, NÃO SE PREOCUPE!!! ESQUEÇA ISSO...  MAIS PRA FRENTE VOLTA A ESTUDAR SOBRE ISSO

 

Mas em fim...   por enquanto esqueça essa questão do registro... ignore!! beleza?   só aguarde um pouco que vou editar para usar apenas vetores...

 

Vou fazer usar assim:

23 horas atrás, Simon Viegas disse:

om apenas vetores poderia ser algo assim:


var
   descricoes  :vetor [1..5] de caractere
   quantidades :vetor [1..5] de inteiro
   precosCustos:vetor [1..5] de real
   precosVendas:vetor [1..5] de real

Aqui cada vetor representa um atributo do produto, ou seja, para um índice igual, estará acessando os dados de um mesmo produto. Para ler o preço de venda, seria algo assim:


leia(precosVendas[codItem])

Para outro atributo, acessa o vetor correspondente.

 

Um momento.

adicionado 13 minutos depois

 

UPDATE 1

Usando vetores, pode ficar assim:

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens

var
   //dados do produto (cada vetor é um atributo)
   descricoes  :vetor [1..5] de caractere
   quantidades :vetor [1..5] de inteiro
   precosCustos:vetor [1..5] de real
   precosVendas:vetor [1..5] de real

   codItem  :inteiro    //código do produto (gerado em sequência)
   opc      :caractere  //usado para selecionar opções


procedimento cadastro_item
   inicio
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(descricoes[codItem])
   escreva ("Quantidade     :")
   leia(quantidades[codItem])
   escreva ("Preço de CUSTO :")
   leia (precosCustos[codItem])
   escreva ("Preço de VENDA :")
   leia (precosVendas[codItem])
fimProcedimento




INICIO
codItem <- 0  //inicializa o controlador de código
repita
   limpaTela
   escreval("--------- ESTOQUE - PDV--------")
   escreval()
   escreval("         1-Cadastro de Item    ")
   escreval("         3-Retirar Item        ")
   escreval("         4-DEVOLVER            ")
   escreval("         5-Sair                ")
   escreval("-------------------------------")
   leia(opc)
   escolha (opc)
      caso "1"
         limpaTela
         cadastro_item()
      caso "3"
         limpaTela
         escreval("EM CONTRUÇÃO")



   fimEscolha

ate opc="5"



FIMALGORITMO


Pronto. Esse código, teoricamente, está servindo apenas para cadastrar um produto. Ai, vou implementar para imprimir o produto... desta forma, dá para ver se está cadastrando corretamente. Um momento..

 

adicionado 27 minutos depois

UPDATE 2

 

Agora, apenas joguei o "menu" (as opções do programa) para dentro de um método, que chamei de menu(). Ai, no programa principal, invoco esse método.

 

Lá incluir a opção "0". Justamente para testar se está cadastrando normalmente ou não...

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
var
   //dados do produto (cada vetor é um atributo)
   descricoes  :vetor [1..5] de caractere
   quantidades :vetor [1..5] de inteiro
   precosCustos:vetor [1..5] de real
   precosVendas:vetor [1..5] de real

   codItem  :inteiro    //código do produto (gerado em sequência)
   opc      :caractere  //usado para selecionar opções


procedimento cadastro_item
   inicio
   codItem <- codItem+1
   escreval("**  Cadastro de produto **")
   escreva ("Descrição      :")
   leia(descricoes[codItem])
   escreva ("Quantidade     :")
   leia(quantidades[codItem])
   escreva ("Preço de CUSTO :")
   leia (precosCustos[codItem])
   escreva ("Preço de VENDA :")
   leia (precosVendas[codItem])
fimProcedimento

procedimento imprimir_produtos()//Prodedimento para imprimir os produtos cadastrados
   var
      i :inteiro
   inicio
   escreval("Você possui no estoque os seguintes itens: ")
   para i de 1 ate codItem faca //do primeiro até a quantidade já cadastrada
      escreval()
      escreval("Código         :",i)
      escreval("Descrição      : ",descricoes[i])
      escreval("Quantidade     :",quantidades[i])
      escreval("Preço de CUSTO :",precosCustos[i])
      escreval("Preço de VENDA : R$:",precosVendas[i])
      escreval("------------------------------------------")
      escreval()
      escreva ("Pressione ENTER para continuar")
      leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez
   fimpara
fimProcedimento

procedimento menu()
   inicio
   repita
      limpaTela
      escreval("--------- ESTOQUE - PDV--------")
      escreval()
      escreval("         1-Cadastro de Item    ")
      escreval("         3-EM CONSTRUÇÃO       ")
      escreval("         4-EM CONSTRUÇÃO       ")
      escreval("         5-Sair                ")
      escreval()
      escreval("         0-*Imprimir produtos  ")
      escreval("-------------------------------")
      leia(opc)
      escolha (opc)
         caso "1"
            limpaTela
            cadastro_item() //qdn esse método é invocado, ao finalizar, o programa vai continuar daqui...
         caso "3"
            limpaTela
            escreval("EM CONTRUÇÃO")
         caso "0"
            limpaTela
            imprimir_produtos()





      fimEscolha
   ate opc="5"
fimProcedimento




INICIO
codItem <- 0  //inicializa o controlador de código
menu()
FIMALGORITMO

 

***

 

Efetue testes.. inclua 2 ou mais produtos... depois coloque para imprimir.

 

Até aqui alguma dúvida? se sim, qual?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Era exatamente isso que havíamos feito porém com o tipo, por isso eu estava travado e confuso.

Com o vetor, entendi 100% de tudo que está digitado, e ainda consigo explicar para meus colegas da faculdade.

 

A partir daí vou criar o cadastro de combo sozinho.

 

Só uma dúvida, Simon; Ao imprimir os produtos cadastrados, não exibe todos, só vai exibindo conforme vou teclando ENTER, como ajeito isso? Andei tentando e não obtive sucesso.

adicionado 6 minutos depois

Aliás, se estivéssemos tentando com vetor primeiramente, o resultado viria mais rápido. Me desculpa pelo trabalho que te dei forçando tipo no código. auhauhauh

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Niê, sobre:

7 minutos atrás, Niê disse:

Só uma dúvida, Simon; Ao imprimir os produtos cadastrados, não exibe todos, só vai exibindo conforme vou teclando ENTER, como ajeito isso? Andei tentando e não obtive sucesso.

 

Justamente... pois isso que foi proposto.

1 hora atrás, Simon Viegas disse:

      escreva ("Pressione ENTER para continuar")
      leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez
   fimpara

 

Tente entender como funciona e efetue as alterações necessárias.

 

Qualquer dúvida é só postar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

16 minutos atrás, Simon Viegas disse:

Tente entender como funciona e efetue as alterações necessárias.

 

 

 

Ok, só li, reli e entendi.

 

o fimpara deve ficar antes do escreva, para que o escreva seja dito apenas uma vez depois da repetição que exibe os produtos. funcionou aqui!

 

fimpara
      escreva ("Pressione ENTER para continuar")
      leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

 

22 minutos atrás, Niê disse:

o fimpara deve ficar antes do escreva, para que o escreva seja dito apenas uma vez depois da repetição que exibe os produtos. funcionou aqui!


fimpara
      escreva ("Pressione ENTER para continuar")
      leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez

 

Isso... Ai vai imprimir tudo de uma vez, e depois vai solicitar o ENTER... 

 

obs.: se atente a indentação... o código SEMPRE deve ficar indentado!!! Em relação a isso não pode haver desculpas, beleza? Se tiver dúvidas sobre indentação, dá uma pesquisada...    Uma forma de indentar automaticamente é pressionando CTRL+G.... ai a depender vai rearrumando...

Ficaria algo assim:

      escreval("Preço de CUSTO :",precosCustos[i])
      escreval("Preço de VENDA : R$:",precosVendas[i])
      escreval("------------------------------------------")
      escreval()
   fimpara
   escreva ("Pressione ENTER para continuar")
   leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez
fimProcedimento

Então, o que está DENTRO do para, fica um "dente" pra dentro. Como passou a ficar fora, as duas linhas ficam na mesma direção do para.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas

 

Criei a parte de remover um item. Bom, no enunciado pede para remover, porém eu preferi deixar para o usuário RECADASTRAR a quantidade. Você acha uma boa ideia?

 

procedimento excluir()
var
   i:inteiro
inicio
   escreval ("Digite o código do item que deseja pesquisar (ex: 57): ")
   leia (iCod)
   se (icod = coditem) então
      escreval("Código         :",coditem[i])
      escreval("Descrição      :",descricoes[coditem])
      escreval("Quantidade     :",quantidades[coditem])
      escreval ("Digite a quantidade correta que possui no estoque:")
      leia (remov)
         j:= remov
      escreval ("Pronto, agora o produto ",coditem[i]," possui ",j," unidades")
      leia(opc)
   senao
      se (icod <> coditem) então
         escreval ("Este código ainda não foi cadastrado")
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
   quantidades[coditem]:= j  //FUNÇÃO ESSENCIAL, salva a quantidade!!!
fimprocedimento

 

Confira a indentação também, fiz manual. Deixei de um jeito que eu estou entendendo.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

Sobre:

15 minutos atrás, Niê disse:

Criei a parte de remover um item. Bom, no enunciado pede para remover, porém eu preferi deixar para o usuário RECADASTRAR a quantidade. Você acha uma boa ideia?

 

Você tem que fazer o que enunciado pede...

 

Pelo que eu vi tem:

Em 05/06/2018 às 11:16, Niê disse:

 Retirar item do estoque

  • Retira quantidade do item selecionado

 

No caso, seria solicita a quantidade de que deseja retirar. Ai subtrai da quantidade já cadastrada.

 

 

Qual o enunciado completo do problema?

Link para o comentário
Compartilhar em outros sites

algoritmo "ESTOQUE"
// Estoque
//     Cadastro de item no estoque
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Cadastro de combo promocional
//        Descrição / Quantidade / Preço de custo / Preço de venda
//     Retirar item do estoque
//        Retira quantidade do item selecionado
//     Relatório de itens no estoque.
//        Todos os itens
var
   //dados do produto (cada vetor é um atributo)
   descricoes  :vetor [1..1000] de caractere
   quantidades :vetor [1..1000] de inteiro
   precosCustos:vetor [1..1000] de real
   precosVendas:vetor [1..1000] de real
   //Vetores do estoque
   codItem  :inteiro    //código do produto (gerado em sequência)
   opc,opc2 :caractere  //usado para selecionar opções
   fimcad   :real       //usado para acompanhar a exibição do ultimo cadastro
   icod     :inteiro    //usado para ler o código do menu excluir
   acresc   :inteiro    //usado para recadastrar a quantidade de itens
   j        :inteiro    //usado como pombo correio, para passar a quantidade para outra variável
procedimento cadastro_item //Procedimento para cadastrar produtos no estoque
inicio

   codItem <- codItem+1
   escreval("**  Cadastro de produto  **")
   escreva ("Descrição      :")
   leia(descricoes[codItem])
   escreval()
   escreval("*Todas as opções abaixo devem ser digitadas em forma de números*")
   escreval("Ex: 150")
   escreval()
   escreva ("Quantidade     :")
   leia(quantidades[codItem])
   escreva ("Preço de CUSTO R$:")
   escreva("")
   leia (precosCustos[codItem])
   escreva ("Preço de VENDA R$:")
   leia (precosVendas[codItem])
   //Abaixo irá mostrar o último produto cadastrado
   escreval()
   escreval()
   escreval("Você cadastrou  ",descricoes[coditem])
   escreval ("Quantidade     :",quantidades[coditem])
   escreval ("Custo          :",precosCustos[coditem])
   escreval ("Preço        R$:",precosVendas[coditem])
   escreval ("Tecle enter para retornar ao menu.")
   leia(opc)
fimProcedimento




procedimento imprimir_produtos()//Prodedimento para imprimir os produtos cadastrados
var
   i :inteiro
inicio
   escreval("Você possui no estoque os seguintes itens: ")
   para i de 1 ate codItem faca //do primeiro até a quantidade já cadastrada
      escreval()
      escreval("Código         :",i)
      escreval("Descrição      : ",descricoes[i])
      escreval("Quantidade     :",quantidades[i])
      escreval("Preço de CUSTO :",precosCustos[i])
      escreval("Preço de VENDA : R$:",precosVendas[i])
      escreval("------------------------------------------")
      escreval()
   fimpara
   escreva ("Pressione ENTER para voltar ao menu")
   leia(opc)  //apenas para aguardar até que pressioner ENTER. Imprimir um de cada vez
fimProcedimento




procedimento editar()
var
   i:inteiro
inicio
   escreval ("Digite o código do item que deseja pesquisar (ex: 57): ")
   escreval ("Lembre-se, todos os números devem ser por e")
   leia (icod)
   se (icod = coditem) então
      escreval("Código         :",coditem[i])
      escreval("Descrição      :",descricoes[coditem])
      escreval("Quantidade     :",quantidades[coditem])
      escreval ("Digite a quantidade correta que possui no estoque, ou")
      escreval ("caso não queira modificar, digite a quantidade atual.")
      leia (acresc)
         j:= acresc
      escreval ("O produto ",coditem[i]," possui ",j," unidades")
      leia(opc)
    senao
      se (icod <> coditem) então
         escreval ("Este código ainda não foi cadastrado")
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
   quantidades[coditem]:= j  //FUNÇÃO ESSENCIAL, salva a quantidade!!!
fimprocedimento




procedimento menu()
inicio
   repita
      limpaTela
      escreval("--------ESTOQUE - PDV--------")
      escreval()
      escreval("    1-Cadastro de Item       ")
      escreval("    2-Pesquisar/Editar Quantidade  ")
      escreval("    3-EM CONSTRUÇÃO          ")
      escreval("    5-Sair                   ")
      escreval()
      escreval("       0-*Imprimir produtos  ")
      escreval()
      escreval("Possuem atualmente",codItem," produtos")
      escreval("   cadastrados no estoque!")
      escreval("-------------------------------")
      leia(opc)
      escolha (opc)
      caso "1"
         limpaTela
         cadastro_item() //qdn esse método é invocado, ao finalizar, o programa vai continuar daqui...
      caso "2"
         limpaTela
         editar()
      caso "0"
         limpaTela
         imprimir_produtos()





      fimEscolha
   ate opc="5"
fimProcedimento




INICIO
   codItem <- 0  //inicializa o controlador de código
   menu()
FIMALGORITMO

 

9 minutos atrás, Simon Viegas disse:

O "excluir" está funcionando?

 

Então, como modifiquei o excluir pra editar a quantidade, não é mais excluir. auhauhah

 

Mas sim! Está funcionando. Testa aí. Mas testa no visualg 3.0, no 2,0 está bugando para imprimir o código do produto.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

 

1#

Sobre:

37 minutos atrás, Niê disse:

procedimento editar()
var
   i:inteiro
inicio
   escreval ("Digite o código do item que deseja pesquisar (ex: 57): ")
   escreval ("Lembre-se, todos os números devem ser por e")
   leia (icod)
   se (icod = coditem) ENTÃO
      escreval("Código         :",coditem[i])
      escreval("Descrição      :",descricoes[coditem])
      escreval("Quantidade     :",quantidades[coditem])
      escreval ("Digite a quantidade correta que possui no estoque, ou")
      escreval ("caso não queira modificar, digite a quantidade atual.")
      leia (acresc)
      j:= acresc
      escreval ("O produto ",coditem[i]," possui ",j," unidades")
      leia(opc)
   senao
      se (icod <> coditem) ENTÃO
         escreval ("Este código ainda não foi cadastrado")
         escreval("Pressione ENTER para voltar ao menu")
         leia (opc)
      fimse
   fimse
   quantidades[coditem]:= j  //FUNÇÃO ESSENCIAL, salva a quantidade!!!
fimprocedimento

 

Como funciona essa pesquisa? como você faz para localizar o o produto a ser alterado?

 

Por exemplo, tem:

37 minutos atrás, Niê disse:

   se (icod = coditem) ENTÃO

 

O icod foi lido agora, mas qual o valor de coditem nesse momento? porque está comparando uma com o outro?

 

 

 

2#

Não vejo utilidade no treco abaixo... apenas está poluindo a tela... remova isso.

37 minutos atrás, Niê disse:

   escreval()
   escreval("*Todas as opções abaixo devem ser digitadas em forma de números*")
   escreval("Ex: 150")
   escreval()

 

 

 

 

***

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...