Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2 Folha de Exercícios 3 2007/2008 Nota: Todos os programas abaixo descritos devem ser implementados em C++! Para cada alínea, teste na função main as funções implementadas. Neste exercício deverá reimplementar o programa gestAlunos, da Folha de Exercícios 2, que realiza a gestão de turmas, mas agora utilizando o conceito de classes. 1. Considere a classe Aluno, com os membros-dado indicados na estrutura básica da classe abaixo: class Aluno { string nome; string curso; int numero; int media; //... }; a) Complete a estrutura acima e implemente um construtor padrão, sem argumentos, que inicializa todos os atributos com os valores “”, para nome e curso, e 0, para numero e media. Implemente também um construtor que inicializa todos os atributos com valores fornecidos como argumento, excepto media, que terá o seguinte protótipo: Aluno(string umNome, string umCurso, int umNumero); b) Considere que um aluno, durante o tempo de estudante, poderá mudar de curso e número algumas vezes, mas nunca de nome, e a sua média também poderá sofrer alterações. Implemente os membrosfunção adequados para este efeito, ou seja, escrita e leitura, apenas escrita ou apenas leitura, consoante o tipo de acesso que se deseje dar a cada membro-dado. c) Implemente o membro função string sigla(); que retorna a sigla de um determinado aluno, formada pelas iniciais do seu nome; p. ex., o aluno Pedro Álvares Cabral terá a sigla “PAC”. d) Implemente o membro função void imprimirAluno(ostream &os); que imprime na stream de saída indicada, que poderá ser um ficheiro ou o ecrã, p. ex., as informações de um determinado aluno, obedecendo ao seguinte formato: <número> <nome> <média> 2. Considere agora a classe Turma, com os membros-dado indicados na estrutura básica da classe abaixo: class Turma { string curso; int numero; int ano; int capacidade; //... }; FEUP/MIEEC Folha Nº3 Página 1 de 2 Programação 2 2007/2008 a) Quando uma turma é criada, deve-se indicar obrigatoriamente o curso a que pertence, o seu número, e o ano em que está disponível no curso. A sua capacidade, se não for indicada, assumirá o valor 20. Defina e implemente o construtor adequado para esta classe. Especifique e implemente também os métodos de acesso aos membros-dado privados da classe. b) Implemente o membro-função string codigoTurma(); que retorna o código de uma determinada turma. O código de uma turma é formado pelo seu ano, iniciais do curso e número da turma; p. ex., a turma 12 do primeiro ano do Mestrado Integrado em Engenharia Electrotécnica e de Computadores terá como código 1MIEEC12. c) Implemente o membro-função int inscreverAluno(Aluno novoAluno); que inscreve na turma um novo aluno, caso ainda haja lugar disponível, ou seja, o número de inscritos é menor que a capacidade da turma. A função retornará a ordem de inscrição do aluno na turma, ou 0, caso a turma esteja cheia. As informações dos alunos de uma turma são guardadas num ficheiro de nome <codigoTurma>.txt. Teste esta função com a inscrição de vários alunos pelo utilizador, a partir do teclado, cessando quando a capacidade da turma for atingida ou quando o utilizador assim o desejar, com a indicação de Ctrl+D. d) Implemente o membro-função Aluno procurarAluno(string sigla); onde sigla é formada pelas iniciais do nome do aluno (p. ex., Pedro Álvares Cabral terá sigla “PAC”). A pesquisa será efectuada sobre o ficheiro <codigoTurma>.txt, e a função retornará o objecto aluno cujas inicias são indicadas no argumento sigla. Implemente também o membro-função Aluno procurarAluno(int numero), que realiza a procura pelo número do aluno, retornando o objecto aluno correspondente. e) Implemente o membro-função void lancarNota(Aluno &aluno, int mediaAluno); que actualiza a média do aluno para mediaAluno. Se o aluno já estiver inscrito na turma guardada no ficheiro <codigoTurma>.txt, a função deverá fazer reflectir no ficheiro a nova média do aluno. f) Implemente o membro-função void relatorioDeNotas(ostream& os); que lê do ficheiro <codigoTurma>.txt todos os alunos inscritos na turma e imprime numa stream de saída, ecrã ou ficheiro p.ex., o primeiro e o último nome de cada aluno, seguidos da sua média; p. ex. Cristiano Ronaldo 10. Nota: O ficheiro 1MIEEC15.txt já contém informações sobre alguns alunos inscritos numa turma, e pode ser utilizado para testar as implementações acima. FEUP/MIEEC Folha Nº3 Página 2 de 2