C#实验报告S8.docx

上传人:b****6 文档编号:3639781 上传时间:2022-11-24 格式:DOCX 页数:12 大小:924.82KB
下载 相关 举报
C#实验报告S8.docx_第1页
第1页 / 共12页
C#实验报告S8.docx_第2页
第2页 / 共12页
C#实验报告S8.docx_第3页
第3页 / 共12页
C#实验报告S8.docx_第4页
第4页 / 共12页
C#实验报告S8.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C#实验报告S8.docx

《C#实验报告S8.docx》由会员分享,可在线阅读,更多相关《C#实验报告S8.docx(12页珍藏版)》请在冰豆网上搜索。

C#实验报告S8.docx

C#实验报告S8

实验8

实验日期和时间:

2014/11/16

实验室:

1栋实验楼

班级:

12计科4

学号:

20123569

姓名:

施文君

实验环境:

硬件:

Windows7旗舰版(32位/DirectX11),VS2010

软件:

CPU:

英特尔Pentium(奔腾)双核T4300@2.10GHz,

内存:

2GB(海力士DDR2800MHz)

硬盘:

希捷ST9500325AS(500GB)

显卡:

ATIMobilityRadeonHD4570(M92)(512MB/华硕)

实验主要任务:

1、设计一个Windows应用程序,随机生成0—100之间的10个数字,并通过实现升序排列。

操作步骤如下:

(1)在Windows窗体中添加窗体控件。

(2)切换到源代码编辑视图,在窗体类中定义委托、排序的方法。

(3)编写按钮的Click事件方法。

(4)运行程序并测试程序。

2、设计一个Windows应用程序,模拟高温高压锅炉降压处理。

操作步骤如下:

(1)在Windows窗体中添加窗体控件。

其中,Timer1为计时器控件,用于产生计时事件;pictureBox1是图像框控件,用于显示图片。

(2)切换到源代码编辑视图,在窗体类中定义锅炉数据参数BoilerArgs和锅炉类Boiler。

前者在发生警报时传递数据给事件接收器,后者包含警报事件,并且能触发警报。

(3)在窗体类的构造函数中,创建锅炉对象并预订警报事件。

(4)在窗体类中,声明警报事件方法boiler_Alarm。

(5)编写“启动锅炉”和“手动降压”按钮的Click事件方法以及Timerl控件的Tick事件方法。

(6)运行程序并测试程序。

 

以下内容填写请利用截屏图片和文字对实验原理和实验效果进行说明

任务1()完成情况:

实际效果如下:

1.设计效果和代码如下:

int[]a=newint[10];

delegateboolCompare(intx,inty);

voidSortArray(Comparecompare)

