Cadastro de Estudantes v0.0.1
Gera uma lista ligada de estudantes.
Alessandro Elias, GRR20110589, ae11@inf.ufpr.br
Welton Pereira Martins, GRR20115234, wpm11@inf.ufpr.br

TRABALHO 1 ALGORITMOS E ESTRUTURA DE DADOS II (Cadastro de Estudantes Documentação)

Introdução

A primeira decisão da dupla foi pelo nome do programa, o qual escolhemos ce (iniciais de Cadastro de Estudantes).

DA IDÉIA

O cadastro não pode ser preenchido sem ter alunos na fila, portanto para cadastrar é necessário antes criar uma fila de estudantes. A idéia da fila é: são números inteiros que representam uma senha para cada estudante na fila, em ordem crescente de 1 à 30 (este é máximo elementos na fila), 30 porque geralmente uma turma tem em torno 40 alunos, e a probabilidade dos 40 estar presentes para fazer a matrícula é pequena, então 30 deverá ser o suficiente ao término deverão ser redistribuidas. O cadastro para, quando não ouver mais estudantes na fila, porém o usuário tem a opção de entrar um nome em branco, depois retornar e continuar da senha onde parou. Brinde é a pilha, a cada estudante matrículado ganha um brinde do topo da pilha, a pilha é nome do brinde. Pode ser entrado na primeira entrada de cada opção do menu para invocar um comando de impressão, veja em das especificações.

DAS ESPECIFICAÇÕES

Todas as especificações foram atendidas: Fila em vetor, pilha, lista dinâmica, lista duplamente encadeada circular. Impressão a qualquer ponto da execução do programa. Os comandos podem ser passados na primeira entrada de cada opção, os comandos são:

  • -pf imprime a fila.
  • -pl imprime lista.
  • -pp imptime pilha.

ATENÇÃO: qualquer dado depois do comando será ignorado.

DA MODULARIAÇÃO

O progrma foi dividido em módulos:

  • ceui.h - protótipos e esqueletos de estruturas cadastro de estudantes user interface.
  • ceui.c - módulo com as definições das funções que interagem com o usuário.
  • fila.h - protótipos e esqueletos de estruturas, parte stática da fila.
  • fila.c - módulo com as definições das funções da fila.
  • lista.h - protótipos e esqueletos de estruturas, parte stática da lista.
  • lista.c - módulo com as definições da lista.
  • pilha.h - protótipos e esqueletos de estruturas, parte stática da pilha.
  • pilha.c - módulo com as definições da pilha.
  • log.h - protótipos e esqueletos de estruturas, parte stática do log.
  • log.c - módulo com as definições das funções que gera o log.
  • mycommdef - declarações comuns a todos os módulos.
  • mydebug.h - macros que facilitam processo de depuraçõa do código.
  • Makefile - arquivo que compila cada módulo e depois linka-os.
trab1-algii.tar.gz

(O programa deve ser linkado com libncurses).
Desta maneira o programa seque modularização e facilitará a reutilização do código e manutenção, pois alguns dos módulos operam de forma independente.

DE UM PROGRAMA MAIS ROBUSTO

Decidimos em usar read() (uma chamada de baixo nível) para ler dados da entrada padrão, isto posibilita verificar se há mais dados no STDIN depois de uma leitura, com poll por exemplo. Em caso tivessemos optado por funções de mais alto nível, não poderiamos controlar se há mais dados, (ao menos com estas funções não temos conhecimento de como fazer) pois tais funções como: fgets() getchar() e família trbalham com um buffer interno. Assim quando o usuário entra mais dados que o tamaho do buffer podemos operar facilmente filtrando estes dados e ignorando dados excedentes, mas sempre informando o usuário do que ocorreu, também garantimos que nunca ocorrerá buffer over-run. Desta forma nosso programa se torna mais robusto.

DA COMUNICAÇÃO COM USUÁRIO

A comunicação com o usuário foi divida em stdout: toda interação com o usuário, menus, chamada de atenção. Stderr mandamos todas as mensagens de erro e também impressão de relatórios assim damos a oportunidade ao usuário de redirecionar para outro arquivo os relatórios sem as interações com o sistema. Observamos que tinhamos a opção de escrever direto no terminal (em /dev/tty) assim ultrapassaríamos o stdout e poderiamos der deixado somente relatórios em stdout, erros stderr, porém devido o aumento da complexidade optamos pela primeira.

DO LOG

Para não obter log's muito longo optamos por gerar um log a cada interação com o programa. O programa gera no máximo 999 logs, depois disso usuário deve remover alguns logs para que possa ser gerado mais logs, cada log é gerado com o nome logxxx.txt onde xxx é iqual ao número da execução, no formato 001 para primeira 002 e assim sucessivamente. Observe que se este limite for atingido o usuário será informado.

DA UTILIZAÇÃO

O programa pode trabalhar com redirecionamento, tanto da entrada padrão quanto do erro padrão (stderr). A utilização mais simples é executar o programa e sequir as opções na tela, porém se for utilizado redirecionamento o arquivo de entrada deve seguir as sequintes regras:

  • Opção do menu: xxx\n (3 char's + enter)
  • Entrada da fila: xxxxx\n (5 char's + enter)
  • Nome: _ _...62_\n (62 char's + enter)
  • Disciplinas: xxx xxx xxx xxx xxx\n (20 char's + enter)
  • Pilha: _ _...30_\n (30 char's + enter)

Toda e qualquer entrada deve preencher todo o buffer.
OBS.: _ é espaço, x é 0 padded.

Ex.: o nome do aluno pode conter no máximo 64 caracteres incluindo ('\0') final da string como cada entrada deve ser sinalizada por LF ('\n') esta entrada deve conter 62 caracteres preenchidos mais LF, a entrada pode ser preenchida com espaços, números devem ser preenchidos com 0. Isto vale para todos os campos. Para que ele execute um determinado comando do menu, este também deve estar dentro do arquivo de entrada na forma: 02\n, ou seja ele deve conter 3 chars.
Ex.:
01
00001
02
nome do aluno_ _ _62*_ (_=espaço)
06

 Tudo Classes Ficheiros Funções Variáveis Definições de tipos Enumerações Valores da enumeração Macros