C#课程实验

时间:2025-03-09 07:18:53
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Person { public class Person //人类 {//包括属性:姓名(name)、性别(sex)、年龄(age);包括方法:display(),输出个人信息,吃饭(eat)、睡觉(sleep)、工作(work)。 public string Name; //姓名 protected int Age; //年龄 protected char Gender; //性别 public Person() //默认构造函数 { Console.WriteLine("===默认构造函数==="); } public Person(string name, int age, char gender) //定义带参构造函数,初始化属性值 { this.Name = name; //对属性sex和age的赋值范围进行限制 if (age < 0 || age > 200) { Console.WriteLine("年龄不得小于0 或大于200!"); age = 0; } this.Age = age; if (gender != '男' && gender != '女') { Console.WriteLine("性别只能为“男”或“女”!"); gender = '男'; } this.Gender = gender; } ~Person() //定义析构函数,输出Person对象的信息 { Console.WriteLine("===析构函数==="); Console.WriteLine("姓名:" + Name + " 年龄:" + Age + " 性别:" + Gender); } public virtual void display() //display()函数 { Console.WriteLine("你好,我叫" + Name + ",性别" + Gender + ",今年" + Age + "岁。"); } public void eat() { Console.WriteLine("我在吃饭。"); } //吃饭方法 public void sleep() { Console.WriteLine("我在睡觉。"); } //睡觉方法 public virtual void work() { Console.WriteLine("我在工作。"); } //工作方法 } public class Student : Person //根据Person类,派生一个学生类(Student) { //属性:学校(school)、学号(number)、语数外各科成绩(scores,一个数组)、和平均成绩 //const int MAX = 3; protected string School; public int Number; //protected double[] Scores = new double[MAX]; public double AvrScore { get { return Average(); } } protected double _Math; protected double Chinese; protected double English; public double this[int index] { get { if (index == 0) return _Math; else if (index == 1) return Chinese; else if (index == 2) return English; else return 0; } set { if (value > 0 && value <= 100) //赋值范围0-100分 { if (index == 0) _Math = value; else if (index == 1) Chinese = value; else if (index == 2) English = value; } else Console.WriteLine("成绩范围为0-100!"); } } //定义Student的带参构造函数,实现学生属性的初始化,部分属性调用父类构造函数来实现 public Student(string school, int number, double math, double chinese, double english, string name, int age, char gender) :base(name,age,gender) { this.School = school; this.Number = number; if (math < 0 || math > 100) { Console.WriteLine("数学成绩范围为0-100!"); math = 0; } this._Math = math; if (chinese < 0 || chinese > 100) { Console.WriteLine("语文成绩范围为0-100!"); chinese = 0; } this.Chinese = chinese; if (english < 0 || english > 100) { Console.WriteLine("英语成绩范围为0-100!"); english = 0; } this.English = english; } public double Total() //总成绩 { double total = _Math + Chinese + English; return total; } public double Average() //平均成绩 { return Total() / 3; } public override void display() //重写display方法,输出学生信息 { Console.WriteLine("姓名:" + Name + " 性别:" + Gender + " 年龄:" + Age + " 所在学校:" + School + " 学号:" + Number + " 语数外成绩:" + Chinese + " " + _Math + " " + English + " 平均成绩:" + AvrScore); } public override void work() //重写工作方法(学生的工作是学习) { Console.WriteLine("学生的工作是学习。"); } public static double operator +(Student s1, Student s2) //重载加法运算符,两个学生对象相加等价于学生平均成绩相加 { return s1.AvrScore + s2.AvrScore; } } //根据Person类,派生一个工人类(Worker),增加属性:单位,工龄;重写工作方法 public class Worker : Person { protected string Career; //工作单位 protected int Years; //工龄 public Worker(string name, int age, char gender,string career,int years) : base(name, age, gender) { this.Career = career; this.Years = years; } public override void display() { Console.WriteLine("姓名:" + Name + " 性别:" + Gender + " 年龄:" + Age + " 职业:" + Career + " 工龄:" + Years); } public override void work() //重写工作方法 { Console.WriteLine("我的工作是:"+Career); } } public class StudentLeading : Student //根据学生类,派生一个学生*类(StudentLeading) {//增加属性:职务(job);增加方法:开会(meeting) protected string Job; public StudentLeading(string school, int number, double math, double chinese, double english, string name, int age, char gender, string job) : base(school, number, math, chinese, english, name, age, gender) { this.Job = job; } public void meeting() { Console.WriteLine("我是学生*,我在开会。"); } } internal class Program { static void Main(string[] args) { //编写主类分别对上述3类具体人物进行测试。 Student student = new Student("南华大学", 0001, 89, 88, 90, "张三", 21, '男'); Student student1 = new Student("南华大学", 00015, 79, 98, 87, "王五", 19, '男'); Worker worker = new Worker("赵六", 33, '男', "工程师", 3); StudentLeading studentLeading = new StudentLeading("南华大学", 0002, 90, 93, 87, "李四", 21, '女', "学生会会长"); student.display(); Console.WriteLine(student.Name + "总成绩为:" + student.Total()); student.work(); var result = student.AvrScore + student1.AvrScore; Console.WriteLine(student.Name + "和" + student1.Name + "的平均成绩之和为:" + result); student.eat(); Console.WriteLine("================以上为Student类信息================"); Console.WriteLine(); worker.display(); worker.work(); Console.WriteLine("================以上为Worker类信息================"); Console.WriteLine(); studentLeading.meeting(); Console.WriteLine("================以上为StudentLeading类信息================"); //在主函数中定义学生数组或者集合,并对集合初始化,实现对学生数组的排序(实现按学号、按姓名、按平均成绩排序) Student[] students = new Student[5]; students[0] = new Student("南华大学", 2018, 79, 98, 87, "王五", 19, '男'); students[1] = new Student("南华大学", 2023, 66, 99, 84, "小红", 18, '女'); students[2] = new Student("南华大学", 2020, 79, 88, 85, "小花", 20, '女'); students[3] = new Student("南华大学", 2019, 67, 67, 69, "小明", 22, '男'); students[4] = new Student("南华大学", 2022, 77, 98, 87, "小刚", 25, '男'); List<Student> stu=new List<Student>(); for (int i = 0; i < 5; i++) //将数组加入list集合中 { stu.Add(students[i]); } Console.WriteLine("数组排序前序列:"); //输出数组排序前序列 for(int i = 0; i < 5; i++) { Console.WriteLine("学号:"+students[i].Number+" 姓名:"+students[i].Name+" 平均成绩:"+students[i].AvrScore); } //按照学生学号进行排序 List<Student> sortedNum = stu.OrderBy(s => s.Number).ToList(); Console.WriteLine(); Console.WriteLine("==========数组按照学生学号进行排序后序列=========="); //输出数组排序后序列 for (int i = 0; i < 5; i++) { Console.WriteLine("学号:" + sortedNum[i].Number + " 姓名:" + sortedNum[i].Name + " 平均成绩:" + sortedNum[i].AvrScore); } //按照学生姓名进行排序 List<Student> sortedName = stu.OrderBy(s => s.Name).ToList(); Console.WriteLine(); Console.WriteLine("==========数组按照学生姓名进行排序后序列=========="); //输出数组排序后序列 for (int i = 0; i < 5; i++) { Console.WriteLine("学号:" + sortedName[i].Number + " 姓名:" + sortedName[i].Name + " 平均成绩:" + sortedName[i].AvrScore); } List<Student> sortedAvrScore = stu.OrderBy(s => s.AvrScore).ToList(); Console.WriteLine(); Console.WriteLine("==========数组按照学生平均成绩进行排序后序列=========="); //输出数组排序后序列 for (int i = 0; i < 5; i++) { Console.WriteLine("学号:" + sortedAvrScore[i].Number + " 姓名:" + sortedAvrScore[i].Name + " 平均成绩:" + sortedAvrScore[i].AvrScore); } Console.ReadKey(); } } }