C#实验指导书.docx
- 文档编号:24089910
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:17
- 大小:99.56KB
C#实验指导书.docx
《C#实验指导书.docx》由会员分享,可在线阅读,更多相关《C#实验指导书.docx(17页珍藏版)》请在冰豆网上搜索。
C#实验指导书
实验一 C#基本语法
实验目标:
Ø熟悉VS2003.NET开发环境
Ø练习C#语言基本语法
Ø熟悉控制台应用程序和Windows应用程序的开发摸版
参考实验步骤:
Ø打开VS2003.NET,在左侧选择项目类型:
C#项目,在右侧选择项目模版类型(控制台应用程序,Windows应用程序,或者是空白项)。
Ø选择项目存储路径,给项目起名字。
Ø打开资源管理器,点击项目右键,可以为项目增加新项(空白模版需要增加空白源文件)。
Ø在源代码文件里,编辑程序。
Ø如果是Windows应用程序,可以从工具箱往画布上拖曳控件,制作界面功能。
双击界面,即会进入代码编辑页。
Ø编译调试程序。
练习:
1:
编写9*9乘法表,并按照格式打印输出。
2:
编写计算器。
能实现2个操作数的四则运算。
作业:
预习实验,撰写实验报告。
详细写明练习题目的编写过程。
实验二 动物管理程序设计
实验目标:
Ø熟悉C#的面向对象语法
Ø掌握C#中封闭性的实现
Ø掌握C#中继承性的实现
Ø掌握C#中多态性的实现
Ø根据实验指导完成动物面向对象特性的描述
参考实验步骤:
Ø打开VS2003.NET,在左侧选择项目类型:
C#项目,在右侧选择项目模版类型(控制台应用程序,或者是空白项)。
Ø选择项目存储路径,给项目起名字。
Ø打开资源管理器,点击项目右键,可以为项目增加新项(空白模版需要增加空白源文件)。
Ø在源代码文件里,编辑程序。
指导思路:
问题描述(动物特性描述):
⏹狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。
狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候,会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声;
⏹猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。
猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时,会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声;
⏹青蛙是一种两栖动物(既是水生动物也是陆生动物),既不是哺乳类的也不是肉食性的,属于卵生。
当青蛙情绪好的时候,会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”;
问题分析:
⏹首先需要抽取问题描述中对象
⏹分析每个对象所具有的特征
⏹分析每个对象所发出的动作
⏹从这些对象的特征中,抽取类的属性和方法
⏹分析类之间的关系,画出类结构图
难点分析1:
⏹抽象类和对象的基本方法:
⏹抽取对象的基本的方法:
找出句子中所使用的名词
◆例如:
在句子“小猫喵喵叫”中,我们能够确定一个对象:
猫;
⏹确定对象发出的行为动作的基本的方法:
找出句子中的动词
◆例如:
“旺旺叫”、“喵喵叫”都属于对象发出的动作;
⏹确定对象的属性或者特征的基本的方法:
找出句子中的形容词
◆例如:
“哺乳性的”“肉食性的”“卵生的”等等;
⏹“是”的关系一般抽象为继承
◆例如:
狗是一种动物,意味着:
“狗”类继承自“动物”类;
⏹“有”的关系一般抽象为类的属性
◆例如:
动物都有情绪,意味着:
“情绪”是“动物”类的一个属性;
难点分析2:
阶段划分:
第一阶段(60分钟):
不考虑情绪影响动物打招呼的方式
第二阶段(40分钟):
考虑情绪影响动物打招呼的方式
第三阶段(60分钟):
考虑陆生动物和水生动物
第一阶段:
⏹编写Animal类,没有mood属性,只有一种SayHello方法;
⏹编写Dog类、Cat类和Frog类,分别继承自Animal类,实现与Animal类不同的功能;
⏹编写main方法,分别实例化以上三个类的三个对象,测试类方法实现的正确性;
代码:
参考附录
第二阶段:
⏹扩充Animal类、Dog类、Cat类和Frog类,增加Animal类的mood属性,并实现SayHello方法的多态性;
⏹扩充main方法;
代码:
参考附录
第三阶段:
⏹定义LandAnimal接口和WaterAnimal接口;
⏹扩充Dog类、Cat类和Frog类,使其实现相应的接口;
⏹扩充main方法;
Ø编译调试程序。
练习:
1:
编写类Animal,成员有是否是哺乳动物,和抽象函数:
hello()。
要求编写接口:
LandAnimal和WaterAnimal来做陆生和水生动物。
要求编写派生类:
Dog,Bird,Fish,Whale,Frog,Crocodile。
定义各类对象,实现各种动物的特性说明。
作业:
预习实验,撰写实验报告。
详细写明练习题目的编写过程。
附录:
usingSystem;
publicclassHelloWorld
{
publicstaticvoidMain()
{
Doganimal1=newDog();
Catanimal2=newCat();
Froganimal3=newFrog();
if(animal1.isMammal())
Console.WriteLine("狗是哺乳动物");
else
Console.WriteLine("狗不是哺乳动物");
if(animal1.isCarnivorous())
Console.WriteLine("狗是肉食动物");
else
Console.WriteLine("狗不是肉食动物");
Console.WriteLine("狗通常的情况下,和人打招呼的方式为:
"+animal1.sayHello());
Console.WriteLine("狗被抚摸情绪好的时候,打招呼的方式是:
"+animal1.sayHello(Animal.COMFORTED));
Console.WriteLine("狗烦躁的时候,会:
"+animal1.sayHello(Animal.SCARED));
Console.WriteLine("狗有"+animal1.getNumberOfLegs()+"条腿");
Console.WriteLine();
if(animal2.isMammal())
Console.WriteLine("猫是哺乳动物");
else
Console.WriteLine("猫不是哺乳动物");
if(animal2.isCarnivorous())
Console.WriteLine("猫是肉食动物");
else
Console.WriteLine("猫不是肉食动物");
Console.WriteLine("猫通常的情况下,和人打招呼的方式为:
"+animal2.sayHello());
Console.WriteLine("猫情绪好的时候会:
"+animal2.sayHello(Animal.COMFORTED));
Console.WriteLine("猫烦躁的时候会:
"+animal2.sayHello(Animal.SCARED));
Console.WriteLine("猫有"+animal2.getNumberOfLegs()+"条腿");
Console.WriteLine();
if(animal3.isMammal())
Console.WriteLine("青蛙是哺乳动物");
else
Console.WriteLine("青蛙不是哺乳动物");
if(animal3.isCarnivorous())
Console.WriteLine("青蛙是肉食动物");
else
Console.WriteLine("青蛙不是肉食动物");
Console.WriteLine("青蛙通常的情况下,打招呼的方式为:
"+animal3.sayHello());
Console.WriteLine("青蛙情绪好的时候会:
"+animal3.sayHello(Animal.COMFORTED));
Console.WriteLine("青蛙受到惊吓是会:
"+animal3.sayHello(Animal.SCARED));
if(animal3.getLaysEggs())
Console.WriteLine("青蛙产卵");
else
Console.WriteLine("青蛙不产卵");
if(animal3.getGillFlag())
Console.WriteLine("青蛙有鳃");
else
Console.WriteLine("青蛙没有鳃");
Console.WriteLine("青蛙有"+animal3.getNumberOfLegs()+"条腿");
Console.ReadLine();
}
}
abstractclassAnimal
{
//下面的两个属性被声明为public类型的,而且是静态的
publicconstintSCARED=1;//情绪好
publicconstintCOMFORTED=2;//情绪不好,烦躁
//下面的属性被声明为保护类型的,允许在子类中访问
protectedboolmammal=true;//是否哺乳动物属性
protectedboolcarnivorous=true;//是否食肉动物属性
protectedintmood=COMFORTED;//情绪属性
publicboolisMammal()//判断是否哺乳动物
{
return(mammal);
}
publicboolisCarnivorous()//判断是否食肉动物
{
return(carnivorous);
}
abstractpublicstringsayHello();//打招呼的方式,该方法是抽象的,所以必须在子类中实现
abstractpublicstringsayHello(intmoodval);
publicvoidsetMood(intnewValue)//设置情绪值
{
mood=newValue;
}
publicintgetMood()//返回情绪值
{
return(mood);
}
}
interfaceLandAnimal//陆生动物接口
{
intgetNumberOfLegs();//返回有多少只脚
}
interfaceWaterAnimal//水生动物接口
{
boolgetGillFlag();//返回是否有腮
boolgetLaysEggs();//返回是否产卵
}
classDog:
Animal,LandAnimal//狗类继承自动物类,并实现陆生动物接口
{
//下面的属性被声明为私有的,并初始化。
privateintnumberOfLegs=4;
//缺省构造函数确保属性能够正确设置
publicDog()
{
mammal=true;//是哺乳动物
carnivorous=true;//是食肉动物
}
//重载父类的方法
publicoverridestringsayHello()
{
return("摇摇尾巴");
}
publicoverridestringsayHello(intmoodval)
{
this.setMood(moodval);
switch(mood){
caseSCARED:
return("呜呜叫");
caseCOMFORTED:
return("旺旺旺叫");
}
return("摇摇尾巴");
}
//实现LandAnimal接口
publicintgetNumberOfLegs()
{
return(numberOfLegs);
}
}
classCat:
Animal,LandAnimal//猫类继承自动物类,并实现生活在陆地上的动物接口
{
//声明并初始化猫的两个属性
privateintnumberOfLegs=4;
privatebooltailFlag=true;
//缺省构造函数
publicCat()
{
mammal=true;
carnivorous=true;
}
//重载父类的方法
publicoverridestringsayHello()
{
return("喵喵叫");
}
publicoverridestringsayHello(intmoodval)
{
this.setMood(moodval);
switch(mood){
caseSCARED:
return("嘶嘶叫");//如果情绪烦躁的话,就“嘶嘶叫”
caseCOMFORTED:
return("咕噜咕噜叫");//如果情绪好的话,发出“咕噜咕噜”声
}
return("喵喵叫");//如果情绪好的话,发出“喵~”声
}
//实现LandAnimal接口
publicintgetNumberOfLegs()
{
return(numberOfLegs);
}
}
classFrog:
Animal,LandAnimal,WaterAnimal
{
//声明并初始化青蛙的四个属性
privateboolgillFlag=true;
privateboollaysEggs=true;
privateintnumberOfLegs=4;
privatebooltailFlag=true;
//缺省构造函数
publicFrog()
{
mammal=false;
carnivorous=false;
}
//重写父类的“打招呼”的方法
publicoverridestringsayHello()
{
return("呱呱呱");
}
publicoverridestringsayHello(intmoodval)
{
this.setMood(moodval);
switch(mood){
caseSCARED:
return("扑通一声跳入水中");
caseCOMFORTED:
return("呱呱呱");
}
return("呱呱呱");
}
//实现WaterAnimal接口
publicboolgetGillFlag()
{
return(gillFlag);
}
publicboolgetLaysEggs()
{
return(laysEggs);
}
//实现LandAnimal接口
publicintgetNumberOfLegs()
{
return(numberOfLegs);
}
}
实验三学生管理系统程序设计(C/S)
目标:
Ø掌握各种数据访问方法
Ø了解ADO.NET的工作原理
Ø完整的根据需求完成一个访问数据库的应用程序
一指导
“持久”,英文即Persistence,简单来讲,也就是把数据保存到可掉电式存储设备以供之后所用。
在大多数情况下,特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以“固化”,而持久化的实现过程则大多通过各种关系型数据库、基于磁盘文件XML数据库、消息队列、甚至普通的WORD文档、TXT文档等各种手段的持久化技术,不过,技术上实现的手段不尽相同。
【1】从早期的使用各数据库厂商提供的各具特色的嵌入式SQL语句,比如ORACLE的PRO*C,到后来ORACLE厂商开发的ODBC数据中间件技术,能通过操纵单一的命令操纵不同的数据库,开发人员只需针对不同的应用加入相应的ODBC驱动;DAO(DataAccessObject)不象ODBC那样是面向C/C++程序员的,它是微软提供给VisualBasic开发人员的一种简单的数据访问方法,用于操纵Access数据库。
RDO,弥补了在使用DAO访问不同的关系型数据库的时候,Jet引擎不得不在DAO和ODBC之间进行命令的转化,导致了性能的下降的缺点。
OLEDB,提供了应用和数据源之间的无缝连接,它基于COM(ComponentObjectModel)。
ADO,基于OLEDB之上的更简单、更高级、更适合VisualBasic程序员,消除了OLEDB的多种弊端。
ADO.NET,完全基于XML和离线计算模型。
JDBC是类似于ODBC的属于JAVA的数据库访问技术,也可以支持PB等数据库,ADO.NET的工作原理图如图10.1所示。
图10.1ADO.NET的工作原理图
练习:
问题:
设计一个学生管理数据库
分析:
完成一个完整的项目包括前台的功能设计和后台数据库的设计以及前台能够成功高效的访问后台的实现
步骤:
(1)项目需求分析
(2)数据库设计
(3)前台设计
(4)编程语言的选择
(5)数据库实现
(6)前台程序的实现
(7)功能测试
实验三‘学生管理系统程序设计(B/S)
目标:
Ø掌握各种数据访问方法
Ø了解ADO.NET的工作原理
Ø完整的根据需求完成一个访问数据库的应用程序的完成
一指导
“持久”,英文即Persistence,简单来讲,也就是把数据保存到可掉电式存储设备以供之后所用。
在大多数情况下,特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以“固化”,而持久化的实现过程则大多通过各种关系型数据库、基于磁盘文件XML数据库、消息队列、甚至普通的WORD文档、TXT文档等各种手段的持久化技术,不过,技术上实现的手段不尽相同。
【1】从早期的使用各数据库厂商提供的各具特色的嵌入式SQL语句,比如ORACLE的PRO*C,到后来ORACLE厂商开发的ODBC数据中间件技术,能通过操纵单一的命令操纵不同的数据库,开发人员只需针对不同的应用加入相应的ODBC驱动;DAO(DataAccessObject)不象ODBC那样是面向C/C++程序员的,它是微软提供给VisualBasic开发人员的一种简单的数据访问方法,用于操纵Access数据库。
RDO,弥补了在使用DAO访问不同的关系型数据库的时候,Jet引擎不得不在DAO和ODBC之间进行命令的转化,导致了性能的下降的缺点。
OLEDB,提供了应用和数据源之间的无缝连接,它基于COM(ComponentObjectModel)。
ADO,基于OLEDB之上的更简单、更高级、更适合VisualBasic程序员,消除了OLEDB的多种弊端。
ADO.NET,完全基于XML和离线计算模型。
JDBC是类似于ODBC的属于JAVA的数据库访问技术,也可以支持PB等数据库,ADO.NET的工作原理图如图10.1所示。
图10.1ADO.NET的工作原理图
练习
问题:
设计一个BBS网站/社区医院网站实现/校园网站
分析:
完成一个完整的项目包括前台的功能设计和后台数据库的设计以及前台能够成功高效的访问后台的实现
步骤:
(1)项目需求分析
(2)数据库设计
(3)前台设计
(4)编程语言的选择
(5)数据库实现
(6)前台程序的实现
(7)功能测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 实验 指导书