某公司有各类员工,定义一个员工类(Employee),该类具有员工的姓名(Name)和基本薪金(Salary)等属性;并有一个虚方法(CalSalary)用于计算并输出员工的总薪金。
对不同的员工,薪金的计算方法不同。
(1)定义一个继承自员工类的销售员类(SalesPerson),销售员除了员工类的基本薪金外,还有一个销售提成属性(SaleCommission)。现在在派生类中重新编写基类的虚方法(CalSalary),计算并输出销售员类的总薪金。
(2)定义一个计件工人类(PiecePerson),其继承自员工类,计件工人除了员工类的基本薪金外,还有每件工资(PerPay)和生产的产品件数(Number)属性,在派生类中重新编写基类的虚方法(CalSalary)。
public class Employee
{
private string name; //姓名
private double salary; //基本薪金
public string Name
{
get { return name; }
set { name = value; }
}
public double Salary
{
get { return salary; }
set { salary = value; }
}
public virtual void CalSalary() //计算输出员工的总薪金的虚方法
{
Console.WriteLine("{0}的薪金为{1}", Name, Salary);
}
}
/// <summary>
/// 销售员类
/// </summary>
public class SalesPerson : Employee
{
private double salecommission;//新增提成薪金变量
public double SaleCommission //新增提成薪金属性
{
get { return salecommission; }
set { salecommission = value; }
}
public override void CalSalary()
//重写从基类Employee中继承的计算总工资方法 CalSalary
{
double totalSalary = Salary + SaleCommission;
Console.WriteLine("{0}的薪金为{1}", Name, totalSalary);
}
}
/// <summary>
/// 计件工人类
/// </summary>
public class PiecePerson : Employee
{
private double perpay; //新增每件工资变量
private int number; //新增产品件数变量
public double PerPay //新增每件工资属性
{
get { return perpay; }
set { perpay = value; }
}
public int Number //新增产品件数属性
{
get { return number; }
set { number = value; }
}
public override void CalSalary() //重写从基类Employee中继承的计算总工资方法 CalSalary
{
double totalSalary = Salary + PerPay * Number;
Console.WriteLine("{0}的薪金为{1}", Name, totalSalary);
}
}
class Program
{
static void Main(string[] args)
{
SalesPerson sp = new SalesPerson();
Console.Write("请输入销售员工的姓名:");
sp.Name = Console.ReadLine();
Console.Write("请输入该销售员工的基本工资");
sp.Salary = Convert.ToDouble(Console.ReadLine());
Console.Write("请输入该销售员工的新增提成薪金");
sp.SaleCommission = Convert.ToDouble(Console.ReadLine());
sp.CalSalary();
Console.WriteLine(); Console.WriteLine();
PiecePerson pp = new PiecePerson();
Console.Write("请输入计件员工的姓名:");
pp.Name = Console.ReadLine();
Console.Write("请输入该计件员工的基本工资");
pp.Salary = Convert.ToDouble(Console.ReadLine());
Console.Write("请输入该计件员工的生产产品的每件工资");
pp.PerPay = Convert.ToDouble(Console.ReadLine());
Console.Write("请输入该计件员工的生产的产品件数");
pp.Number = Convert.ToInt32(Console.ReadLine());
pp.CalSalary();
Console.ReadLine();
}
}