The C Sharp Grade Book Application is a designed to allow instructors to create gradebooks, add students to those grade books, add grades to those students, and calculate statics such as GPA (Grade Point Average).
- "Create Name of GradebookIs this Gradebook Weighted (true/false)" : Creates a new gradebook with the provided name
- "Help" : gives you a list of all valid commands within the given context
- "Load Name of GradeBook"
- "Quit" : Closes the application
- "Add Name of StudentType of StudentType of Enrollment" : Adds a new student to the open gradebook
- "Remove Name of Student" : Removes a student with the provided name from the gradebook. (if a student with that name exists in the gradebook)
- "List" : Lists all students in the open gradebook
- "AddGrade Name of StudentScore" : Adds to the given value to provided student's grades.
- "RemoveGrade Name of StudentScore" : Removes the given value from the provided student's grade. (if that value exists in the stundent's grades)
- "Statistics all" : Provides statistical output for all students in the open gradebook
- "Statistics Name of Student" : Provides statistical out put for the provided student. (if that student exists)
- "Help" : Gives you a list of all valid commands within the given context
- "Save" : Saves the currently open gradebook
- "Close" : Closes the gradebook
If you want to use Visual Studio (highly recommended) follow the following steps:
- If you already have Visual Studio installed make sure you have .Net Core installed by running the "Visual Studio Installer" and making sure ".NET Core cross-platform development" is checked
- If you need to install visual studio download it at https://www.microsoft.com/net/download/ (If you'r using Windows you'll want to check ".NET Core cross-platform development" on the workloads screen during installation.)
- Open the .sln file in visual studio
- To run the application simply press the Start Debug button (green arrow) or press F5
- If you're using Visual Studio on Windows, to run tests open the Test menu, click Run, then click on Run all tests (results will show up in the Test Explorer)
- If you're using Visual Studio on macOS, to run tests, select the GradeBookTests Project, then go to the Run menu, then click on Run Unit Tests (results will show up in the Unit Tests panel)
(Note: All tests should fail at this point, this is by design. As you progress through the projects more and more tests will pass. All tests should pass upon completion of the project.)
If you would rather use something other than Visual Studio
- Install the .Net Core SDK from https://www.microsoft.com/net/download/core once that installation completes you're ready to roll!
- To run the application go into the GradeBook project folder and type dotnet run
- To run the tests go into the GradeBookTests project folder and type dotnet test
- Add support for Ranked Grading
- Add support for Weighted GPAs
Note: this isn't the only way to accomplish this, however; this is what the project's tests are expecting. Implimenting this in a different way will likely result in being marked as incomplete / incorrect.
- 
Add support for Ranked Grading - 
Creating The GradeBookTypeEnum-  Create a new Enum GradeBookType.- This should be located in the Enumsdirectory.
- This should use the GradeBooks.Enumsnamespace.
- This should use the publicaccess modifier.
- This should contain the values Standard,Ranked,ESNU,OneToFour, andSixPoint.
 
- This should be located in the 
 
-  Create a new Enum 
- 
Add Typeproperty-  Add a new property TypetoBaseGradeBook- This should use the name Type.
- This should be of type GradeBookType.
- This should use the publicaccess modifier.
 
- This should use the name 
 
-  Add a new property 
- 
Creating the StandardGradeBookclass-  Create a class StandardGradeBook(Once this change is made code will not compile until completion of the next task)- This should be located in the GradeBooksdirectory.
- This should use the GradeBook.GradeBooksnamespace.
- This should inherit the BaseGradeBookclass.
 
- This should be located in the 
-  Create a constructor for StandardGradeBook- This should accept a parameter nameof typestring.
- This should set TypetoGradeBookType.Standard.
- This should call the BaseGradeBookconstructor by putting: base(name)after the constructor declaration (this was not covered in the course, it calls the constructor of the inheritted class.)_
 
- This should accept a parameter 
 
-  Create a class 
- 
Creating the RankedGradeBookclass-  Create a class RankedGradeBook_(Once this change is made code will not compile until completion of the next task)- This should be located in the GradeBooksdirectory.
- This should use the GradeBook.GradeBooksnamespace.
- This should inherit the BaseGradeBookclass.
 
- This should be located in the 
-  Create a constructor for RankedGradeBook- This should accept a parameter nameof typestring.
- This should set TypetoGradeBookType.Ranked.
- This should call the BaseGradeBookconstructor by putting: base(name)after the constructor declaration (this was not covered in the course, it calls the constructor of the inheritted class.)
 
- This should accept a parameter 
 
-  Create a class 
- 
Override RankedGradeBook'sGetLetterGrademethod-  Provide the appropriate grades based on where input grade compares to other students.
(One way to solve this is to figure out how many students make up 20%, then loop through all the grades and check how many were more than the input average, every N students where N is that 20% value drop a letter grade.)
- If there are less than 5 students throw an InvalidOperationException.
- return A if the input grade is in the top 20% of the class.
- return B if the input grade is between the top 20 and 40% of the class.
- return C if the input grade is between the top 40 and 60% of the class.
- return D if the input grade is between the top 60 and 80% of the class.
- return F if the grade is below the top 80% of the class.
 
