using System; using System.Text; using System.Collections.Generic; namespace ConsoleApp4 { class Program { // Constants public static uint MAXIMAL_AGE = 130; public static float GPA_POINT_SCALE = 4.000f; public enum AcadYear {Freshman, Sophomore, Junior, Senior, PostBacc, Graduate}; public class Human { protected float height; protected string lastName; protected string firstName; protected uint age; public float Height { get { return height; } set { if (value < 0.0f) return; // else value >= 0.0f height = value; } } public string FirstName { get { return firstName; } set { firstName = value; } } public string LastName { get { return lastName; } set { lastName = value; } } public uint Age { get { return age; } set { if (value > MAXIMAL_AGE) return; // else value >= 0.0f age = value; } } public Human() { Height = 0.0f; LastName = FirstName = ""; Age = 0; } public Human(float _height, string _last, string _first, uint _age) { Height = _height; LastName = _last; FirstName = _first; Age = _age; } public Human(Human _alpha) // Copy Constructor { Height = _alpha.Height; LastName = _alpha.LastName; FirstName = _alpha.FirstName; Age = _alpha.Age; } public string FullName => LastName + ", " + FirstName; public override string ToString() { return String.Format("Name = {0}\nHeight = {1}\nAge = {2}", FullName, Height, Age); } } public class Student : Human, IComparable { private string zid; private string major; private AcadYear year; private float gpa; public string Zid { get { return zid; } set { if (value[0] != 'z') return; if (value.Length < 7 || value.Length > 8) return; for (int i = 1; i < value.Length; i++) if ((int)value[i] < 48 || (int)value[i] > 57) return; // if (!Char.IsDigit(value[i])) // return; zid = value; } } public string Major { get { return major; } set { major = value; } } public AcadYear Year { get { return year; } set { if ((int)value < 0) return; if ((int)value > 5) return; // else year = value; } } public float GPA { get { return gpa; } set { if (value < 0.0f) return; if (value > GPA_POINT_SCALE) return; // else gpa = value; } } public Student() : base() { Zid = Major = ""; Year = AcadYear.Freshman; GPA = 0.0f; } public Student(params string[] tokens) { Height = float.Parse(tokens[0]); LastName = tokens[1]; FirstName = tokens[2]; Age = Convert.ToUInt32(tokens[3]); Zid = tokens[4]; Major = tokens[5]; Year = (AcadYear)Convert.ToInt32(tokens[6]); GPA = float.Parse(tokens[7]); } public Student(Human _alpha, params string[] tokens) : base(_alpha) { Zid = tokens[0]; Major = tokens[1]; Year = (AcadYear)Convert.ToInt32(tokens[2]); GPA = float.Parse(tokens[3]); } public int CompareTo(Object alpha) { if (alpha == null) throw new ArgumentNullException(); // Always... check for null values Student rightOp = alpha as Student; // Oo, typecasting using English! I like it if (rightOp != null) // Protect against a failed typecasting return Zid.CompareTo(rightOp.Zid); // Making use of what's already available! else throw new ArgumentException("[Student]:CompareTo argument is not a Student"); } public override string ToString() { StringBuilder sb = new StringBuilder(base.ToString()); sb.Append(String.Format("\nZ-ID: {0}\nMajor: {1}\nYear: {2}\nGPA: {3}", Zid, Major, Year, GPA)); return sb.ToString(); //return base.ToString() + String.Format("Z-ID: {0}\nMajor: {1}\nYear: {2}\nGPA: {3}", // Zid, Major, Year, GPA)); } } static void Main(string[] args) { Human alpha = new Human(100f, "Rogness", "Daniel", 36); Console.WriteLine(alpha); Student beta = new Student(alpha, "z174735", "Mathematics", "5", "2.245"); // my argument list Console.WriteLine(beta); SortedSet pool = new SortedSet(); pool.Add(beta); Student cappa = new Student(alpha, "z164735", "Computer Science", "5", "2.245"); // my argument list Student delta = new Student(alpha, "z174535", "Art", "5", "2.245"); // my argument list pool.Add(cappa); pool.Add(delta); foreach (Student i in pool) { Console.WriteLine(i); } } } }