实验项目名称:实验学时:
同组学生姓名:实验地点:
实验日期:实验成绩:
批改教师:批改时间:
一、实验目的和要求
实验目的:
1、理解面向对象的概念,掌握C#的定义类和创建对象的方法。
2、区分类的不同数据成员,包括常量、字段、和属性的定义方法,并学会控制其可访问性。
3、掌握类的方法成员的声明与调用,理解各种参数在方法中的意义及使用。
4、理解构造函数和析构函数的作用机制。
实验要求:
1、熟悉Visual https://www.wendangku.net/doc/8210323360.html,2010的基本操作方法。
2、认真阅读本章相关内容,尤其是案例。
3、实验前进行程序设计,完成源程序的编写任务。
4、反复操作,直到不需要参考教材、能熟练操作为止。
二、实验设备及环境
设备:奔腾4及奔腾4以上计算机
环境:Visual Studio .NET 2010
三、实验任务
1、设计一个简单的Windows应用程序,在文本框中输入两个点的坐标值,单击“确定”按钮时显示两点之间的距离。
要求定义一个Point类,包括:
(1)两个私有字段表示两个坐标值。
(2)一个构造函数通过传入的参数对坐标值初始化。
(3)两个只读属性对坐标值的读取。
(4)一个方法包含一个Point类对象作为形参该对象和自己的距离。
2、自定义一个时间类。该类包含小时、分、秒、字段与属性,具有将秒增加1秒的方法。
要求定义一个Time类,包括:
(1)三个私有字段表示时、分、秒。
(2)两个构造函数,一个通过传入的参数对时间初始化,另一个获取系统当前的时间。
(3)三个只读属性实现对时、分、秒的读取。
(4)一个方法用于对秒增加1秒(注意60进位的问题)。
3、设计一个Windows应用程序,在该程序中定义一个类和班级类,以处理每个学生的学号、姓名,语文、数学和英语三门课程的期末考试成绩,要求:
(1)能查询每个学生的总成绩。
(2)能显示全班前三名的名单。
(3)能显示单科成绩最高分和不及格的学生名单。
(4)能统计全班学生的平均成绩。
(5)能显示各科成绩在不同分数段的学生人数百分比。
设计提示:
(1)定义一个Student学生类,包含字段(学号、姓名、语文成绩、数学成绩、英语成绩)和属性(总成绩)等。
(2)定义一个StudentList班级类,包含一个Student类型的数组(用来保存全班学生的信息)以及若干个实现上述要求的方法等。
(3)设计用户操作界面,首先让用户能输入一个学生的信息,当单击“添加”按键时把这些信息添加到班级对象的学生数组中。当单击“完成”按钮时调用班级类的方法来显示所要求统计的统计结果。当用户在查询框中输入学生的名字后,并单击“查询”按钮时显示该学生的总成绩。
四、实验结果与分析
1、
private void button1_Click(object sender, EventArgs e)
{ int x1, y1, x2, y2;
x1 = Convert.ToInt16 (textBox1.Text);
y1=Convert .ToInt16 (textBox2.Text );
x2 = Convert.ToInt16(textBox3.Text );
y2 = Convert.ToInt16(textBox4.Text);
Point p1 = new Point(x1, y1);
Point p2 = new Point(x2, y2);
label7.Text = p1.Distance(p2).ToString();}
{ public int X, Y;
public Point(int I, int J) { X = I; Y = J; }
public double Distance(Point p)
{ return System.Math.Sqrt((this.X - p.X) * (this.X - p.X) + (this.Y - p.Y) *(this.Y - p.Y));
} }
实验结果:
2、
private void button1_Click(object sender, EventArgs e)
{ Time t=new Time();
texthour.Text = Convert.ToString(t.Gethour());
textminute.Text = Convert.ToString(t.Getminute());
textsecond.Text = Convert.ToString(t.Getsecond());}
class Time
{ int hour, minute, second;
public int Gethour(){return hour; }
public int Getminute(){ return minute; }
public int Getsecond(){return second; }
public Time()
{ hour = System.DateTime.Now.Hour;
minute = System.DateTime.Now.Minute;
second = System.DateTime.Now.Second; }
public Time(int h, int m, int s)
{ hour = h; minute = m; second = s; }
public void AddSecond()
if (second >= 60) { second = second % 60; minute++;}
if (minute >= 60) { minute = minute % 60; hour++; }
} }
实验结果:
3、
namespace _43
{ class Program
{ private static StudentList stulist;
static void Main(string[] args);
{ stulist=new StudentList();
Student stu1=new Student(“1105303001”,”zhangsan”,90,85,89);
Student stu2=new Student(“1105303002”,”lisi”,75,85,94);
Student stu3=new Student(“1105303003”,”wanger”,90,79,80);
Student stu4=new Student(“1105303004”,”qianyi”.30,50,55);
Student stu5=new Student(“1105303005”,”sunwu”,45,67,38);
stulist.Add(stu1); stulist.Add(stu2); stulist.Add(stu3); stulist.Add(stu4); stulist.Add(stu5); string str; str=Console.ReadLine();
if(str.Equal(“语文”)||str.Equals(“数学”)||str.Equals(“英语”)) stulist.searchSubject(str); else stulist.searchName(str);
Console.ReadLine();}
Class Student
{ private string number;
private string name;
private float chinese;
private float math;
private float english;
public Student(string number,string name,float chinese,float math,float english) { this.number=number; https://www.wendangku.net/doc/8210323360.html,=name; this.chinese=chinese;
this.math=math; this.english=english; }
public string Number
{ get { return this.number;} }
public string Name
{ get { return https://www.wendangku.net/doc/8210323360.html,;} }
public float Chinese
{ set{ this.chiese=value;} get{ return this.chinese;} }
public float Math
{ set { this.math=value;} get{ return this.math;} }
public float English
{ set{ this.english=value;} get{ return this.english;} }
public float Total
{ get{ return chinese+math+english;} }}
Class StudentList
{ private List
private float chieseAver;
private float mathAver;
private float englishAver;
private float totalAver;
public void Add(Student s)
{ this.list.Add(s);}
public float ChineseAver
{ get
{ float s=0;
foreach(Student stu in list)
{ s+=stu.Chinese;}
chineseAver=s/list.Count;
return chineseAver; } }
public float MathAver
{ get
{ float s=0;
foreach(Student stu in list)
{ s+=stu.Math;}
mathAver=s/list.Count;
return mathAver; } }
public float EnglishAver
{ get
{ float s=0;
foreach(Student stu in list)
{ s+=stu.English;}
englishAver=s/list.Count;
return englishAver; } }
public float TotalAver
{ get
{ float s=0;
foreach(Student stu in list)
{ s+=stu.Total;}
totalAver=s/list.Count;
return totalAver; } }
public void searchName(string name)
{ foreach(Student stu in list)
{ if(https://www.wendangku.net/doc/8210323360.html,.Equals(name))
Console.WriteLine(“学号:{0},姓名:{1},语文:{2},数学:{3},英语:{4}”,stu.Number,https://www.wendangku.net/doc/8210323360.html,,stu.Chinese,stu.Math,stu.English); } }
public voic searchSubject(string subject)
{ switch(subject)
{ case”语文”;
float max=0;
foreach(Student stu in list)
{ if(max max=stu.Chinese; if(stu.Chinese<60) Console.WriteLine(string.Format(“学号:”+stu.Number+”姓名:{0},语文:{1}”,https://www.wendangku.net/doc/8210323360.html,,stu.Chinese)); } Console.WriteLine(“最高分{0}”,max); break; case”数学”; float max1=0; foreach(Student stu in list) { if(max1 max1=stu.Math; if(stu.Math<60) Console.WriteLine(string.Format(“学号:”+stu.Number+”姓名:{0},语文:{1}”,https://www.wendangku.net/doc/8210323360.html,,stu.Math)); } Console.WriteLine(“最高分{0}”,max1); break; case”英语”; float max2=0; foreach(Student stu in list) { if(max2 max2=stu.English; if(stu.English<60) Console.WriteLine(string.Format(“学号:”+stu.Number+”姓名:{0},语文:{1}”,https://www.wendangku.net/doc/8210323360.html,,stu.English); } Console.WriteLine(“最高分{0}”,max2); break; } }} } 实验结果: 五、实验体会 本次实验,重在理解面向对象的概念,掌握C#的定义类和创建对象的方法刚开始时会出现一些问题,经过与同学讨论,最后终于能调试出来,感觉自己有所进步,希望以后能自己独立完成。 实验项目名称:实验学时: 同组学生姓名:实验地点: 实验日期:实验成绩: 批改教师:批改时间: 一、实验目的和要求 实验目的: 1、区别静态类与非静态类,掌握静态字段、静态方法和静态构造函数的定义方法。 2、理解类的继承性与多态性,掌握其应用方法。 3、理解抽象类、接口的概念,掌握抽象类与接口的定义及使用方法。 4、理解分部类和命名空间的概念,掌握分部类和命名空间的使用方法。 实验要求: 1、熟悉Visual https://www.wendangku.net/doc/8210323360.html, 2010 的基本操作方法。 2、认真阅读本章相关内容,尤其是案例。 3、实验前进行程序设计,完成源程序的编写任务。 4、反复操作,直到不需要参考教材、能熟练操作为止。 二、实验设备及环境 设备:奔腾4及奔腾4以上计算机 环境:Visual Studio .NET 2010 三、实验任务 1、设计一个Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(“小学生”、“中学生”、“大学生”)时将分别创建不同的学生对象,并输出当前的学生总人数,该学生的姓名、学生类型和平均成绩。 要求如下: (1)每个学生都有的字段为姓名、年龄。 (2)小学生的字段还有语文、数学,用来表示这两科的成绩。 (3)中学生在此基础上增加英语成绩。 (4)大学生分为必修课和选修课两项成绩。 (5)学生类提供方法来统计自己的总成绩并输出。 (6)通过静态成员自动记录学生总人数。 (7)成员初始化能通过构造函数完成。 2、设计一个Windows应用程序,在该程序中定义平面图形抽象类和其派生类圆、矩形和三角形。该程序实现的功能包括:输入相应图形的参数,如矩形的长和宽,单击相应的按钮,根据输入参数创建图形类并输出该对象的面积。 3、声明一个接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。设计一个Windows应用程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序,如果单击AVI按钮后,再单击“播放”按钮则应显示“正在播放AVI视频!”。 四、实验结果与分析 1、 public abstract class Student { protected string name; protected int age; public static int number; public Student(string name, int age) { https://www.wendangku.net/doc/8210323360.html, = name; this.age = age; number++; } public string Name { get { return name; } } public abstract double Average();} public class Pupil : Student { protected double chinese; protected double math; public Pupil(string name, int age, double chinese, double math) : base(name, age) { this.chinese = chinese; this.math = math; } public override double Average() { return (chinese + math) / 2; } } public class Middle : Pupil { protected double english; public Middle(string name, int age, double chinese, double math, double english) : base(name, age, chinese, math) { this.chinese = chinese; this.math = math; this.english = english; } public override double Average() { return (chinese +math +english )/3; }} public class College : Student { protected double xuanxiu; protected double bixiu; public College(string name, int age, double xuanxiu, double bixiu) : base(name, age) { this.xuanxiu = xuanxiu; this.bixiu = bixiu; } public override double Average() { return (xuanxiu+bixiu)/2; } } private void button1_Click(object sender, EventArgs e) { string n=Convert.ToString(textBox1.Text); int a=Convert.ToInt16(textBox2.Text); double ch=Convert.ToDouble(textBox3.Text); double ma=Convert.ToDouble(textBox4.Text); Pupil P1 = new Pupil(n, a, ch, ma); lable6 .Text += "总人数:" + Student.number + ",姓名:" + https://www.wendangku.net/doc/8210323360.html, + ",小学生,平均成绩为:" + P1.Average(); } private void button2_Click(object sender, EventArgs e) { string n = Convert.ToString(textBox1.Text); int a = Convert.ToInt16(textBox2.Text); double ch = Convert.ToDouble(textBox3.Text); double ma = Convert.ToDouble(textBox4.Text); double en = Convert.ToDouble(textBox5.Text); Middle M1 = new Middle (n, a, ch, ma,en ); lable6.Text += "总人数:" + Student.number + ",姓名" + https://www.wendangku.net/doc/8210323360.html, + ",中学生,平均成绩为:" + M1.Average() ; } private void button3_Click(object sender, EventArgs e) { string n = Convert.ToString(textBox1.Text); int a = Convert.ToInt16(textBox2.Text); double bx = Convert.ToDouble(textBox3.Text); double xx = Convert.ToDouble(textBox4.Text); College C1 = new College (n, a,bx ,xx ); lable6.Text += "总人数:" + Student.number + ",姓名" + https://www.wendangku.net/doc/8210323360.html, + ",大学生,平均成绩为:" + C1.Average();} 实验结果: 2、 public abstract class Figure { public abstract double Area();} public class Circle : Figure { double radius; public Circle(double r) { radius = r; } public override double Area(){return radius * radius * 3.14; } } public class JX : Figure{ double ch, k; public JX(double a, double b) { ch = a; k = b; } public override double Area() { return ch*k ; } } public class SJX:Figure { double d,g; public SJX(double a, double b) { d = a; g = b; } public override double Area(){return d *g/2 ; }} private void button1_Click(object sender, EventArgs e) { Circle C1=new Circle (Convert.ToDouble (textBox1 .Text)); label6.Text += "圆的面积是" + C1.Area();} private void button2_Click(object sender, EventArgs e) { JX A1 = new JX(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)); label6.Text += "\n矩形的面积是" + A1.Area();} private void button3_Click(object sender, EventArgs e) { SJX B1 = new SJX(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)); label6.Text += "\n三角形的面积是" + B1.Area();} 实验结果: IPlayer iplayer; MP3 mp3; A VI avi; private void button3_Click(object sender, EventArgs e) { label1.Text = iplayer.Pre();} private void button4_Click(object sender, EventArgs e) { label1.Text = iplayer.Stop ();} private void button5_Click(object sender, EventArgs e) { label1.Text = iplayer.Play ();} private void button6_Click(object sender, EventArgs e) { label1.Text = iplayer.Pause ();} private void button7_Click(object sender, EventArgs e) { label1.Text = iplayer.Next ();} private void button2_Click(object sender, EventArgs e) { avi = new A VI();iplayer = (IPlayer)avi; } private void button1_Click(object sender, EventArgs e) { mp3 = new MP3();iplayer = (IPlayer)mp3; } } interface IPlayer { string Play();string Stop();string Pause();string Pre();string Next();} public class MP3 : IPlayer { public string Play(){return "正在播放MP3歌曲!";} public string Stop(){return "停止播放MP3歌曲!";} public string Pause(){return "暂停播放MP3歌曲!";} public string Pre(){return "播放上一首MP3歌曲!"; } public string Next(){return "播放下一首MP3歌曲!"; } } public class A VI : IPlayer { public string Play(){return "正在播放A VI视频!";} public string Stop(){return "停止播放AVI视频!"; } public string Pause(){return "暂停播放A VI视频!"; } public string Pre(){ return "播放上一部A VI视频!";} public string Next(){return "播放下一部A VI视频!"; } } 实验结果: 五、实验体会 本次实验程序,重在区分静态类与非静态类,理解类的继承性与多态性,抽象类与接口的使用方法。并没有太大困难,与之前所学习的相得益彰,加深了我们对类的了解。也能更加熟练地用C#进行更多的实验。 实验项目名称:实验学时: 同组学生姓名:实验地点: 实验日期:实验成绩: 批改教师:批改时间: 一、实验目的和要求 实验目的: 1、初步掌握常用集合的创建和操作方法。 2、初步掌握索引器的定义与使用。 3、初步掌握泛型接口、泛型类、泛型属性和泛型方法的使用。 实验要求: 1、熟悉Visual https://www.wendangku.net/doc/8210323360.html, 2010 的基本操作方法。 2、认真阅读本章相关内容,尤其是案例。 3、实验前进行程序设计,完成源程序的编写任务。 4、反复操作,直到不需要参考教材、能熟练操作为止。 二、实验设备及环境 设备:奔腾4及奔腾4以上计算机 环境:Visual Studio .NET 2010 三、实验任务 1、设计一个Windows应用程序,定义一个Teacher类,包含姓名和职称两个字段和一个输出教师信息的方法,并用ArrayList实现与实例6-2相似的功能。 2、设计一个Windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList,该类包括一个Student集合,使用索引器访问该集合,实现与实例6-3类似的功能。 3、设计一个Windows应用程序,要求如下: (1)构造一个学生基本类。 (2)分别构造小学生、中学生、大学生等派生类,要求具有不同的特征和行为。 (3)定义一个泛型班级类,约束参数类型为学生类,该泛型的班级类包括一个泛型集合, 用于存放各种学生对象,并包含一个方法用于输出每个学生的相关信息。 (4)仿照实例6-4,定义泛型的班级类对象,完成对学生的添加和信息的输出。 四、实验结果与分析 1、 namespace _61 {public partial class Form1 : Form {ArrayList ALTeachers = new ArrayList(); private void Foreach(){foreach (object t in ALTeachers) {Teacher tForeach = (Teacher)t; lblShow.Text += "\n" + tForeach.showmsg(); } } public Form1(){InitializeComponent(); private void btnAdd_Click(object sender, EventArgs e) {string n= Convert.ToString(textBox1.Text); string c = Convert.ToString(textBox2.Text); Teachert1 = new Teacher(n, c);ALTeachers.Add(t1); lblShow.Text = "";Foreach(); } private void btnDele_Click(object sender, EventArgs e) {int key = Convert.ToInt32(textBox3.Text); ALTeachers.RemoveAt(key); lblShow.Text = "";Foreach();} private void lblShow_Click(object sender, EventArgs e){ } }} {class Teacher {string name;string zhicheng; public Teacher(string name, string zhicheng) {https://www.wendangku.net/doc/8210323360.html, = name;this.zhicheng = zhicheng;} public string showmsg() {return string.Format("姓名:{0},职称:{1}", name, zhicheng); } }} public abstract class StudentBase{int age;string name; public virtual void walk();{} public class Pupil:StudentBase{public override void walk() {} } public interface IClass 2、 namespace _62 {public partial class Form1 : Form class Student { string name;string number; public Student(string name, string number) {https://www.wendangku.net/doc/8210323360.html, = name;this.number = number;} public string showmsg(){return string.Format("姓名:{0},学号:{1}", name, number);} } class ClassList{ Student[ ] students; public ClassList(int n) { students= new Student[n];} } public Student this[int index] { get{ if(index<0 || index>=students.Length) { return null; } return students[index]; } set { if(index<0 || index>=students.Length) {return;} students[index]=value; }}} 3、 namespace _63 { public partial class Form1:Form { Banji< Xuesheng >myBanji = new Banji< Xuesheng >( ); Private void btnXiaoxuesheng_Click( object sender,EventArgs e) { myBanji.Xueshengs.Add(new Xiaoxuesheng(txtName.Text)); lblShow.Text+= string.Format(“\n添加Xiaoxuesheng{0}成功”,txtName.Text); } Private void btnZhongxuesheng_Click( object sender,EventArgs e) { myBanji.Xueshengs.Add(new Zhongxuesheng(txtName.Text)); lblShow.Text+= string.Format(“\n添加Zhongxuesheng{0}成功”,txtName.Text); } Private void btnDaxuesheng_Click( object sender,EventArgs e) { myBanji.Xueshengs.Add(new Daxuesheng(txtName.Text)); lblShow.Text+= string.Format(“\n添加Daxuesheng{0}成功”,txtName.Text); } public abstract class Xuesheng { protected string name; public Xuesheng(string name){ https://www.wendangku.net/doc/8210323360.html, = name;} public abstract string Act( ); } public class(Xiaoxuesheng: Xuesheng { public Xiaoxuesheng(string name): base(name) { } public override string Act( ) {return string.Format(“{0}:我是Xiaoxuesheng,我要玩!”,name);} } public class(Zhongxuesheng: Xuesheng { public Zhongxuesheng(string name): base(name) { } public override string Act( ) {return string.Format(“{0}:我是Zhongxuesheng,我要看书!”,name);} } public class(Dagxuesheng: Xuesheng { public Daxuesheng(string name): base(name) { } public override string Act( ) {return string.Format(“{0}:我是Daxuesheng,我要兼职!”,name);} } public class Banji {private List public List {get { return xueshengs;} }}}} 五、实验体会 在本次试验中,我初步掌握了常用集合的创建和操作方法以及索引器的定义和使用,对泛型类也有了一定的了解。基于前几次的实验,我在本次实验更加小心仔细,加上老师在实验前对我们的点拨,实验也没有很大困难,其中需要注意的是,索引的数据类型必须与索引器的索引类型相同。 实验项目名称:实验学时: 同组学生姓名:实验地点: 实验日期:实验成绩: 批改教师:批改时间: 一、实验目的和要求 实验目的: 1、理解程序错误和异常的概念。 2、掌握Visual https://www.wendangku.net/doc/8210323360.html, 2010的调试器的使用方法。 3、掌握C#的try-catch、finally和throw语句的使用方法。 实验要求: 1、熟悉Visual https://www.wendangku.net/doc/8210323360.html, 2010 的基本操作方法。 2、认真阅读本章相关内容,尤其是案例。 3、实验前进行程序设计,完成源程序的编写任务。 4、反复操作,直到不需要参考教材、能熟练操作为止。 二、实验设备及环境 设备:奔腾4及奔腾4以上计算机 环境:Visual Studio .NET 2010 三、实验任务 1、设计一个Windows应用程序,在一个文本框中输入n个数字,中间用逗号作间隔,然后编程对数字排序并输出。 2、按F11键启用逐语句方式跟踪每一条语句的执行情况,在调试过程中将数组a添加到监视窗口。注意,观察各数组元素的变化过程。 3、设置“for(int i=0;i 4、上述代码在用户不按规定输入数据时会发生异常。修改源代码,使用try-catch语句添加异常处理功能。 5、然后输入以下数据:“5,3,7,8,1,4;6,9,2”,单击“排序”按钮,注意观察异常 信息,分析错误的原因。 四、实验结果与分析 namespace _71 {public partial class Form1 : Form {public Form1() {InitializeComponent();} private void btnSort_Click(object sender, EventArgs e) {string[] sources = txtSource.Text.Split(','); int[] a = new int[sources.Length]; for (int i = 0; i < sources.Length; i++) {a[i] = Convert.ToInt16(sources[i]);} for (int i = 0; i < a.Length; i++) { int k = i; for(int j=i+1;j {if (a[k] > a[j]) k = j;} int t = a[i];a[i] = a[k];a[k] = t; } foreach (int t in a) { lblShow.Text += string.Format("{0,-4:D}", t); } } private void Form1_Load(object sender, EventArgs e) { int[ ]a={1,2,3,4,5,6,7,8,9} for (int i=0;i private void Form1_Click(object sender, EventArgs e) { int k=-1; for(int i=1;i {if(a[i]==txtSearch.Text){ k=i;lblShow.Text=”一切正常”;} else if (String.IsNullOrEmpty(a[i])) { lblShow.Text=”检索失败,终止循环!”; break;}} if(k!=-1) lblShow.Text=”检索成功,索引号为:”+ k;} private void btnOk_Click(object sender, EventArgs e) { try {for (int i = 0; i < sources.Length; i++){ a[i] = Convert.ToInt16(sources[i]); } } catch (Exception ex){ lbshow.Text = ex.Message; } }}} 五、实验体会 这次实验的重点在了解程序错误和异常,其中程序错误有三种类型:语法错误、逻辑错误、运行时错误。同时我也掌握了Visual https://www.wendangku.net/doc/8210323360.html, 2010的调试器的使用方法和C#的try-catch、finally和throw语句的使用方法。