using System.Collections.Generic;
public static void Main()
Console.Write("\nDIGITE O SEU NOME: ");
var nome = Console.ReadLine();
Console.Write("DIGITE O SEU RA: ");
var ra = Console.ReadLine();
var aluno = new Aluno(nome, ra);
Console.Write("DIGITE A DISCIPLINA: ");
var nomeDisciplina = Console.ReadLine();
var disciplina = aluno.AdicionarDisciplina(nomeDisciplina);
Console.Write("DIGITE O SEU NÚMERO DE FALTAS: ");
var faltas = int.Parse(Console.ReadLine());
disciplina.AdicionarFaltas(faltas);
foreach (var prova in disciplina.Provas)
Console.Write("DIGITE A NOTA DA PROVA "+ prova.Tipo +": ");
var nota = decimal.Parse(Console.ReadLine());
Console.WriteLine("\nNome: {0} \tRA: {1}", aluno.Nome, aluno.RA);
Console.WriteLine("\nDisciplina: {0} \t Número de Faltas: {1}", disciplina.Nome, disciplina.Faltas);
foreach (var prova in disciplina.Provas) Console.WriteLine("\nNotas\t{0}: {1}", prova.Tipo, prova.Nota);
Console.WriteLine("\nMEDIA FINAL: {0}", disciplina.CalcularMedia());
if (disciplina.AprovadoGeral())
Console.Write("\nPARABÉNS VOCÊ FOI APROVADO !");
if (!disciplina.AprovadoPorNota())
Console.Write("\nOOPS! FOI REPROVADO POR NOTA!");
if (!disciplina.AprovadoPorPresenca())
Console.Write("\nOOPS! FOI REPROVADO POR FALTA!");
public string Nome { get; private set; }
public string RA { get; private set; }
public List<Disciplina> Disciplinas { get; }
public Aluno(string nome, string ra)
Disciplinas = new List<Disciplina>();
public Disciplina AdicionarDisciplina(string nomeDisciplina)
var disciplina = new Disciplina(nomeDisciplina);
Disciplinas.Add(disciplina);
public string Nome { get; private set; }
public int Faltas { get; private set; }
public List<Prova> Provas { get; }
private const int _faltasMaximasParaAprovar = 10;
private const decimal _notaMinimaParaAprovar = 7m;
public Disciplina(string nome)
new Prova(TipoProva.NP1),
new Prova(TipoProva.NP2),
public void AdicionarFaltas(int faltas)
public decimal CalcularMedia()
foreach (var prova in Provas) total += prova.Nota;
var media = total / Provas.Count;
public bool AprovadoPorNota()
var media = CalcularMedia();
return media >= _notaMinimaParaAprovar;
public bool AprovadoPorPresenca()
return Faltas <= _faltasMaximasParaAprovar;
public bool AprovadoGeral()
var aprovadoPorNota = AprovadoPorNota();
var aprovadoPorPresenca = AprovadoPorPresenca();
return aprovadoPorNota && aprovadoPorPresenca;
public TipoProva Tipo { get; }
public decimal Nota { get; private set; }
public Prova(TipoProva tipo)
public void DarNota(decimal nota)