- If there are less than 5 students throw an 
 
-  Provide the appropriate grades based on where input grade compares to other students.
(One way to solve this is to figure out how many students make up 20%, then loop through all the grades and check how many were more than the input average, every N students where N is that 20% value drop a letter grade.)
- 
Override RankedGradeBook'sCalculateStatisticsmethod-  Short circuit the method if there are less than 5 students.
- If there are less than 5 students write "Ranked grading requires at least 5 students." to the Console.
- If there are 5 or more students call the base class's CalculateStatisticsmethod using 'base.CalculateStatistics'.
 
 
-  Short circuit the method if there are less than 5 students.
- 
Override RankedGradeBook'sCalculateStudentStatisticsmethod-  Short circuit the method if there are less than 5 students.
- If there are less than 5 students write "Ranked grading requires at least 5 students." to the Console.
- If there are 5 or more students call the base class's CalculateStudentStatisticsmethod using 'base.CalculateStudentStatistics'.
 
 
-  Short circuit the method if there are less than 5 students.
- 
Update StartingUserInterface'sCreateCommandmethod-  Update CreateCommand's Conditions- When checking the parts.Lengthit should check thatparts.Lengthis not 3.
- If parts.Lengthis not 3 write "Command not valid, Create requires a name and type of gradebook." to Console.
 
- When checking the 
-  return a new GradeBook based on the provided type
- If the value of parts[2]is "standard" return a newly instantiatedStandardGradeBookusing thenamevariable.
- If the value of parts[2]is "ranked" return a newly instantiatedRankedGradeBookusing thenamevariable.
- If the value of parts[2]doesn't match the above write the value ofparts[2]followed by " is not a supported type of gradebook, please try again" to console, then escape the method.
 
- If the value of 
 
-  Update 
- 
Update StartingUserInterfaces'sHelpCommandmethod-  Change where HelpCommandoutlines the "create" command to write "Create 'Name' 'Type' - Creates a new gradebook where 'Name' is the name of the gradebook and 'Type' is what type of grading it should use." to console.
 
-  Change where 
- 
Make the BaseGradeBookclass abstract-  Add the abstractkeyword to theBaseGradeBookdeclarition.
 
-  Add the 
 
- 
- 
Add support for weighted GPAs - 
Add IsWeightedproperty toBaseGradeBook-  Create a new boolproperty namedIsWeightedinBaseGradeBook- This should use the public access modifier.
- This should be of type bool.
- This should be named IsWeighted.
 
 
-  Create a new 
- 
Refactor constructor of BaseGradeBookNote, once this group of tasks is begun the code will compile until the entire group of tasks is complete.-  Add a boolto theBaseGradeBookconstructor- This should be of type bool.
- This should be the second parameter.
 
- This should be of type 
-  Set IsWeightin theBaseGradeBookconstructor-  Set the IsWeightedproperty using theboolparameter.
 
-  Set the 
-  Add a boolto theStandardGradeBookconstructor- This should be of type bool.
- This should be the second parameter.
- This will require the bool to be added to the call to the base constructor.
 
- This should be of type 
-  Add a boolto theRankedGradeBookconstructor- This should be of type bool.
- This should be the second parameter.
- This will require the bool to be added to the call to the base constructor.
 
- This should be of type 
-  Update StartingUserInterface.CreateCommandcondition- Change the condition checking if partsis not equal to 3 to be is not equal to 4.
 
- Change the condition checking if 
-  Update StartingUserInterface.CreateCommandto acceptIsWeighted- This should use parts[3]for the last parameter where the gradebooks are instantiated.
- Update the message provided by this condition to write to console "Command not valid, Create requires a name, type of gradebook, if it's weighted (true / false).".
 
- This should use 
 
-  Add a 
- 
Update BaseGradeBook.GetGPA-  Add 1 point to GPA when student is HonorsorDualEnrolled.
 
-  Add 1 point to GPA when student is 
- 
Update HelpCommand-  Change where the HelpCommandoutlines the "create" command to say "Create 'Name' 'Type' 'Weighted' - Creates a new gradebook where 'Name' is the name of the gradebook, 'Type' is what type of grading it should use, and 'Weighted' is whether or not grades should be weighted (true or false).".
 
-  Change where the 
 
- 
You've compeleted the tasks of this project, if you want to continue working on this project some next steps would be to add support for some of the other grading formats, set Save to run with Add/Removing students and grades, etc.
Otherwise now is a good time to continue on the C# path to expand your understanding of the C# programming language or start looking into the User Interface options of C# whether that's ASP.NET (web), XAML (applications), DirectX (Graphically intense applications), etc