实验报告三.docx
《实验报告三.docx》由会员分享,可在线阅读,更多相关《实验报告三.docx(18页珍藏版)》请在冰豆网上搜索。
实验报告三
攀枝花学院实验报告
实验课程:
VisualC#.NET程序设计教程实验项目:
上机实验5实验日期:
系:
数计学院成绩:
1、实验目的
1、区分静态类与非静态类,掌握静态字段、静态方法和静态构造函数的定义方法。
2、理解类的继承性与多态性,掌握其应用方法。
3、理解抽象类、接口的概念,掌握抽象类与接口的定义及使用方法。
4、理解分部类和命名空间的概念,掌握分部类和命名空间的使用方法。
2、实验要求
1.熟悉Visual的基本操作方法。
2.认真阅读本章相关内容,尤其是案例。
3.实验前进行程序设计,完成源程序的编写任务。
4.反复操作,直到不需要参考教材、能熟练操作为止。
3、实验步骤
1、设计一个Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(小学生、中学生、大学生)将分别创建不同的学生对象,并输入当前的学生总人数、该学生的姓名、学生类型和平均成绩。
具体要求如下:
(1)每个学生都有的字段为:
姓名、年龄。
(2)小学生的字段还有语文、数学,用来表示这两科的成绩。
(3)中学生在此基础上多了英语成绩。
(4)大学生只有必修课和选修课两项成绩。
(5)学生类具有方法来统计自己的总成绩,并输出。
(6)通过静态成员自动记录学生总人数。
(7)成员初始化能通过构造函数完成。
源程序如下:
usingSystem;
using;
using;
using;
using;
using;
usingTest3_1
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
publicabstractclassStudent
{
protectedstringname;
protectedintage;
protectedstaticintnumber;
publicStudent(stringname,intage)
{
=name;
=age;
number++;
}
publicstringName{get{returnname;}}
publicvirtualstringtype
{
get{return"学生";}
}
publicabstractdoubletotal();
publicabstractdoubleAverage();
publicstringgetInto()
{
stringresult=("总人数:
{0},姓名:
{1},{2},{3}岁",number,Name,type,age);
if(type=="小学生")
result+=(",平均成绩为{0:
N2}:
\n",total()/2);
elseif(type=="中学生")
result+=(",平均成绩为{0:
N2}:
\n",total()/3);
else
result+=(",总学分为{0:
N2}:
\n",total());
returnresult;
}
}
publicclassPupil:
Student
{
protecteddoublechinese;
protecteddoublemath;
publicPupil(stringname,intage,doublechinese,doublemath)
:
base(name,age)
{
=chinese;
=math;
}
publicoverridestringtype
{
get
{
return"小学生";
}
}
publicoverridedoubletotal()
{
returnchinese+math;
}
}
publicclassMiddle:
Student
{
protecteddoublechinese;
protecteddoublemath;
protecteddoubleenglish;
publicMiddle(stringname,intage,doublechinese,doublemath,doubleenglish)
:
base(name,age)
{
=chinese;
=math;
=english;
}
publicoverridestringtype
{
get
{
return"中学生";
}
}
publicoverridedoubletotal()
{
returnchinese+math+english;
}
}
publicclassUniversity:
Student
{
protecteddoublemajors;
protecteddoubleelective;
publicUniversity(stringname,intage,doublemajors,doubleelective)
:
base(name,age)
{
=majors;
=elective;
}
publicoverridestringtype
{
get
{
return"大学生";
}
}
publicoverridedoubletotal()
{
returnmajors+elective;
}
}
privatevoidbtpupil_Click(objectsender,EventArgse)
{
intage=;
doublechinese=;
doublemath=;
Pupilp=newPupil,age,chinese,math);
+=();
}
privatevoidbtMiddle_Click(objectsender,EventArgse)
{
intage=;
doublechinese=;
doublemath=;
doubleenglish=;
Middlep=newMiddle,age,chinese,math,english);
+=();
}
privatevoidbtUniversity_Click(objectsender,EventArgse)
{
intage=;
doublechinese=;
doublemath=;
Universityu=newUniversity,age,chinese,math);
+=();
}
}
}
运行结果如图所示:
2、完善上机实验4-3设计的银行帐户管理系统,增加一个VIP账户的管理。
程序功能如下:
(1)当单击“创建VIP账户”按钮时,其中卡号为随机生成的一个在500000到999999之间的值,初始余额为10000元。
(2)在“取款”文本框中输入取款金额后,单击“取款”按钮,如果余额不足,VIP用户可以透支1000元,如取款800,,而余额是400,如透支超过1000元,如取款1600,而余额是400。
(3)其中操作同上机实验4-3。
(4)要求:
在上机实验4-3的基础上,通过继承和多态实现上述操作。
源程序如下:
usingSystem;
using;
using;
using;
using;
using;
usingTest3_2
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
publicclassAccount
{
protectedintcardNo;
protecteddecimalbalance;
publicAccount()
{
Randomr=newRandom();
cardNo=(100000,500000);
balance=100;
}
publicdecimalBalance
{
get{return;}
}
publicintCardNo
{
get{return;}
}
publicvirtualboolGetMoney(decimalmoney,outstringmessage)
{
if(money<0)
{
message="操作失败!
\n输入金额不正确!
";
returnfalse;
}
elseif(balance>=money)
{
balance-=money;
message="操作成功!
\n取款"+money+"元";
returntrue;
}
else
{
message="操作失败!
\n余额不足!
";
returnfalse;
}
}
publicboolSaveMoney(decimalmoney,outstringmessage)
{
if(money<0)
{
message="操作失败!
\n输入金额不正确!
";
returnfalse;
}
else
{
balance+=money;
message="操作成功!
\n存款"+money+"元";
returntrue;
}
}
}
publicclassVIPAccount:
Account
{
publicVIPAccount()
{
Randomr=newRandom();
cardNo=(500000,1000000);
balance=10000;
}
publicoverrideboolGetMoney(decimalmoney,outstringmessage)
{
if(money<0)
{
message="操作失败!
\n输入金额不正确!
";
returnfalse;
}
elseif(balance>=money)
{
balance-=money;
message="操作成功!
\n取款"+money+"元";
returntrue;
}
elseif(balance+1000>=money)
{
balance-=money;
message="操作成功!
\n取款"+money+"元,透支"+(-balance)+"元";
returntrue;
}
else
{
message="操作失败!
?
\n余额不足!
";
returnfalse;
}
}
}
Accountaccount;
privatevoidbtVIPAccount_Click(objectsender,EventArgse)
{
account=newVIPAccount();
intaccountNo=;
stringmessage=("创建VIP账户成功,用户卡号为:
{0}",accountNo);
="\n"+message+"\n";
}
privatevoidbtAccount_Click(objectsender,EventArgse)
{
account=newVIPAccount();
intaccountNo=;
stringmessage=("创建账户成功,用户卡号为:
{0}",;
="\n"+message+"\n";
}
privatevoidbtGet_Click(objectsender,EventArgse)
{
stringmessage;
if(account==null)
message="请先创建账户!
";
elseif=="")
message="请输入取款金额!
";
else
{
decimalmoney=;
(money,outmessage);
}
="\n"+message+"\n";
}
privatevoidbtSave_Click(objectsender,EventArgse)
{
stringmessage;
if(account==null)
message="请先创建账户!
";
elseif=="")
message="请输入存款金额!
";
else
{
decimalmoney=;
(money,outmessage);
}
="\n"+message+"\n";
}
privatevoidbtBalance_Click(objectsender,EventArgse)
{
if(account==null)
{
="请先创建用户!
";
}
else
{
decimalmo=;
intcardIdNo=;
="储蓄卡账户:
\r\n"+cardIdNo+"\r\n当前余额为a:
\r\n"+mo+"元";
}
}
}
}
运行结果如图所示:
3、声明一个接口IPlayer,包含5个接口方法:
播放、停止、暂停、上一首和下一首。
设计一个Windows应用程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序,单击“MP3”按钮后,再单击“播放”按钮的效果。
如果单击“AVI”按钮后,再单击“播放”按钮,则应显示“正在播放AVI视频!
”。
源程序如下:
usingSystem;
using;
using;
using;
using;
using;
usingTest3_3
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
interfaceIPlayer
{
stringPlay();
stringStop();
stringPause();
stringPre();
stringNext();
}
publicclassMP3:
IPlayer
{
publicstringPlay()
{
return"正在播放MP3歌曲!
";
}
publicstringStop()
{
return"停止播放MP3歌曲!
";
}
publicstringPause()
{
return"暂停播放MP3歌曲!
";
}
publicstringPre()
{
return"播放上一首MP3歌曲!
";
}
publicstringNext()
{
return"播放下一首MP3歌曲!
";
}
}
publicclassAVI:
IPlayer
{
publicstringPlay()
{
return"正在播放AVI歌曲!
";
}
publicstringStop()
{
return"停止播放AVI歌曲!
";
}
publicstringPause()
{
return"暂停播放AVI歌曲!
";
}
publicstringPre()
{
return"播放上一首AVI歌曲!
";
}
publicstringNext()
{
return"播放下一首AVI歌曲!
";
}
}
IPlayerip;
MP3m;
AVIa;
privatevoidbtMP3_Click(objectsender,EventArgse)
{
m=newMP3();
ip=(IPlayer)m;
}
privatevoidbtAVI_Click(objectsender,EventArgse)
{
a=newAVI();
ip=(IPlayer)a;
}
privatevoidbtPre_Click(objectsender,EventArgse)
{
=();
}
privatevoidbtStop_Click(objectsender,EventArgse)
{
=();
}
privatevoidbtPlay_Click(objectsender,EventArgse)
{
=();
}
privatevoidbtPause_Click(objectsender,EventArgse)
{
=();
}
privatevoidbtNext_Click(objectsender,EventArgse)
{
=();
}
}
}
运行结果如图所示:
四、实验总结