|
| 1 | +# Desafio – Livraria Virtual |
| 2 | + |
| 3 | +## 1. Introdução |
| 4 | +Este projeto consiste em implementar um sistema de gerenciamento de uma livraria virtual, explorando os conceitos de composição, herança e polimorfismo. O sistema deve seguir o diagrama de classes UML mostrado abaixo, onde os construtores e os métodos de acesso (getters e setters) foram omitidos: |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +## 2. Descrição do Sistema |
| 9 | +O sistema deverá ser baseado em um menu, com entrada de dados via console, contendo as seguintes opções: |
| 10 | + |
| 11 | +- **Cadastrar livro**: Esta opção permite ao usuário cadastrar um livro. |
| 12 | +- **Realizar uma venda**: Esta opção permite ao usuário realizar a venda de um ou mais livros. |
| 13 | +- **Listar livros**: O sistema deverá listar todos os livros cadastrados, sejam eles eletrônicos ou impressos. |
| 14 | +- **Listar vendas**: O sistema deverá listar todas as vendas realizadas. |
| 15 | +- **Sair do programa**: Encerra a execução do programa. |
| 16 | + |
| 17 | +## 3. Descrição das Classes |
| 18 | +A seguir, são descritas as classes do sistema. |
| 19 | + |
| 20 | +### 3.1 Livro |
| 21 | +A classe abstrata `Livro` possui 4 atributos: |
| 22 | + |
| 23 | +- `titulo`: título do livro; |
| 24 | +- `autores`: nome do autor ou dos autores do livro; |
| 25 | +- `editora`: nome da editora do livro; |
| 26 | +- `preco`: preço do livro. |
| 27 | + |
| 28 | +Os métodos de acesso (getters e setters) e o(s) construtor(es) desta classe e das demais classes foram omitidos e devem ser implementados, mesmo que você não os julgue necessário. O outro método obrigatório da classe `Livro` é descrito a seguir: |
| 29 | + |
| 30 | +- `String toString()`: devolve uma representação textual dos atributos de um livro. |
| 31 | + |
| 32 | +### 3.2 Impresso |
| 33 | +A classe `Impresso` representa um livro impresso e possui 2 atributos: |
| 34 | + |
| 35 | +- `frete`: frete cobrado para entrega do livro; |
| 36 | +- `estoque`: número de exemplares do livro em estoque. |
| 37 | + |
| 38 | +A seguir, são descritos os métodos da classe `Impresso`: |
| 39 | + |
| 40 | +- `void atualizarEstoque()`: este método deve subtrair 1 do valor do atributo `estoque`; |
| 41 | +- `String toString()`: este método devolve uma representação textual de todos os atributos de um livro impresso. |
| 42 | + |
| 43 | +### 3.3 Eletronico |
| 44 | +A classe `Eletronico` representa um livro eletrônico e possui 1 atributo: |
| 45 | + |
| 46 | +- `tamanho`: representa o tamanho do arquivo eletrônico do livro em KB. |
| 47 | + |
| 48 | +A seguir, é descrito mais um método obrigatório da classe `Eletronico`: |
| 49 | + |
| 50 | +- `String toString()`: este método devolve uma representação textual de todos os atributos de um livro eletrônico. |
| 51 | + |
| 52 | +### 3.4 Venda |
| 53 | +A classe `Venda` possui 5 atributos: |
| 54 | + |
| 55 | +- `livros`: um vetor de referências a objetos do tipo `Livro`, representando os livros associados a uma venda; |
| 56 | +- `numVendas`: atributo estático que representa a quantidade de vendas realizadas. Deve ser incrementado de 1 sempre que uma nova venda for realizada; |
| 57 | +- `numero`: representa o número da venda, sendo um valor sequencial com início em 1, que é incrementado a cada venda. Utilize o valor do atributo `numVendas` para definir o valor desse atributo; |
| 58 | +- `cliente`: nome do cliente que comprou o(s) livro(s); |
| 59 | +- `valor`: valor total da venda. |
| 60 | + |
| 61 | +A seguir, são descritos os métodos da classe `Venda`: |
| 62 | + |
| 63 | +- `addLivro(l: Livro, index: int)`: adiciona o livro `l` na posição `index` do array `livros`; |
| 64 | +- `listarLivros()`: lista todos os livros da venda. |
| 65 | + |
| 66 | +### 3.5 LivrariaVirtual |
| 67 | +A classe `LivrariaVirtual` possui 9 atributos: |
| 68 | + |
| 69 | +- `MAX_IMPRESSOS`: constante que representa o número máximo de livros impressos que podem ser cadastrados; |
| 70 | +- `MAX_ELETRONICOS`: constante que representa o número máximo de livros eletrônicos que podem ser cadastrados; |
| 71 | +- `MAX_VENDAS`: constante que representa o número máximo de vendas que podem ser cadastradas; |
| 72 | +- `impressos`: vetor de referências a objetos da classe `Impresso`, representando os livros impressos cadastrados; |
| 73 | +- `eletronicos`: vetor de referências a objetos da classe `Eletronico`, representando os livros eletrônicos cadastrados; |
| 74 | +- `vendas`: vetor de referências a objetos da classe `Venda`, representando as vendas realizadas; |
| 75 | +- `numImpressos`: número de livros impressos cadastrados; |
| 76 | +- `numEletronicos`: número de livros eletrônicos cadastrados; |
| 77 | +- `numVendas`: número de vendas realizadas. |
| 78 | + |
| 79 | +A seguir, são descritos os métodos da classe `LivrariaVirtual`: |
| 80 | + |
| 81 | +- `cadastrarLivro()`: Este método é invocado quando a primeira opção do menu do sistema (Cadastrar livro) for selecionada. O usuário deve informar o tipo de livro que será cadastrado: impresso, eletrônico ou ambos. Depois, o sistema deve solicitar os dados do tipo de livro escolhido (ou de ambos). Se não houver mais espaço no vetor para cadastrar um novo livro, o sistema deve exibir uma mensagem. |
| 82 | +- `realizarVenda()`: Este método é invocado quando a segunda opção do menu do sistema (Realizar uma venda) é selecionada. O sistema deve solicitar o nome do cliente e a quantidade de livros que ele deseja comprar. Depois, para cada livro, o sistema deve solicitar seu tipo (impresso ou eletrônico), exibir a lista de livros do tipo escolhido e permitir que o usuário escolha um dos livros dessa lista. Utilize os métodos `listarLivrosImpressos()` e `listarLivrosEletronicos()` descritos a seguir. |
| 83 | +- `listarLivrosImpressos()`: Exibe no vídeo, no formato de tabela, os dados de todos os livros impressos cadastrados. Utilize o método `toString()` da classe `Impresso`. |
| 84 | +- `listarLivrosEletronicos()`: Exibe no vídeo, no formato de tabela, os dados de todos os livros eletrônicos cadastrados. Utilize o método `toString()` da classe `Eletronico`. |
| 85 | +- `listarLivros()`: Este método é invocado quando a terceira opção do menu do sistema (Listar livros) é selecionada. O método exibe no vídeo os dados de todos os livros impressos e eletrônicos cadastrados. Utilize os métodos `listarLivrosImpressos()` e `listarLivrosEletronicos()`. |
| 86 | +- `listarVendas()`: Este método é invocado quando a quarta opção do menu do sistema (Listar vendas) é selecionada. O método exibe no vídeo os dados de todas as vendas realizadas. |
| 87 | +- `main(args: String[])`: Este método deve instanciar um objeto da classe `LivrariaVirtual`, exibir repetidamente o menu de opções e invocar os métodos apropriados a partir da seleção do usuário. |
| 88 | + |
| 89 | +## Observações |
| 90 | +- Os fontes da aplicação devem ser enviados para o GitHub até a data de entrega do projeto; |
| 91 | +- Critérios de avaliação: Utilizar banco de dados para inserir os pedidos será um diferencial. |
| 92 | + |
| 93 | +**Corretude:** 70% |
| 94 | +**Interface:** 20% |
| 95 | +**Legibilidade:** 10% |
0 commit comments