版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——VisualCNET程序设计作业3、在C#中实现面向对象的概念
目标
???
编写一个队列类的C#程序。this关键字的使用。
构造函数的重载和普通函数的重载。
第一部分指导(50分钟)
练习1:队列类的应用程序
问题
在数据结构中已经学习了队列,请用C#编写一个类实现队列的功能,并编写一个测试类测试该队列的功能。(参考.Net的类库中已经封装好了的队列类:System.Collections.Queue,可以将自己做好的类,和它进行比较)指导教师讲解问题说明
队列是限定所有的插入操作在表的一端进行,而删除操作在表的另一端进行的线性表,具有先进先出的特性。确定该队列中存储的值类型为整数类型。分析
一个队列有入排和出排动作,可以编写两个函数分别命名为EnQueue和DeQueue;还应当有一个属性Length:判断队列中的元素个数;一个打印的函数Print:将队列中所有的值进行打印输出。推荐步骤:
(1)新建一个名为“QueueWithCSharp〞的基于控制台应用程序的项目。(2)添加一个类,名为:Queue,添加以下代码。
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceQueueWithCSharp{publicclassNode{publicintdata;publicNodeprior,next;publicNode(){prior=null;next=null;data=0;}}publicclassQueue{Nodehead,rear;intlength;publicintLength{get{returnlength;}}publicQueue(){////TODO:在此处添加构造函数规律//head=rear=null;length=0;}publicvoidEnQueue(intdata)//追加{if(rear==null){rear=newNode();head=rear;rear.data=data;length++;}else{rear.next=newNode();rear.next.data=data;length++;rear=rear.next;}}publicintDeQueue()//删除{if(length
}}}(4)生成项目。
(5)选择“调试〞→“开始执行(不调试)〞选项来执行此应用程序。此程序的输出结果如图3.2所示。
图3.2练习2的输出结果
指导教师检查学生进度
练习3:构造函数的重载和普通函数的重载
问题
构造函数的重载和普通函数的重载指导教师讲解问题说明
方法的重载仅仅是根据方法的参数列表来决定是否两个同名的函数是不同的,而不包括方法的返回值。以下声明两个不同的函数是非法的:
Voidf(){}intf(){}分析
定义一个Tree类,该类对构造函数和info函数进行重载。最终在main函数中,采用不同的参数去实例Tree类对象和调用info方法。推荐步骤:
(1)创立一个名为“Overloading〞的控制台应用程序。(2)将以下代码添加到“Program.cs〞中。
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceOverloading{classProgram{classTree{intheight;publicTree(){Console.WriteLine(\height=0;}publicTree(inti){Console.WriteLine(\height=i;}internalvoidinfo(){Console.WriteLine(\}internalvoidinfo(strings){Console.WriteLine(s+\}}staticvoidMain(string[]args){for(inti=0;i
}privatevoidbtnLogIn_Click(objectsender,EventArgse){boolisValidUser=false;//标识是否为合法用户//假使验证通过,就显示相应的用户窗体,并将当前窗体设为不可见if(ValidateInput()){//调用用户验证方法isValidUser=ValidateUser(cboLogInType.Text,txtLogInId.Text,txtLogInPwd.Text);//假使是合法用户,显示相应的窗体if(isValidUser){//将输入的用户名保存到全局变量中name=txtLogInId.Text;//将选择的登录类型保存到全局变量中type=cboLogInType.Text;ShowUserForm();//显示相应用户的主窗体}}}//验证用户是否进行了输入和选择privateboolValidateInput(){if(txtLogInId.Text.Trim()==\{MessageBox.Show(\请输入用户名\输入提醒\MessageBoxIcon.Information);txtLogInId.Focus();returnfalse;}elseif(txtLogInPwd.Text.Trim()==\{MessageBox.Show(\请输入密码\输入提醒\MessageBoxIcon.Information);txtLogInPwd.Focus();returnfalse;}elseif(cboLogInType.Text.Trim()==\{MessageBox.Show(\请选择登录类型\输入提醒\MessageBoxIcon.Information);cboLogInType.Focus();returnfalse;}else{returntrue;}}//验证用户输入的用户名和密码是否正确//验证的结果有两种状况:通过和不通过,返回值为布尔型//不通过的原因可能有多种,在方法的参数中的message字符串,用以标识不通过的状况publicboolValidateUser(stringloginType,stringloginId,stringloginPwd){//创立Connection对象stringconnString=\SqlConnectionconnection=newSqlConnection(connString);intnum=0;//选员信息的数量//查询用的SQL语句stringsql=\pwd='\boolisExist=false;try{connection.Open();//开启数据库连接//创立Command对象SqlCommandcommand=newSqlCommand(sql,connection);//执行SQL查询num=(int)command.ExecuteScalar();if(num>0){isExist=true;}else{MessageBox.Show(\数据库中无此记录!\提醒信息\MessageBoxIcon.Information);}}catch(Exceptionex){//操作出错MessageBox.Show(\连接数据库出错!\}finally{//关闭数据库连接connection.Close();}returnisExist;}//根据登录类型,显示相应的窗体publicvoidShowUserForm(){MessageBox.Show(\欢迎使用该系统:\}privatevoidbtnCancel_Click(objectsender,EventArgse){Application.Exit();}}}(7)保存并构建应用程序。执行应用程序,以验证其工作状况。运行效果如下图:
登录界面图
练习2:多表查询的应用
问题
创立一个多表查询应用程序,通过编写代码实现数据库操作功能的一般方法。设已创立了一个名为员工工资的Access数据库,其中包括表employee(存放员工基本信息)和表pay(存放员工工资信息)。程序设计要求:
1)要求分别从上述两表中取出一些字段组成多表关联。
2)要求将“应发工资〞字段排列在“奖金〞字段之后,“扣税〞字段之前。“实发工资〞为最终一个字段。3)要求程序具有按部门进行筛选记录的功能。指导教师讲解问题说明
分析
数据库中表的设计如下图所示:
employee表设计图
pay表设计图
程序运行结果如下图所示:
显示全部员工工资状况
筛选属于“财务室〞的员工工资状况
解决方案:
(2)开启标题为\选择数据源\的ComboBox控件下拉列表,单击\添加项目数据源?\,开启\数据源配置向导\对话框,选中\数据库\,单击\下一步\按钮,开启下一个\数据源配置向导\对话框。可以选择已有的数据库连接,也可以建立新的数据库连接。这里单击\新建连接(C)?\按钮,开启\添加连接\对话框。(3)当向导提醒选择数据库对象时可选择数据库中所有的表。
(4)在“数据源〞窗格中右键单击数据源employeeDataSet,在弹出的快捷菜单中执行“使用设计器编辑数据集〞命令开启设计器窗口,右键单击employee表下方的“employeeTableAdpter〞在弹出的快捷菜单中执行“配置〞命令,启动TableAdapter配置向导。界面如下图:
(1)建立一个新项目。放DataGridView控件到窗体。选中该控件,单击该控件右上角标题为一箭头的按钮,将开启一窗体。
数据源视图
(5)修改SQL语句为如下内容:
SELECTemployee.编号,employee.姓名,employee.部门,pay.基本工资,pay.职务工资,pay.补贴,pay.奖金,pay.基本工资+pay.职务工资+pay.补贴+pay.奖金AS应发工资,pay.扣税,pay.基本工资+pay.职务工资+pay.补贴+pay.奖金-pay.扣税AS实发工资FROM(employeeINNERJOINpayONemployee.编号=pay.编号)
(6)向窗体上添加1个标签控件,1个文本框控件、3个按钮控件切换到窗体设计窗口,设置标签Label1、按钮button1、(7)程序代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceMultiTableQuery{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){//TODO:这行代码将数据加载到表“employeeDataSet.employee〞中。您可以根据需要移动或移除它。this.employeeTableAdapter.Fill(this.employeeDataSet.employee);}privatevoidbtnQuery_Click(objectsender,EventArgse){//定义变量dvresult为DataView类型,并为其赋值当前DataSet的缺省视图DataViewdvresult=employeeDataSet.employee.DefaultView;//设置DataView中的数据按部门列排序dvresult.Sort=\部门\//设置过滤器,仅显示指定部门的行dvresult.RowFilter=\部门='\//设置行状态过滤器dvresult.RowStateFilter=DataViewRowState.CurrentRows;//指定DataGridView控件的新数据源为按部门过滤后的DataViewdataGridView1.DataSource=dvresult;}privatevoidbtnAll_Click(objectsender,EventArgse){button2、button3的Text属性分别为:“输入部门名称〞、“查找〞、“显示全部〞和“退出〞。添加相应的事件处理函数。
DataViewdvresult=employeeDataSet.employee.DefaultView;dvresult.Sort=\部门\dvresult.RowFilter=\取消行过滤器dvresult.RowStateFilter=DataViewRowState.CurrentRows;dataGridView1.DataSource=dvresult;}privatevoidbtnQuit_Click(objectsender,EventArgse){Application.Exit();}}}(8)保存并构建应用程序。执行应用程序,以验证其工作状况。
其次部分练习(45分钟)
问题
数据库中有两张表:employee和pay,两者通过员工的编号字段进行连接,形成主从关系。指导教师讲解问题说明
在显示数据库员工工资的employee和pay表数据时,希望在employee表选中某个员工时,pay表只显示此员工的工资报酬状况,两个表的这种关系叫做主从关系。如下图所示:
主从表关系图
程序的设计界面如下图所示:
程序设计界面图
指导教师检查学生代码规范性
第三部分作业
指导教师布置作业该数据库的结构见下表。
创立如下图所示的WinForms应用程序。这个“病人管理系统〞应接受病人的详细信息,并将病人的记录插入SQL数据库中。
病人管理系统
病人管理系统的病人数据字典
列名称病人编号数据类型varchar长度50默认值主键是空外键否备注病人编号要求yyyymmdd_XXXX格式,如19900831_1234姓名年龄性别医生病症类别nvarcharintncharvarcharnTextvarchar8345165nullNull男否否否否否否可可可可可可否否否是否是年龄建议不超过200男或女病人管理系统的医生数据字典
列名称医生编号姓名性别科室数据类型varcharnvcharncharvarchar5844长度是否否否主键Null男null默认值否否否是外键否可可可空病人管理系统的科室表数据字典
列名称科室编号数据类型varchar4长度是主键默认值否外键否空科室名称Nvarcha10否null否可病人管理系统的类型表数据字典
列名称类别编号类别名称数据类型varcharNvarchar长度410主键是否默认值微弱外键否否空否否备注类别有:微弱、一般、重症、紧急7、数据库编程:检索操作数据
目标
??
熟练应用BindingSource和BindingNavigator控件。熟练使用DataAdapter和DataReader。
指导教师讲解阶段目标
第一部分指导(60分钟)
练习1:使用BindingSource和BindingNavigator控件操作数据库
问题
创立一个具有添加、删除、修改等功能的SQLServer数据库应用程序。指导教师讲解问题说明分析
指导教师讲解关键步骤
(1)连接SQLServer数据库
启动数据源配置向导,在“选择您的数据连接〞对话框中单击按钮,在“添加连接〞对话框中若默认的连接类型不正确,可单击按钮开启对话框,选择其中“MicrosoftSQLServer〞数据源类型,单击按钮。(2)TableAdapter配置向导
在程序窗体设计器下方可以看到由系统自动创立的4个对象:DataSet(数据集)、BindingSource(绑定到数据源)、TableAdapter(表适配器)和BindingNavigator(绑定到导航工具栏)。鼠标指向DataSet或TableAdapter单击右键,在弹出的快捷菜单中执行“在数据集编辑器中编辑〞命令开启对话框。右键单击表适配器,在弹出的快捷菜单中执行“配置〞命令,启动TableAdapter配置向导。
单击对话框中按钮,开启对话框。用户可根据程序的需要选择是否生成Insert(插入)、Update(更新)和Delete(删除)SQL语句。
返回(Get)及用于将更新直接发送到数据库的方法。单击按钮,在对话框中单击按钮终止TableAdapter配置向导。
单击“输入SQL语句〞对话框中的按钮,开启对话框。此处可以选择需要为TableAdapter生成哪些方法,如填充(Fill)、
(3)完善程序界面和代码
通过使用数据源配置向导和TableAdapter配置向导,创立的SQLServer数据库应用程序已具有了要求的功能。但为了使程序更加美观、更加人性化还需要进行一些简单的完善。设计界面如下图:
界面设计视图
表可以采用两种方式进行显示:DataGridView和详细信息。如采用详细信息方式时,列的显示方式就有多种选择,如TextBox、Label、ComboBox等。解决方案:
(1)创立一个名为“ConnectExam〞的基于Windows的应用程序。(2)添加数据源。(3)配置TableAdapter。(4)设计界面。(5)完善代码。
用户单击保存按钮时执行的事件过程代码修改如下:
privatevoidstudentBindingNavigatorSaveItem_Click(objectsender,EventArgse){this.Validate();this.studentBindingSource.EndEdit();this.studentTableAdapter.Update(this.connectExampleDataSet.student);//以下语句行用于显示提醒信息,需要手工添加MessageBox.Show(\更新成功!\系统提醒\MessageBoxIcon.Information);}添加用户关闭窗体时执行的事件过程代码如下:
privatevoidForm1_FormClosed(objectsender,FormClosedEventArgse){//声明变量用于存放信息框返回结果DialogResultresult;//用HasChanges()方法判断数据集是否已被修改if(connectExampleDataSet.HasChanges()){//若数据集已被修改则显示信息框提醒用户result=MessageBox.Show(\数据已被修改,是否保存?\系统提醒\MessageBoxButtons.YesNo,MessageBoxIcon.Information);//若用户单击了信息框中的按钮if(result==DialogResult.Yes){this.Validate();this.studentBindingSource.EndEdit();this.studentTableAdapter.Update(connectExampleDataSet.student);}}}指导教师检查学生进度
练习2:在SQLServer数据库中存储图像
问题
在SQLServer数据库中存储图像。指导教师讲解问题说明
数据库test.mdf的test表包含pic字段,其数据类型为image,是一幅图像,本例将pic字段绑定到pictureBox控件。分析
设为自动增量字段,设为主键。创立字段“pic〞,image类型,允许为空。指导教师分析解题思路解决方案:
(1)建立一个新项目。放PictureBox控件到窗体。
(2)单击菜单“数据(A)|添加新数据源(N)?〞,开启“数据源配置向导〞对话框,连接数据库Test.mdf。
(3)在PictureBox控件属性DataBindings.Image后的下拉列表中将看到pic字段,选中pic字段将PictureBox控件绑定到pic字段。
(4)放BindingNavigator控件到窗体,修改该控件BindingSource属性为testBindingSource。
(5)放Button和OpenFileDialog控件到窗体,Button控件的标题为\增加或修改图像\,按钮单击事件处理函数如下:
privatevoidbutton1_Click(objectsender,EventArgse){if(openFileDialog1.ShowDialog(this)==DialogResult.OK){Bitmapbits=null;bits=newBitmap(openFileDialog1.FileName);//建立指定文件的新位图对象pictureBox1.Image=bits;}}创立数据库Test.mdf,创立Test表,包含字段“ID〞,int类型;(是标志)=是;标志增量=1;标志种子=1,即将字段“ID〞
(6)放Button控件到窗体,标题为\保存图像到数据库\,单击事件处理函数如下:
privatevoidbutton2_Click(objectsender,EventArgse){if(this.testDataSet.HasChanges())//假使DataSet中数据被修改this.testTableAdapter.Update(this.testDataSet);//更新数据库}//集中调试环境中不能保存所作的修改,脱离集中调试环境运行可以保存所作的修改。(7)程序界面如下图:
程序设计界面
(8)编译运行,单击BindingNavigator控件标题为\按钮,为Test表增加一个记录,单击\增加或修改图像\按钮,可以为该记录增加图像。也可为当前记录修改图像。
其次部分练习(30分钟)
使用SqlDataReader类读出数据,用ListView控件显示。
运行效果图
提醒:
增加语句usingSystem.Data.SqlClient;
放置视图控件ListView到窗体,属性View=Detail。单击属性Column右侧标题为“?〞的按钮,在弹出的“ColumnHeaderconn;SqlCommandda;SqlDataReaderdr。指导教师检查学生进度指导教师检查学生代码规范性
集合编辑器〞对话框中添加3个列头,属性Text分别为:学生学号、学生姓名、学生性别。为Form1类增加变量:SqlConnection
第三部分作业
指导教师布置作业
为学生数据库增加一个查询男生或女生的存储过程,并设计应用程序使用该存储过程。提醒:
存储过程语句如下:
ALTERPROCEDURESelectManStudent(@Sexnchar(1))AS
SELECTStudentNum,StudentName,StudentSexFROMStudentWHERE(StudentSex=@Sex)RETURN
8、C#高级编程
目标
????
单一继承抽象类和抽象方法
使用委托和事件实现模拟闹铃。飞机和客机类的多态程序
第一部分指导(50分钟)
练习1:单一继承
问题
现实生活中,哺乳动物是动物界中一个分支;可以动物普遍具有的特征都可以在哺乳动物身上找到;但哺乳动物也有自己独指导教师讲解问题说明
用C#编写一个程序,使用Animal和Mammal两个类来说明一般动物和哺乳动物的继承关系。Animal具有名称、所属门类等属性,需要提供方法实现以接收和显示这些属性的值。
Mammal类具有代表哺乳动物习性的属性,这些属性说明哺乳动物与其他类型动物的区别。同样地,需要提供方法实现以接收和显示这些属性的值。
特的习性。因此可以将动物看成是哺乳动物的父亲。编程实现上可以通过哺乳动物类继承一般动物类,从而获得一般动物的特征。
分析
Animal类是一个基类,它包含_name、_type两个成员以及用于接收和显示信息的三个方法。名为Mammal的派生类包含_temperature、_isViviparous两个成员和用于接收和显示信息的两个方法。
为了检验创立的Animal和Mammal类,应实例化一个Mammal类对象,并调用基类和派生类的方法来存储和检索值。推荐步骤:
(1)新建一个名为“SingleInher〞的基于控制台应用程序的项目。(2)将以下代码添加到“Program.cs〞中。
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceSingleInher{//一般动物类classAnimal{protectedstring_name;//动物名称protectedstring_type;//动物所属门类//接收名称和门类publicvoidAcceptDetails(){Console.WriteLine(\请输入动物名称:\this._name=Console.ReadLine();Console.WriteLine(\请输入所属门类:\this._type=Console.ReadLine();}//显示动物的名称和所属门类publicvoidDisplayDetails(){Console.WriteLine();Console.WriteLine(\动物的详细信息如下:\Console.WriteLine(\姓名:{0}\Console.WriteLine(\门类:{0}\}}//哺乳动物类,继承一般动物类classMammal:Animal{privatedouble_temperature;//恒定温度值privatestring_isViviparous;//是否为胎生//接收哺乳动物的特征信息publicvoidAcceptCharacter(){Console.WriteLine(\请输入哺乳动物的恒定温度:\
try{_temperature=Convert.ToDouble(Console.ReadLine());}catch//捕获异常,例如:若输入字母,在转换成Decimal时会引发异常{Console.WriteLine(\请为温度输入数字!\}Console.WriteLine(\该哺乳动物是否胎生:\_isViviparous=Console.ReadLine();}//显示哺乳动物的特征信息publicvoidDisplayCharacter(){Console.WriteLine();Console.WriteLine(\的特征包括:\Console.WriteLine(\恒定温度:{0}\Console.WriteLine(\是否胎生:{0}\}}classProgram{staticvoidMain(string[]args){MammalobjM=newMammal();objM.AcceptDetails();//访问父类方法objM.AcceptCharacter();objM.DisplayDetails();//访问父类方法objM.DisplayCharacter();}}}(3)生成项目。
(4)选择“调试〞→“开始执行(不调试)〞选项来执行此应用程序,输出结果如图1.1所示。
图1.1练习1的输出结果
练习2:使用抽象类和抽象方法计算不同形状的面积
问题
编写一个程序,使用抽象类和抽象方法来计算不同形状的面积。指导教师讲解问题说明
先定义一个抽象类,该抽象类有一名为计算面积的方法为抽象方法。指导教师分析解题思路
定义好抽象类和抽象方法后,具体的类继承该抽象类,实现抽象方法。该问题中定义两个具体形状类:矩形和圆。解决方案:
(1)创立一个基于控制台的项目“AbstractClass〞。
(2)建立一个抽象类,命名为“Figure〞,定义变量和抽象方法Area()。
(3)定义两个具体类Square和Circle继承自Figure类,在各自类中分别实现Area()方法。(4)创立一个测试类,分别调用Square和Circle类。(5)添加以下完整的代码
usingSystem;abstractclassFigure//抽象类定义,表示一个抽象图形{protecteddoublex=0,y=0;publicFigure(doublea,doubleb){x=a;y=b;}publicabstractvoidArea();//抽象方法,无实现代码,抽象图形无法计算面积}classSquare:Figure//类Square定义,矩形类{publicSquare(doublea,doubleb):base(a,b){}publicoverridevoidArea()//不能使用new,必需用override{Console.WriteLine(\矩形面积是:{0}\显示矩形面积}classCircle:Figure//类Circle定义,圆类{publicCircle(doublea):base(a,a){}publicoverridevoidArea(){Console.WriteLine(\圆面积是:{0}\显示圆的面积}classClass1{staticvoidMain(string[]args){Squares=newSquare(20,30);Circlec=newCircle(10);s.Area();c.Area();}}(6)选择“生成〞→“生成解决方案〞选项,以生成此项目。
(7)选择“调试〞→“开始执行(不调试)〞选项来执行此应用程序。此程序的输出结果如图2.1所示。
图2.1程序输出结果
指导教师检查学生进度
练习3:使用委托和事件实现模拟闹铃
问题
编写一个模拟闹铃的程序,具有闹铃,继续闹铃,打会盹儿,中止闹铃的功能。指导教师讲解问题说明
编写一个程序用来模拟闹钟闹起床流程,有一个闹钟类AlarmClock,催促起床类WakeMeUp,使用类AlarmDriver。调用类引发开始闹铃事件,闹钟类调用委托方法进行处理,催促起床类和用户进行交互。指导教师分析解题思路
在此问题中,可以设计考试类来控制流程。闹钟类应当有一个可以引发开始闹铃的方法由使用类调用。这是一种常用的类设计方式,就是建立一些实体类,这些实体类由控制流程的类来进行关联。解决方案:
(1)创立一个基于控制台的项目“EventSample〞。
(2)建立一个类,命名为“AlarmEventArgs〞,定义事件参数类。(3)声明自定义代理类型,它的事件参数的类型为AlarmEventArgs。(4)创立包含事件和触发事件方法的类:AlarmClock。(5)创立包含事件处理方法的类:WakeMeUp。(6)创立包含程序入口方法的类:AlarmDriver。(7)添加以下完整的代码
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceEventSample{////定义事件参数类//publicclassAlarmEventArgs:EventArgs{privatereadonlyboolsnoozePressed;privatereadonlyintnrings;//构造函数publicAlarmEventArgs(boolsnoozePressed,intnrings){this.snoozePressed=snoozePressed;this.nrings=nrings;}//定义属性,私有字段nringspublicintNumRings{get{returnnrings;}}//定义属性,返回私有字段snoozePressedpublicboolSnoozePressed{get{returnsnoozePressed;}}//下面的属性返回一个字符串publicstringAlarmText{get{if(snoozePressed){return(\别打打盹儿,快起床!\}else{return(\起床!\}}}}//声明自定义代理类型,它的事件参数的类型为AlarmEventArgspublicdelegatevoidAlarmEventHandler(objectsender,AlarmEventArgse);//包含事件和触发事件方法的类publicclassAlarmClock{privateboolsnoozePressed=false;privateintnrings=0;privateboolstop=false;//定义两个属性publicboolStop{get{returnstop;}set{stop=value;}}publicboolSnoozePressed{get{returnsnoozePressed;}set{snoozePressed=value;}}//声明事件,它所使用的代理类型为AlarmEventHandlerpubliceventAlarmEventHandlerAlarm;//触发事件的方法protectedvirtualvoidOnAlarm(AlarmEventArgse){
if(Alarm!=null){//通过代理调用事件处理方法Alarm(this,e);}}//在该方法中循环调用OnAlarm方法来触发事件,直到//stop字段的值为truepublicvoidStart(){for(;;){nrings++;if(stop){break;}elseif(snoozePressed){//程序暂停1秒钟System.Threading.Thread.Sleep(1000);{//创立事件参数对象实例AlarmEventArgse=newAlarmEventArgs(snoozePressed,nrings);OnAlarm(e);//触发事件,在事件处理方法中会//相应地设置snoozePressed和stop//字段的值(通过属性来设置)}}else{//程序暂停0.3秒System.Threading.Thread.Sleep(300);AlarmEventArgse=newAlarmEventArgs(snoozePressed,nrings);OnAlarm(e);//触发事件}}}}//包含事件处理方法的类publicclassWakeMeUp{//事件处理方法//在该方法中根据用户的输入来通过事件参数sender//设置事件发送者属性,publicvoidAlarmRang(objectsender,AlarmEventArgse){Console.WriteLine(e.AlarmText+\if(!(e.SnoozePressed)){if(e.NumRings%10==0){Console.WriteLine(\继续闹铃?输入Y\Console.WriteLine(\打会盹儿?输入N\Console.WriteLine(\中止闹铃?输入Q\Stringinput=Console.ReadLine();if(input.Equals(\elseif(input.Equals(\{//通过事件参数sender来访问触发事件的对象((AlarmClock)sender).SnoozePressed=true;return;}else{((AlarmClock)sender).Stop=true;return;}}}else{Console.WriteLine(\继续闹铃?输入Y\Console.WriteLine(\中止闹铃?输入Q\Stringinput=Console.ReadLine();if(input.Equals(\else{((AlarmClock)sender).Stop=true;return;}}}}//包含程序入口方法的类publicclassAlarmDriver{//入口方法publicstaticvoidMain(string[]args){//创立事件接收者对象实例WakeMeUpw=newWakeMeUp();//创立事件发送者对象实例AlarmClockclock=newAlarmClock();//把事件处理方法绑定到发送者的事件上clock.Alarm+=newAlarmEventHandler(w.AlarmRang);clock.Start();}}}(8)选择“生成〞→“生成解决方案〞选项,以生成此项目。
(9)选择“调试〞→“开始执行(不调试)〞选项来执行此应用程序。此程序的输出结果如图3.1所示。
图3.1EventSample的输出结果
指导教师检查学生进度
其次部分练习(40分钟)
练习1:多态(polymorphism)
C#可以通过使用关键字virtual在基类中定义虚方法,用override在派生类重载虚方法实现多态。以飞机类和客机类的代码来说明如何实现多态。指导教师分析解题思路
分别创立类Plane和Airliner的实例p和a,先调用类Plane的方法Report,然后把p指向a,再调用Report方法,此时实际上调用了类Airliner被重载的方法Report。具体代码如下所示:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespacePolymorphism{classPlane//定义飞机类{publicintwheels;//飞机轮子数量protectedintweight;//飞机重量,是受保护的变量publicPlane(){;}publicPlane(intw1,intw2){wheels=w1;weight=w2;}//定义虚方法publicvirtualvoidReport(){Console.WriteLine(\{1}\}}classAirliner:Plane//定义客机类,从飞机类中继承{intpassengers;//客机乘客数量publicAirliner(intw1,intw2,intp):base(w1,w2){passengers=p;}//重载父类中的方法publicoverridevoidReport(){Console.WriteLine(\is{2}\}}classProgram{staticvoidMain(string[]args){Planep=newPlane();Airlinera=newAirliner(2,300,100);p.Report();p=a;p.Report();}}}指导教师检查学生进度指导教师检查学生代码规范性
第三部分作业
指导教师布置作业例如:
interfaceIHabit{voidCatchFood();stringfood{get;set;}??}然后定义猫、老虎、狮子、大象等几个动物类来实现该接口;最终定义一个调用类,来运行程序,查看接口的使用状况。
定义一个接口,用于描述动物的生活习性,包含食性、捕食、分布区域、睡觉方式、群居方式等;接口里面包括属性和方法。
9、数组、集合对象和泛型
{EmployeeobjEmployee=newEmployee(int.Parse(tbx_ID.Text),tbx_Name.Text,tbx_dpart.Text,double.Parse(tbx_pay.Text));employeeList.Add(tbx_ID.Text,objEmployee);lbx_id.Items.Add(tbx_ID.Text);}}privatevoidbtn_del_Click(objectsender,EventArgse){if(lbx_id.SelectedItem!=null){stringid=lbx_id.SelectedItem.ToString().Trim();employeeList.Remove(id);lbx_id.Items.Remove(lbx_id.SelectedItem);tbx_ID.Text=\tbx_Name.Text=\tbx_dpart.Text=\tbx_pay.Text=\}MessageBox.Show(\当前职工记录数为:\}privatevoidbtn_close_Click(objectsender,EventArgse){this.Close();}privatevoidForm1_Load(objectsender,EventArgse){employeeList=newSortedList();employeeList.Add(\李大宝\技术部\lbx_id.Items.Add(\employeeList.Add(\王小二\生成部\lbx_id.Items.Add(\employeeList.Add(\钱三\销售部\lbx_id.Items.Add(\}privatevoidlbx_id_SelectedIndexChanged(objectsender,EventArgse){if(lbx_id.SelectedItem!=null){stringid=lbx_id.SelectedItem.ToString().Trim();EmployeeobjEmployee=(Employee)employeeList[id];tbx_ID.Text=objEmployee.id.ToString();tbx_Name.Text=objE;tbx_dpart.Text=objEmployee.department;tbx_pay.Text=objEmployee.pay.ToString();}}}}(4)生成和执行此应用程序,效果如下图所示:
程序运行结果图
其次部分练习(30分钟)第三部分作业
10、WinForms高级编程
目标
??
创立一个更改窗口的大小与颜色的应用程序。创立一个单文档的文本编辑器应用程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年(中级消防设施操作员)基础知识考试题库(含答案)
- 高三数学一轮复习对勾函数与飘带函数应用教学设计
- 2026年8月影像技师考试消化内科肠易激综合征指南解读题及答案
- 高中二年级德育主题班会《识破电诈迷局守护青春钱袋》教学设计
- 2026年DRG-DIP付费业务测试题(含答案)
- 2026年CPA税法增值税综合题库(含答案)
- 2026年新余市烟草专卖局人员招聘考试备考试题及详细答案解析
- 2026年新疆中泰集团有限责任公司人员招聘考试备考题库及详细答案解析
- 2026年济南一建集团有限公司人员招聘考试模拟试题及详细答案解析
- 2026年青岛演艺集团有限公司人员招聘笔试备考题库及详细答案解析
- 新轮机英语专业词汇(终极版适用于船员考证、机舱实操分类)
- 2026广东肇庆市高校毕业生基层公共就业创业服务岗位招募68人笔试参考题库及答案详解
- 火车司机考试题库及答案
- 教科版三年级上册科学第二单元《水》单元测试卷含答案A4打印版
- 2027年中国电信集团有限公司校园招聘考试参考试题及答案详解
- 上海市徐汇中学2027届物理高三第一学期期中联考试题含解析
- 2026统编版七年级历史期末知识点复习提纲
- 2026年云南中考化学真题(原卷版)
- 2026年杭州市建兰中学数学八上期末质量跟踪监视模拟试题含解析
- 新人教高中英语选择性必修第三册全部课文原文翻译
- 2026年食品安全员考试题库库及答案
评论
0/150
提交评论