C#上机实验指导书_第1页
C#上机实验指导书_第2页
C#上机实验指导书_第3页
C#上机实验指导书_第4页
C#上机实验指导书_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计

C#实验指导书

电子科技大学成都学院

2017.09

目录

实验一C#与.NET环境初步3

1:控制台的输入与输出3

2;建立Windows窗体应用程序4

3:一个简单的IP地址结构体6

实验二C#基础知识运用7

1:枚举和Switchcase8

2:浮点型数组排序9

3:从1到9的乘法口诀表11

实验三在C#中实现面向对象编程12

1:队列类的应用程序13

2:this关键字的使用16

3:构造函数的重载和普通函数的重载17

实验四WinForms程序设计初步19

1:创建Windows窗体个人简历应用程序19

2:创建一个计算器应用程序25

实验五调试、测试和异常处理29

1:调试应用程序29

2:处理异常32

3:创建自定义异常34

实验六数据库编程:连接数据库37

1:用command和Connection实现系统登录界面38

2:多表查询的应用42

实验七数据库编程:检索操作数据45

1:使用BindingSource和BindingNavigator控件操作数据库45

2:在SQLServer数据库中存储图像47

实验八C#高级编程48

1:单一继承49

2:使用抽象类和抽象方法计算不同形状的面积51

3:使用委托和事件实现模拟闹铃52

实验九数组、集合对象和泛型59

1:使用Hashtable对象存储数据项59

2:员工数据输入62

实验十WinForms高级编程65

1:使用菜单、工具栏来改变窗口的大小与颜色65

实验十一三层结构数据库系统开发78

实验十二简单设计模式及应用89

1:学校登录系统89

2:多文档系统92

3:大陆生态系统96

实验十三文件和注册表操作97

1:创建文件字节读写应用程序97

2:创建删除、移动、复制文件的应用程序99

3:序列化101

实验一C#与.NET环境初步

实验目的:

•了解.NETFramework的结构。

•理解.NETFramework的基本概念

•了解.NETFramework命名空间

•了解C#程序的基本结构

•熟悉VisualStudio.NET的配置

•熟悉如何创建一个控制台应用程

实验内容:

・编写第一个控制台的输入与输出程序

•建立第一个Windows窗体应用程序

•定义一个简单的IP地址结构体

实验设备仪器:

PC50台,要求:windows7/xp/2000/2003操作系统,配置Vc#2005/2008运行环境,安装SQLServer2000/2005/2008数据

库管理系统

实验步骤:

1:控制台的输入与输出

问题

在控制台上实现文本的输入与输出。

问题说明

按照提示输入自己的姓名,程序输出你输入的名字,并欢迎使用C#语言。主要使用Console(控制台)对象的IVriteLine

和Write方法实现显示;使用ReadLine方法读入字符。

分析

Main。是应用程序(可执行)的入口点,它必须包含在一个类中,且仅有一个类能使用该标志定义。

参考步骤:

(1)为解决方案创建一个控制台应用程序的项目“Example」”。

(2)将“Program,cs"类文件重命名为"Welcome,cs”。

(3)将以下代码添加到“Welcome.cs”中。

usingSystem;〃给System名字空间加一个using指令,不再需要规定名字空间,就可以使用它们的方法和属性

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample」

