O objectivo deste problema é desenvolver um pequeno programa de gestão de reservas para aluguer de automóveis.
Pretende-se implementar, em C++, uma aplicação simples para apoio à gestão de uma agência de aluguer de automóveis. Entre as tarefas passíveis de realização contam-se o registo de novos veículos na frota da agência e a reserva de veículos da frota por parte dos clientes.
Para registar um novo veículo na frota, fornece-se a matrícula, a marca, o modelo, a tarifa diária e a tarifa de fim de semana. As tarifas devem admitir possibilidade de alteração.
Uma reserva efectua-se fornecendo a matrícula de um veículo da frota e as datas de início e de fim da reserva (ambas inclusive). Em seguida, o programa deve mostrar o preço total do aluguer e perguntar ao utilizador se o cliente confirma a reserva. Caso o cliente confirme, devem ser introduzidos o nome do cliente, o tipo de identificação usado pelo cliente e respectivo número do documento de identificação. É necessário verificar se uma nova reserva para um dado veículo se sobrepõe, ou não, a uma reserva já registada, e, se for o caso, essa tentativa de nova reserva deve ser terminada com o aparecimento de um diagnóstico de erro no ecrã. O preço de uma reserva cuja data de início é uma sexta-feira e cuja data de fim é a segunda-feira seguinte é igual à tarifa de fim-de-semana. Nos restantes casos o preço é calculado com base na tarifa diária e no número de dias existentes entre a data de início e de fim da reserva.
O número do documento de
identificação deve representar-se como uma cadeia de caracteres e o respectivo tipo indica
se se trata de um BI ou de um passaporte. As datas são
representadas pela classe Data pertence à biblioteca Utilitários
distribuída no pacote Pacotes. O manual da biblioteca
está disponível em
HTML
ou em
PDF.
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 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Se a opção 1 for escolhida, o programa deve realizar uma nova reserva de veículo tal como descrito acima.
Se a opção 2 for escolhida, o programa deve mostrar todas as reservas com data superior ou igual à data actual.
Se a opção 3 for escolhida, o programa deve perguntar a matrícula do veículo e mostrar todas as suas reservas.
Se a opção 4 for escolhida, o programa deve mostrar as características de todos os veículos.
Caso a opção 5 seja escolhida, o programa deve perguntar a matrícula, a marca, o modelo e os valores respeitantes ao tarifário diário e de fim-de-semana do veículo a registar.
Se for escolhida a opção 6, o programa deve perguntar a matrícula do veículo e quais os novos valores para os tarifários.
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 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 5
Matrícula do veículo: 00-00-XX
Marca: Oldsmobile
Modelo: Intrigue
Tarifa diária: 52.5
Tarifa fim-de-semana: 125.5
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 4
Matrícula do veículo: 00-00-XX
Marca: Oldsmobile
Modelo: Intrigue
Tarifa diária: 52.5
Tarifa fim-de-semana: 122.5
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 5
Matrícula do veículo: 00-00-YY
Marca: Ford
Modelo: Focus
Tarifa diária: 40
Tarifa fim-de-semana: 100
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 5
Matrícula do veículo: 00-00-ZZ
Marca: Renault
Modelo: Clio
Tarifa diária: 30
Tarifa fim-de-semana: 75
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 4
Matrícula do veículo: 00-00-XX
Marca: Oldsmobile
Modelo: Intrigue
Tarifa diária: 52.5
Tarifa fim-de-semana: 122.5
Matrícula do veículo: 00-00-YY
Marca: Ford
Modelo: Focus
Tarifa diária: 40
Tarifa fim-de-semana: 100
Matrícula do veículo: 00-00-ZZ
Marca: Renault
Modelo: Clio
Tarifa diária: 30
Tarifa fim-de-semana: 75
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 6
Matrícula do veículo: 00-00-ZZ
Tarifa diária: 32.5
Tarifa fim-de-semana: 79.5
Dados actualizados.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 2
Não existem reservas.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 3
Matrícula do veículo: 00-00-CC
Veículo não registado.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 3
Matrícula do veículo: 00-00-ZZ
O veículo com matrícula 00-00-ZZ não tem reservas.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 1
Matrícula do veículo: 00-00-WW
Veículo não registado.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 1
Matrícula do veículo: 00-00-YY
Data inicio de reserva (aaaa mm dd): 2003 04 11
Data fim de reserva (aaaa mm dd): 2003 04 14
O preço desta reserva é de 100.
Confirma (s/n)? s
Nome: António Lisboa
Documento de identificação: bi
Número: 12345678
Reserva efectuada.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 1
Matrícula do veículo: 00-00-YY
Data inicio de reserva (aaaa mm dd): 2003 04 11
Data fim de reserva (aaaa mm dd): 2003 04 15
Colisão com reserva prévia: reserva anulada.
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 1
Matrícula do veículo: 00-00-ZZ
Data inicio de reserva (aaaa mm dd): 2003 04 07
Data fim de reserva (aaaa mm dd): 2003 04 10
O preço desta reserva é de 130.
Confirma (s/n)? s
Nome: John Doe
Documento de identificação: passaporte
Número: f-13572468
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 2
Matrícula do veículo: 00-00-YY
Data inicio de reserva (aaaa mm dd): 2003 04 11
Data fim de reserva (aaaa mm dd): 2003 04 14
Nome: António Lisboa
Documento de identificação: bi
Número: 12345678
Matrícula do veículo: 00-00-ZZ
Data inicio de reserva (aaaa mm dd): 2003 04 07
Data fim de reserva (aaaa mm dd): 2003 04 10
Nome: John Doe
Documento de identificação: passaporte
Número: f-13572468
1 - Realizar nova reserva
2 - Mostrar reservas
3 - Mostrar reservas de veículo
4 - Mostrar veículos
5 - Registar novo veículo
6 - Alterar tarifário de veículo
0 - Terminar
Opção: 3
Matrícula do veículo: 00-00-ZZ
Marca: Renault
Modelo: Clio
Data inicio de reserva (aaaa mm dd): 2003 04 07
Data fim de reserva (aaaa mm dd): 2003 04 10
Nome: John Doe
Documento de identificação: passaporte
Número: f-13572468
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 Veículo, Reserva
e GestorDeAgência. 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, condições objectivo e condições invariantes de classe devem ser verificadas tanto quanto possível
usando instruções de asserção.
Makefile). Não é necessário entregar qualquer
relatório. Não é necessário entregar qualquer
relatório. 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, _impl.H e Makefile, caso existam)
para Ricardo.Ribeiro@iscte.pt.