C#程序设计总实习报告.doc_第1页
C#程序设计总实习报告.doc_第2页
C#程序设计总实习报告.doc_第3页
C#程序设计总实习报告.doc_第4页
C#程序设计总实习报告.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告 河南财经政法大学计算机与信息工程学院实验报告2013年-2014年 第一学期专 业:_ 管理信息系统_课程名称:_ _C#高级程序设计 _ _班 级:_ _姓 名:_ _ 学号:_指导教师:_ _实验一:派生类实验目的:1. 了解继承和多态的基本概念。2. 掌握派生类、虚方法的使用方法。3. 掌握抽象类的定义方法。实验内容:一、1运行课本例8.1,仔细理解派生类、基类对象的引用及其转换方法。2参照课本例8.3,创建基类Person和派生类Teacher。基类Person包含实例字段name和age;虚函数GetInfo()显示个人信息(显示name和age的值)。派生类Teacher除了包含基类的name和age字段,还包括自己的TeacherID字段,并使用关键字override来重写方法GetInfo()显示教师信息(显示name、age和TeacherID的值)。运行效果如图所示。3创建抽象类基类Shape和派生类Rectangle、Circle、Square。利用多态性实现Area(计算面积)和Show(显示图形名称和面积)抽象方法。具体要求如下:l 抽象类Shape中有字段name(名称)及两个抽象方法Show(显示名称及面积)、Area(面积)。l 派生类Rectangle(矩形)中有字段weigh(宽度)、height(高度)及两个覆盖方法Show(显示名称及面积)、Area(计算矩形的面积)。l 派生类Circle(圆)中有字段radius(半径)及两个覆盖方法Show(显示名称及面积)、Area(计算圆的面积)。l 派生类Square(正方形)中有字段weigh(边长)及两个覆盖方法Show(显示名称及面积)、Area(计算正方形的面积)。运行效果如图所示。实验数据记录及分析(或程序及运行结果)1namespace ConsoleApplication1 class Program public class Parent public Parent() public void MethodA() Console.WriteLine(调用MethodA(); public class Child:Parent public Child() public void MethodB() Console.WriteLine(调用MethodB(); class Test static void Main() Parent oParent=new Parent(); oParent.MethodA(); Child oChild=new Child(); oChild.MethodB(); oChild.MethodA(); Parent oParent1=(Parent)oChild; oParent.MethodA(); Console.ReadLine(); Child oChild1=(Child)oParent1; oChild1.MethodB(); oChild1.MethodA(); Console.ReadKey(); 2namespace ConsoleApplication2 class Program public class Person public string name; public uint age; public Person(string name, uint age) = name; this.age = age; public virtual void GetInfo() Console.WriteLine(Name:0, name); Console.WriteLine(Age:0, age); public class Teacher : Person public string teacherID; public Teacher(string name, uint age, string id) : base(name, age) this.teacherID = id; public override void GetInfo() base.GetInfo(); Console.WriteLine(TeacherID:0, teacherID); public class TestPersonTeacher static void Main(string args) Teacher objteacher = new Teacher(Mr.Yu, 40, 1990108001); objteacher.GetInfo(); Console.ReadKey(); 3public abstract class Shape public string name; public Shape(string name) = name ; public abstract double Area(); public abstract void Show(); public class Rectangle : Shape public int weight, height; public Rectangle(int weight1, int height1, string name) : base(name) weight = weight1; height = height1; public override void Show() Console.WriteLine(Rectangle :0,Area:1, name, weight * height); public override double Area() return weight * height; public class Circle : Shape public int radius; public Circle(int r, string id) : base(id) radius = r; public override void Show() Console.WriteLine(Rectangle :0,Area:1, name, radius * radius * System.Math.PI); public override double Area() return radius * radius *System.Math.PI ; public class Square : Shape public int weight; public Square(int weight1, string id) : base(id) weight = weight1; public override void Show() Console.WriteLine(Rectangle :0,Area:1, name, weight * weight ); public override double Area() return weight * weight ; class Test static void Main() Shape shapes1 = new Rectangle(2, 1, 小矩形); Shape shapes2 = new Circle(5, 大圆); Shape shapes3 = new Square(2, 中正方形); shapes1.Show(); shapes2.Show(); shapes3.Show(); Console.ReadKey(); 评语:日期: 年 月 日实验二:抽象类、抽象方法、密封类、密封方法实验目的:1. 掌握抽象类的定义方法。2. 掌握抽象方法的调用方法。3. 了解密封类、密封方法的使用。实验内容:一、1运行课本例8.6,仔细理解抽象方法的定义及调用方法。注:此题不必给出程序代码,只需给出运行结果,并写出抽象方法的定义要点。2定义一个车辆(Vehicle)基类;然后以该类为基类,派生出bicycle、car等类,并编程对该派生类的功能进行验证。具体要求如下:l 类Vehicle有三个字段:Speed、MaxSpeed、Weight。类Vehicle有一个构造函数,其功能是通过参数设置字段Speed、MaxSpeed、Weight的值。l 为派生类bicycle添加一个新字段Price,并设计构造函数,在构造函数中通过参数设置字段Speed、MaxSpeed、Weight、Price的值。并在验证时调用这些该构造函数,测试用例:Speed=10、MaxSpeed=30、Weight=20000、Price=1000。l 为派生类car添加一个新字段Price,并设计构造函数,在构造函数中通过参数设置字段Speed、MaxSpeed、Weight、Price的值。并在验证时调用这些该构造函数,测试用例:Speed=60、MaxSpeed=150、Weight=3000000、Price=100000。l Vehicle有两个虚方法Run和Stop。Run方法显示“一辆车在马路上奔驰。”,Stop方法显示“一辆车在马路上停了下来。”。l 派生类bicycle的Run方法显示“一辆自行车在马路上奔驰。”,Stop方法显示“一辆自行车在马路上停了下来。”。l 派生类car的Run方法显示“一辆汽车在马路上奔驰。”,Stop方法显示“一辆汽车在马路上停了下来。”。l 对派生类的功能进行验证。提示:验证bicycle类的代码可如下所示:验证结果类似下图:3现要将第2题中Vehicle的虚方法Run和Stop改为抽象方法,应该怎样修改?请写出修改后的类Vehicle的定义。4写出下面程序的运行结果并分析其原因。实验数据记录及分析(或程序及运行结果)1抽象类中通过将关键字abstract添加到实例方法的返回类型的前面可以定义抽象方法。抽象方法声明引入一个新的虚方法,但不提供该方法的任何实际实现,所以抽象方法的方法体只由一个分好组成,而不是常规的方法块。非抽象类的派生类必须重写抽象方法以提供它们自己的实现。虽然抽象方法同时隐含为虚方法,但是它不能有virtual修饰符。只允许在抽象类中使用抽象方法声明2using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1 public class Vehicle public double speed; public double maxspeed; public double weight; public Vehicle(double speed, double maxspeed, double weight) this.speed = speed; this.maxspeed = maxspeed; this.weight = weight; public virtual string run() return 一辆车在马路上奔驰; public virtual string stop() return 一辆车在马路上停了下来; public class Bicycle:Vehicle public double bicycleprice; public Bicycle(double speed, double maxspeed, double weight, double price) : base(speed, maxspeed, weight) this.bicycleprice = price; public override string run() return 一辆自行车在马路上奔驰; public override string stop() return 一辆自行车在马路上停了下来; 3 public abstract class Vehicle public double speed; public double maxspeed; public double weight; public Vehicle(double speed, double maxspeed, double weight) this.speed = speed; this.maxspeed = maxspeed; this.weight = weight; public abstract void run() public abstract void stop() 4a.F() A.F 父类A的F方法b.F() B.F 子类B的F方法a.G() B.G 子类B把父类A的G方法覆盖了 所以用B的G方法b.G() B.G 子类B的G方法评语:日期: 年 月 日实验三:接口实验目的:掌握接口的声明、实现方法,能够通过接口实现简单系统功能的组织。实验内容:一、1运行课本例8.8,仔细理解接口的定义及实现方法。注:此题不必给出程序代码,只需给出运行结果,并写出接口的定义与实现要点;什么是显式接口实现,在何种情况下使用显式接口实现。2. 声明一个接口ICDPlayer,包含4个接口方法:Play()、Stop()、NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrack。创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。运行效果如图所示。3接口的实现 (1)定义接口IShow,其中含有Show方法; (2)定义类Voice,含有voice_method方法; (3)定义PC和TV两个类,同时继承Voice类和IShow接口,并分别重写Show (4)在主程序中调用所实现的方法,对该派生类的功能进行验证。实验数据记录及分析(或程序及运行结果)一个接口定义一个 。接口本身不提供它所定义的成员的实现, 只指定实现该 的类或结构必须提供的成员,继承接口的任何非抽象类型都必须实现接口的所有成员。接口类似于抽象基类,不能不能实例化。接口中声明的 成员隐式地为public何abstract。接口可以包含事件,索引器,方法和属性,但不包含字段。虽然C#类不支持基类的多重继承,但类和结构可以多个接口继承,接口自身可以从多个接口继承。在某种情况下,实现类 实现两个以上的接口,且这些接口具有相同成员名称。为了区分具体实现哪个接口的哪个成员,可以采用显式接口实现,即在实现的成员前面加上接口的限定符,为每个接口成员提供一个实现。2 class Program public interface ICDPlayer void Play(); void Stop(); void NextTrack(); void PreviousTrack(); int CurrentTrack get; public class CDPlayer : ICDPlayer private int currentTrack = 0; public void Play() Console.WriteLine(启动CD); public void Stop() Console.WriteLine(停止CD); public void PreviousTrack() Console.WriteLine(前一个音轨.); if (currentTrack = 1) currentTrack-; public void NextTrack() Console.WriteLine(后一个音轨.); currentTrack+; public int CurrentTrack get return currentTrack; class TextCDPlayer static void Main(string args) CDPlayer myCD = new CDPlayer(); myCD.Play(); Console.WriteLine(myCD.CurrentTrack=0, myCD.CurrentTrack); myCD.NextTrack(); myCD.NextTrack(); Console.WriteLine(myCD.CurrentTrack=0, myCD.CurrentTrack); ICDPlayer myICD = (ICDPlayer)myCD; myICD.PreviousTrack(); Console.WriteLine(myICD.CurrentTrack=0, myICD.CurrentTrack); myICD.Stop(); Console.ReadKey(); 3class Program public interface IShow void show(); public class Voice void voice_method(); class PC : IShow, Voice void show; void voice_method; class TV : IShow, Voice void show; void voice_method; static void Main() PC A = new PC(); A.Show(); A.voice_method(); TV B = new TV(); B.Show(); B.voice_method(); Console.ReadKey(); 评语:日期: 年 月 日实验四:委托实验目的:理解委托的含义;掌握委托的声明、实例化及调用的方法。实验内容:一、1运行课本例9.4,仔细理解多播委托的实现方法。注:此题不必给出程序代码,只需给出运行结果,并写出委托的实现要点;什么多播委托,如何实现多播委托。2. 在实现生活中,委托是经常发生的,比如某天,小明委托小张买火车票,然后又委托小张买电影票。定义两个类,分别是MrZhang和MrMing,MrZhang类中的两个买票方法只需要输出一句买票的提示信息;MrMing类中创建委托,委托MrZhang去买火车票及电影票。使用委托模拟实现上述描述。请在实验数据记录及分析中写出相应的源程序代码。3. 改写教材例9.2,使得通用排序程序能按升序或降序进行排序。为此将委托的声明改为:delegate void D(int A,bool Ascend);请自行修改其他部分的程序代码以实现要求的功能。运行效果如图所示。请在实验数据记录及分析中写出相应的源程序代码。实验数据记录及分析(或程序及运行结果)委托的声明定义一个从System.Delegate类的派生类System.MulticastDelegate派生的类。声明了委托后,需要创建委托的实例,然后调用其方法。创建委托实例时,必须指定与其匹配的方法,匹配方法可以为可访问类或结构中的任何方法。如果匹配方法不存在,则需要先声明类或结构以及与委托匹配的方法。委托可以包含多个方法,这种委托称为多播委托。如果调用多播委托实例,则按顺序依次调用多播委托实例封装的调用列表中的多个方法。多播委托通过“+”或“+=”向多播委托实例封装的调用列表中添加方法;通过“-”或“-=”从多播委托实例封装的调用列表中删除方法。2delegate void MrMing(string x); class MrZhang static void huoche(string i) Console.WriteLine(i); static void dianying(string j) Console.WriteLine(j); class Test static void Main() MrMing cd1 = new MrMing(MrZhang.huoche); cd1(小明委托小张买火车票); MrMing cd2 = new MrMing(MrZhang.dianying); cd2(小明委托小张买电影票); Console.ReadLine(); 3namespace ConsoleApplication3 delegate void D(int A, bool Ascend); class ArraySort public static void DisplayMatrix(int A, bool Ascend) foreach (int i in A) Console.Write(0,5, i); Console.WriteLine(); public static void GeneralSort2(int A, bool Ascend, D sort) sort(A,Ascend); Console.WriteLine(升序数组:); foreach (int i in A) Console.Write(0,5, i); Console.WriteLine(); public static void BubbleSort2(int A, bool Ascend) int i, t; int N = A.Length; for (int loop = 1; loop = N - 1; loop+) for (i = 0; i Ai + 1) t = Ai; Ai = Ai + 1; Ai + 1 = t; public static void SelectSort2(int A, bool Ascend) int i, t, MinI; int N = A.Length; for (int loop = 0; loop = N - 2; loop+) MinI = loop; for (i = loop; i = N - 1; i+) if (Ai AMinI) MinI = i; t = Aloop; Aloop = AMinI; AMinI = t; public static void GeneralSort1(int A,bool Ascend, D sort) sort(A, Ascend); Console.WriteLine(降序数组:); foreach (int i in A) Console.Write(0,5, i); Console.WriteLine(); public static void BubbleSort1(int A, bool Ascend) int i, t; int N = A.Length; for (int loop = 1; loop = N - 1; loop+) for (i = 0; i = N - 1 - loop; i+) if (Ai Ai + 1) t = Ai; Ai = Ai + 1; Ai + 1 = t; public static void SelectSort1(int A, bool Ascend) int i, t, MinI; int N = A.Length; for (int loop = 0; loop = N - 2; loop+) MinI = loop; for (i = loop; i AMinI) MinI = i; t = Aloop; Aloop = AMinI; AMinI = t; static void Main() int A = new int10; Random rNum = new Random(); bool Ascend; Ascend = false; for (int i = 0; i A.Length; i+) Ai = rNum.Next(100); Console.WriteLine(原始数组:); DisplayMatrix(A,Ascend); D d1 = new D(ArraySort.BubbleSort2); D d3 = new D(ArraySort.BubbleSort1); Console.Write(冒泡算法-); GeneralSort2(A,Ascend,d1); GeneralSort1(A,Ascend,d3); D d2 = new D(ArraySort.SelectSort2); D d4 = new D(ArraySort.SelectSort1); Console.Write(选择算法-); GeneralSort2(A,Ascend,d2); GeneralSort1(A,Ascend,d4); Console.ReadKey(); 评语:日期: 年 月 日实验五:事件实验目的:理解事件的含义与处理机制;掌握实现事件的步骤。实验内容:一、1运行课本例9.7,仔细理解事件的实现步骤。注:此题不必给出程序代码,只需给出运行结果,并写出实现事件处理的基本步骤;事件的声明、产生、订阅、取消的语句格式。2.编写程序,实现以下要求:(1)定义PC、Voice、Show三个类,Voice中含有makevoice(发声)方法,Show中有Canshow(显示)方法,其中CanShow为static类型;(2)在PC中定义委托类型Run(运行),定义Run型的事件RunEvent(运行事件),定义方法Run_pc(运行PC)产生事件RunEvent;(3)在主函数中新建Voice类的实例MyVoice和PC类的实例MyPc,并为MyPc的事件RunEvent订阅MyVoice.makevoice动态方法和Show.CanShow静态方法;(4)调用MyPc.Run_pc;请在实验数据记录及分析中写出相应的源程序代码。3. 假设有个高档的热水器,我们给它通上电,液晶屏会显示水温;当水温超过95度的时候,扬声器会开始发出语音,告诉你水的温度,提示水已经快烧开了。编写一个程序用来模拟该热水器。(1)定义Heater(热水器)、Alarm(警报器)、Display(显示器)三个类;(2)在Heater中定义委托类型BoilHandler(加热处理),定义BoilHandler型的事件BoilEvent(加热事件);此外Heater中还有代表水温的字段temperature,给水加热方法BoilWater(),通过BoilWater方法产生BoilEvent事件;(3)Alarm中含有发出警报的方法MakeAlert,在水温大于95度时会发出警报;(4)Display中有显示水温的ShowMsg方法,用来显示当前水温,其中ShowMsg为static类型;(5)在主函数中新建Heater类的实例heater和Alarm类的实例alarm,并为heater的BoilEvent事件订阅alarm.MakeAlert动态方法和Display.ShowMsg静态方法;最后调用heater的BoilWater方法。运行结果如图所示:请在实验数据记录及分析中写出相应的源程序代码。实验数据记录及

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论