O objectivo deste problema é desenvolver um pequeno programa de gestão de inventários.
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.
O programa implementado deverá ter uma interface com o utilizador exactamente igual à descrita nesta secção.
O programa deverá mostrar o menu
no ecrã, permitindo assim ao utilizador escolher entre as operações possíveis. Quando a opção 0 for escolhida o programa terminará.
1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências4 - Mostra existências
0 - 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)::
Os casos omissos neste enunciado deverão ser esclarecidos junto de um dos docentes da disciplina.
1 - Entrada de lote
2 - Saída de produto
3 - Valor das existências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - 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ências4 - Mostra existências
0 - Terminar
Opção: 3
O valor das existências é 67.5.
Etc.
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.
Makefile
). Não é
necessário entregar qualquer relatório. Deve também enviar uma
mensagem de correio electrónico claramente identificada (número do grupo e
constituição) com os ficheiros fonte
(.H
, .C
e _impl.H
, caso existam) para Ana.Violante@iscte.pt
(grupos de IGE) ou para Ricardo.Ribeiro@iscte.pt
(grupos de ETI). Grupos mistos poderão enviar a mensagem para qualquer
dos dois endereços (mas paenas para um deles).