{

classWelcome

(

/*这种注释

跨越多行*/

staticvoidMain(string口args)

(

〃这是单行注释

Console.Write("请输入你的姓名:");//Write与WriteLine不同的地方在于它输出

不换行

stringstrName=Console.ReadLine();

Console.WriteLineC{0}+,你好!\n欢迎使用C#语言!",strName);〃{0}代替

WriteLine方法的参数表中紧随

格式串后的第一个变量

)

}

(4)选择“生成”一“生成解决方案”选项,以生成此项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.1所示。

图1.1Welcome,cs的输出结果

2:建立Windows窗体应用程序

问题

设计一个窗口,可以将用户输入的两个操作数进行加法计算,并显示计算结果。

问题说明

首先要新建陋ndows应用程序类型的项目,创建成功后,可以得到一个名为Forml的空白窗体。可以从左边工具箱中的公

共控件组中选择控件往窗体上拖放。

在Windows窗体上添加两个文本输入框供用户输入操作数,再添加一个按钮来对输入的操作数进行加法计算,最后将计算

结果显示在第三个输入框中。

分析

VisualStudio.Net使开发图形界面程序简单,把需要的控件从工具箱拖放到Windows窗体上即可。使用VisualStudio.Net

可以减少开放人员编写的代码量,使开放人员集中精力解决业务问题。

推荐步骤:

(1)建立一个Windows应用程序项目,命名为"WinForm"»

(2)往Forml窗体上拖放3个Label和TextBox控件和一个Button控件,并对它们相应的Text属性进行修改,效果如图:

蝎For»l

(3)双击ADD按钮,出现代码编辑界面,把以下代码添加到“Forml.cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

namespaceWinForm

(

publicpartialclassForml:Form

(

publicForml()

(

InitializeComponent();

)

privatevoidbuttonl_Click(objectsender,EventArgse)

(

longoperl,oper2,result;

〃如果操作数为空,显示警告信息

if((textBoxl.Text==I|(textBox2.Text=="〃))

(

MessageBox.Show(this,〃操作数不能为空","提示信息”,

MessageBoxButtons.OK,MessageBoxIcon.Information);

return;

)

try

{

〃将文本框中的数据(字符串型)转换成long型数据

operl=Convert.Tolnt64(textBoxl.Text);

oper2=Convert.Tolnt64(textBox2.Text);

result=operl+oper2;

〃将和写入结果文本框

textBox3.Text=Convert.ToString(result);

)

catch(Exceptionel)

(〃捕捉异常,例如:若输入字母,在转换成long类型时会引发异常

MessageBox.Show(this,el.Message,“警告信息”,

MessageBoxButtons.OK,MessageBoxIcon.Warning);

)

)

)

}

(4)选择“生成”一“生成解决方案”选项,以生成此项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.2所示。

图1.2Forml窗体的运行结果

3:一个简单的IP地址结构体

问题

使用4个byte类型的变量来对IP地址进行存储,并将这4个变量组成定义一个结构体。

问题说明

struct类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型的值类型。

分析

此问题要求使用一个结构体来接受和储存IP地址中的4个十进制数。该结构体可通过以下方式声明:IPsampleStruct;

在C#中,类与结构体在语义上是不同的,结构是值类型,不需要实例化,而类是引用类型。

推荐步骤:

(1)为解决方案创建一个控制台应用程序的项目“Example_2”。

(2)将"Program,cs"类文件重命名为"SampleStruct.cs”。

(3)将以下代码添加到“SampleStruct.cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample_2

〃定义一个IP结构体

structIP

publicbytebl,b2,b3,b4;

)

classSampleStruct

(

staticvoidMain(stringt]args)

(

IPsampleStruct;

sampleStruct.bl=192;

sampleStruct.b2=168;

sampleStruct.b3=1;

sampleStruct.b4=101;

Console.Write("{0}.{1}〃,sampleStruct.bl,sampleStruct.b2);

Console.Write(*{0}.{1)*,sampleStruct.b3,sampleStruct.b4);

)

)

}_________________________________________________________________________________

(4)选择“生成”f”生成解决方案”选项,以生成此项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.3所示。

图1.3SampleStruct.cs的输出结果

实验总结

根据实验内容和步骤,写出实验体会。

实验二C#基础知识运用

实验目的:

通过本章的学习,主要把握以下内容:

•在c#中定义变量和常量

•使用C#中的基本数据类型

•理解装箱和拆箱的概念

・使用C#中的运算符,选择结构和循环结构

•定义和使用数组,了解结构和枚举

•熟悉C#中的预处理指令

•熟悉C#中的字符串处理

实验设备仪器:

PC50台,要求:windows7/xp/2000/2003操作系统,配置Vc#2005/2008运行环境,安装SQLServer2000/2005/2008数据

库管理系统

实验内容:

•编写一个使用枚举和Switchcase选择语句的程序

•浮点型数组排序

•编写1到9的乘法口诀表程序

实验步骤:

1:枚举和Switchcase

问题

枚举类型的构建和使用;通过Switchcase语句来对符合条件值进行输出。

问题说明

编写一个Degrees的枚举,然后引用这个枚举。

分析

在此问题中首先需要定义•组不同类型的学位。为此,可通过以下方式创建枚举。

EnumDegrees

(

Bachelor,〃学士

Master,〃硕士

Doctor〃博士

}

然后,可以使用switch结构,根据传递到此switch结构的枚举成员来决定要显示的信息。

参考步骤:

(1)为解决方案创建一个控制台应用程序的项目“Example_3”。

(2)将wProgram.csw类文件重命名为"EnumDemo.cs”。

(3)将以下代码添加到"EnumDemo.cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample_3

(

//学位枚举列表

enumDegrees

(

//枚举成员

Bachelor,

Master,

Doctor

)

///<summary>

III此程序演示枚举和switchcase的用法。

III</summary>

classEnumDemo

(

III<summary>

///应用程序的主入口点。

III</summary>

[STAThread]

staticvoidMain(string[]args)

//用switchcase来为相应的case显示信息。

switch(Degrees.Master)

(

caseDegrees.Bachelor:

Console.WriteLine("你的学位为学士”);

break;

caseDegrees.Master:

Console.WriteLine("你的学位为硕士");

break;

caseDegrees.Doctor:

Console.WriteLine("你的学位为博士“);

break;

default:break;

)

Console.ReadLine();

)

)

}

(4)选择“生成”一“生成解决方案”选项,以生成此项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.1所示。

图1.1EnumDemo.cs的输出结果

2:浮点型数组排序

问题

用户输入6个浮点型数组,程序根据其值的大小,进行排序输出。

问题说明

编写一个程序来接受用户输入的6个浮点数值,把这些数存放到一个数组里,然后对这些数组里面的值进行排序。

分析

此问题要求使用一个数组来接受和存储用户输入的6个值。该数组可通过以下方式声明:

〃声明长度为6的数组

float[]elements=newfloat[6];

用冒泡法对数组进行排序:需要使用一个for循环来接受用户输入的值。再用一个嵌套for循环比较数组中的元素。

参考步骤:

(1)为解决方案创建一个控制台应用程序的项目“ExampIe_4”。

(2)将**Program,cs"类文件重命名为"ArrayDemo.cs”。

(3)将以下代码添加到“ArrayDemo.cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceExample4

(

III<summary>

///此程序演示数组和嵌套for循环的用法。

///</summary>

classArrayDemo

(

III<summary>

///应用程序的主入口点。

III</summary>

[STAThread]

staticvoidMain(string1]args)

(

//声明长度为6的数组

float[]elements=newfloat[6];

//计数器变量

intindex;

〃临时变量

floattemp;

Console.WriteLine("输入要进行排序的6个浮点数值:〃);

//For循环接受用户输入的值

for(index=0;index<elements.Length;index++)

(

elements[index]=float.Parse(Console.ReadLineO);

)

Console.WriteLine(/z\n已排序的数组:");

//嵌套for循环对值进行比较

for(index=0;index<elements.Length;index++)

(

for(intj=index+1;j<elements.Length;j++)

(

//如果值不以升序排序,就交换这些值

if(elements[index]>elements[j])

(

temp=elements[index];

elements[index]=elements[j];

elements[j]=temp;

)

)

Console.WriteLine(elements[index]);

)

}

}

)

(4)选择“生成”一“生成解决方案”选项,以生成此项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.2所示。

图1.2ArrayDemo.cs的输出结果

3:从1到9的乘法口诀表

问题

编写程序输出从1到9的乘法口诀表。

问题说明

口诀表的前一部分如下:

1*1=1;

1*2=2;2*2=4;

1*3=3;2*3=6;3*3=9;

1*4=4;2*4=8;3*4=12;4*4=16;

分析

使用两个嵌套for循环来实现,父循环从1到9,子循环从1到父循环的当前值。

推荐步骤:

(1)建立-一个控制台应用程序项目,命名为amultiplicationTablew©

(2)把以下代码添加到“Program,cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespacemultiplicationTable

{

classProgram

(

staticvoidMain(string[]args)

for(inti=1;i<10;i++)

〃输出一行

for(intj=1;j<=i;j++)

(

Console.Write(j.ToString()*"+i.ToSlring()+〃;〃);

}

Console.Write("\n");〃换行

)

)

)

}__________________________________________________________________________________________

(3)选择“生成”一“生成解决方案”选项,以生成此项目。

(4)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此应用程序的输出结果如图1.3所示。

图1.3Program,cs的运行结果

实验总结

根据实验内容和步骤,写出实验体会。

实验三在C#中实现面向对象编程

实验目的:

通过本章的学习,主要把握以下内容:

•理解c#的类和对象

•使用C#构造函数和析构函数

•使用C#访问修饰符

•使用方法

•在C#中使用方法的重写

•理解属性及其不同的类型、实现

•理解和使用索引器

•理解命名空间

实验内容,

编写一个队列类的C#程序。

this关键字的使用。

•构造函数的重载和普通函数的重载。

实验设备仪器:

PC50台,要求:windows7/xp/2000/2003操作系统,配置Vc#2005/2008运行环境,安装SQLServer2000/2005/2008数据

库管理系统

实验步骤:

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<=0)

(

rear=head=nul1;

Console.WriteLine(“队列中没有元素”);

return0;

)

intdata=head,data;

head=head,next;

length一;

returndata;

}

publicvoidPrint()〃打印

(

stringstr="〃;

Nodecurrent=head;

while(current!=null)

{

if(current==head)

str+=current,data.ToStringO;

}

else

{

str+=〃<-+current,data.ToStringO;

)

current=current,next;

}//endwhilecurrent

Console.WriteLine(str);

)

}

)______________________________________________________________________________________

