static void Main(string[] args)
Console.WriteLine("Start application...");
var courses = new List<Course>();
var students = new List<Student>();
var selectedMenu = Console.ReadLine();
Console.WriteLine("Enter multiple course names, split by ',':");
var courseNames = (Console.ReadLine() ?? "").Split(',');
foreach (var courseName in courseNames)
if (courses.Any(w => w.CourseName == courseName))
Console.WriteLine($"Course already exist: {courseName}");
courses.Add(new Course { CourseName = courseName });
Console.WriteLine($"Courses added: {string.Join(',', courses.Select(s => s.CourseName))}");
Console.WriteLine("Enter Student Id:");
var student = new Student();
student.Id = Console.ReadLine();
Console.WriteLine("Enter Student Name:");
student.Name = Console.ReadLine();
Console.WriteLine($"Student added: {student}");
Console.WriteLine("Enter Student Id:");
var findStudentId = Console.ReadLine();
var findStudent = students.Find(w => w.Id == findStudentId);
Console.WriteLine($"Cannot find student with Id: {findStudentId}"); break;
Console.WriteLine("Enter Student course:");
var course = Console.ReadLine();
if (courses.All(w => w.CourseName != course))
Console.WriteLine($"Cannot find course: {course}");
Console.WriteLine("Enter Student course score (score must be a number):");
var scoreInString = Console.ReadLine();
var score = double.Parse(scoreInString ?? "0");
if (findStudent.CourseResults.All(w => w.Course.CourseName != course))
findStudent.CourseResults.Add(new StudentCourseResult { Course = new Course { CourseName = course }, Score = score });
foreach (var studentCourse in findStudent.CourseResults)
if (studentCourse.Course.CourseName != course)
Console.WriteLine($"Cannot find student course: {course}");
studentCourse.Score = score;
Console.WriteLine($"Student score: course: {course}, score: {findStudent.GetScoreByCourse(course)}");
if (selectedMenu != "quit")
Console.WriteLine("1. Set courses");
Console.WriteLine("2. Add student");
Console.WriteLine("3. Add student score");
Console.WriteLine("4. Get student average score");
Console.WriteLine("5. Get student with max average score");
Console.WriteLine("100. Enter 'quit' to exit");
CourseResults = new List<StudentCourseResult>();
public string Id { get; set; }
public string Name { get; set; }
public List<StudentCourseResult> CourseResults { get; set; }
public override string ToString()
return $"Id: {Id}, Name: {Name}";
public double? GetScoreByCourse(string course)
return CourseResults.Where(w => w.Course.CourseName == course).Select(s => s.Score).FirstOrDefault();
public string CourseName { get; set; }
public class StudentCourseResult
public Course Course { get; set; }
public double Score { get; set; }