Trabalho Prático 1 - Controle de Alunos

Descrição Geral do Problema

Este trabalho, que deverá ser feito individualmente ou em duplas, consiste em modelar e implementar um sistema simples para controle de alunos em uma faculdade, contendo 3 estruturas principais: alunos, disciplinas e turmas.

Cada estrutura citada acima deve ser implementada como uma classe. A seguir serão detalhadas essas classes:

Alunos

Um aluno é definido por um número de matrícula e um nome. Deve ser possível realizar as seguintes operações:

Obs: cada aluno pode estar matriculado em uma ou mais turmas.

Disciplinas

Uma disciplina consiste em um código e um nome. Deve ser possível realizar as seguintes operações:

Turmas

Uma turma é definida por um número, o código da disciplina e um conjunto de alunos. Deve ser possível realizar as seguintes operações:

Para adicionar um aluno à turma, deverá ser criado um método que receba um objeto Aluno já criado e inicializado externamente, ou seja, não devem ser recebidos os dados do aluno individualmente:

void Turma::adicionaAluno(Aluno novo) { ... }

Para armazenar os alunos, pode ser utilizado um vetor de Aluno, bastando controlar quantos já foram criados - para este trabalho, limitaremos o vetor em 10 alunos.

Funcionamento do Programa

Para que não seja preciso criar uma interface mais complexa com o usuário, com funções para acrescentar alunos, turmas e disciplinas, faremos a entrada de dados diretamente no código-fonte.

Alunos:

MatrículaNome
1Sean Connery
2Cameron Diaz
3Kate Winslet
4Anthony Hopkins
5Jackie Chan
6Lucie Liu

Disciplinas:

CódigoNome
4612AProgramação II
4613AAlg. e Prog. I
4610RComputação Gráfica

Turmas:

NúmeroCódigo disciplinaAlunos
4904612ASean, Kate, Lucie
5904612ACameron, Anthony, Jackie
1284613AAnthony, Jackie, Lucie
1684610RSean, Anthony

A lista de disciplinas e de turmas também podem ser armazenadas em vetores criados no programa principal. O sistema deverá então oferecer duas opções para consulta dos dados:

Consulta de Disciplinas

Dado o número de matrícula de um aluno, o sistema deverá mostrar todas as turmas em que este esteja matriculado. Essa listagem deve ser feita em forma de uma tabela, exibindo o código de cada disciplina, o seu número e o número da turma. Exemplo:

Aluno: Sean Connery
Codigo     Disciplina           Turma
4612A      Programação II       490
4610R      Computação Gráfica   168

Consulta de Alunos

Dado o código de uma disciplina e o número da turma, mostrar uma lista com todos os alunos presentes nesta. Também deve ser apresentada em forma de tabela, contendo o número de matrícula e o nome de cada aluno. Por exemplo:

Disciplina: 4612A - Programação II - Turma 590
Matrícula      Nome
2              Cameron Diaz
4              Anthony Hopkins
5              Jackie Chan

Avaliação

Devem ser criadas as classes Aluno, Disciplina e Turma. A criação de classes adicionais fica dependente da sua implementação - um dos objetivos deste trabalho é a modelagem adequada dos atributos e métodos dessas classes.

O código-fonte deve estar adequadamente comentado (nas suas partes/algoritmos principais, pelo menos) e no seu início deve haver um comentário com o nome do(s) aluno(s).

Apresentação

O trabalho será apresentado no laboratório. Durante a apresentação, todos os alunos devem estar presentes e aptos a responder quaisquer perguntas. Respostas insatisfatórias ou a ausência do aluno acarretarão em anulação da nota final.

No momento da apresentação, cada aluno ou dupla já deverá ter submetido um arquivo .cpp pelo sistema MOODLE, contendo o programa-fonte (.cpp). O programa deverá ser nomeado da seguinte forma: nome_sobrenome.cpp. No caso de uma dupla, usar a forma: sobrenome1_sobrenome2.cpp.

O programa deverá ser executado no sistema operacional Linux. Não serão aceitos trabalhos que não compilem corretamente no g++, sob hipótese nenhuma.

Todos os trabalhos deverão ser entregues até o dia da apresentação, e apresentados na data marcada - não serão aceitos trabalhos fora do prazo.

Trabalhos copiados resultarão em nota zero para todos os alunos envolvidos.