/*
 * Instituto Superior de Engenharia do Porto
 *
 * Estruturas de Informação
 *
 * 2000/2001
 *
 * ------------------------------------------
 *
 * Miniteste
 *
 */

/*

Dada a seguinte classe CNota que representa uma nota de um aluno a um exame,
implemente
a) construtor de cópia
b) construtor que aceite argumentos para inicializar o objecto
c) um método para modificar o valor da nota
d) o operador de atribuição
e) a função media (declara no enunciado) para cálculo da média das notas de
uma turma

class CNota
{
	string m_sNumeroMatricula;
	int m_nNota;
	bool m_bNF;	// indica se o aluno realmente efectou o exame
public:
	CNota();
	...

	int getNota() const	{return m_nNota; }
	bool frequentou() const	{ return !m_bNF; }
	void setNF(bool bNF)	{ m_bNF = bNF; }
	void setNumMatricula(string sNum);
	string getNumMatricula() const	{ return m_sNumMatricula; }

	...
};

double media(CNota turma[], int nNumAlunos);

*/

class CNota
{
	string m_sNumeroMatricula;
	int m_nNota;
	bool m_bNF;	// indica se o aluno realmente efectou o exame
public:
	CNota();
	CNota(const CNota& o);
	CNota(string sNum, bool bNF, int nNota);

	int getNota() const	{return m_nNota; }
	bool frequentou() const	{ return !m_bNF; }
	void setNF(bool bNF)	{ m_bNF = bNF; }
	void setNumMatricula(string sNum)		{ m_sNumeroMatricula = sNum; }
	string getNumMatricula() const	{ return m_sNumeroMatricula; }

	bool setNota(int nNota);
	CNota& operator=(const CNota& o); 
};

double media(CNota turma[], int nNumAlunos);

ostream& operator<<(ostream& output, const CNota& obj);

