1、实验四:类和对象 一、 实验目的1、掌握类的定义及类中的各个成员的使用。2、掌握属性和索引器的使用。3、掌握构造函数和析构函数的使用。4、掌握方法重载和运算符重载。二、 实验内容1、编写 students 类(1) 程序需求编写一个 students 类,其中有 3 个数据成员有学号、姓名、年龄,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用成员函数实现对数据的输出;使用构造函数实现对数据的输入。(2) 参考代码如下所示:public class studentsstring id,name;int age;public students(string id
2、,string name,int age )this.id = id;this.name = name;this.age = age;public void Display()Console.WriteLine(“id=0,name=1,age=2“,id,name,age);public static void Main()/string id, name;/int age;students stu = new students(“0001“,“zhangsan“,16);stu.Display();Console.ReadLine();2、编写 Date 类(1) 程序需求定义日期类型 D
3、ate。要求有以下面成员:年、月、日变量,重载的构造方法,一个实现年、月、日单独的输入,一个实现从系统时间里读出年月日,并实现打印方法成员,该方法要按照“XXXX 年 XX 月 XX 日”格式输出日期。(2) 参考代码如下所示:public class Dateprivate int Year, Month, Day;public Date(int Year, int Month,int Day)this.Year=Year;this.Month=Month;this.Day=Day;public Date(System.DateTime dt)Year = dt.Year;Month = d
4、t.Month;Day = dt.Day;public void DisplayDate()Console.WriteLine(“0年1月2日“,Year,Month,Day);public class Testerpublic static void Main()System.DateTime currentTime=System.DateTime.Now;Date dt=new Date(2008,7,18);dt.DisplayDate();Date dt2 = new Date(currentTime);dt2.DisplayDate();Console.ReadLine();3、编写
5、 BankAccount 类(1) 程序需求编写帐户类,对每一账号赋值帐户并设置初始化存款为 0.00 元,设计一变量统计账号生成的数目。(2) 参考代码如下所示:public class BankAccountstatic int totalAccountNumber=0;string BankAccountId;double initialDepositAmount = 0.00;public BankAccount(string myId)this.BankAccountId = myId;this.initialDepositAmount = 0.00;totalAccountNumb
6、er+;public void displayid()Console.WriteLine(“mbaid=0,initialDepositAmount=1“,this.BankAccountId,this.initialDepositAmount);public static void display()Console.WriteLine(“totalAccountNumber=0“, totalAccountNumber);public class Testerpublic static void Main()BankAccount mba = new BankAccount(“3700000
7、1“);BankAccount mba2 = new BankAccount(“3700002“);BankAccount mba3 = new BankAccount(“3700003“);BankAccount mba4 = new BankAccount(“3700004“);mba2.displayid();BankAccount.display();Console.ReadLine();三、上机作业1、计算职员工资(1) 程序需求编写一个程序,用于计算 3 个职员的工资,第一个职员默认的基本工资为1000 元。第二位职员除具有基本工资外,还具有住房津贴(HRAS),接受用户输入的基本
8、工资和住房津贴。第三位职员可能是经理也可能不是,如果是,则有奖金收入,应接受输入的奖金值。奖金应加到基本工资内。(2) 分析在 Employee 类中创建一个名为 ComputeSalary 的方法,为每个不同类别的职员重载该方法。2、使用构造函数重载计算职员工资(1) 程序需求修改上面创建的解决方案,以便使用默认构造函数和参数化构造函数(而不是方法)计算工资。(2) 分析在 Employee 类中重载构造函数,分别给不同类别的职员计算工资。3、模拟银行账户基本操作(1) 程序需求编写一个程序,用于模拟银行账户的基本操作,如为初始余额赋值、存取现金操作以及在使用任意方式修改余额后都可以随时查看
9、账户余额。请使用重载的带参数的构造函数。(2) 分析创建一个名为 Account 的类,该类包含一个名为 balance 的成员变量,编写一个默认构造函数,使用值 2000 初始化该成员变量。创建一个参数化构造函数,它可以传递任何整数以初始化 balance 变量。4、属性:旅行社程序(1) 程序需求为某旅行社编写一个程序,用于接收用户输入的旅游地点。接下来验证旅行社是否能满足用户对地点的请求,验证之后显示相应消息,给出该旅游套餐的费用。请使用属性。(2) 分析该问题需要两个字段,用于存储旅游地点和相应的套餐费用。现在,在接受用户输入的信息后,程序就会要求验证旅行社是否提供该特定的旅游套餐。此
10、外,如果定义一个读/写属性以验证用户输入并对其进行检索,就更合理。例如,如果旅行社只提供到加利福尼亚和北京的旅游服务,则可定义如下所示的读/写属性。public class Travel/ 用于存放费用和地点的字段private int _tourCost = 0; private string _location;/ 旅游费用为只读属性public int TourPrice get/基于地点指定旅游费用if (_location = “加利福尼亚“)return _tourCost = 250;elsereturn _tourCost = 190;/ 旅游地点为读/写属性public st
11、ring Locationgetreturn _location;set/ 验证输入if (value != “加利福尼亚“ else_location = value;5、索引器:计算 GPA 平均值(1) 程序需求编写一个程序,用于接受四年制大学生每年的 GPA(Grade Point Average,年级平均成绩),计算 GPA 平均值,并显示该值。(2) 分析在此问题中,需要定义一个数组,用于存放每年的 GPA 值。要存储和检索每年的 GPA 值,可以使用索引器。此外,年级可以用作索引器的索引,设置每年的 GPA 值时,需要验证年级是否从 1 到 4。此外,因为年级时从 1 到 4 且
12、存储 GPA 的数组是基于零的,所以可通过将用于获取相应索引的年级减去 1,来保持年级与数组的一一对应。可按照以下方式实现此目的。double gpas = new double4;/ 每年的GPA 的读/写索引器public double thisint yearget/ 验证年级if (year 4)Console.WriteLine(“错误:年级无效“);return -1;/ 因为数组是基于零的int index = year - 1;/ 返回GPA 值return gpasindex;setif (year 4)Console.WriteLine(“年级无效“);return;int index = year - 1;/ 设置新的GPA 值gpasindex = value;四、课后问题1、构造函数和异构函数的区别? 2、静态字段和实例字段的区别? 3、静态方法和实例方法的区别?