c#实验二Word下载.docx
- 文档编号:8063850
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:25
- 大小:44.53KB
c#实验二Word下载.docx
《c#实验二Word下载.docx》由会员分享,可在线阅读,更多相关《c#实验二Word下载.docx(25页珍藏版)》请在冰点文库上搜索。
height"
]=30
程序架构为:
classBox
{
double[]data=newdouble[3];
publicdoublethis[intindex]
get{……
}
set{……
publicdoublethis[stringindex]
……
publicBox(doublelength,doublewidth,doubleheight)
{//保证长宽高值非零
staticvoidMain()
Boxb1=newBox(30,30,30);
b1[0]=10;
b1["
]=20;
Console.WriteLine("
\n长度:
{0}\t宽度:
{1}\t高度:
{2}"
……);
2.运算符重载
写一个复数类ComplexNumber,编写默认构造函数和两参数构造函数,重载其+、-、*运算符,并编写main函数来测试这些运算符。
classComplexNumber
publicdoubleReal{get;
privateset;
publicdoubleImaginary{get;
//构造函数
//重写object的ToString()方法,把复数以“1+2i”的形式打印输出
publicoverridestringToString()
returnstring.Format("
({0}{1}{2}i)"
……);
publicstaticComplexNumberoperator+(
ComplexNumberx,ComplexNumbery)
returnnewComplexNumber(……);
//重载-、*运算符
classProgram
publicstaticvoidMain()
ComplexNumberx,y;
Console.Write("
输入x的实部:
"
);
输入x的虚部:
x=……
\n输入y的实部:
输入y的虚部:
y=……
Console.WriteLine();
{0}+{1}={2}"
x,y,x+y);
{0}-{1}={2}"
x,y,x-y);
{0}*{1}={2}"
x,y,x*y);
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication2
{
publicdoublereal;
publicdoubleimaginary;
publicComplexNumber(doublereal,doubleimaginary)
this.real=real;
this.imaginary=imaginary;
publicstaticComplexNumberoperator+(ComplexNumberc1,ComplexNumberc2)
returnnewComplexNumber(c1.real+c2.real,c1.imaginary+c2.imaginary);
publicstaticComplexNumberoperator-(ComplexNumberc1,ComplexNumberc2)
returnnewComplexNumber(c1.real-c2.real,c1.imaginary-c2.imaginary);
publicstaticComplexNumberoperator*(ComplexNumberc1,ComplexNumberc2)
returnnewComplexNumber(c1.real*c2.real-c1.imaginary*c2.imaginary,
c1.real*c2.imaginary+c1.imaginary*c2.real);
return(String.Format("
{0}+{1}i"
real,imaginary));
staticvoidMain(string[]args)
ComplexNumberx=newComplexNumber(3,5);
ComplexNumbery=newComplexNumber(2,7);
x.real=double.Parse(Console.ReadLine());
x.imaginary=double.Parse(Console.ReadLine());
y.real=double.Parse(Console.ReadLine());
}
3.应用委托,完成以下程序。
程序框架:
classDelegates
//创建委托类型
publicdelegateboolNumberPredicate(intnumber);
staticvoidMain(string[]args)
int[]numbers={1,2,3,4,5,6,7,8,9,10};
//生成委托实例
NumberPredicateevenPredicate=IsEven;
//利用委托变量调用IsEven
Console.WriteLine("
CallIsEvenusingadelegatevariable:
{0}"
//选出偶数
List<
int>
evenNumbers=FilterArray(numbers,evenPredicate);
//描述并输出
DisplayList("
UseIsEventofilterevennumbers:
evenNumbers);
//选出奇数并输出
//选出素数并输出
//选择满足predicate的数组元素
privatestaticList<
FilterArray(int[]intArray,
NumberPredicatepredicate)
//偶数判断函数
privatestaticboolIsEven(intnumber)
return(number%2==0);
//奇数判断函数
privatestaticboolIsOdd(intnumber)
//判断是否素数
privatestaticboolIsPrime(intnumber)
//列表元素输出
privatestaticvoidDisplayList(stringdescription,List<
list)
classDelegates
evenPredicate(4));
evenNumber=null;
foreach(intiinintArray)
if(predicate(i))
evenNumber.Add(i);
returnevenNumber;
return(number%2!
=0);
inti=0;
for(inta=1;
a<
number;
i++)
if(number%a==0)
i++;
if(i==1)
returntrue;
returnfalse;
/*privatestaticvoidDisplayList(stringdescription,List<
}*/
4.模拟连锁反应事件
(1)创建C#控制台应用程序。
(2)在程序中新建一个表示太阳的类Sun,在其中定义一个事件OnRise,一个成员方法Rise,并在方法中引发事件。
参考源代码如下(太阳只有一个,所以将其定义为静态类):
publicstaticclassSun{
publicstaticeventEventHandlerOnRise;
publicstaticvoidRise(){
太阳从东方升起!
"
if(OnRise!
=null)
OnRise(null,null);
(3)在程序中新建一个公鸡类Cock,在其中定义私有字段_name,针对Sun.OnRise事件的处理方法Sun_OnRise,事件OnSing,以及引发该事件的方法Sing;
在类的构造函数中初始化字段,并将事件处理方法与事件相关联。
参考源代码如下(Sun_OnRise方法中调用了Sing方法,表示太阳升起会使公鸡打鸣):
publicclassCock{
privatestring_name;
publicCock(stringname){
_name=name;
Sun.OnRise+=newEventHandler(Sun_OnRise);
}
privatevoidSun_OnRise(objectsender,EventArgse)
{
Console.WriteLine("
公鸡{0}:
_name);
雄鸡一声天下白!
this.Sing();
publiceventEventHandlerOnSing;
publicvoidSing(){
喔喔喔……"
if(OnSing!
=null)
OnSing(this,null);
}
(4)在程序中新建一个主人类Host,在其中同样定义字段_name,起床事件OnGetup,起床方法Getup(引发起床事件),养鸡方法Foster,以及Cock.OnSing事件的处理方法c1_OnSing,并在Foster方法中与事件相关联。
参考源代码如下(c1_OnSing方法中调用了Getup方法,表示公鸡打鸣会使主人起床):
publicclassHost{
publicHost(stringname){_name=name;
}
publiceventEventHandlerOnGetup;
publicvoidGetup(){
日出而作……"
if(OnGetup!
OnGetup(this,null)
publicvoidFoster(Cockc1)
{
c1.OnSing+=newEventHandler(c1_OnSing);
privatevoidc1_OnSing(objectsender,EventArgse)
主人{0}:
闻鸡起舞!
this.Getup();
(5)参照Cock类和Host类中的代码,新建狗类Dog和猫类Cat,在其中定义字段_owner以记录其主人对象,定义owner_OnGetup方法以处理Host.OnGetup事件(主人起床时,输出狗叫声"
汪汪"
和猫叫声"
喵喵"
;
)通过属性Owner封装字段_owner,并在其set访问函数中关联事件和事件处理方法。
(6)在程序主方法中依次创建鸡、主人、狗、猫对象,而后调用Sun.Rise方法,参考源代码如下:
staticvoidMain(){
Cockcock1=newCock("
花花"
Hosthost1=newHost("
祖逖"
Host1.Foster(cock1);
Dogdog1=newDog("
旺财"
dog1.Owner=host1;
Catcat1=newCat("
咪咪"
cat1.Owner=host1;
Sun.Rise();
(7)编译运行程序,看看"
太阳升起"
这一事件会引发怎样的连锁反应。
5.练习继承与多态
(1)在程序中新建一个电子收款机类POS,在其中定义一个保护字段_area,及其封装属性Area,用以表示收款机所在地区的代码。
(2)在程序中新建一个IPayable接口,为其定义一个表示支付Pay方法,方法原型为:
voidPay(decimalmoney,POSpos);
(3)在程序中新建一个银行卡类BankCard,在其中定义保护字段_account和_savings,分别表示银行卡账号和余额;
为其定义带参构造函数,以及用于查询、取款和存款的成员方法。
参考源代码如下(其中Math.Round方法用于将金额舍入到小数点后两位):
publicBankCard(stringaccount)
{account=account;
publicvirtualvoidQuery()//查询
Console.WriteLine("
银行卡{0}上余额为{1}”,_account,_savings);
publicvirtualvoidDeposit(decimalmoney)//存款
_savings+=money;
_savings=Math.Round(_savings,2);
publicvirtualvoidDraw(decimalmoney)//取款
if(_savings>
money)
_savings-=money;
else
Console.WriteLine(“余额不足”);
(4)在程序中新建一个支付卡类PayableCard,它继承了BankCard类和IPayable接口,并实现了接口的Pay方法:
当卡上余额大于支付金额时,从余额中减去支付金额并输出消息“支付XXX元”;
否则输出信息“余额不足,无法进行支付”。
(5)从PayableCard派生出本地卡类LocalCard和通行卡类GlobalCard,二者均包含字段_area,用以表示支付卡的地区代码。
GlobalCard还包含字段_rate,表示异地支付的手续费比例(简单起见,这里设为0.01)。
在这两个类中重载基类的构造函数和Pay方法。
当支付卡与所用P0S机的地区代码不同时,本地卡不支持异地支付,通行卡则需要扣除手续费。
(6)从PayableCard派生出信用卡类CreditCard,在其中定义字段_limit、_rate,以及只读属性Overdraw,分别表示透支额度、还款利率(可简单地设为0.01),以及目前欠款(余额为正时欠款为0,否则为余额的相反数)。
在类中重载Pay、Query和Deposit方法,其中支付不能超过透支额度;
查询时应输出信用卡的额度、欠款和余额;
而存款时如果存在欠款,那么需要扣除存款利息。
(7)在程序主方法中使用如下代码来测试上述类型,并解释程序的输出结果。
staticvoidMain()
POSpos1=newPOS(“010"
POSpos2=newPOS("
021"
BankCard[]cards=newCard[4];
cards[0]=newBankCard("
bj10000001"
);
cards[1]=newLocalCard("
bj90000009"
“010”);
cards[2]=newGlobalCard(“sh30000001”,“021”);
cards[3]=newCreditCard(“sh80000008"
10000);
for(inti=0;
i<
cards.Length;
i++)
cards[i].Deposit(2200);
{0}支付前”,cards[i]);
cards[i].Query();
if(cards[i]isIPayable)
((IPayable)cards[i]).Pay(1000,pos1);
((IPayable)cards[i]).Pay(1190,pos2);
Console.WriteLine(“{0}支付后"
cards[i]);
Console.WriteLine();
程序:
namespaceConsole
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 实验