河北工业大学N E T程序设计C实验报告实验三
Company number:【0089WT-8898YT-W8CCB-BUUT-202108】
《C#》
实验报告
姓名:王璐
学号: 142871
日期: 2016/04/24
实验名称: 面向对象编程
成绩:
实验一类和对象编程
一、实验目的及要求
【实验目的】
1.如何创建类和对象。
2.如何为定义的类编写相应的方法。
3.如何通过属性访问对象中的数据
【实验要求】
1.写出程序,并调试程序,要给出测试数据和实验结果。
2.整理上机步骤,总结经验和体会。
3.完成实验日志和上交程序。
二、实验环境
Windows 7操作系统,Visual Studio 2005及以上版本
三、实验内容(题目、源代码、关键代码解释、运行结果、实验总结)【实验1-1-1】
编写一个控制台应用程序,定义并使用一个时间类,该类包含时、分、秒字段与属性,具有将时间增加1秒、1分和1小时的方法,具有分别显示时、分、秒和同时显示时分秒的方法。
1、源代码:
using System;
public class Time
{
.");
= =刚刚发现前面的minute全写成minute了..英语不太..
= ();
("现在加一秒功能:");
();
();
("现在加一分功能:");
();
();
("现在加一时功能:");
();
();
("现在依次调用三个方法输出时分秒:");
();
();
();
}
}
2、关键代码解释:
1)时钟循环需要取模运算,如第25时为25%24=1,即1时;另外还要注意秒的增加带给分、时的影响等。
2)加时功能直接使用time++,并注意判断对其他时间的影响
3)获取时间采用了DataTime里的函数,直接获取系统时间。
3、运行结果
4、实验总结
结合实践明白了属性的用法与含义,并且通过百度了解了怎么从系统中读取现在的时间。【实验1-1-2】
编写一个控制台应用程序,程序中有两个类定义,一个是创建程序时系统自动创建的类Class1,一个是用户自定义的Student类,要求该类包含私有字段:学号(字符串)、姓名(字符串)和性别(字符),具有三个属性:学号(读写)、姓名(只读)、性别(读写),具有有参构造方法、具有同时显示学生个人信息的方法。在Class1·中完成以下功能:
1)从键盘上输入一个学生的个人信息(学号、姓名、性别)。
2)修改该学生的学号和性别。
3)打印修改前后该学生的个人信息。
1、源代码
using System;
public class Student
{
解继承的含义,掌握派生类的定义方法和实现;
2.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够
对使用虚函数的简单程序写出程序结果。
3.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;
4.编写体现类多态性(成员方法重载,构造方法重载)的程序。
【实验要求】
1.写出程序,并调试程序,要给出测试数据和实验结果。
2.整理上机步骤,总结经验和体会。
3.完成实验日志和上交程序。
二、实验环境
Windows 7操作系统,Visual Studio 2005及以上版本
三、实验内容(题目、源代码、关键代码解释、运行结果、实验总结)
【实验1-2-1】
创建一个描述图书信息的类并测试。类中应保存有图书的书号、标题、作者、出版社、价格等信息。
1)定义图书类Book,Book类中包含isbn(书号)、title(标题)、author(作者)、press(出版社)、price(价格)等私有字段。由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。
2)为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。
3)为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。
4)为Book类定义方法Show,Show方法用于显示图书的所有信息。
5)编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。
1、源代码
using System;
public class Book
{
tore();
}
();
("请选择按什么排序:、书名2、作者3、存库量");
int a = ());
switch (a)
{
case 1:
{
("按书名从小到大排序");
for (i = 0; i < 2; i++)
{
for (int j = i; j < 3; j++)
{
if (card[i].Name, card[j].Name) > 0)
{
temp = card[i];
card[i] = card[i + 1];
card[i + 1] = temp;
}
}
}
for (i = 0; i < 3; i++)
{
card[i].Show();
}
}
break;
case 2:
{
("按作者从小到大排序");
for (i = 0; i < 2; i++)
{
for (int j = i; j < 3; j++)
{
if (card[i].Author, card[j].Author) > 0)how(); }
}
break;
case 3:
{
("按存库量从小到大排序");
for (i = 0; i < 2; i++)
{
for (int j = i; j < 3; j++)
{
if (card[i].Num-card[j].Num> 0)
{
temp = card[i];
card[i] = card[i + 1];
card[i + 1] = temp;
}
}
}
for (i = 0; i < 3; i++)
{
card[i].Show();
}
}
break;
default:
("输入错误。");
break;
}
}
}
2、实验结果(实验结果检测时选择了用2号--按作者从小到大排序)
3、实验总结
学会了定义对象的数组,应该先创建数组,再依次对里面的所有成员进行创建。
经过查阅学会了比较函数的使用。
类的多态性练习
【实验1-2-4】
设计雇员系统。
1)定义雇员基类,共同的属性,姓名、地址和出生日期;
2)派生类:程序员,秘书,高层管理,清洁工,他们有不同的工资算法,其中高级主管和程序员采用底薪加提成的方式,高级主管和程序员的底薪分别是5000元和2000元,秘书和清洁工采用工资的方式,工资分别是3000和1000,以多态的方式处理程序。
1、源代码
using System;
public class Employee
{
private string name;了解什么是接口,接口和抽象类的异同,掌握接口的方法实现,接口方法的重定义。
【实验要求】
1. 写出程序,并调试程序,要给出测试数据和实验结果。
2. 整理上机步骤,总结经验和体会。
3. 完成实验日志和上交程序。
【实验内容】
分析实现接口的程序文件分析以下实现接口的程序文件并回答问题:
●本程序中的接口包含方法的构成是哪些
CompareTo(IComparable comp)
●实现接口的类包含哪些元素
private uint totalSeconds;
public TimeSpan()
public Time Span(uint initialSeconds)
public uint Seconds
public int CompareTo(IComparable comp)
●类实现接口方法的参数如何变换实现的
public int CompareTo(IComparable comp)
{
TimeSpan compareTime = (TimeSpan)comp;
if (totalSeconds >
return 1;
else if == totalSeconds)
return 0;
else
return -1;
}
●给出程序的输出结果
实验四委托编程【实验目的】
1.了解委托的概念,掌握委托的使用;
【实验要求】
1. 理解委托应用的程序;
2. 写出委托应用程序;
3. 调试程序,要给出测试数据和实验结果。
4. 整理上机步骤,总结经验和体会。
5. 完成实验日志和上交程序。
【实验内容】
委托及其方法的实现程序
程序功能:定义一个含有两个整型参数名叫Calculation返回类型为double的委托,分别实现两个匹配的求和、求平均值的方法,并在主函数中测试它。
1、源代码
using System;
public delegate double Calculation(double m, double n);调试程序,要给出测试数据和实验结果。
2. 整理上机步骤,总结经验和体会。
3. 完成实验日志和上交程序。
【实验内容】
异常处理
设计类,实现异常处理。
1)建立一个名字为Meteorologist的类,其中含有一个12个int类型元素的数组rainfall,通过构造函数给赋值;一个方法头为public int GetRainfall(int index),此方法返回rainfall元素中与给定的index对应的值,在GetRainfall添加处理任何从GetRainfall方法中抛出的越界异常所需要的代码。
2)为读取每月降雨从空中吸收并带到地面的污染物,在类中添加数组pollution,也包含12个元素,在构造方法中赋任意值;在类中编写另一个方法,头为:public int GetAveragePollution(int index),来计算给定月份单位降雨量中的污染物,例如,计算4月份单位降雨量所含污染物用以下计算来实现:
averagePollution=pollutin[3]/rainfall[3];在此方法中实现处理异常的代码。注意,此方法既可以抛出索引越界异常,也可以抛出被0除异常。
3)编写测试代码。
1、源代码
using System;
public class Meteorologist
{
public int[] rainfall;
public int[] pollution = new int[12];
public double averagePollution;
public Meteorologist() //构造函数
{
rainfall = new int[] { 20, 0, 24, 19, 20, 25, 17, 18, 15, 30, 20, 20 };
("请输入~月的污染物含量(单位ml)");
for (int i = 0; i < 12; i++)
{
pollution[i] = ());
}
}
public int GetRainfall(int index) //返回rainfall元素中与给定得index对应的值
{
try
{
return rainfall[index];
}
catch (IndexOutOfRangeException)
{
("数组下标越界异常");
return 0;
}
catch (FormatException)
{
("数组下标非数字异常");
}
}
public int GetAveragePollution(int index)//计算给定月份单位降雨量中的污染物
{
try
{
averagePollution = pollution[index] / GetRainfall(index);
averagePollution = (double)pollution[index] / (double)GetRainfall(index);
}
catch (IndexOutOfRangeException)
{
("数组下标越界异常");
}
catch (DivideByZeroException)
{
("除数为零异常");
}
string k = "n";
("已打开Start文件,稍后请将其关闭!");
();
lop2: ("Start文件仍在运行中,是否将其关闭(Y/N)");
k = ();
if (k == "y" || k == "Y")
{
("Closing WeatherXYZ file");
goto lop1;
}
else
goto lop2;
lop1:
("Start文件已经关闭,程序将继续运行"); //输出
("{0}月份单位降雨量所含污染物百分比为:{1}%", index, averagePollution * 100);
return 0;
}
}
public class Text
{
public static void Main()
{
int mon;
("单位降雨量所含污染物百分比计算");
Meteorologist Mt = new Meteorologist();
("请输入您所要计算的月份");
mon = ());
}
}
2、实验结果