Problema

Gestão de existências

1  Objectivos

O objectivo deste problema é desenvolver um pequeno programa de gestão de inventários.

2  Descrição do problema

Considere o problema de gestão de existências numa empresa.  Nos armazéns da empresa dão entrada lotes de um determinado produto.  Cada lote identifica claramente o produto a que diz respeito, a quantidade de unidades do produto nesse lote e o valor unitário do produto nesse lote (ou seja, o valor de cada unidade do lote).  Um lote de um produto é registado nas existências quando chega ao armazém da empresa.  Quando ocorrem saídas de produtos do armazém altera-se o registo das existências de acordo com a quantidade de produto que saiu do armazém.  

A ordem de saída dos produtos do armazém respeita a sua ordem de chegada. Ou seja, começa-se por retirar os produtos do primeiro lote desse produto que tiver dado entrada, continuando-se pelos lotes seguintes (do mesmo produto) até se ter a quantidade pretendida.  O valor de uma saída é calculado somando as multiplicações das quantidade saídas de cada lote pelo valor unitário do produto nesse lote.  O valor das existências é calculado somando as multiplicações das quantidades de cada lote existente pelo valor unitário do produto nesse lote.

3  Resolução

3.1  Requisitos funcionais

O programa implementado deverá ter uma interface com o utilizador exactamente igual à descrita nesta secção.

O programa deverá mostrar o menu

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

no ecrã, permitindo assim ao utilizador escolher entre as operações possíveis.  Quando a opção 0 for escolhida o programa terminará.

Se a opção 1 for escolhida, o programa deve perguntar qual o nome do produto, a quantidade e o valor unitário, e adicionar às existências o lote constituído por essa informação.

Se a opção 2 for escolhida, o programa deve perguntar qual o nome do produto e a quantidade que irá sair do armazém.  Se o produto não existir, o programa deve avisar o utilizador.  Se o produto não existir em quantidade suficiente o programa deve também avisar o utilizador.  Se não ocorrer nenhuma destas situações, o programa deve mostrar o valor da saída e realizá-la (i.e., registar a saída nas existências).

Se for escolhida a opção 3, deve ser exibido no ecrã o valor actual das existências.  Caso seja escolhida a opção 4, exibem-se as existências actuais.

Exemplo de execução (em itálico as entradas do utilizador do programa)::

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 1

Nome do produto: batata
Quantidade: 100
Valor unitário: 0.7

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 4

Nome do produto: batata
Quantidade: 100
Valor unitário: 0.7

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 1

Nome do produto: cebola
Quantidade: 50
Valor unitário: 0.85

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 1

Nome do produto: batata
Quantidade: 100
Valor unitário: 0.5

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 4

Nome do produto: batata
Quantidade: 100
Valor unitário: 0.7

Nome do produto: cebola
Quantidade: 50
Valor unitário: 0.85

Nome do produto: batata
Quantidade: 100
Valor unitário: 0.5

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 2

Nome do produto: banana
Quantidade: 20

O produto banana não existe.

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 2

Nome do produto: batata
Quantidade: 2000

O produto batata não existe em quantidade suficiente.

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 2

Nome do produto: batata
Quantidade: 150

O valor da saída é 95.

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 4

Nome do produto: cebola
Quantidade: 50
Valor unitário: 0.85

Nome do produto: batata
Quantidade: 50
Valor unitário: 0.5

1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências

4 - Mostra existências

0 - Terminar

Opção: 3

O valor das existências é 67.5.

Etc.

Os casos omissos neste enunciado deverão ser esclarecidos junto de um dos docentes da disciplina.

3.2  Requisitos de implementação

A resolução deste problema deverá recorrer a classes C++, a modularização física, e a pacotes (espaços nominativos) sempre que apropriado.  Em particular deverão existir as classes Lote, Existências e GestorDeExistências.  Cada uma destas classes deve corresponder a um diferente módulo físico.  Deverá ainda existir um módulo físico à parte para a função main().  Todas as classes e respectivas operações e todas as rotinas deverão ser devidamente documentadas (incluindo invariantes, para as classes, e pré-condições e condições objectivo, para as operações e rotinas).  As pré-condições e condições objectivo devem ser verificadas tanto quanto possível usando instruções de asserção.

4  Resolução e entrega