Descrição do Trabalho
Algoritmos e programação - 2010.1Prof. Críston Souza
Faça um programa para controlar os assentos disponíveis nos ônibus de uma empresa de transporte rodoviário de passageiros.
Cada linha tem um conjunto de horários diários de partida de ônibus.
Cada ônibus suporta até 20 passageiros: assentos de 1 até 20, onde os ímpares são nas janelas.
Os dados de cada linha são:
- Cidade de destino
- Horário de partida (hora:minuto)
- Valor da passagem
Cada linha tem ônibus partindo todos os dias.
Portanto, as informações de cada ônibus são:
- Data da partida (dia/mês/ano)
- Assentos disponíveis
O sistema deve permitir:
- Cadastro de linhas: inserir, remover e alterar.
- Consultar todos os horários disponíveis para uma determinada cidade.
- Consultar os assentos disponíveis no ônibus, informando a cidade de destino, horário e data. A data deve ser inferior a 30 dias, contandos a partir da data atual.
- Após uma consulta de assento disponível, o sistema deve perguntar se algum assento vai ser reservado (caso existam ainda assentos disponíveis).
- Nenhuma passagem pode ser comercializada para ônibus que já partiram (consultar o relógio do sistema).
- Permitir a geração dos relatórios (na tela ou em arquivo texto, escolha do usuário):
- Total arrecadado com venda de passagens no mês corrente para cada linha.
- Ocupação percentual média de cada linha em cada dia da semana (uma matriz).
- Além de receber as reservas pelo teclado, permitir ler as reservas de um arquivo texto no seguinte formato:
- CIDADE, HORÁRIO(hh:mm), DATA(dd/mm/aaaa), ASSENTO
- Uma reserva por linha.
- Gravar em um arquivo texto todas as reservas que não puderam ser realizadas, juntamente com o motivo (ex.: ônibus cheio, ônibus já partiu, assento ocupado).
Observações:
- Todos os registros (linhas e ocupações) devem ser armazenados em arquivo binário.
- O trabalho poderá ser feito em dupla ou individualmente;
- A data da apresentação está no cronograma de aulas. Não será aceito fora do prazo. Haverá sorteio para a ordem de apresentação dos trabalhos.
- No dia da apresentação os dois membros da equipe, caso o trabalho tenha sido feito em dupla, deverão estar presentes. Na ocasião o professor fará perguntas relativas ao funcionamento do programa, bem como aos detalhes da implementação. Neste último caso as perguntas serão relativas ao código fonte.
- As notas serão atribuídas individualmente, ou seja, caso o trabalho tenha sido feito em dupla, a nota de cada um dos alunos será dada individualmente de acordo com os questionamentos do professor no dia da apresentação;
- Cada membro da equipe deve conhecer todo o código, e não apenas a parte que implementou.
- Durante a avaliação do trabalho serão levados em conta os seguintes aspectos:
- Organização do código fonte (identação; documentação, ou seja, com comentários onde for necessário; nomes de funções e variáveis apropriados, etc.)
- Se o programa atende todas as exigências especificadas no enunciado do trabalho.
- Divisão do código fonte em arquivos separados.
- Reuso de código, inclusive com a utilização de bibliotecas desenvolvidas especificamente para o trabalho.
- Uso de makefile para automatizar a compilação.
Caso de teste:
# ./trabalho
MENU
1- Inserir linha
2- Remover linha
3- Alterar linha
4- Consultar horarios
5- Consultar assento disponivel
6- Relatorios
7- Ler reservas de arquivo texto
8- Sair
OPCAO: 1
cidade: salvador
horario de partida: 8:00
valor da passagem: 100.00
MENU...
OPCAO: 1
cidade: salvador
horario de partida: 12:00
valor da passagem: 70.00
MENU...
OPCAO: 4
cidade: salvador
08:00 100.00
12:00 70.00
MENU...
OPCAO: 3
cidade: salvador
horario de partida: 12:00
novo valor da passagem (atual vale 70.00): 80.00
linha alterada com sucesso!
MENU...
OPCAO: 4
cidade: salvador
08:00 100.00
12:00 80.00
MENU...
OPCAO: 3
cidade: salvador
horario de partida: 12:00
linha removida com sucesso!
MENU...
OPCAO: 4
cidade: salvador
08:00 100.00
MENU...
OPCAO: 5
cidade: salvador
horario: 8:00
data: 20/06/2010
01 02 04 03
05 06 08 07
09 10 12 11
13 14 16 15
17 18 20 19
assento para reservar (0 para cancelar): 9
reserva realizada com sucesso!
MENU...
OPCAO: 5
cidade: salvador
horario: 8:00
data: 20/06/2010
01 02 04 03
05 06 08 07
X 10 12 11
13 14 16 15
17 18 20 19
assento para reservar (0 para cancelar): 9
assento ocupado!
MENU...
OPCAO: 8
# ./trabalho
MENU...
OPCAO: 7
arquivo: reservas.txt
arquivo processado sucesso! relatorio gravado em log.txt.
MENU...
OPCAO: 5
cidade: salvador
horario: 8:00
data: 20/06/2010
01 02 04 03
05 06 08 X
X 10 12 X
13 14 16 X
17 18 20 19
assento para reservar (0 para cancelar): 0
reserva cancelada!
MENU...
OPCAO: 6
1- Total arrecadado (tela)
2- Total arrecadado (arquivo)
3- Ocupacao percentual media (tela)
4- Ocupacao percentual media (arquivo)
OPCAO: 1
salvador, 8:00: 400.00
MENU...
OPCAO: 6
1- Total arrecadado (tela)
2- Total arrecadado (arquivo)
3- Ocupacao percentual media (tela)
4- Ocupacao percentual media (arquivo)
OPCAO: 3
salvador, 8:00:
dom seg ter qua qui sex sab
3/80 0/80 0/80 0/80 0/80 0/80 0/80
reserva.txt
salvador, 8:00, 20/06/2010, 7
salvador, 8:00, 20/06/2010, 11
salvador, 8:00, 20/06/2010, 9
salvador, 8:00, 20/06/2010, 15
salvador, 8:00, 20/06/2009, 2
log.txt
em "salvador, 8:00, 20/06/2010, 9": assento ocupado
em "salvador, 8:00, 20/06/2009, 2": onibus ja partiu
Podemos gerar este caso de teste passando pela entrada padrão um arquivo contendo (lembre de apagar o arquivo binário contendo os dados do programa):
1
salvador
8:00
100.00
1
12:00
70.00
4
3
salvador
12:00
80.00
4
3
salvador
12:00
4
5
salvador
8:00
20/06/2010
9
5
salvador
8:00
20/06/2010
9
7
reservas.txt
5
salvador
8:00
20/06/2010
0
6
1
6
3