C#课程实验
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();
}
}
}