(3)在Program,cs类中调用Queue类,代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceQueueWithCSharp

(

classProgram

{

staticvoidMain(string[]args)

{

〃定义一个队列类

QueuedemQueue=newQueue();

〃数据入排

demQueue.EnQueue(lO);

demQueue.EnQueue(19);

demQueue.EnQueue(50);

demQueue.EnQueue(99);

〃数据出排

demQueue.DeQueue();

〃打印队列中的数据

demQueue.Print();

)

)

}______________________________________________________________________________________

(4)生成项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序,输出结果如图1.1所示。

图1.11的输出结果

2:this关键字的使用

问题

this关键字的使用

指导问题说明

this引用有三种典型的使用方式。第一种方式是限定被参数掩藏的实例变量;

publicvoidFunctionl(inti)

(

This.i=i;

}____________________________________________________________

第二种用法是把当前对象作为参数传给另一个方法;

publicvoidMethodi()

(

OtherClassobj=newOtherClass();

obj.Method2(this);

p

第三种方法与索引器有关。

publicClassthis[stringtitle]

(

get

(

foreach(…)

returnclass;

}

分析

定义一个汽车类,这个类有多个构造函数,因为这些构造函数之间有部分功能是重叠的,所以可以进行相互调用。在进行

构造函数的互相调用时,this关键字调用参数最匹配的那个构造函数。

参考步骤:

(1)使用VisualStudio.NET2005新建一个基于控制台的项目“CallConstructor”。

(2)将"Program,cs”类文件重命名为“Car.cs”。

(3)将以下代码添加到“Car.cs”中。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceCallConstructor

(

publicclassCar

(

intpetalCount=0;

strings="null";

Car(intpetalCount)

(

this.petalCount=petalCount;〃this的第一种用法

Console.WriteLine(''Constructorw/intargonly,petalCount="+

petalCount);

)

Car(Strings,intpetals)

:this(petals)〃this关键字调用参数最匹配的那个构造函数

(

this,s=s;

Console.WriteLine("String&intargs");

)

Car():this("hi”,47)

(

Console.WriteLine(^defaultConstructor*);

)

staticvoidMain(string[]args)

(

Carx=newCar();

}

}

}______________________________________________________________________________________

(4)生成项目。

(5)选择“调试”一“开始执行(不调试)”选项来执行此应用程序。

此程序的输出结果如图3.2所示。

图3.22的输出结果

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.WriteLineC'Plantingaseedling");

height=0;

)

publicTree(inti)

(

Console.WritelJne(^CreatingnewTreethatis〃+i+"feet

tall");

height=i;

)

internalvoidinfoO

{

Console.WriteLine(*Treeis"+height+〃feettall");

}

internalvoidinfo(strings)

{

Console.WriteLine(3+^:Treeis"+height+“feettall");

)

)

staticvoidMain(string[]args)

(

for(inti=0;i<5;i++)

{

Treet=newTree(i);

O;

("overloadedmethod");

)

newTree();

)

)

}________________________________________________________________________________________

