C#基础编程设计实验报告
时间:2020-11-26 14:29:46 来源:达达文档网 本文已影响 人
C# 基础编程 设计实验报告
一、实验目的
1、熟悉 Visual Studio .NET 开发环境。
2、掌握 C#应用程序的基本操作过程。
3、掌握 C#的数据类型,运算符以及表达式的使用。
4、掌握分支和循环语句的使用方法。
5、掌握一维数组,二维数组及数组型数组的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录 (2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio .NET 软件。
四、实验步骤
1、分析题意。
2、根据题目要求,新建项目。
3、编写并输入相关的程序代码。
5、运行与调试项目。
6、保存项目。
五、实验内容
1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。
using System; using System.Collections.Generic;
using System.Linq; using System.Text;
namespace one.first {
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("我叫王蕾!");
}
} } 2、编写一个简单的 Windows 应用程序,在窗体 Load 事件中书写代码,标签中显示你的姓名。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;
using System.Windows.Forms;
namespace one.second {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Text = "Windows 程序";
Label lblShow = new Label();
lblShow.Location = new Point(20, 30);
lblShow.AutoSize = true;
lblShow.Text = "王蕾!";
this.Controls.Add(lblShow);
}
}
} 3、编写一个一个程序,用来判断输入的是大写字母,小写字母,数字还是其他的字符。
using System; using System.Collections.Generic; using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个字符:");
char c = Convert.ToChar(Console.ReadLine());
if ((c>="a"&&c<="z")||(c>="A"&&c<="Z"))
Console.WriteLine("这是一个字母");
if (char.IsDigit(c))
Console .WriteLine("这是一个数字");
}
}
} 4、分别用 while,do-while,for 循环求 1 到 100 的和。
using System; using System.Collections.Generic; using System.Text;
namespace one.forth.one {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
while (i <= 100)
{
sum = sum + i;
i++;
}
Console.WriteLine("1 到 100 的自然数之和为:" + sum);
}
}
} using System; using System.Collections.Generic; using System.Text;
namespace one.forth.two {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
}
while (i <= 100);
Console .WriteLine("1 到 100 的自然数的和为:" + sum );
}
}
} using System; using System.Collections.Generic; using System.Text;
namespace one.forth.three {
class Program
{
static void Main(string[] args)
{
int i , sum = 0;
for (i = 1; i <= 100; i++)
{
sum = sum + i;
}
Console.WriteLine("1 到 100 的自然数的和为:" + sum);
}
} } 5、定义一个一维数组,用随机数为此赋值,用 foreach 循环输
出其中的内容。
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace first.five {
class Program
{
static void Main(string[] args)
{
int[] a = {0,1,2,3,4};
foreach (int i in a)
{
Console.WriteLine(a[i]);
}
}
} } 6、实现二维数组的输入和输出。
using System;
using System.Collections.Generic; using System.Linq; using System.Text;
namespace first.six {
class Program
{
static void Main(string[] args)
{
int[,] a = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{ Console.WriteLine(a[i, j]); }
}
}
}
} }
7、实现数组型数组的输入和输出。
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace first.seven {
class Program
{
static void Main(string[] args)
{
int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } };
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < a[i].Length; j++)
{
Console.WriteLine(a[i][j]);
}
}
}
} } 六、实验体会(遇到问题及解决办法,编程后的心得体会)
刚开始编程的时候觉得无从下手,尽管我们已经学了好几种高级编程语言,但每个都有其独特的地方,稍不留神就会混淆。
通过这次实验,我体会到课后复习巩固的重要性。在编程的时候,很多内容都不记得,需要去翻书。不得不说,实验是巩固课程的好方法!本次实验,我熟悉 Visual Studio .NET 开发环境;
掌握了 C#应用程序的基本操作过程;
掌握了 C#的数据类型,运算符以及表达式的使用;
掌握了分支和循环语句的使用方法以及一维数组,二维数组及数组型数组的使用。
实验项目名称:
类与对象
实验学时:
6
同组学生姓名:
实验地点:
1318
实验日期:
10 月 26 日-11 月 9 日 实验成绩:
批改教师:
批改时间:
实验 2
类与对象
一、实验目的、要求
(1)掌握类的定义和使用;
(2)掌握类的数据成员,属性的定义和使用;
(3)掌握方法的定义,调用和重载以及方法参数的传递;
(4)掌握构造函数的定义和使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;
(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio .NET 软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五、实验内容
1、定义一个方法,实现两个数的交换(分别把参数按值传递和按引用传递)。
using System;
using System.Collections.Generic; using System.Text;
namespace second.one {
class Program
{
static void Main(string[] args)
{
Swaper s = new Swaper();
Console.WriteLine("输入 x 的值:");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("输入 y 的值:");
int b=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(s.Swap(a, b));
Console.WriteLine(s.Swap(ref a,ref b));
}
class Swaper
{
public string Swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format("按值传参交换之后:x={0},y={1}",x,y);
}
public string Swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format("按引用传参交换之后:x={0},y={1}", x, y);
}
}
} }2、定义一个方法,实现数组的排序。
using System; using System.Collections.Generic; using System.Text;
namespace second.two {
class Program
{
public class sort
{
public void change(int[] a)
{
Console.WriteLine("排序前,数组顺序为:");
show(a);
int i, j, m;
for (i = 0; i < 10; i++)
{
m = a[i];
j = i - 1; //a[j]为数组前一个值
while (j >= 0 && m > a[j])//判断 i 下标的数是否大于 j 下标的数
{
a[j + 1] = a[j];//如果 i 下标大于j 把 j 往后移一个位
j--;
}
a[j+1] = m; //当不大于 j 的时候就把 M的值放到 i 下标下面 j+1 是为了下标减到最前时考虑 -1 + 1 还是下标的最前面
}
Console.WriteLine("排序后,数组顺序为:");
show(a);
}
void show(int[] a)
{
int i;
for (i = 0; i < 10; i++)
{
Console.Write("{0} ", a[i]);
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
int[] a ={ 4, 7, 1, 2, 5, 8, 9, 10, 3, 6 };
sort s=new sort();
s.change(a);
}
} } 3、定义一个学生类,把学生类当作对象来传递。
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace second.three {
class Program
{
public class student
{
public void st()
{
int a = 999;
}
}
public class st
{
public void aa(student s)
{
Console.WriteLine(s);
}
}
static void Main(string[] args)
{
student s=new student();
st s1 = new st();
s1.aa(s);
}
} } 4、定义一个方法,求两个数的和和差,通过参数把这两个值带回。
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace
second.four
{
class Program
{
public class sum
{
public void ab(out int m, out
int n,int a, int b)
{
m = a + b;
n = a - b;
}
}
static void Main(string[] args)
{
sum s = new sum();
int a = 10;
int b = 3;
int m, n;
s.ab(out m, out n, a, b);
Console.WriteLine("{0}+{1}={2};{0}-
{1}={3}",a,b,m,n);
}
} } 5、用构造函数重载,实现矩形的面积,圆的面积,梯形的面积;
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace secong.five {
class Program
{
public class square
{
public double area;
public square() { }
public square(double a)
{
area = a * a * 3.14;
}
public square(double a, double b)
{
area = a * b;
}
public square(double a, double b, double h)
{
area = (a + b) / 2 * h;
}
}
static void Main(string[] args)
{
double a, b, h,area;
a = 2; b = 5; h = 3;
square s = new square(a,b);
Console.WriteLine("求矩形面积,长为 a={0},宽为 b={1},面积 area={2}",a,b,s.area);
square i = new square(a);
Console.WriteLine("求圆形面积,半径 a={0},面积 area={1}", a, i.area);
square j = new square(a, b, h);
Console.WriteLine("求梯形面积,上底为a={0},下底为 b={1},高为 h={2}面积 area={3}", a, b,h, j.area);
}
} } 6、设计一个 windows 应用程序,在该程序中定义一个学生类和班级类,以处理每个学生的学号,姓名,语文,数学和英语成绩,要求:
1)能查询每个学生的总成绩。
2)能显示全班前三名的名单。
3)能显示单科成绩最高分和不及格的学生名单。
4)能统计全班学生的平均成绩。
5)能显示各科成绩不同分数段的学生人数的百分比。
Student 类:
using System; using System.Collections.Generic; using System.Text; namespace Test2_6 {
public class Student
{
public string stuNo;
public string name;
public double chinese;
public double math;
public double english;
public double sumScore
{
get { return chinese + math + english; }
}
} } StudentList 类:
using System; using System.Collections.Generic; using System.Text; namespace Test2_6 {
public class StudentList:Student
{
int snums;
public Student[] stu=new Student[50];
public StudentList()
{
snums = 0;
}
public void addstu(Student s)
{
stu[snums] = s;
snums++;
}
public int searchstu(string name)
{
int i;
for (i = 0; i < snums; i++)
{
if (stu[i].name == name) break;
}
if (i == snums) return -1;
else return i;
}
//给所有成绩排序,用后面实现前三名的排名
public void ProThree()
{
for (int i = 0; i < snums; i++)
{
int k = i;
for (int j = i + 1; j < snums; j++)
if (stu[j].sumScore > stu[k].sumScore) k = j;
if (k != i)
{
Student temp;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp;
}
}
}
//显示单科成绩的最高分
public int HighScore(int k)
{
int p = 0;
if (k == 0)
{
for (int i = 1; i < snums; i++)
if (stu[i].math > stu[p].math) p = i;
}
else if (k == 1)
{
for (int i = 1; i < snums; i++)
if (stu[i].chinese > stu[p].chinese) p = i;
}
else
{
for (int i = 1; i < snums; i++)
if (stu[i].chinese > stu[p].chinese) p = i;
}
return p;
}
//显示不及格名单
public string
BuhgName(int k)
{
string name=" ";
if (k == 0)
{
for (int i = 0; i < snums; i++)
if (stu[i].math < 60) name +=stu[i].name+"\n";
}
else if (k == 1)
{
for (int i = 0; i < snums; i++)
if (stu[i].chinese < 60) name += stu[i].name + "\n";
}
else
{
for (int i = 0; i < snums; i++)
if (stu[i].english < 60) name += stu[i].name + "\n";
}
return name;
}
public string getHL()
{
string Maxer = " ", Loser = " ";
Maxer += " 单 科 数 学 最 高 :
" + stu[HighScore(0)].name + "\n";
Maxer += " 单 科 语 文 最 高 :
" +
stu[HighScore(1)].name + "\n";
Maxer += " 单 科 英 语 最 高 :
" + stu[HighScore(2)].name + "\n";
Loser += "单科数学挂科名单:" +BuhgName(0) + "\n";
Loser += "单科语文挂科名单:" + BuhgName(1) + "\n";
Loser += "单科英语挂科名单:" + BuhgName(2) + "\n";
return Maxer + "\n" + Loser;
}
//全班的平均成绩
public string SumScore()
{
double sum = 0;
double avg=0;
for (int i = 0; i < snums; i++)
{
sum = sum + stu[i].sumScore;
}
avg = sum / snums;
return "班级总分平均分:"+avg;
}
//各科成绩不同分数段的学生百分比
//英语成绩各分数段百分比
public string PerC()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for (int i = 0; i < snums; i++)
{
if ((stu[i].chinese > 90) && (stu[i].chinese <= 100))
{
sumC1++;
}
else if ((80 <= stu[i].chinese) && (stu[i].chinese < 90))
{
sumC2++;
}
else if((70<=stu[i].chinese)&& (stu[i].chinese < 80))
{
sumC3++;
}
else if((60<=stu[i].chinese)&&(stu[i].chinese < 70))
{
sumC4++;
}
else
{sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return " 语 文 成 绩 百 分 比 :"+"\n"+"90~100:"+per1+"
80~90:"+per2+"
80~70:"+per3+"
70~60:"+per4+"
60 以下的:"+per5;
}
//数学成绩各分数段百分比
public string PerM()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for (int i = 0; i < snums; i++)
{
if ((stu[i].math> 90) &&(stu[i].math <= 100))
{
sumC1++;
}
else if ((80 <= stu[i].math) && (stu[i].math < 90))
{
sumC2++;
}
else if ((70 <= stu[i].math) && (stu[i].math < 80))
{
sumC3++;
}
else if ((60 <= stu[i].math) && (stu[i].math < 70))
{
sumC4++;
}
else
{ sumC5++; }
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format("数学成绩百分比:" + "\n" + "90~100:" + per1 + "
80~90:" + per2 + "
80~70:" + per3 + "
70~60:" + per4 + "
60 以下的:" + per5);
}
//英语成绩各分数段百分比
public string PerE()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for (int i = 0; i < snums; i++)
{
if ((stu[i].english > 90) && (stu[i].english <= 100))
{
sumC1++;
}
else if ((80 <= stu[i].english) && (stu[i].english < 90))
{
sumC2++;
}
else if ((70 <= stu[i].english) && (stu[i].english < 80))
{
sumC3++;
}
else if ((60 <= stu[i].english) && (stu[i].english < 70))
{
sumC4++;
}
else
{ sumC5++; }
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format("数学成绩百分比:" + "\n" + "90~100:" + per1 + "
80~90:" + per2 + "
80~70:" + per3 + "
70~60:" + per4 + "
60 以下的:" + per5);
}
} } From 窗体代码:
using System; using System.Collections.Generic;
using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test2_6 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public StudentList sl = new StudentList();
private void btnAdd_Click(object sender, EventArgs e)
{
Student s = new Student();
s.stuNo = txtStuNo.Text;
s.name = txtName.Text;
s.chinese = Convert.ToDouble(txtChina.Text);
s.math = Convert.ToDouble(txtMath.Text);
s.english = Convert.ToDouble(txtEng.Text);
sl.addstu(s);
MessageBox.Show("添加成功");
}
private void btnSearch_Click(object sender, EventArgs e)
{
int pos = sl.searchstu(this.textBox1.Text);
if (pos != -1)
{
label7.Text = this.textBox1.Text + "的总成绩:" + sl.stu[pos].sumScore;
}
else { MessageBox.Show("不存在这个人!"); }
}
private void btnFinish_Click(object sender, EventArgs e)
{
label7.Text = "前 3 名:"+"\n";
for (int i = 0; i < 3; i++)
{
sl.ProThree();
label7.Text+= sl.stu[i].name+"\n";
}
label7.Text += sl.getHL()+"\n";
label7.Text += Convert.ToString(sl.SumScore())+"\n";
label7.Text += sl.PerC()+"\n";
label7.Text += sl.PerM()+"\n";
label7.Text += sl.PerE()+"\n";
}
} }
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我掌握了类的定义与使用;
掌握了类的数据成员,属性的定义和使用;
掌握了方法的定义,调用和重载以及方法参数的传递以及构造函数的定义和使用。值得注意的是:本次实验中 return的使用以及所在的位置,类型转换时也经常用到
实验项目名称:
继承与多态
实验学时:
6
同组学生姓名:
实验地点:
1318
实验日期:
11 月 16 日-11 月 30 日 实验成绩:
批改教师:
批改时间:
实验 3
继承与多态
一、实验目的、要求
(1)掌握类的继承性与多态性;
(2)掌握虚方法的定义以及如何使用虚方法实现多态;
(3)掌握抽象类的定义以及如何使用抽象方法实现多态;
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;
(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio .NET 软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五 、实验内容
1、设计一个 Windows 应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生派生类,当输入相关数据,单击不用的按钮时,将分别创建不同的学生类对象,并输出当前学生的总人数,该学生的姓名,学生类型,平均成绩。
Student 类:
using System; using System.Collections.Generic; using System.Text; namespace Test3_1 {
public abstract class Student
{
protected string name;
protected int age;
public static int number;
public Student(string name, int age)
{
this.name = 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 : Student
{
protected double chinese;
protected double math;
protected double english;
public Middle(string name, int age, double
chinese, double math, double english)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
this.english = english;
}
public override double Average()
{
return (chinese + math + english) / 3;
}
}
public class College : Student
{
protected double required;
protected double elective;
public College(string name, int age, double required, double elective)
: base(name, age)
{
this.required = required;
this.elective = elective;
}
public override double Average()
{
return (required + elective) / 2;
}
} } Form 窗体内的代码:
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test3_1 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSmall_Click(object sender, EventArgs e)
{
Pupil p = new Pupil(txtName.Text,Convert.ToInt32(txtAge.Text),Convert.ToDouble(txtChinese.Text),Convert.ToDouble(txtMath.Text));
lblShow.Text += " 总 人 数 :" +Convert.ToString( Student.number) + "," + "姓名:" + p.Name + "," + "小学生" + "," + "平均成绩为:" + p.Average() +"\n";
}
private void btnMiddle_Click(object sender, EventArgs e)
{
Middle m = new Middle(txtName.Text, Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtChinese.Text), Convert.ToDouble(txtMath.Text),Convert.ToDouble(TxtEnglish.Text));
lblShow.Text += " 总 人 数 :" + Convert.ToString(Student.number) + "," + "姓名:" + m.Name +
"," + "中学生" + "," + "平均成绩为:" + m.Average() + "\n";
}
private void btnBig_Click(object sender, EventArgs e)
{
College c = new College(txtName.Text, Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtChinese.Text), Convert.ToDouble(txtMath.Text));
lblShow.Text += " 总 人 数 :" + Convert.ToString(Student.number) + "," + "姓名:" + c.Name + "," + "大学生" + "," + "平均成绩为:" + c.Average() + "\n";
}
} } 2、设计一个 Windows 应用程序,在该程序中定义平面图形抽象类和派生类圆,矩形和三角形。
Figure 类代码:
using System; using System.Collections.Generic; using System.Text; namespace Test3_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 JUxing:Figure
{
double chang;
double kuan;
public JUxing(double c, double k)
{
this.chang = c;
this.kuan = k;
}
public override double Area()
{
return chang * kuan;
}
}
public class San:Figure
{
double bian;
double heigth;
public San(double b, double h)
{
this.bian = b;
this.heigth = h;
}
public override double Area()
{
return bian * heigth / 2;
}
} } Form 窗体代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test3_2 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCircle_Click(object sender, EventArgs e)
{
Circle c=new
Circle(Convert.ToInt32(TxtChang.Text));
lblShow.Text = "圆的面积为:" + c.Area();
}
private void btnJu_Click(object sender, EventArgs e)
{
JUxing j = new JUxing(Convert.ToInt32(TxtChang.Text),Convert.ToInt32(TxtHigh.Text));
lblShow.Text = "矩形的面积为:" + j.Area();
}
private void btnSan_Click(object sender, EventArgs e)
{
San s = new San(Convert.ToInt32(TxtChang.Text), Convert.ToInt32(TxtHigh.Text));
lblShow.Text = "三角形的面积为:" + s.Area();
}
} }
3、定义一个 Person 类,包含姓名字段和一个方法,早上 8:30学生开始上课,教师开始讲课。分别用 new 关键字,虚方法,抽象类实现多态性。
New 关键字:
using System; using System.Collections.Generic; using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
{
Student s=new Student("学生");
Teacher t=new Teacher("教师");
Console.WriteLine(s.name+s.work());
Console.WriteLine(t.name+t.work());
Console.ReadLine();
}
}
public class Person
{
public string name;
public interface method
{ string work();}
}
public class Student:Person
{
public Student(string name)
{ this.name = name; }
public string work()
{ return "早上 8:30 开始上课"; }
}
public class Teacher:Person
{
public Teacher (string name)
{ this.name = name; }
public string work()
{ return "开始讲课"; }
} } 虚方法:
using System;
using System.Collections.Generic; using System.Text;
namespace third.three.two {
class Program
{
static void Main(string[] args)
{
Student s = new Student("张三","学生");
PersonWork(s);
Teacher t=new Teacher("李斯","教师");
PersonWork(t);
}
private static void PersonWork(Person Person)
{ Console.WriteLine(Person.Work()); }
}
public class Person
{
public string name;
public Person(string name)
{ this.name = name; }
public virtual string Work()
{ return string.Format("Person{0}:早上 8:30 开始",name);}
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{ this.type = type; }
public override string Work()
{
return string.Format("Person{0}:早上 8:30 开始上课", name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{ this.type = type; }
public override string Work()
{
return string.Format("Person{0}:开始讲课", name);
}
} }
抽象类:
using System; using System.Collections.Generic; using System.Text;
namespace third.three.three {
class Program
{
static void Main(string[] args)
{
Student s = new Student("张三", "学生");
PersonWork(s);
Teacher t = new Teacher("李斯", "教师");
PersonWork(t);
}
private static void PersonWork(Person person)
{
Console.WriteLine(person.Work());
}
}
public abstract class Person
{
public string name;
public Person(string name)
{ this.name = name; }
public abstract string Work();
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format("Person{0}:早上 8:30 开始上课", name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format("Person{0}:开始讲课", name);
}
}
}
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我理解了类的继承性与多态性;
掌握了虚方法的定义以及如何用虚方法来实现多态;
掌握了抽象类的定义以及如何用抽象方法来实现多态。
这次实验与前两次不同,采用 Windows 应用程序,既涉及到代码段也涉及到界面的设计。所以,勉强通过实验。
实验项目名称:
接口、文件和流
实验学时:
6
同组学生姓名:
实验地点:
A205
实验日期:
12 月 7 日-12 月 21 日 实验成绩:
批改教师:
批改时间:
实验 4
接口、文件和流
一、实验目的
(1)掌握接口的定义及使用方法;
(2)掌握流,序列化和反序列化的概念和使用方法;
(3)掌握流文件的读写操作类及其使用方法;
(4)掌握 OpenFileDialog,SaveFileDialog 等控件的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;
(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio .NET 软件。
四、实验步骤
1、分析题意;
2、根据题目要求,新建项目;
3、编写并输入相关的程序代码;
5、运行与调试项目;
6、保存项目。
五 、实验内容
1、定义一个 Person 类,包含姓名字段和一个方法,早上 8:30学生开始上课,教师开始讲课。用接口来实现。
using System; using System.Collections.Generic;
using System.Text; namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student("张三","学生");
Console.WriteLine(s.Work());
Teacher t = new Teacher("李四","老师");
Console.WriteLine(t.Work());
}
public abstract class Person
{
public string name;
public Person(string name)
{
this.name = name;
}
}
interface IPerson
{
string type { get;}
string Work();
}
public class Student :Person, IPerson
{
public string type
{
get { return string.Format("老师"); }
}
public Student(string name, string type)
: base(name)
{
this.name=name;
}
public string Work()
{
return string.Format("Person{0}:早上 8:30 开始上课", name);
}
}
...
看了这个,犹如给自己的世界开了一扇床。