O objectivo deste projeto é o desenvolvimento, em linguagem C, de um sistema de logística. A interacção com o programa deverá ocorrer através de um conjunto de linhas compostas por uma letra (comando) e um número de argumentos dependente do comando a executar. Os possíveis comandos são listados na Tabela seguinte e indicam as operações a executar.
| Comando | Acção |
|---|---|
| a | adiciona um novo produto ao sistema |
| q | adiciona stock a um produto existente no sistema |
| N | cria uma nova encomenda |
| A | adiciona um produto a uma encomenda |
| r | remove stock a um produto existente |
| R | remove um produto de uma encomenda |
| C | calcula o custo de uma encomenda |
| p | altera o preço de um produto existente no sistema |
| E | retorna a descrição e a quantidade de um produto numa dada encomenda |
| m | retorna o identificador da encomenda em que um dado produto ocorre mais vezes |
| l | lista todos os produtos existentes no sistema por ordem crescente de preço |
| L | lista todos os produtos de uma encomenda por ordem alfabética da descrição |
| x | termina o programa |
O programa deverá ler os dados de entrada a partir da linha de comandos e do terminal.
Durante a execução do programa as instruções devem ser lidas do terminal (standard input) na forma de um conjunto de linhas iniciadas por um carácter, que se passa a designar por comando, seguido de um número de informações dependente do comando a executar; o comando e cada uma das informações são separados pelo caracter ':'.
Os comandos disponíveis são descritos de seguida. Cada comando indica uma determinada acção que se passa a caracterizar em termos de formato de entrada, formato de saída, e erros a retornar. Se o comando gerar mais do que um erro, deverá ser indicado apenas o primeiro.
- a - adiciona um novo produto ao sistema
- Formato de entrada:
a descricao:preco:peso:qtd - Formato de saída:
Novo produto <idp>.onde<idp>é o identificador do produto criado.
- Formato de entrada:
- q - adiciona stock a um produto existente no sistema
- Formato de entrada:
q idp:qtd - Formato de saída: NADA (excepto erro)
- Erros:
Impossivel adicionar produto <idp> ao stock. Produto inexistente.no caso de não existir nenhum produto criado com esse identificador
- Formato de entrada:
- N - cria uma nova encomenda
- Formato de entrada:
N - Formato de saída:
Nova encomenda <ide>.onde<ide>é o identificador da encomenda criada.
- Formato de entrada:
- A - adiciona um produto a uma encomenda. Se o produto já existir na encomenda, adiciona a nova quantidade à quantidade existente
- Formato de entrada:
A ide:idp:qtd - Formato de saída: NADA (excepto erro)
- Erros:
Impossivel adicionar produto <idp> a encomenda <ide>. Encomenda inexistente.no caso de não existir nenhuma encomenda criada com esse identificadorImpossivel adicionar produto <idp> a encomenda <ide>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificadorImpossivel adicionar produto <idp> a encomenda <ide>. Quantidade em stock insuficiente.no caso de não existir stock suficiente desse produto para satisfazer a encomendaImpossivel adicionar produto <idp> a encomenda <ide>. Peso da encomenda excede o maximo de 200.no caso de a adição desse produto exceder o peso máximo permitido por encomenda
- Formato de entrada:
- r - remove stock a um produto existente
- Formato de entrada:
r idp:qtd - Formato de saída: NADA (excepto erro)
- Erros:
Impossivel remover stock do produto <idp>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificadorImpossivel remover <qtd> unidades do produto <idp> do stock. Quantidade insuficiente.no caso de a quantidade de stock restante após a remoção ser negativa
- Formato de entrada:
- R - remove um produto de uma encomenda
- Formato de entrada:
R ide:idp - Formato de saída: NADA (excepto erro)
- Erros:
Impossivel remover produto <idp> a encomenda <ide>. Encomenda inexistente.no caso de não existir nenhuma encomenda criada com esse identificadorImpossivel remover produto <idp> a encomenda <ide>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificador
- Formato de entrada:
- C - calcula o custo de uma encomenda
- Formato de entrada:
C ide - Formato de saída:
Custo da encomenda <ide> <total>.onde<total>é o valor total da encomenda<ide> - Erros:
Impossivel calcular custo da encomenda <ide>. Encomenda inexistente.no caso de não existir nenhuma encomenda criada com esse identificador
- Formato de entrada:
- p - altera o preço de um produto existente no sistema
- Formato de entrada:
p idp:preco - Formato de saída: NADA (excepto erro)
- Erros:
Impossivel alterar preco do produto <idp>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificador
- Formato de entrada:
- E - lista a descrição e a quantidade de um produto numa encomenda
- Formato de entrada:
E ide:idp - Formato de saída:
<desc> <qtd>.onde<desc>é a descrição do produto<idp>e<qtd>é a quantidade desse produto na encomenda<ide> - Erros:
Impossivel listar encomenda <ide>. Encomenda inexistente.no caso de não existir nenhuma encomenda criada com esse identificadorImpossivel listar produto <idp>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificador
- Formato de entrada:
- m - lista o identificador da encomenda em que o produto dado ocorre mais vezes. Se houver 2 ou mais encomendas nessa situação, deverá imprimir a encomenda de menor
id.- Formato de entrada:
m idp - Formato de saída:
Maximo produto <idp> <ide> <qtd>.onde<ide>é o número da encomenda em que<idp>ocorre mais vezes, sendo essa quantidade<qtd>- Não deverá listar nada caso o produto
<idp>não ocorra em nenhuma encomenda, ou caso não haja encomendas
- Erros:
Impossivel listar maximo do produto <idp>. Produto inexistente.no caso de não existir nenhum produto criado com esse identificador
- Formato de entrada:
- l - lista todos os produtos existentes no sistema por ordem crescente de preço. Se houver 2 ou mais produtos com o mesmo preço, deverá imprimir esses por ordem crescente de
idde produto-
Formato de entrada:
l -
Formato de saída: Um bloco no formato abaixo, e em que os produtos são listados por ordem crescente de preço
Produtos * <desc1> <preco1> <qtd1 em stock> * <desc2> <preco2> <qtd2 em stock> ... * <descn> <precon> <qtdn em stock> -
Erros: Não aplicável
-
- L - lista todos os produtos de uma encomenda por ordem alfabética da descrição
-
Formato de entrada:
L <ide> -
Formato de saída: Um bloco no formato abaixo, e em que os produtos são listados por ordem alfabética de descrição
Encomenda <ide> * <desc1> <preco1> <qtd1 na ide> * <desc2> <preco2> <qtd2 na ide> ... * <descn> <precon> <qtdn na ide> -
Erros:
Impossivel listar encomenda <ide>. Encomenda inexistente.no caso de não existir nenhuma encomenda criada com esse identificador
-
- x - termina o programa
- Formato de entrada:
x - Formato de saída: NADA
- Formato de entrada: