Finished Defining an Abstract Class
parent
f7ef36beab
commit
fe71127f3a
|
@ -18,7 +18,20 @@ namespace GradeBook
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class Book : NamedObject
|
|
||||||
|
public abstract class Book : NamedObject
|
||||||
|
{
|
||||||
|
// Abstract class used to act as entrypoint for other class, so output
|
||||||
|
// can change based on given input. At this level, we cannot provide implementation
|
||||||
|
// Let derived class to determine details.
|
||||||
|
|
||||||
|
public Book(string name) : base(name)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public abstract void AddGrade(double grade);
|
||||||
|
}
|
||||||
|
public class InMemoryBook : Book
|
||||||
{
|
{
|
||||||
private List<double> grades;
|
private List<double> grades;
|
||||||
|
|
||||||
|
@ -26,13 +39,13 @@ namespace GradeBook
|
||||||
|
|
||||||
private string name;
|
private string name;
|
||||||
|
|
||||||
public Book(string name) : base(name)
|
public InMemoryBook(string name) : base(name)
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
grades = new List<double>();
|
grades = new List<double>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddGrade(double grade)
|
public override void AddGrade(double grade)
|
||||||
{
|
{
|
||||||
if (grade <= 100 && grade >= 0)
|
if (grade <= 100 && grade >= 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,11 +8,23 @@ namespace GradeBook
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
|
||||||
var book = new Book("Jason's Grade Book");
|
var book = new InMemoryBook("Jason's Grade Book");
|
||||||
book.GradeAdded += OnGradeAdded;
|
book.GradeAdded += OnGradeAdded;
|
||||||
|
|
||||||
string input;
|
string input;
|
||||||
|
|
||||||
|
input = EnterGrades(book);
|
||||||
|
|
||||||
|
var stats = book.GetStatistics();
|
||||||
|
|
||||||
|
Console.WriteLine($"The lowest grade is {stats.lowGrade}");
|
||||||
|
Console.WriteLine($"The highesst grade is {stats.highGrade}");
|
||||||
|
Console.WriteLine($"The average grade is {stats.Average:N1}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string EnterGrades(Book book)
|
||||||
|
{
|
||||||
|
string input;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Give input: ");
|
Console.WriteLine("Give input: ");
|
||||||
|
@ -21,7 +33,8 @@ namespace GradeBook
|
||||||
{
|
{
|
||||||
Console.WriteLine("Receiving termination signal; Termiate program");
|
Console.WriteLine("Receiving termination signal; Termiate program");
|
||||||
break;
|
break;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -45,11 +58,7 @@ namespace GradeBook
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var stats = book.GetStatistics();
|
return input;
|
||||||
|
|
||||||
Console.WriteLine($"The lowest grade is {stats.lowGrade}");
|
|
||||||
Console.WriteLine($"The highesst grade is {stats.highGrade}");
|
|
||||||
Console.WriteLine($"The average grade is {stats.Average:N1}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OnGradeAdded(object sender, EventArgs e)
|
static void OnGradeAdded(object sender, EventArgs e)
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace GradeBook.Tests
|
||||||
public void BookCalculateAnAverageGrade()
|
public void BookCalculateAnAverageGrade()
|
||||||
{
|
{
|
||||||
// arrange
|
// arrange
|
||||||
var book = new Book("");
|
var book = new InMemoryBook("");
|
||||||
book.AddGrade(89.1);
|
book.AddGrade(89.1);
|
||||||
book.AddGrade(90.5);
|
book.AddGrade(90.5);
|
||||||
book.AddGrade(77.3);
|
book.AddGrade(77.3);
|
||||||
|
|
|
@ -77,9 +77,9 @@ namespace GradeBook.Tests
|
||||||
Assert.Equal(book1.Name, "New Name");
|
Assert.Equal(book1.Name, "New Name");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GetBookSetName(ref Book book, string name)
|
private void GetBookSetName(ref InMemoryBook book, string name)
|
||||||
{
|
{
|
||||||
book = new Book(name);
|
book = new InMemoryBook(name);
|
||||||
book.Name = name;
|
book.Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,9 +92,9 @@ namespace GradeBook.Tests
|
||||||
Assert.Equal(book1.Name, "Book1");
|
Assert.Equal(book1.Name, "Book1");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GetBookSetName(Book book, string name)
|
private void GetBookSetName(InMemoryBook book, string name)
|
||||||
{
|
{
|
||||||
book = new Book(name);
|
book = new InMemoryBook(name);
|
||||||
book.Name = name;
|
book.Name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ namespace GradeBook.Tests
|
||||||
Assert.Equal(book1.Name, "New Name");
|
Assert.Equal(book1.Name, "New Name");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetName(Book book, string name)
|
private void SetName(InMemoryBook book, string name)
|
||||||
{
|
{
|
||||||
book.Name = name;
|
book.Name = name;
|
||||||
}
|
}
|
||||||
|
@ -133,9 +133,9 @@ namespace GradeBook.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Book GetBook(string name)
|
private InMemoryBook GetBook(string name)
|
||||||
{
|
{
|
||||||
return new Book(name);
|
return new InMemoryBook(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue