2º 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 6 de
Junho de 1997 na recepção da entrada principal do ISCTE
para colocação no cacifo do Eng. Manuel Menezes de
Sequeira, ou entregues, até à mesma data e hora, ao
referido docente.
- 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.
- O código deverá ser devidamente organizado e comentado:
- O programa deverá ser dividido em funções com
utilidades bem definidas. Cada função não
deverá exceder 70 linhas de comprimento.
- O módulo principal deverá possuir o seguinte
cabeçalho:
/*
* Programa: formata.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: formata.c
*
* Descricao: ...
*
* 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 */
- Devem ser evitadas as variáveis globais.
2. Especificação
2.1 Objectivo
O objectivo do trabalho é a realização de um sistema de
gestão de contactos pessoais.
Um contacto consiste em informação sobre uma pessoa:
- Nome
- Categoria
- Empresa
- Morada
- Telefone
A categoria dos contactos pode ser:
- Colega
- Fornecedor
- Cliente
- Amigo
Para além de manter informação sobre os contactos, deve ser
mantido também um diário de acontecimentos relativos a cada
contacto. Os acontecimentos podem ser dos tipos seguintes:
- Telefonema
- Reunião
- Carta
- Fax
Para telefonemas e reuniões devem-se
registar as datas e hora de início e fim. Para cartas e fax
basta registar a data e hora de recepção. Em todos os casos é
necessário guardar de quem foi a iniciativa: do contacto ou
nossa. Associado a cada acontecimento devem poder ser registados
comentários vários. Como é evidente, um acontecimento estará
sempre associado a um contacto existente. Assim, a remoção de
um contacto deve implicar a remoção dos acontecimentos
respectivos.
2.2 Funcionalidades mínimas
O programa deve:
- Permitir a visualização da lista de contactos por ordem
crescente (alfabética) de nome.
- Permitir a visualização da lista geral de
acontecimentos por ordem decrescente de tempo de início
dos acontecimentos.
- Permitir a visualização da lista de acontecimentos
associados a um dado contacto por ordem decrescente do
tempo de início dos acontecimentos.
- Permitir a visualização dos pormenores de um contacto
arbitrário.
- Permitir a visualização dos pormenores de um
acontecimento arbitrário, incluindo toda a informação
acerca do respectivo contacto.
- Permitir a introdução de novos contactos e a
alteração ou remoção de contactos já existentes.
- Permitir a introdução de novos acontecimentos e a
alteração ou remoção de acontecimentos já
existentes. A alteração do contacto respeitante a um
dado acontecimento deve, no entanto, ser proibida.
- Permitir ler e guardar a base de dados de contactos e
acontecimentos em ficheiros no disco.
Todos os casos que não sejam cobertos por este enunciado
deverão ser resolvidos com bom senso.
2.3 Concretização
- A base de dados de contactos e acontecimentos deve ser
mantida na forma de listas dinâmicas genéricas.
- A gestão das datas de início dos acontecimentos e sua
duração pode recorrer às funções ANSI-C do ficheiro
de cabeçalho time.h.
- A entrada de dados (por parte do utilizador) deverá ser
resistente a erros.
2.4 Estruturação
O programa deverá ser dividido em módulos, existindo pelo
menos os seguintes:
- Módulo principal, com a função main().
- Módulo das listas genéricas.
- 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.