Você está na página 1de 4

Fernanda D. V. R. Oliveira Comp I - 2021.1 Gustavo M. S.

Nunes

Trabalho de Comp I
Tema: Reservas de Hotel

Sua tarefa é implementar um sistema que permite realizar reserva de quar-


tos de um hotel. Considere que o hotel apresenta três andares, e que existem
doze quartos por andar. Os quartos se dividem em dois tipos: solteiro e casal.
Quartos de casal apresentam apenas uma cama de casal, mas os quartos de
solteiro podem ter uma, duas ou três camas. O preço da diária depende do tipo
de quarto e da quantidade de camas, mas você deve escolher como os preços
variam. Por simplicidade, em cada andar, assuma que: i) os quartos de número
1, 3 e 9 possuem camas de casal; ii) os quartos de número 2, 5 e 11 possuem
uma cama de solteiro; iii) os quartos de número 4, 7, e 12 possuem duas camas
de solteiro; e iv) os quartos de número 6, 8 e 10 possuem três camas de solteiro.
As reservas só podem ser feitas, no máximo, com dois meses de antecedência,
contando a partir do dia atual (ou seja, o programa não deve permitir que um
usuário faça uma reserva para uma data posterior a dois meses a partir do dia
atual). Cada reserva é definida pelas seguintes informações: nome e CPF da
pessoa; andar e número do quarto reservados; e data de check-in (data que a
pessoa chegará no hotel) e a data de checkout (data que a pessoa entregará o
quarto do hotel).
Ao iniciar o programa, o programa deve carregar automaticamente todas
as informações previamente salvas de reservas e hóspedes de um arquivo (caso
haja). As informações de reserva e hóspedes, após serem carregadas, devem
ficar guardadas em uma lista de listas (ou tupla de tuplas, ou dicionário de
listas, ou lista de dicionários). Cada sublista deve conter todas as informações
de uma reserva, com, no mı́nimo, nome do hóspede responsável, CPF, andar,
quarto, data de checkin e data de checkout (se o hóspede tiver consumido algum
produto, isso também deverá ser incluı́do nessa variável). Um menu com as
seguintes opções deverá ser exibido ao usuário: “1 - Reservar quarto”, “2 -
Cancelar reserva”, “3 - Listar hóspedes”, “4 - Listar produtos”, “5 - Comprar
produtos”, “6 - Fazer Checkout”, e “0 - Sair”.
Se o usuário escolher a opção 1 do menu principal, então o programa deve
perguntar o dia, o mês e o ano para o qual ele deseja fazer a reserva. Após
o usuário fornecer essas informações, o programa deve verificar, primeiro, se
a data fornecida está dentro do intervalo de dois meses que é aceito. Se não
estiver dentro desse intervalo, o programa deve informar ao usuário que não
é possı́vel realizar reservas com mais de dois meses de antecedência. Datas
passadas também não são válidas, é claro. Se a data estiver dentro do intervalo,
então o programa deverá perguntar em qual andar o usuário deseja fazer a
reserva. Assim que um andar válido for digitado, o programa deverá exibir um
mapa indicando os quartos e a ocupação deles para a data desejada. Um exemplo

DEL - POLI - UFRJ 1


Fernanda D. V. R. Oliveira Comp I - 2021.1 Gustavo M. S. Nunes

Figura 1: Exibição de um andar do hotel, onde ‘x’ representa um quarto deso-


cupado, e o número acima do ‘x’ é o número do quarto.

de como o mapa pode ser desenhado é mostrado na Figura 1. Ao exibir o mapa,


indique os quartos que estão ocupados com um caractere diferente do caractere
que indica o quarto disponı́vel. Por exemplo, na Figura 1 o ‘x’ representa um
quarto desocupado
Em seguida, 2 opções devem ser exibidas: “1 - Escolher quarto” ou “2 -
Trocar de andar”. Caso o usuário escolha a opção 1, o programa deve pedir
para o usuário digitar um número de quarto, conforme indicado no mapa. Se
o quarto em questão estiver ocupado, o programa deverá informar ao usuário
que o quarto escolhido não estará vago na data fornecida, e retornar ao menu
do andar. Caso esteja desocupado, então ele deverá pedir ao usuário o nome e o
CPF da pessoa fazendo a reserva, e a data de checkout. Se o usuário optar por
trocar de andar, então o programa deverá mostrar o mapa do andar digitado
pelo usuário (além de exibir o menu do andar).
Se o usuário escolher a opção 2 do menu principal, então o programa deverá
perguntar o CPF da pessoa que fez a reserva, e informar a quantidade de reser-
vas ainda ativas encontradas para aquela pessoa, e as informações pertinentes
sobre aquela reserva (data de check-in, quarto reservado, entre outras), para
que a pessoa possa consultá-las. Note que o programa não deve listar reservas
passadas, e sim, apenas as reservas de datas futuras, que são as reservas ativas.
Então, se reservas forem encontradas, o usuário deverá especificar qual reserva
ele deseja cancelar.
Se o usuário escolher a opção 3 do menu principal, então o programa deverá
listar todos os quartos atualmente ocupados no hotel, segundo o formato abaixo:

