1º
Trabalho Prático de Programação II
1. Organização e calendário
- O trabalho deverá ser
começado a realizar imediatamente após
disponibilização do enunciado.
- O relatório final, com duas
páginas A4 no máximo, as listagens (com as páginas
numeradas), bem como uma disquete com o programa (que
será depois devolvida), deverão ser entregues até às
15 horas do dia 20 de Abril de 1998 na recepção da
entrada principal do ISCTE para colocação no cacifo do
Eng. Manuel Menezes de Sequeira (cacifo 202), ou
entregues, até à mesma data e hora, a qualquer dos
docentes da cadeira.
- A listagem, para além de numerada, deverá ser impressa
num tipo não proporcional (recomenda-se o Courier
New).
- O relatório consistirá
numa breve explicação do funcionamento (interno) do
programa e justificações para as opções tomadas.
- A interface com o utilizador
deverá ser suficientemente clara para não ser
necessário qualquer manual de utilização.
- Valorizam-se interfaces
simples e claras. Interfaces sofisticadas não são
valorizadas: evite perder tempo com o que é acessório.
- Este trabalho é uma boa
introdução ao segundo trabalho da cadeira.
- O código deverá ser
devidamente organizado e comentado:
- O programa deverá
ser dividido em funções com utilidades bem
definidas. Cada função deverá ter cerca de 10
linhas. Em caso algum ultrapassará um página de
listagem (cerca de 70 linhas).
- As funções devem
ser organizadas em módulos duma forma
apropriada.
- O módulo principal
deverá possuir o seguinte cabeçalho:
/*
* Programa: aluger.c
*
* Descricao: ...
*
* Notas:
*
* Autores:
* Nome e numero dos autores, ISCTE.
*/
- Os restantes
módulos (e ficheiros de cabeçalho respectivos)
deverão possuir o seguinte cabeçalho:
/*
* Modulo: listas.c (ou listas.h)
*
* Descricao: Modulo de listas.
*
* Notas:
*
* Autores:
* Nome e numero dos autores, ISCTE.
*/
- Cada função
deverá possuir o seguinte cabeçalho (E e S
significam entrada e saída respectivamente):
/*
* Funcao: Linsere()
*
* Accao: Insere um elemento numa lista.
*
* Parametros:
* lista (E/S) - lista onde o elemento será inserido.
* elemento (E) - o elemento a inserir na lista.
*
* Devolve: ...
*/
- Devem ser comentadas
todas as zonas do programa de mais difícil
compreensão. Podem ser utilizados os seguintes
estilos de comentário:
/* Comentario de uma linha... */
/*
* Ou de varias linhas, acerca de um conjunto de
* instrucoes:
*/
int i;
double x;
i = 10; /* inicialização de i */
- Evite as variáveis
globais.
2. Especificação
2.1 Objectivo
Desenvolva em ANSI C um programa de gestão de
reservas/alugueres para uma empresa de aluguer de automóveis. O
programa deverá manter a seguinte informação e proporcionar as
funcionalidades mínimas indicadas:
- Informação sobre a frota existente
- Deverá manter-se um registo das viaturas da empresa
incluindo a seguinte informação sobre cada viatura:
- matrícula,
- data de aquisição,
- modelo e
- classe (3 classes).
- Por exemplo:
- Classe 1:
- Ford Ka,
- Renault Twingo,
- Fiat Cinquecento e
- Opel Corsa.
- Classe 2:
- Ford Mondeo,
- Renault Megane,
- Fiat Bravo e
- Opel Vectra.
- Classe 3:
- Ford Scorpio,
- Renault Safrane,
- Fiat Marea e
- Opel Omega.
- Pretendem-se as seguintes funcionalidades mínimas:
- inserir nova viatura,
- remover uma viatura e
- listar informação de todas as viaturas.
- Informação sobre reservas e alugueres
- Deverá manter-se um registo de reservas e alugueres,
sendo cada reserva caracterizada pela seguinte
informação:
- viatura (identificada pela sua matrícula),
- período de aluguer,
- cliente e
- estado (i.e., reserva ou aluguer).
- Pretendem-se as seguintes funcionalidades mínimas:
- reservar uma viatura disponível no período
indicado por um cliente (o cliente deve poder
especificar o modelo que pretende),
- anular reservas de clientes que desistiram ou que
não efectuaram o levantamento das viaturas no
primeiro dia do período pretendido (é
necessário que o programa considere a data
corrente), e
- actualizar a informação sobre
reservas/alugueres quando:
- um contrato de aluguer é concretizado,
- uma reserva é anulada ou
- uma viatura é devolvida à agência.
- Determinação do preço
- Deverá ser possível determinar o preço do aluguer de
uma viatura. O preço é função da classe da viatura
alugada e do número de dias de aluguer. A definição do
preçário fica ao critério dos alunos.
2.2 Concretização
- As estruturas de dados utilizadas para armazenar
informação sobre as viaturas e sobre reservas e
alugueres devem ser implementadas utilizando matrizes.
A capacidade das matrizes deve ser fixada em 100
elementos em ambos os casos.
- Devem ser utilizados ficheiros de texto para armazenar a
informação relevante no final da execução do programa
e para carregar a informação no início da sua
execução.
- Para simplificar considerou-se no enunciado que alugueres
e reservas estariam armazenados na mesma estrutura de
dados. Nada impede que os alunos considerem outras
soluções.
- Podem-se utilizar valores inteiros para representar datas
(e.g., considerar que um período de aluguer vai do dia
121 ao dia 127, sendo 0 o valor do início do
calendário). No entanto recomenda-se a utilização da
representação de datas e das funções para a sua
manipulação definidas pelo ANSI C (veja-se o ficheiro
de cabeçalho "time.h").
2.3 Estruturação
O programa deverá ser dividido
em módulos. Por
exemplo:
- Módulo principal, com a
função main().
- Módulo dos registos
de veículos.
- Módulo dos registos de alugeres e reservas.
- Módulo das funções de
leitura do teclado.
- Módulo de funções de
escrita de menus e leitura de opções.
- Módulo de operações sobre
datas e horas e tempos de duração.