GCT052-Programação Orientada a Objetos
Professor: Dr Johnatan Alves de Oliveira
Instituto de Ciências, Tecnologia e Inovação (ICTIN)
Universidade Federal de Lavras
2024-2
Sistema de Gestão de Biblioteca
Projeto I
Pontos: 7
Data de entrega: 15/11/2024 até 23:59.
Procedimento para a entrega
1. Crie um projeto no GitHub.
2. Crie os arquivos de código-fonte necessários para a solução da questão
em JAVA
3. Cada aluno deve ter os seus commits no GitHub
4. Trabalho em Grupo de 2 pessoas
5. Compacte a pasta criada no item 1.
6. Faça a entrega do arquivo compactado no UFLA Virtual, na tarefa
destinada à prática e o link do GitHub do projeto.
7. Não utilize caracteres acentuados ou especiais para nomes de pastas
e arquivos.
8. Bom trabalho!
1
Objetivo do Projeto
Neste trabalho, você deve desenvolver um Sistema de Gestão de Biblioteca uti-
lizando conceitos de Programação Orientada a Objetos (POO) em Java. O
sistema deverá permitir o gerenciamento de livros, clientes e empréstimos, in-
cluindo o controle de prazos e aplicação de multas em caso de atrasos. O usuário
interagirá com o sistema por meio de um menu no terminal, onde poderá
realizar operações como adicionar livros, cadastrar clientes, registrar e devol-
ver empréstimos, consultar o saldo de multas e bloquear clientes que tenham
pendências.
2
Descrição do Problema
A biblioteca da universidade é amplamente utilizada por dois grupos principais
de usuários: alunos e professores. Cada grupo possui diferentes regras e limites
em relação ao uso dos serviços de empréstimo de livros. Alunos podem emprestar
até 3 livros por vez, com um prazo de devolução de 5 dias. Já os professores têm
um limite maior de até 10 livros por vez, e podem mantê-los por um perı́odo
mais longo, de 3 meses. A biblioteca possui um acervo diverso, que inclui desde
literatura cientı́fica até romances e biografias.
Para garantir que os livros estejam disponı́veis para outros usuários, a bi-
blioteca aplica multas no caso de atrasos na devolução dos exemplares. Alunos
pagam R$ 2,00 por dia de atraso, enquanto professores pagam R$ 1,00 por dia
de atraso. Caso um cliente tenha multas pendentes, o sistema deverá impedir
novos empréstimos até que todas as multas sejam quitadas.
3
Diagrama de Classes
O projeto do software deverá contemplar o diagrama de classes da solução
do problema. Esse diagrama deverá conter o relacionamento entre as classes,
métodos e atributos (principais).
Além disso, o sistema deve ser capaz de:
Gerenciar o acervo: registrando livros, controlando a quantidade de exemplares
disponı́veis e atualizando o status de empréstimos.
Controlar os clientes: permitindo o cadastro de novos clientes e moni-
torando o número de livros que cada um possui emprestado. Aplicar regras
especı́ficas para cada tipo de cliente (aluno ou professor) em relação ao número
de livros emprestados, prazos de devolução, e valores das multas. O sistema
será utilizado por funcionários da biblioteca, que, por meio de uma interface
no terminal, poderão realizar todas as operações necessárias para gerenciar os
empréstimos, devoluções e controle de multas.
O principal objetivo do sistema é garantir a eficiência e o controle sobre os
empréstimos e devoluções, evitando que livros fiquem indisponı́veis por perı́odos
longos e incentivando a devolução dentro do prazo estipulado. Além disso, o sis-
tema deve facilitar o processo de quitação de multas, garantindo que os usuários
possam regularizar suas situações de forma prática.
Regras do Sistema
1. Cadastro de Livros (1.5 pontos) Cada livro deve ter as seguintes
informações:
• Tı́tulo (String)
• Autor (String)
• Gênero (enum: Romance, Ficção, Biografia, Técnico, etc.)
• Ano de publicação (int)
• Número de exemplares disponı́veis (int)
O sistema deve permitir adicionar, remover e listar livros. A estrutura de
armazenamento dos livros pode ser uma Lista (ArrayList) para maior
flexibilidade.
2. Cadastro de Clientes (1.5 pontos) Clientes podem ser divididos em
duas categorias:
• Aluno: Pode pegar até 3 livros e mantê-los por até 5 dias.
• Professor: Pode pegar até 10 livros e mantê-los por até 3 meses.
Cada cliente deve ter:
• Nome (String)
4
• CPF (String)
• Tipo de Cliente (enum: Aluno ou Professor)
• Livros emprestados (lista de livros, com tamanho máximo depen-
dendo da categoria)
• Multa pendente (double)
Utilize uma Lista para armazenar os livros emprestados pelos clientes.
3. Empréstimo de Livros (2.0 pontos) O sistema deve permitir que um
cliente faça o empréstimo de livros:
• Verificar o limite de livros permitido para a categoria do cliente (3
para alunos, 10 para professores).
• Impedir empréstimos caso o cliente tenha multas pendentes.
• Definir a data de devolução de acordo com a categoria (5 dias para
alunos e 3 meses para professores).
• Atualizar o número de exemplares disponı́veis no catálogo.
4. Devolução de Livros e Multas (2.0 pontos) O sistema deve permitir
a devolução de livros e calcular multas no caso de devoluções atrasadas:
• Para alunos: multa de R$ 2,00 por dia de atraso.
• Para professores: multa de R$ 1,00 por dia de atraso.
O sistema deve calcular o atraso comparando a data de devolução com a
data atual. Se houver atraso, a multa será adicionada ao saldo do cliente,
e ele não poderá realizar novos empréstimos até que a multa seja paga.
5. Pagamento de Multas (1.0 ponto) O cliente deve poder consultar e
pagar o saldo de multas pendentes. Novos empréstimos só serão permitidos
após o pagamento total da multa.
6. Listagem de Livros e Clientes (1.0 ponto) O sistema deve listar:
• Todos os livros cadastrados no sistema, com detalhes como tı́tulo,
autor e número de exemplares disponı́veis.
• Todos os clientes, incluindo os livros atualmente emprestados e o
saldo de multas.
7. Pesquisa de Livros (1.0 ponto) O sistema deve permitir a busca por
livros no catálogo, utilizando o tı́tulo ou autor.
5
Requisitos Técnicos
• POO – Classes e Herança: Crie a classe Livro para representar os
livros. Crie uma classe Cliente, com subclasses Aluno e Professor,
que implementem as regras especı́ficas de limite de livros e prazos de de-
volução. A classe Biblioteca será responsável por gerenciar clientes,
livros, empréstimos e multas. A classe BibliotecaApp conterá o método
main e o menu interativo.
• Enums: O atributo G^ enero deve ser representado por um enum. O tipo
de cliente (Aluno ou Professor) também será representado por um enum.
• Listas e Vetores: Use Listas (ArrayList) para armazenar os livros e
clientes, assim como os livros emprestados por cada cliente.
• Data e Hora: Utilize LocalDate para gerenciar as datas de empréstimo
e devolução.
Interface
O sistema deve ter um menu interativo no terminal com as seguintes opções:
1. Cadastrar Livro
2. Cadastrar Cliente
3. Realizar Empréstimo
4. Realizar Devolução
5. Consultar Multas
6. Pagar Multa
7. Listar Livros
8. Listar Clientes
9. Pesquisar Livro por Tı́tulo ou Autor
10. Sair
Avaliação
• Implementação correta das classes e funcionalidades (4.0 pontos)
• Funcionamento adequado do menu e interações (2.0 pontos)
• Tratamento correto de exceções e cálculo de multas (2.0 pontos)
• Uso adequado de listas, herança, enum e métodos construtores (2.0 pontos)
6
Imaginação
O aluno pode usar sua imaginação para melhorar a forma de resolver o problema,
desde que atenda aos requisitos.