using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DT1 { public delegate double GradeCalc(List s); public enum GradeLevel { FirstYear = 1, SecondYear, ThirdYear, FourthYear }; public class Student { public string FirstName { get; set; } public string LastName { get; set; } public int ID { get; set; } public GradeLevel Year; public List ExamScores; public double Grade { get; set; } } public class StudentClass { public Func studentSelector = (student, surname) => { return string.Compare(student.LastName, surname, true) == 0; }; public GradeCalc gradeCalculator = (grades) => { return Math.Round(((grades.Average() / 100 * 5) + 1) * 2, MidpointRounding.AwayFromZero) / 2; }; public Func passedSelector = (student) => { return student.Year == GradeLevel.FourthYear && student.Grade >= 4; }; #region data public List students = new List { new Student {FirstName = "Terry", LastName = "Adams", ID = 120, Year = GradeLevel.SecondYear, ExamScores = new List{ 99, 82, 81, 79}}, new Student {FirstName = "Fadi", LastName = "Fakhouri", ID = 116, Year = GradeLevel.ThirdYear, ExamScores = new List{ 99, 86, 90, 94}}, new Student {FirstName = "Hanying", LastName = "Feng", ID = 117, Year = GradeLevel.FirstYear, ExamScores = new List{ 93, 92, 80, 87}}, new Student {FirstName = "Cesar", LastName = "Garcia", ID = 114, Year = GradeLevel.FourthYear, ExamScores = new List{ 97, 89, 85, 82}}, new Student {FirstName = "Debra", LastName = "Garcia", ID = 115, Year = GradeLevel.ThirdYear, ExamScores = new List{ 35, 72, 91, 70}}, new Student {FirstName = "Hugo", LastName = "Garcia", ID = 118, Year = GradeLevel.SecondYear, ExamScores = new List{ 92, 90, 83, 78}}, new Student {FirstName = "Sven", LastName = "Mortensen", ID = 113, Year = GradeLevel.FirstYear, ExamScores = new List{ 88, 94, 65, 91}}, new Student {FirstName = "Claire", LastName = "O'Donnell", ID = 112, Year = GradeLevel.FourthYear, ExamScores = new List{ 75, 84, 91, 39}}, new Student {FirstName = "Svetlana", LastName = "Omelchenko", ID = 111, Year = GradeLevel.SecondYear, ExamScores = new List{ 97, 92, 81, 60}}, new Student {FirstName = "Lance", LastName = "Tucker", ID = 119, Year = GradeLevel.ThirdYear, ExamScores = new List{ 68, 79, 88, 92}}, new Student {FirstName = "Michael", LastName = "Tucker", ID = 122, Year = GradeLevel.FirstYear, ExamScores = new List{ 94, 92, 91, 91}}, new Student {FirstName = "Eugene", LastName = "Zabokritski", ID = 121, Year = GradeLevel.FourthYear, ExamScores = new List{ 96, 85, 91, 60}} }; #endregion public List AddGrades(GradeCalc calc) { foreach (Student s in students) { s.Grade = calc(s.ExamScores); } return students; } public List SearchStudent(Func select, String lastName) { List result = new() { }; foreach (Student s in students) { if (select(s, lastName)) result.Add(s); } return result; } public IEnumerable QueryPassed(Func passed) { return students.Where(passed); } static void show(String titel, List students) { Console.WriteLine(titel); foreach (var item in students) { Console.WriteLine(String.Format("{0} {1} {2}", item.FirstName, item.LastName, item.Grade)); } } public static void Main(string[] args) { StudentClass sc = new StudentClass(); show("Grades", sc.AddGrades(sc.gradeCalculator)); show("\nStudent Carcia",sc.SearchStudent(sc.studentSelector, "Garcia")); show("\nPassed 4th", sc.QueryPassed(sc.passedSelector).ToList()); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } public static class ListUtils { public static IEnumerable What(this IList list, Func selector) { return list.Where(selector); } } }