{

for(inti=0;i

for(intj=0;j<=1;j++)

if(compare(a[i],a[j]))

{intt=a[i];a[i]=a[j];a[j]=t;}

}

boolAscending(intx,inty)

{returnx

boolDesecding(intx,inty)

{returnx>y;}

voiddisplay()

{

textBox2.Text="";

foreach(intiina)

{textBox2.Text+=i+"\r\n";}

}

privatevoidbutton1_Click(objectsender,EventArgse)

{

textBox1.Text="";

textBox2.Text="";

Randomr=newRandom();

for(inti=0;i

{

a[i]=r.Next(100);

textBox1.Text+=a[i]+"\r\n";

}

}

privatevoidbutton2_Click(objectsender,EventArgse)

{

SortArray(newCompare(Ascending));

display();

}

privatevoidbutton3_Click(objectsender,EventArgse)

{

SortArray(newCompare(Desecding));

display();

}

 

2.调试运行的结果如下:

自我评价:

达到了实验预计的效果。

 

任务2()完成情况:

实际效果如下:

1.设计效果和代码如下:

publicclassBoilerArgs:

EventArgs

{

privateintpressure;

publicBoilerArgs(intn)

{pressure=n;}

publicintPress

{

get

{returnpressure;}

}

}

 

publicclassBoiler

{

publicintk;

publicBoiler()

{k=0;}

publicEventHandleronAlarm;

publicvoidProcessAlarm()

{this.onAlarm(this,newBoilerArgs(k));}

}

 

privateBoilerboiler;

publicForm1()

{

InitializeComponent();

boiler=newBoiler();

if(boiler.onAlarm==null)

boiler.onAlarm+=newEventHandler(boiler_Alarm);

}

 

privatevoidboiler_Alarm(objectsender,BoilerArgse)

{

if(e.Press>50&&e.Press<80)

lblShow.Text="黄色警告!

";

elseif(e.Press>=80&&e.Press<90)

lblShow.Text="橙色警告!

";

elseif(e.Press>=90&&e.Press<100)

lblShow.Text="红色警告!

";

elseif(e.Press==100)

{

lblShow.Text="已经降压!

";

txtPressure.Text=30+"MPa";

boiler.k=30;

}

}

privatevoidbtnStart_Click(objectsender,EventArgse)

{

autoTimer.Start();

}

privatevoidbtmManual_Click(objectsender,EventArgse)

{

txtPressure.Text=30+"MPa";

boiler.k=30;

}

privatevoidautoTimer_Tick(objectsender,EventArgse)

{

boiler.k++;

txtPressure.Text=boiler.k+"MPa";

boiler.ProcessAlarm();

}

 

2.调试运行的结果如下:

自我评价:

达到了实验预计的效果。

实验原理

 

C#中事件机制的工作过程如下:

(1)将实际应用中需通过事件机制解决的问题对象注册到相应的事件处理程序上,表示今后当该对象的状态发生变化时,该对象有权使用它注册的事件处理程序。

(2)当事件发生时,触发事件的对象就会调用该对象所有已注册的事件处理程序。

一、定义委托

定义委托的语法如下:

<访问修饰符>delegate返回类型委托名();

定义委托和定义方法很相似,委托没有具体的实现体,由关键字delegate声明,直接以分号结束。

委托能够代表什么样的方法,由它的返回值类型和参数列表决定。

如下定义如下委托:

publicdelegatevoidMyDelegate(stringname);

那么使用MyDelegate委托代表的只可以是没有返回值,参数为一个字符串的方法。

二、实例化委托

定义了委托之后,如何使用委托代表方法执行呢?

首先要实例化委托。

实例化委托就是将其指向某个方法,即调用委托的构造函数,并将相关联的方法作为参数传递。

如:

如一个方法

privateintAdd(intnum1,intnum2)

{

return(num1+num2);

}

委托声明了以后,就可以象类一样进行实例化,实例化时把要引用的方法(如:

Add)做为参数,这样委托和方法就关联了起来,就可以用委托来引用方法了。

委托和所引用的方法必须保持一致:

1、参数个数、类型、顺序必须完全一致。

2、返回值必须一致。

3、传入的方法中不能带参数,只写方法名。

三、调用委托

要调用委托的方法用委托的对象加参数,如果参数为空,也要加小括号。

为方法创建一个委托,然后立即通过这个委托调用该方法并没有太大意义,因为直接调用方法更简单。

动态调用方法时,委托才真正显示出它的效用。

usingSystem;

delegateintOperand(inta,intb);//第一步:

委托声明

classClass1

{

staticvoidMain(string[]args)

{

Class1c1=newClass1();

Operandope=newOperand(c1.Add);

//委托实例化,注意参数是要使用的参数名,且不带括号

Console.WriteLine(ope(10,20));//委托调用,调用委托的方法用

委托的对象加参数

Console.ReadLine();

}

//定义一个方法,求两个加数的和

privateintAdd(intnum1,intnum2)

{

return(num1+num2);

}

}

总结你在完成任务1-5的过程中遇到的问题及解决的方法:

我在调试运行任务一时,老是出现数组排列不正确的现象,我仔细检查发现是排序算法写错了,我修改后就可以执行了,我明白了再简单的程序都要认真写,这是程序员应有的品质。

本次实验小结:

本次实验又加深了我对label、button和textBox等控件的应用,掌握了事件的概念,理解了事件处理的机制,掌握了委托的声明、实例化与使用。

在设计程序的过程中理解了事件驱动编程的思想和Windows应用程序事件驱动编程方法,也掌握到事件的编程方法,包括事件的声明、预订和引用。

要求:

1.报告格式和内容要求:

a.内容和格式整齐。

大标题采用黑体四号字加粗,小标题采用小四号字加粗。

正文采用五号宋体,单倍行距。

b.贴图时请剪裁到适当大小,要保证打印时可以看清,但也不要太大以免“越界”。

c.不要在报告中写与实验无关的话,内容要有条理、完整、并能突出重点,要将遇到的主要问题说明。

2.文件格式要求:

a.将实验成果放入一个文件夹中,文件夹的内容包括:

本实验报告、项目。

b.文件夹以“学号姓名_S1”为文件名。

其中,S1表示这是实验1的报告,S大写,以后的实验报告以类似方法编号顺延,注意:

你的学号放在姓名前。

c.注意:

所有文件保存后关闭,然后再打包成RAR文件,以免提交的内容丢失或打不开。

3.提交方式和时间:

一周内完成。

可以将文件包发到我邮箱zcwang@。

4.主动查阅资料,坚持自己亲手完成实验,弄清每个步骤和相关原理。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1