(3)生成并执行该程序。

此程序的输出结果如图3.3所示。

c:C:\¥IMDO¥S\syste>32\c*d.exe

Creatingnev/Treethatis0feettall

Treeis0feettall

overloadednethod:Ti*eeis0feettall

Creatingnev/Treethatis1feettall

Treeis1feettall

overloadednethod:Treeis1feettall

CreatingnewTreethatis2feettall

Treeis2feettall

overloadednethod:Treeis2feettall

CreatingnewTreethatis3feettall

Treeis3feettall

ouerloadednethod:Treeis3feettall

CreatingnewTreethatis4feettall

Treeis4feettall

ouerloadednethod:Treeis4feettall

Plantingaseedling

请按任意键继续...

图3.33的输出结果

实验总结

根据实验内容和步骤,写出实验体会。

实验四WinForms程序设计初步

实验目的:

1、理解Windows窗体

2、使用基本控件如标签、文本、按钮、列表框和组合框

3、掌握窗体的常用属性和方法

使用WinForms中的高级控件

0单选按钮

0图片框

0选项卡控件

0滚动条

0进度条

实验内容:

•建立个人简历的Windows应用程序。

•建立一个模拟的计算器应用程序。

•建立一个媒体播放机应用程序。

实验设备仪器:

PC50台,要求:window

温馨提示

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

评论

0/150

提交评论