面向对象程序设计实验指导书.docx
《面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导书.docx(31页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验指导书
。
辽东学院信息技术学院
《面向对象程序设计》实验指导书
面向对象程序设计课程组
姓名:
学号:
班级:
专业:
计算机科学与技术
层次:
本科
2015年6月
实验七数据库操作29
实验一C#基础
实验类型:
验证性实验课时:
4指导教师:
汪世娟
时间:
2015年月日课次:
第节教学周次:
第周
实验分室:
实验台号:
实验员:
一、实验目的
1.学会使用VisualStudo.NET集成开发环境。
2.掌握在VisualStudo.NET集成开发环境中编辑、编译和运行一个C#程序。
3.掌握c#.net的基本语法知识。
4.掌握C#源程序的结构特点与书写规范。
二、实验内容
1.使用.NET运行程序,熟悉VisualStudio2013运行环境。
操作步骤如下:
(1)要创建C#控制台应用程序,首先选择【文件】|【新建】|【项目】命令打开【新建项目】对话框,如下图所示:
图1【新建项目】对话框
(2)从【项目类型】列表框中选择【VisualC#项目】选项,然后在【模板】列表框中选择【控制台应用程序】选项。
对话框下面的【名称】文本框中将会给出一个默认的名称,可以根据需要改变项目的名称;如果要改变项目的位置,则可以通过单击【位置】文本框右边的【浏览】按钮,打开【项目位置】对话框来选择一个目录。
单击【确定】按钮,关闭【新建项目】对话框,让VisualStudio.NET为用户自动生成代码。
删除窗口中的代码,输入如下所示的代码。
usingSystem;
classWelcome
{
staticvoidMain()
{//运行后在窗口中显示的字符串
Console.WriteLine("欢迎使用C#");}
}
这样,就创建好了一个C#程序。
(3)编译程序。
要编译C#程序,从【生成】菜单中选择【生成解决方案】命令,这时,C#编译器将会开始编译、链接程序,并最终生成可执行文件。
在编译程序时,将会打开一个输出窗口显示编译过程中所遇到的错误和警告信息。
用户可以根据提示进行修改。
如果程序中没有错误,编译器将会生成可执行文件。
(4)运行程序。
在VisualStudio.中,用户可以采用两种方式运行程序:
一种是调试运行,另一种是不进行调试而直接运行。
要调试运行程序,可以通过使用【调试】|【启动】命令或工具栏的调试按钮
或者直接按下F5键;要直接运行程序,则使用【调试】|【开始执行】命令或Ctrl+F5键。
运行上面的程序,将显示下图所示的窗口。
图2【程序结果显示】窗口
2.使用Console类的WriteLine方法以不同的格式输出j的值,假设j=123.456。
程序提示:
doublej=123.456;
Console.WriteLine(“{0:
c}”,j);//货币格式输出
.......................................//还可按科学计数法格式、通用格式、自然数据格式输出
3.使用Console类的ReadLine方法从控制台接收用户的输入,然后显示接收的内容。
程序如下:
usingSystem;
classTest
{staticvoidMain()
{stringstr;
Console.WriteLine(“请输入你的姓名:
”);
str=Console.ReadLine();
Console.WriteLine(“{0},欢迎你!
”,str);
}
}
程序运行结果:
4.编写程序,输出以下表达式的值
sizeof(int)*10/3.2
8>6+3
5-2<3
6>2&&8>9
“Computer”==”Games”
“hello”+”world”
@”Thisis“”abook”!
=”Thisis\”book”
5.设计一个程序根据用户输入的半径,求圆的周长和面积。
要求定义PI常量为3.1415926。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
doubles,r;
doublePI=3.1415926;
Console.WriteLine("请?
输º?
入¨?
半ã?
径?
");
r=double.Parse(Console.ReadLine());
s=r*PI*r;
Console.WriteLine("{0:
n}",s);
}
}
}
6.编写程序实现从键盘输入两个数,输出其中的最大值。
(用条件运算符)
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
doubles,r,z;
Console.WriteLine("比较数字大小,请输入第一个数字:
按回车结束");
r=double.Parse(Console.ReadLine());
Console.WriteLine("比较数字大小,请输入第二个数字:
按回车结束");
s=double.Parse(Console.ReadLine());
z=s>r?
s:
r;
Console.WriteLine("结果显示,最大数为{0:
n}",z);
}
}
6.
程序运行结果:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
classProgram
{
staticvoidMain(string[]args)
{
inta,b;
a=b=1;
b+=a/b++;
Console.Write("a={0},b={1},",a,b);
b+=--a+++b;
Console.WriteLine("a={0},b={1},",a,b);
Console.Read();
}
}
}
三、思考题:
1.在VisualStudio.NET窗口中,可以察看当前项目的类和类型的层次信息的窗口名称是什么?
2.Console类的ReadLine方法和Read方法有什么区别?
Console类的WriteLine和Write方法有什么区别?
3.逐字字符串与普通字符串的区别?
C#中每个int类型的变量占用多少个字节的内存?
教师签字:
批改日期:
实验二结构化程序设计
实验类型:
验证性实验课时:
4指导教师:
汪世娟
时间:
2015年月日课次:
第节教学周次:
第周
实验分室:
实验台号:
实验员:
一、实验目的
1.掌握C#中顺序结构程序的设计。
2.掌握C#中if语句和switch语句的作用及选择结构程序的设计。
3.掌握C#中循环控制语句的作用及循环结构程序的设计。
二、实验内容及要求
1.编程输出1~100中能被3整除但不能被5整除的数,并统计有多少个这样的数。
程序:
运行结果:
2.设计一个程序根据用户输入的成绩(整数),输出成绩的级别(“优秀、良好、中、及格、不及格和无效分数)。
程序:
运行结果:
3.编程输出100以内的所有素数及个数,每10个数一行。
程序:
运行结果:
4.分别用for,while,dowhile语句编写程序,实现求前n个自然数之和。
n的值从键盘输入。
程序:
运行结果:
5.编程输出九九乘法表
程序:
运行结果:
三、思考题:
1.为什么对用户输入的整数要进行象int.Parse(x)的处理?
2.使用switch语句有哪些需要注意的?
3.while和dowhile语句的区别?
本次实验成绩
得分
教师签字:
批改日期:
实验三数组、结构、枚举
实验类型:
验证性实验课时:
2指导教师:
汪世娟
时间:
2015年月日课次:
第节教学周次:
第周
实验分室:
实验台号:
实验员:
一、实验目的
1.掌握一维数组与二维数组的定义、使用及初始化方法。
2.掌握数组的排序算法,进一步理解模块化程序设计的方法。
3.掌握结构、枚举类型在程序中的应用。
二、实验内容及要求
1.编程定义一个含有10个单精度浮点数的数组,计算平均值并输出。
程序:
运行结果:
2.用一数组保存数据序列:
68,65,56,79,82,55。
要求分别用选择排序法和冒泡排序法将其按升序排列。
要求:
使用单步调试观测程序执行过程并分别写出两种不同方法每次循环执行后序列的情况。
程序:
选择排序法:
冒泡排序法:
运行结果:
选择排序每次序列:
冒泡排序每次序列:
3.定义一个行数和列数相等的二维数组,并执行初始化,然后计算该数级两条对角线上的元素之和。
程序:
运行结果:
4.编程定义一个关于出版社的枚举类型(清华大学出版社、电子工业出版社、高等教育出版社、人民邮电出版社),定义一个包含图书资料的结构类型(图书号、图书名、出版社、作者),用一数组保存5本图书的信息,并可根据用户输入的图书号进行查询,如果找到输出该图书所有信息,否则显示无此图书信息。
程序:
运行结果:
三、思考题
1.如何获得一个数组的长度?
对于二维数组如何获得每一维的长度?
2.对于不同类型的数组默认的初始值分别是什么?
3.结构类型定义中,成员名前的public的作用是什么?
4.枚举类型中成员的默认值是如何分配的,什么类型?
本次实验成绩
得分
教师签字:
批改日期:
实验四面向对象程序设计
实验类型:
验证性实验课时:
6指导教师:
汪世娟
时间:
2015年月日课次:
第节教学周次:
第周
实验分室:
实验台号:
实验员:
一、实验目的
1.了解并掌握面向对象程序设计的基本思想和方法。
2.掌握类的定义及对象的使用方法。
3.掌握C#程序中的异常处理。
4.理解程序中继承的使用。
二、实验内容及要求
1.定义长方形rectangle类:
属性:
长和宽两个属性;
方法:
无参数构造函数:
长和宽的值为0
两个参数构造函数:
长和宽的值为对应参数值
计算周长方法:
返回长方形的周长
计算面积方法:
返回长方形的面积
定义test类中,在Main方法实例化两个对象,并输出其周长和面积
程序:
运行结果:
2.
(1)设计一个Person1类,包含下列数据:
字段:
姓名(name)、血型(blood)、体重(weight)、身高(height)。
属性:
Name和Blood访问姓名(name)、血型(blood)字段
方法:
显示姓名PrintName()、显示血型PrintBlood()、显示重量PrintWeight()、显示身高PrintHeight()、增加身高AddHeight()、增加体重AddWeight()、减少体重SubWeight()、显示对象本身Tostring()。
构造函数:
Person1()
Person1(stringname,booltypeblood,doubleweight,doubleheight)
•对于姓名的设置要进行验证,字符数不能大于4,不能小于2。
•对于血型应定义为枚举型变量。
(2)设计一个Person2类,除了Person1类字段及方法外,增加字段电话telephone,增加方法PrintTelephone(),两个构造函数person2()和Person2(stringname,booltypeblood,doubleweight,doubleheight,stringtelephone)
(3)在主函数中创建Person1类和Person2类的对象,进行测试。
程序:
运行结果:
3.输入以下程序,体会错误处理机制:
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("请输入年龄");
inti=int.Parse(Console.ReadLine());
}
}
输入年龄时分别输入”aa”、”1111111111111111111111”
看看程序运行会发生什么,注意观察系统信息。
然后运行以下程序,分别输入120、aa、111111*********1111看看这回程序运行状态。
classAgeException:
Exception
{
publicstringreason;
publicAgeException(intage)
{
if(age<0)
reason="太小了";
elseif(age>110)
reason="太大了";
}
}
classProgram
{
staticvoidMain(string[]args)
{
try
{
Console.WriteLine("请输入年龄");
inti=int.Parse(Console.ReadLine());
if(i<0||i>110)
thrownewAgeException(i);
}
catch(AgeExceptione)
{
Console.WriteLine(e.reason);
}
catch(FormatExceptione)
{
Console.WriteLine(e.Message);
}
catch(Exceptione)
{
Console.WriteLine(e.Message);
}
}
}
(1)为什么AgeException的父类定义为Exception,不定义行吗?
(2)在这个程序中哪个是系统抛出的异常,哪个是代码自己抛出的?
4.类的层次关系如图所示:
(1)点(Point)类具有以下属性:
坐标X、坐标Y,且具有以下方法:
•ToString():
点的字符串表示形式
(2)圆(Ciecle)类具有以下属性:
坐标X、坐标Y、半径Radius,且具有以下方法:
•Diameter():
求直径CircumFerence():
求周长
•Area():
求圆的面积ToString():
圆的字符串表示形式
(3)矩形(Rectangle)类具有以下属性:
坐标X、坐标Y、长length、宽width,且具有以下方法:
zhouchang():
求周长Area():
求矩形的面积
•ToString():
矩形的字符串表示形式
(4)除继承了Circle类的属性和方法外,还应具有:
Height:
圆柱体高度,Volumn():
求体积方法:
底面积*高,并重载:
Area():
求圆柱体表面积:
2*底面积+底周长*高
(5)编程实现上述类,并定义Test类进行测试。
程序:
运行结果:
5.定义一个学生类,包含学号、姓名、性别等信息,定义一个班级类,在班级类中包含一个可以指定个数的学生类数组,并提供两个索引器,一个是int型参数用于向数组指定下标元素赋值或读取操作,一个是String型参数,用于根据参数在数组中查找指定元素。
然后编写一个测试程序进行验证。
程序:
运行结果:
6.定义一个shape抽象类,利用它作为基类派生出Rectangle、Circle等具体形状类,已知具体形状类均具有两个方法GetArea和GetPerim,分别用来求形状的面积和周长。
最后编写一个测试程序对产生的类的功能进行验证。
可参考如下代码:
abstractclassshape
{publicabstractfloatGetArea();
publicabstractfloatGetPerim();}
classPoint
{publicfloatx;
publicfloaty;
publicPoint(floatx,floaty)
{this.x=x;//当形参名与字段名相同时,需要在字段名前加this.代表当前对象中的成员
this.y=y;}}
classRectangle:
shape
{publicPointlefttop;//代表矩形左上点
publicfloatwidth;
publicfloatheight;
publicRectangle(floatx,floaty,floatw,floath)
{lefttop=newPoint(x,y);
width=w;
height=h;}
publicoverridefloatGetArea()
{returnwidth*height;}
publicoverridefloatGetPerim()
{return2*width+2*height;}}
classCircle:
shape
{privateconstfloatpi=3.1415926f;
publicPointdot;//代表原点
publicfloatr;
publicCircle(floatx,floaty,floatr)
{dot=newPoint(x,y);
this.r=r;}
publicoverridefloatGetArea()
{returnpi*r*r;}
publicoverridefloatGetPerim()
{return2*pi*r;}}
classProgram
{staticvoidMain(string[]args)
{Rectangler1=newRectangle(0,0,10,20);
Console.WriteLine("矩形的左上点的x坐标:
{0},y坐标:
{1},面积:
{2},周长:
{3}",r1.lefttop.x,r1.lefttop.y,r1.GetArea(),r1.GetPerim());
Circlec1=newCircle(10,10,20);
Console.WriteLine("圆的圆心的x坐标:
{0},y坐标:
{1},面积:
{2},周长:
{3}",c1.dot.x,c1.dot.y,c1.GetArea(),c1.GetPerim());}}
运行结果:
三、思考题
1.字段和属性的区别?
使用属性有何好处?
2.类和对象的关系?
3.利用new和override修饰符有何区别?
4.public、private和protected修饰符的区别?
5.简述子类对象可以赋值给父类类型的变量吗,为什么,相反呢?
6.索引与属性的关系?
7.抽象类的特点与作用,与接口有何区别?
本次实验成绩
得分
教师签字:
批改日期:
实验五可视化应用程序设计
实验类型:
设计性实验课时:
10指导教师:
汪世娟
时间:
2015年月日课次:
第节教学周次:
第周
实验分室:
实验台号:
实验员:
一、实验目的
1.了解window应用程序设计的基本过程和思想
2.掌握C#中window应用程序设计的设计方法
3.能编写简单的window应用程序
二、实验内容及要求
1.定义一个登录窗体form1,要求两个标签,两个文本框,两个命令按钮。
要求:
窗体的标题为:
登录窗体,背景色为:
绿色,无边框。
两个标签为文本框加说明,即用户名,密码。
用户名文本框限制字符最长10个,密码框显示*号。
两个命令按钮标题分别为“确定”和“取消”,当单击确定按钮时,判断如果输入的用户名和密码分别为“abc”和“123”时,弹出欢迎信息,否则弹出错误信息;当单击取消按钮时,退出应用程序。
“取消”按钮事件处理程序:
“确定”按钮事件处理程序:
2.定义窗体,要求界面如下所示:
要求编写事件处理程序实现功能控制。
注意事件的选择,对于单选按钮应选择单击(click)事件,对于复选框可应用默认事件即CheckedChanged事件。
程序:
3.在窗体上建立一个列表框,一个文本框和一个命令按钮,在列表框中列有本班10个同学的姓名,要求后5个同学的姓名在窗体的load事件处理中用代码添加,当选中某个学生姓名后,单击此命令按钮,则在文本框中显示该学生的籍贯。
参考代码:
publicpartialclassForm1:
Form
{
//创建和名字相对应的籍贯
string[]strPlace=newstring[10]{"北京","天津","上海","沈阳","秦皇岛","青岛","香港","丹东","武汉","湖南"};
privatevoidForm1_Load(objectsender,EventArgse)
{
listBox1.Items.Add("崔六");
listBox1.Items.Add("康七");
listBox1.Items.Add("徐八");
listBox1.Items.Add("牛九");
listBox1.Items.Add("于十");
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
//判断是否有成员被选中
if(listBoxNames.SelectedItems.Cou