您好,欢迎访问三七文档
实验4:C#面向对象程序设计——类的设计和使用实验目的和要求:熟悉面向对象的基本概念;进一步掌握类的成员的设计和使用方法;掌握对象之间通信的基本方法;实验内容温馨提示:本次实验内容包括两部分:(1)题目1和题目2用于进一步熟悉和练习类的各类成员的设计和使用方法。同学们可利用一次实验时间完成这两个题目。(2)题目3用于测试同学们对类的成员的设计和使用的能力,也用于后面系统设计项目中对学生信息的管理和使用,同学们可以在项目L4_3中使用“添加”——“类…”命令,将Student类和StudentInfo类作为项目中单独的一个类文件。这样当在其他项目中用到某类时,可以直接将需要的类复制到其他项目中即可。当然,为了更好的实现代码的可重用,同学们也可以添加一个类库项目,将Student类和StudentInfo类作为类库项目中的类进行设计,当在其他的项目中用到这些类的时候,通过“添加引用”的方式引用它们。同学们可利用一次实验时间完成题目3。1、点和直线类的设计和使用(1)创建C#控制台应用程序L4_1。(2)使用“添加”——“类(C)…”命令在项目中新建一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标。(3)为CzPoint定义两个公有属性X、Y,分别用于封装对字段x和y的读写访问。(4)定义CzPoint的带参数构造函数,在其中对字段x和y进行初始化。(5)为CzPoint定义公有方法Move,用于按指定的水平距离和垂直距离移动坐标点。(6)对CzPoint类进行相等(==)和不相等(!=)操作符重载。两个坐标点相等,是指它2们的横坐标和纵坐标都相等。(7)在程序主方法中创建两个坐标点对象,判断它们是否相等;而后将第一个坐标点移动到第二个坐标点上,再判断它们是否相等。(8)使用“添加”——“类(C)…”命令在项目中再新建一个直线类CzLine,为其定义两个double类型的字段成员a和b,分别表示直线的斜率和截距;再定义字段封装属性A和B,但它们都是只读的。(9)为CzLine定义两个构造函数,一个根据斜率和截距来创建直线对象,另一个则根据两个CzPoint对象来构造直线对象(直线穿过这两个点)。后一个的参考源代码如下(因涉及数学公式,故给出代码):publicCzLine(CzPointp1,CzPointp2){this.a=(p2.Y-p1.Y)/(p2.X-p1.X);this.b=p1.Y-this.a*p1.X;}(10)为CzLine定义公有方法Move,但它只用于平移直线,而不改变直线的斜率(即平移后的直线与原来的直线平行)。(11)为CzLine定义公有方法Contains,用于判断某点是否在该直线上。(11)类似的,为CzLine重载相等(==)和不相等(!=)操作符。(12)最后在程序主方法中采用不同的方式创建直线对象,并编译运行程序,测试它们的使用效果。2、向量类的设计和使用(1)创建C#控制台应用程序L4_2。(2)使用“添加”——“类(C)…”命令在项目中创建一个向量类CzVector,在其中定义一个double[]类型的私有字段_values,用于维护向量的各个元素值。(3)为CzVector定义三个公有属性Length、Sum和Prod,分别用于返回向量的长度、向量所有元素的和以及向量所有元素的积。(4)在CzVector中定义一个索引函数,用于获取或设置各个元素的值。(5)为CzVector定义两个构造函数,一个根据指定长度对向量进行初始化(向量各元素取默认值0),另一个由指定的数组来构造向量并设置各元素的值。(6)利用操作符重载来实现向量加法、减法和乘法。这三种运算均要求两个向量的长度相等。设向量α=(a1,a2,…an),β=(b1,b2,…bn),那么α+β=(a1+b1,a2+b2,….,an+bn),减法与之类似,而α*β=a1*b1+a2*b2+….+an*bn)。另外,一个向量还可以单独乘以一个系数(向量加法的重载形式),此时,λ*α=(λ*a1,λ*a2,…λ*an)。以加法操作符重载为例,参考源代码如下:3publicstaticCzVectoroperator+(CzVectorv1,CzVectorv2){if(v1.Length!=v2.Length)returnnull;CzVectorresult=newCzVector(v1.Length);for(inti=0;iv1.Length;i++)result[i]=v1[i]+v2[i];returnresult;}(7)类似的,利用操作符重载来判断两个向量是否相等。向量相等的条件是:两个向量的长度相等,且各个位置上的对应元素值也相等。(8)为CzVector定义一个ConsoleOutput方法,用于在控制台一行输出向量的所有元素,其之间以空格分割。(9)在程序主方法中随机定义几个向量对象,并测试其运算结果。参考源代码如下:staticvoidMain(){CzVectorv1=newCzVector(1,-5,9,6);CzVectorv2=newCzVector(0,1,2,3);Console.Write(“v1=“);v1.ConsoleOutput();Console.Write(“v2=“);v2.ConsoleOutput();CzVectorv3=v1+v2;Console.Write(“v1+v2=“);v3.ConsoleOutput();CzVectorv4=v1-v2;Console.Write(“v1-v2=“);v4.ConsoleOutput();Console.Write(“3*(v1+v2)=“);(v3*3).ConsoleOutput();Console.Write(“v1*v2={0}”,v1*v2);}3、学生管理类(设计型题目)的设计(1)创建C#控制台应用程序L4_3。(2)在项目中添加一个学生类Student,包含以下成员:4定义私有字段:学号_no,姓名_name,班级_class,成绩_score。定义Student类的构造函数,初始化4个私有字段。定义四个公有属性No,Name,Class以及Score,分别用于封装对各字段读写访问。(3)再定义一个StudentInfo类,用于对学生信息进行管理:该类包括下列成员:存放学生信息的Student[]类型的私有字段成员_list;存储学生最大数量的私有字段_maxcapacity;存储当前学生数量的私有字段_length;带参数的构造函数,根据指定长度对各私有字段进行初始化。定义类的只读公有属性:Maxcapacity属性、Currentlength属性、Restlength属性,分别用于返回列表的最大容量、已存信息的容量、剩余的最大容量。定义一个索引函数,用于实现根据学生的学号对信息进行读、写访问。(无论读或写操作都要求先判断学生是否存在)。定义公有方法AddInfo(返回类型为bool),用于向学生信息列表中添加学生信息(需要判断添加操作能否进行,即列表是否已满)。定义一个公有方法DeleteInfo返回类型为bool),用于根据学生学号删除信息。(需要判断学生是否存在)(4)在外部类中进行StudentInfo类的各种功能进行测试。
本文标题:C实验4-5
链接地址:https://www.777doc.com/doc-2908505 .html