C#程序设计实验指导书及答案.pdf
长春理工大学计算机科学与技术专业 C#程序设计实验指导C#程序设计实验指导书实 验 须 知1.实验前,应认真阅读实验指导书,明确实验目的、实验内容和实验步骤,做好实验准备。2.实验中,积极思考,及时记录,有疑问及时解决,当堂完成实验内容和实验报告。3.实验中严格遵守实验室管理规则,珍惜实验时间,不做与实验无关 的事。4.实验结束,按要求填写实验机器使用记录单,正确关闭实验用机,整理好键盘和椅子,值日生认真打扫实验室卫生。目录任务一熟悉 VS2005 开发环境.1任务二掌握基本程序逻辑.8任务三掌握循环语句.3任务四创建类与对象.10 任务五创建静态类与静态方法.17 任务六实现继承和抽象类.25 任务七掌握多态的应用.32 任务八掌握接口的实现.41 任务九实现对数组的操作.52 任务十实现队列、栈的操作.60 任务十一实现进销存系统供应商信息维护.65 任务十二掌握开发WinForms 应用程序的步骤.71 任务十三掌握系统主界面设计.89 任务十四掌握委托与事件处理机制.100 任务十五访问 SQL Server 数据库.108 任务十六访问 Access 数据库 .122 任务十七了解字符串操作(选做).131 任务十八掌握文件操作(选做).138 C#程序设计实验指导书1 任务一熟悉 VS2005 开发环境实验目的掌握 VS2005 开发 C#应用程序的步骤掌握 VS2005 调试器的使用第一部分上机训练1、采用 VS2005 编写 Hello World 应用程序1)打开 VS2005 开发工具2)在 VS2005 主界面下选择菜单【文件】【新建】【项目】3)在新建项目对话框中选择Visual C#,模板选择控制台应用程序,给项目命名为HelloWorld,然后点“浏览”按钮,选择项目的存储目录C#程序设计实验指导书2 4)程序生成的文件如下C#程序设计实验指导书3 5)双击 Program.cs,键入代码如下:using System;using System.Collections.Generic;using System.Text;namespace HelloWorld classProgram staticvoid Main(string args)Console.WriteLine(Hello World);6)在菜单上选择【生成】【生成解决方案】7)按 F5 或者点启动调试按钮运行程序8)这时会发现DOS 窗口一闪不见,按Ctrl+F5,或者在菜单上选择【调试】【开始执行(不调试)】,可以解决这个问题C#程序设计实验指导书4 9)运行结果如下:2、断点的设置与调试1)按上述步骤创建名为BreakPoint 的控制台应用程序2)在 Program.cs 中输入如下代码:using System;using System.Collections.Generic;using System.Text;namespace BreakPoint C#程序设计实验指导书5 classProgram staticvoid Main(string args)int i=5;int j=i*2;Console.WriteLine(01,i,j);3)给 int j=i*2;行设置断点,只需点左边的空白栏4)按 F5执行程序,会发现程序执行到断点处停止,移动鼠标到i 和j 上,观察 i,j的当前值5)选择工具栏的逐语句按钮或者按F11,单步执行程序9)再次观察 i,j的值10)注意下面的调试监视窗口:C#程序设计实验指导书6 第二部分实战提高请修改 Hello World应用程序,输出自己的班级、学号、姓名,自我介绍。代码写在下面:using System;using System.Collections.Generic;using System.Text;namespace HelloWorld classProgram staticvoid Main(string args)Console.WriteLine(Hello World);Console.WriteLine(班级:级网络工程班);Console.WriteLine(学号:);Console.WriteLine(姓名:刘群 );Console.WriteLine(自我介绍:);Console.WriteLine(我来自四川,现就读于华侨大学计算机科学与技术学院。);Console.ReadKey();C#程序设计实验指导书7 第三部分知识总结学生总结请将问题答案写在下面空白处完成上机训练模块花费的时间10min 完成实战提高模块花费的时间5min 本次实验对你而言的难点断点调试本次实验的收获断点调试希望老师强化讲解的知识要点断点调试希望老师帮助回答的问题本次实验自评分数(五分制)5 教师评价请将评语、分数等写在下面空白处问题答疑实验评语实验得分C#程序设计实验指导书8 任务二掌握基本程序逻辑实验目的编写应用程序掌握变量、常量、枚举的使用掌握表达式的应用掌握分支语句的应用第一部分上机训练1、编写一个程序,列举班级所有班委,然后使用这个枚举1)创建一个名位TestEnum的控制台应用程序2)在 namespace TestEnum 和 class Program之间输入:enum 班委 班长,团支书,生活委员,体育委员,劳动委员,注意缩进和对齐3)在staticvoid Main(string args)方法中输入:班委 classTeam=班委.生活委员;switch (classTeam)case 班委.班长:Console.WriteLine(我是班长 );break;case 班委.团支书:Console.WriteLine(我是团支书 );break;case 班委.生活委员:Console.WriteLine(我是生活委员 );break;case 班委.体育委员:Console.WriteLine(我是体育委员 );break;C#程序设计实验指导书9 case 班委.劳动委员:Console.WriteLine(我是劳动委员 );break;default:Console.WriteLine(为什么我不是班委?);break;4)按 CTRL+F5 查看运行结果2、计算圆面积,圆面积公式为Area=R2,这种表示符号,在计算机中只能表示为Area=PI*R*R,在本例中,我们希望用户输入圆的半径,但是用户的输入只能是字符串,因此,这里我们要用到数制的转换,注意数制的转换方法1)新建一个名为CircleArea的控制台应用程序2)输入如下代码:using System;using System.Collections.Generic;using System.Text;namespace CircleArea classProgram staticvoid Main(string args)/定义常量constfloat PI=3.1415926f;Console.Write(请输入圆的半径:);/获取用户的输入string input=Console.ReadLine();/将字符串转化为浮点数float radius=float.Parse(input);/计算圆面积float circlArea=radius*radius*PI;/输出结果Console.WriteLine(圆面积为:0,circlArea);3)按 Ctrl+F5 运行程序C#程序设计实验指导书10 4)补充:数制的转换将字符串转换成某种类型,只需直接写成类似int.Parse(”11”)的格式即可,如果需要实现数制之间的任意转换,则需要调用Convert.ToXXX()方法。可以自己实践一下。第二部分实战提高1、编写一个程序接受用户输入的字符串。如果输入的字母是”a”、”e”、”i”、”o”或”u”中的一个,则显示“您输入了一个元音”,否则显示“这不是一个元音”。sing System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Vowel classProgram staticvoid Main(string args)Console.WriteLine(请输入一个英文字母:);C#程序设计实验指导书11 string input=Console.ReadLine();/char a,e,i,o,u;if (input=a|input=e|input=i|input=o|input=u)Console.WriteLine(您输入了一个元音);else Console.WriteLine(您输入的不是一个元音);Console.ReadKey();2、人有胖瘦之分,体重过轻则为瘦,过重则为胖,那么以什么样的标准来衡量是胖还是瘦呢?这当然必须有个参照值,这个参照值,我们就把它称之为标准体重。目前在我国尚没有统一的标准体重数据。除了国际流行的体重计算方法外,军事科学院还推出一计算中国人理想体重的方法:北方人理想体重(千克)(身高厘米150)x 0 650,南方人理想体重(千克)(身高厘米150)x 0 648,这一计算方法,似乎比较适合南北地区中国人。正常体重一般在标准体重+-10以内的范围。超过这一范围,就可称之为异常体重。实测体重超过标准体重,但超出部分 20 者称为超重;实测体重超过标准体重 20 以上,并有脂肪百分率(F)超过 30者则可诊断为肥胖病。体重超过标准体重的 30 一 50,F超过 35一 45者称中度肥胖病;超过标准体重50以上,F超过 45以上者称为重度肥胖病。根据以上描述,要求用户输入以下内容:1)北方人/南方人2)身高(厘米)3)体重(公斤)4)脂肪百分率(F%)根据以上公式和描述告诉客户是否超重,如果超重,再告之其是何种肥胖病using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Weight C#程序设计实验指导书12 classProgram staticvoid Main(string args)double area,high,weight,percent,idealweight,F;Console.WriteLine(请输入你所属地区(北方=1/南方=2):);area=double.Parse(Console.ReadLine();/转换成 double 型Console .WriteLine(请输入您的身高(厘米));high=Convert.ToDouble(Console.ReadLine();/另一个函数转换类型Console .WriteLine(请输入您的体重(公斤));weight=Convert.ToDouble(Console.ReadLine();Console .WriteLine(请输入您的脂肪百分率(F%));F=double.Parse(Console.ReadLine();if (area=1)idealweight=(high-150)*0.6+50;percent=weight/idealweight;else idealweight=(high-150)*0.6+48;percent=weight/idealweight;if (percent 0.9)Console.WriteLine(偏轻);else if (percent=1.1)Console.WriteLine(正常体重 );else if (percent=1.2)Console.WriteLine(您超重了!);else if (percent 30)C#程序设计实验指导书2 Console.WriteLine(您患有肥胖病!);else if (percent=35&F 45)Console.WriteLine(您患有重度肥胖病!);Console.ReadKey();第三部分知识总结学生总结请将问题答案写在下面空白处完成上机训练模块花费的时间25min 完成实战提高模块花费的时间50min 本次实验对你而言的难点C#程序设计实验指导书3 本次实验的收获希望老师强化讲解的知识要点希望老师帮助回答的问题本次实验自评分数(五分制)教师评价请将评语、分数等写在下面空白处问题答疑实验评语实验得分任务三掌握循环语句实验目的掌握 while 循环掌握 for 循环C#程序设计实验指导书4 第一部分上机训练1、实现 n的阶乘1)新建一个名为Factorial 的控制台应用程序2)输入如下代码using System;using System.Collections.Generic;using System.Text;namespace Factorial classProgram staticvoid Main(string args)Console.Write(请输入一个正整数:);/接收用户输入string input=Console.ReadLine();/转化为整数int n=int.Parse(input);/以上代码可以合写为/int n=int.Parse(Console.ReadLine();int i=1;int result=1;while (i=n)result=result*i;/或者写成 result*=i;i+;Console.WriteLine(0 的阶乘为 1,n,result);3)Ctrl+F5运行查看结果C#程序设计实验指导书5 2、打印 9*9乘法表1)新建一个名为MutiTable 的控制台应用程序2)输入如下代码using System;using System.Collections.Generic;using System.Text;namespace MultiTable classProgram staticvoid Main(string args)/9 行for (int i=1;i=9;i+)/每行最多 i 列for (int j=1;j=i;j+)Console.Write(0*1=2t,i,j,i*j);/换行C#程序设计实验指导书6 Console.WriteLine();Path lin 3)Ctrl+F5运行查看结果第二部分实战提高1、改写 n的阶乘计算程序,改用for 循环using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Factorial2 classProgram staticvoid Main(string args)Console.Write(请输入一个正整数:);string input=Console.ReadLine();C#程序设计实验指导书7 int n=int.Parse(input);int result=1;for (int i=1;i=n;i+)result=result*i;Console .WriteLine(0 的阶乘为 1,n,result);Console .ReadKey();2、打印 9*9加法表using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 加法表 classProgram staticvoid Main(string args)C#程序设计实验指导书8/9 行for (int i=1;i=9;i+)/每行最多 i 列for (int j=1;j=i;j+)Console.Write(0+1=2t,j,i,i+j);/换行Console.WriteLine();Console.ReadKey();C#程序设计实验指导书9 第三部分知识总结学生总结请将问题答案写在下面空白处完成上机训练模块花费的时间完成实战提高模块花费的时间本次实验对你而言的难点本次实验的收获希望老师强化讲解的知识要点希望老师帮助回答的问题本次实验自评分数(五分制)教师评价请将评语、分数等写在下面空白处问题答疑实验评语实验得分C#程序设计实验指导书10 任务四创建类与对象实验目的理解面向对象的概念掌握 C#创建类和对象的方法第一部分上机训练1、很多软件都要求我们先输入用户名和密码才能使用,最常见的例子当属Windows操作系统,制作一个类,完成系统的登录验证工作1)新建一个名为MySoftware 的控制台应用程序2)在解决方案资源管理器中选中该项目,点鼠标右键盘,在弹出的菜单中选择【添加】【类】3)在弹出的对话框中将类名改为Login C#程序设计实验指导书11 4)在代码 class Login前添加 public关键字5)添加 Login 类的成员变量privatestring _userName;privatestring _password;6)添加 Login 类的属性publicstring UserName get return userName;set userName=value;publicstring Password C#程序设计实验指导书12 get return password;set password=value;7)添加 Login 类的方法/方法publicbool IsValidateUser()if (userName.Equals(admin)&password.Equals(admin)returntrue;else returnfalse;8)完整代码如下:using System;using System.Collections.Generic;using System.Text;namespace MySoftware publicclassLogin /私有字段privatestring userName;privatestring password;/属性publicstring UserName get return userName;set userName=value;C#程序设计实验指导书13 publicstring Password get return password;set password=value;/方法publicbool IsValidateUser()if (userName.Equals(admin)&password.Equals(admin)returntrue;else returnfalse;9)双击 Program.cs,在 Main方法中输入如下代码:using System;using System.Collections.Generic;using System.Text;namespace MySoftware classProgram staticvoid Main(string args)Login loginModule=new Login();Console.WriteLine(#);Console.WriteLine(C#之星 V1.0 Beata 版 );Console.WriteLine(#);C#程序设计实验指导书14 Console.WriteLine();Console.WriteLine();Console.Write(请输入您的用户名:);string userName=Console.ReadLine();Console.Write(请输入您的密码:);string password=Console.ReadLine();loginModule.UserName=userName;loginModule.Password=password;if (loginModule.IsValidateUser()Console.WriteLine(欢迎使用 C#之星软件 V1.0版本 );else Console.WriteLine(您的用户名输入错误,系统拒绝登录!);10)按 Ctrl+F5 运行程序,查看程序执行效果第二部分实战提高扩展登录类,实现以下功能:C#程序设计实验指导书15 1)在命名空间中增加用户类型枚举,包括管理员、普通用户两种2)在 Login 类中添加枚举类型对应的成员变量,并将该变量封装成属性3)修改 IsValidateUser()方法,对于不同的用户身份,进入不同的欢迎界面4)用户拥有 5次登录尝试机会,如果5次登录都失败,程序结束,否则,允许用户重新输入用户名和密码。C#程序设计实验指导书16 第三部分知识总结学生总结请将问题答案写在下面空白处完成上机训练模块花费的时间完成实战提高模块花费的时间本次实验对你而言的难点本次实验的收获希望老师强化讲解的知识要点希望老师帮助回答的问题本次实验自评分数(五分制)教师评价请将评语、分数等写在下面空白处问题答疑实验评语实验得分C#程序设计实验指导书17 任务五创建静态类与静态方法实验目的掌握 this 的使用掌握静态成员和静态方法的应用掌握构造方法的使用第一部分上机训练1、个人银行业务主要由存款、取款、查询余额、转帐组成,一般银行为我们办理个人业务时,需要我们实现存入一部分钱方可为我们开户,创建一个PersonalAccount类,实现以上功能。1)创建一个名为Bank的控制台应用程序2)对于一个软件系统,我们需要显示其版本号,软件名称,注册码等信息,这些信息可以用静态成员变量保存。因此首先我们可以建一个GlobalSettings类存储这些一般信息,类的创建方法和实验四相同,注意不要忘记类名前加public,GlobalSettings类的代码如下:using System;using System.Collections.Generic;using System.Text;namespace Bank publicclassGlobalSettings privatestaticstring softwareName=创新银行个人业务管理系统;publicstaticstring SoftwareName get returnGlobalSettings.softwareName;set GlobalSettings.softwareName=value;privatestaticstring softwareVersion=1.0 版;publicstaticstring SoftwareVersion get returnGlobalSettings.softwareVersion;set GlobalSettings.softwareVersion=value;C#程序设计实验指导书18 privatestaticstring softwareCompany=淮安信息职业技术学院计算机系创新实验室-宋桂岭 ;publicstaticstring SoftwareCompany get returnGlobalSettings.softwareCompany;set GlobalSettings.softwareCompany=value;privatestaticstring softwareDescribe=本系统的创意、著作权均归作者本人所有,任何单位和个人如果引用本系统的任何内容,n 作者保留追究其法律责任的权利,特此声明。;publicstaticstring SoftwareDescribe get returnGlobalSettings.softwareDescribe;set GlobalSettings.softwareDescribe=value;3)创建 PersonalAccount类,利用构造方法实现开户,利用成员方法实现余额查询、存入、提取、转帐等功能,完整代码如下:using System;using System.Collections.Generic;using System.Text;namespace Bank publicclassPersonalAccount privatedouble accountRemainValue;/余额privatestring accountName;/姓名publicdouble AccountRemainValue get return accountRemainValue;set accountRemainValue=value;publicstring AccountName C#程序设计实验指导书19 get return accountName;set accountName=value;#region开户/利用构造方法实现开户public PersonalAccount(string accountName,double accountRemainValue)/注意 this 用法this.accountName=accountName;this.accountRemainValue=accountRemainValue;#endregion#region存、取、转帐publicvoid Deposit(double value)this.accountRemainValue+=value;publicvoid WithDraw(double value)this.accountRemainValue-=value;publicvoid Transfer(PersonalAccount toAccount,double value)this.accountRemainValue-=value;toAccount.AccountRemainValue+=value;#endregion#region显示余额publicvoid DisplayRemainAccount()Console.WriteLine(尊敬的 0 先生/女士,您好,您的帐户余额为1:0.00元,accountName,AccountRemainValue);#endregion 4)在 Program.cs 中输入如下代码,实现系统功能:using System;C#程序设计实验指导书20 using System.Collections.Generic;using System.Text;namespace Bank classProgram staticvoid Main(string args)Console.WriteLine(#);Console.WriteLine();Console.WriteLine(+GlobalSettings.SoftwareName+GlobalSettings.SoftwareVersion);Console.WriteLine();Console.WriteLine(+制作单位:+GlobalSettings.SoftwareCompany);Console.WriteLine();Console.WriteLine(+GlobalSettings.SoftwareDescribe);Console.WriteLine();Console.WriteLine(#);/开户PersonalAccount myAccount=new PersonalAccount(关羽 ,200);PersonalAccount sheAccount=new PersonalAccount(关夫人,30000);/业务bool op=true;while (op)Console.WriteLine();Console.WriteLine(请输入您要办理的业务:1.存款 2.提款 3.转帐 4.退出 );string cmd=Console.ReadLine();switch (cmd)case 1:HandleDesposit(myAccount);break;C#程序设计实验指导书21 case 2:HandleWithDraw(myAccount);break;case 3:HandleTransfer(myAccount,sheAccount);break;case 4:op=false;break;staticvoid HandleDesposit(PersonalAccount account)Console.Write(请输入存款金额:);double value=double.Parse(Console.ReadLine();account.AccountRemainValue+=value;Console.WriteLine(存款操作完成!);account.DisplayRemainAccount();staticvoid HandleWithDraw(PersonalAccount account)Console.Write(请输入取款金额:);double value=double.Parse(Console.ReadLine();if (account.AccountRemainValue value)Console.WriteLine(帐户余额不足,取款操作失败!);return;account.AccountRemainValue-=value;Console.WriteLine(取款操作完成!);account.DisplayRemainAccount();staticvoid HandleTransfer(PersonalAccount fromAccount,PersonalAccounttoAccount)Console.Write(请输入转帐金额:);double value=double.Parse(Console.ReadLine();if (fromAccount.AccountRemainValue );publicvoid DoStand()Console.WriteLine(name+站在那里,果然是伟岸英挺,气宇轩昂,简直是人中龙凤!);publicvoid DoDefense()Console.WriteLine(name+将手中兵器舞成一片,格开了所有人的进攻。);publicvoid DisplayInfo()Console.WriteLine(姓名:+name);Console.WriteLine(种族:人类 );Console.WriteLine(-);Console.WriteLine(状态);Console.WriteLine(生命:0tt魔法:1,healthPower,magicPower);Console.WriteLine(-);Console.WriteLine(战斗力 );Console.WriteLine(攻击:0tt防御:1,attack,defense);Console.WriteLine(命中:0ttt闪避:1,accuracy,dodge);C#程序设计实验指导书45 5)新建一个 Beast类,实现 Monster接口using System;using System.Collections.Generic;using System.Text;namespace Game publicclassBeast :Monster privateint healthPower;/生命privateint magicPower;/魔法privateint defense;/防御privateint attack;/攻击privateint dodge;/躲闪privateint accuracy;/命中privatestring name;publicint HP get return healthPower;set healthPower=value;publicint MP get return magicPower;set magicPower=value;publicint Defense get return defense;set defense=value;publicint Attack get return attack;set attack=value;publicint Dodge get return dodge;C#程序设计实验指导书46 set dodge=value;publicint Accuracy get return accuracy;set accuracy=value;publicstring Name get return name;set name=value;publicvoid DoAttack()Console.WriteLine(name+的爪子狠狠的一抓,你的头皮去了好大一块!);publicvoid DoStand()Console.WriteLine(name+四脚着地,目露凶光,你看到它时不寒而栗!);publicvoid DoDefense()Console.WriteLine(name+向你大声咆哮,吓得你抱头鼠窜。);publicvoid DisplayInfo()Console.WriteLine(姓名:+name);Console.WriteLine(种族:四足兽类 );Console.WriteLine(-);Console.WriteLine(状态);Console.WriteLine(生命:0tt魔法:1,healthPower,magicPower);Console.WriteLine(-);Console.WriteLine(战斗力 );Console.WriteLine(攻击:0tt防御:1,attack,defense);Console.WriteLine(命中:0ttt闪避:1,accuracy,dodge);6)在 Program.cs的 Main方法中输入如下代码:using System;C#程序设计实验指导书47 using System.Collections.Generic;using System.Text;namespace Game classProgram staticvoid Main(string args)Monster player=new Beast();player.Name=天一;player.HP=200;player.MP=300;player.Accuracy=90;player.Attack=1000;player.Defense=1000;player.Dodge=80;player.DoAttack();player.DoStand();player.DisplayInfo();7)按 Ctrl+F5 运行:C#程序设计实验指导书48 再将Monster player=new Beast();改为Monster player=new Human();再次按 Ctrl+F5运行,体会接口的作用。C#程序设计实验指导书49 第二部分实战提高体育运动员的种类多种多样,所有运动员都可以跳跃和跑步,但是不同运动的跳跃和跑步方式是不同的,例如足球运动员跑动可以带球在脚下跑,而篮球运动员则只能拍一下球跑一步,否则就会被吹犯规,同样,足球运动员在跳跃中只能用头顶球,但是篮球运动员可以用手去抢球。编写一个名为Sportsman的接口,包括两个方法,Run()和Jump(),再分别编写篮球运动员和足球运动员的类,分别实现不同的Run和Jump方法。只需要用Console.WriteLine(“”)来描述其中的不同即可。publicinterfaceSportsman string tn get;set;void Run();void Jump();classProgram staticvoid