DEL - POLI - UFRJ 2


Fernanda D. V. R. Oliveira Comp I - 2021.1 Gustavo M. S. Nunes

Andar 1:
Nome Quarto Diárias acumuladas
Hóspede 1 Número do quarto Valor 1
Hóspede 2 Número do quarto Valor 2

Andar 2:

Andar 3:
Nome Quarto Diárias acumuladas
Hóspede 3 Número do quarto Valor 3
Hóspede 4 Número do quarto Valor 4
Hóspede 5 Número do quarto Valor 5

A coluna “Diárias acumuladas” deve exibir o valor total da conta do hóspede,


considerando apenas o valor das diárias contadas a partir da data do check-in
até a data atual no quarto em questão. Caso não exista hóspedes em um de-
terminado andar, o programa lista apenas uma linha em branco, como indicado
acima. Após exibir a listagem, o programa deve retornar ao menu principal.
Se o usuário digitar a opção 4 no menu principal, então o programa deverá
exibir uma lista com, pelo menos, três produtos fornecidos pelo hotel (água,
refrigerante e salgadinho) e seus respectivos preços. Os preços são escolhidos
por vocês, e deve haver pelo menos esses três produtos.
Se o usuário digitar a opção 5 no menu principal, o programa deverá pergun-
tar em qual andar e quarto a pessoa que for fazer a compra está hospedada, e
perguntar quais produtos (e em qual quantidade de cada um) ela deseja adquirir.
Se o usuário digitar a opção 6 no menu principal, a conta do quarto em
questão deverá ser fechada, e o custo total deverá ser exibido ao usuário. O
custo total inclui o valor das diárias (levando em conta o tipo de quarto e o
tempo que ele ficou ocupado) mais quaisquer produtos do hotel que tenham
sido adquiridos para o quarto em questão. Se o usuário decidir ficar menos dias
do que havia originalmente reservado, então o preço será a soma dos valores
das diárias até o dia que ele fez o checkout mais 50% do total da soma das
diárias referentes aos dias que ele ainda teria direito de ficar no quarto (além de
produtos extras que tenha adquirido durante a hospedagem). Após o checkout
ser feito, as listas de hóspedes e de ocupação de quartos deverão ser atualizadas
correspondentemente.
Se o usuário digitar a opção 0 no menu principal, o programa deve encerrar a
execução. Entretanto, observe que, caso o programa seja rodado novamente em
um momento posterior, ele deverá lembrar todas as informações já cadastradas
referentes a reservas e aos hóspedes ao longo de diferentes execuções. Por isso,
certifiquem-se de salvar todas as informações importantes em um arquivo, antes
de encerrar a execução do programa, para que elas possam ser carregadas quando
o código for executado novamente.
Para fazer a manipulação de datas, utilize o módulo “datetime” do Python,
por exemplo, para saber o dia em que o programa está sendo executado:

DEL - POLI - UFRJ 3


Fernanda D. V. R. Oliveira Comp I - 2021.1 Gustavo M. S. Nunes

from datetime import datetime


data e hora atuais = datetime.now()

onde data e hora atuais é uma variável do tipo data que contém informações
como ano (utilizando data e hora atuais.year você tem acesso a um inteiro
com o ano), mês (com data e hora atuais.month você tem acesso a um in-
teiro com o mês), dia (com data e hora atuais.day você tem acesso a um inteiro
com o dia), e hora (com data e hora atuais.hour, data e hora atuais.minute e
data e hora atuais.second, ou ainda data e hora atuais.time). Outros métodos/funções
do módulo “timedelta” também podem ser usados. É possı́vel calcular também
a diferença entre duas variáveis do tipo datetime, por exemplo:

d1 = datetime(2022,1,13)
d2 = datetime(2022,2,20)
dif = d2-d1

onde a variável dif irá guardar uma diferença de tempo (timedelta). Para acessar
a quantidade de dias de diferença é possı́vel fazer dif.days.

DEL - POLI - UFRJ 4

Você também pode gostar