OOP_多态(C#)
一个评选优秀教师和学生的程序,其类结构如图1所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出。
code:
namespace DuoTaiGoodStuTeach
{
public class Base
{
public int num;
protected string name;
public Base(string name)
{ this.name = name; }
public virtual void getnum()
{ }
public virtual int ifgood()
{ return 0; }
public void pritname()
{ Console.Write(this.name); }
}
public class Student : Base
{
public int numS; /下面调用基类的构造函数
public Student(string nameS)
: base(nameS)
{ }
public override void getnum()
{
numS=Convert.ToInt32(Console.ReadLine());
//return base.getnum();
}
public override int ifgood()
{
if (numS >70) return 1;
else return 0;
}
}
public class Teacher : Base
{
public int numT;
public Teacher(string nameT)
: base(nameT)
{ }
public override void getnum()
{
numT = Convert.ToInt32(Console.ReadLine());
}
public override int ifgood()
{
if (numT > 3) return 1;
else return 0;
}
}
class Program
{
static void Main(string[] args)
{
string continu = "y"; string[] goodS = new string[66]; int i = 0; int flag = 0; int flag2 = 0; //int k = 0;
while (continu == "y")
{ Console.WriteLine("Input teacher(t) or student(s):");
string choice= Console.ReadLine();
switch (choice)
{
case "s":
Console.Write("姓名:");
string nameS = Console.ReadLine();
Student baseS = new Student(nameS);
Console.Write("成绩:");flag+=1;//记录输入(姓名成绩)的学生个数
baseS.getnum(); //int numS =Convert.ToInt32(Console.ReadLine());
while (baseS.ifgood() == 1)
{
goodS[i] = nameS;i += 1;
break;
}
Console.Write("continue(y/n)?");
if (Console.ReadLine() == continu)
{ continue; }
else
{
// continu = "n";
//Console.Write("优秀者的姓名:");
//for (int j = 0; j < flag; j++)
//{
// Console.Write(goodS[j]+" ");
//}
break;
}
case "t":
Console.Write("姓名:");
string nameT = Console.ReadLine();
Teacher baseT = new Teacher(nameT);
Console.Write("每年发表论文数:");flag2+=1;//记录输入(姓名成绩)的老师个数
baseT.getnum();
while (baseT.ifgood()==1)
{
goodS[i] = nameT; i += 1; //老师和学生全存在goodS[]中
break;
}
Console.Write("continue(y/n)?");
if (Console.ReadLine() == continu)
{ continue; }
else
{
break;
}
default:
break;
}
continu = "n";
Console.Write("优秀者的姓名:");
for (int j = 0; j < i;j++)//flag+flag2; j++)
{
Console.Write(goodS[j] + " ");
}
}
}
}
}