104 lines
2.6 KiB
C#
Raw Normal View History

using System;
2021-02-16 22:27:58 +00:00
using System.Collections.Generic;
namespace GradeBook
{
public delegate void GradeAddedDelegate(object sender, EventArgs args);
public class Book
2021-02-16 22:27:58 +00:00
{
private List<double> grades;
2021-02-22 03:59:18 +00:00
readonly string category;
private string name;
public string Name
{
get;
set;
}
2021-02-16 22:27:58 +00:00
public Book(string name)
{
Name = name;
2021-02-16 22:27:58 +00:00
grades = new List<double>();
}
public void AddGrade(double grade)
{
if (grade <= 100 && grade >= 0)
{
this.grades.Add(grade);
if (GradeAdded != null)
{
// Somebody is listening/subscribing
GradeAdded(this, new EventArgs()); // sender = this, pass; Raising event
}
} else
{
throw new ArgumentException($"Invalid {nameof(grade)}");
}
2021-02-16 22:27:58 +00:00
}
public void AddGrade(char letter)
{
switch (letter)
{
case 'A':
AddGrade(90);
break;
case 'B':
AddGrade(80);
break;
case 'C':
AddGrade(70);
break;
default:
AddGrade(0);
break;
}
}
public event GradeAddedDelegate GradeAdded;
public Statistics GetStatistics()
{
var result = new Statistics();
result.Average = 0.0;
result.highGrade = double.MinValue;
result.lowGrade = double.MaxValue;
foreach (var grade in this.grades)
{
result.lowGrade = Math.Min(grade, result.lowGrade);
result.highGrade = Math.Max(grade, result.highGrade);
result.Average += grade;
}
result.Average /= grades.Count;
2021-02-19 04:33:27 +00:00
switch (result.Average)
{
case var d when d >= 90.0:
result.Letter = 'A';
break;
case var d when d >= 80.0:
result.Letter = 'B';
break;
case var d when d >= 70.0:
result.Letter = 'C';
break;
case var d when d >= 60.0:
result.Letter = 'D';
break;
default:
result.Letter = 'F';
break;
}
return result;
}
2021-02-16 22:27:58 +00:00
}
}