C#实验6-7 (1).doc_第1页
C#实验6-7 (1).doc_第2页
C#实验6-7 (1).doc_第3页
C#实验6-7 (1).doc_第4页
C#实验6-7 (1).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

7 实验6-7:C#面向对象程序设计类的继承和多态性技术应用实验目的和要求 进一步掌握类和对象的设计和使用方法; 掌握继承和多态性的实现方法; 熟悉接口技术在继承中的应用。实 验 内 容(1)模拟银行卡支付系统,定义支付接口IPayable,在基类BankCard中实现基本支付功能;在派生类中重载基类方法,实现支付功能的多态性。(2)创建学生类Student及其派生类Undergraduate和Graduate,并在Windows窗体中显示不同类型的学生信息。温馨提示:本次实验内容包括两部分,利用两次实验课时间完成。(1)题目1用于进一步熟悉和练习类的继承和多态性技术及应用。同学们可利用第一次实验时间完成这个题目。(2)题目2用于测试同学们对类的继承和多态性技术的实际应用,根据实验4-5中设计完成的Student类和StudentInfo类,在本次实验中利用继承技术设计其派生类,并对不同类型的对象进行统一的批处理。同学们可利用第二次实验时间完成题目2。题目1、 银行卡支付(1)创建C#控制台应用程序L6_1。(2)在程序中新建一个电子收款机类POS,在其中定义一个保护字段area,及其封装只读属性Area,用以表示收款机所在地区的代码。定义构造函数,用以根据区号创建POS机对象。 (3)在程序中新建一个IPayable接口,为其定义一个表示支付Pay方法,方法原型为: void Pay(decimal x,POS pos); /指定支付金额和所使用的POS机(4)在程序中新建一个银行卡类BankCard,在其中定义保护字段id和money,分别表示银行卡账号和余额;为其定义带参数构造函数,以及用于查询、取款和存款的成员方法。参考源代码如下(其中Math.Round方法用于将金额舍入到小数点后两位)。 /带参数构造函数 public BankCard(string id,money=0) this.id=id; this.money=money; /用于查询的虚拟方法public virtual string Query() return string.Format(银行卡0上余额为1,id,money); /用于存款的虚拟方法public virtual void Deposit(decimal x) money+=x; money=Math.Round(money,2); /将余额舍入到小数点后2位 /用于取款的虚拟方法public virtual bool Withdraw(decimal x) if(moneyx) money-=x; money=Math.Round(money,2); return true; else return false; (5)在程序中新建一个支付卡类PayableCard,它继承了BankCard类和IPayable接口,并实现了接口的Pay方法:当卡上余额大于支付金额时(余额不能为0),从余额中减去支付金额并输出消息“支付xx元”;否则输出信息“余额不足,无法进行支付”。(6)从PayableCard派生出本地卡类LocalCard和通行卡类GlobalCard,二者均包含字段area,用以表示支付卡的地区代码。GlobalBard还包含字段rate,表示异地支付的手续费比例(简单起见,这里设为0.01)。在这两个类中重载基类的构造函数和Pay方法。当支付卡与所用POS机的地区代码不同时,本地卡不支持异地支付,通行卡则需要扣除手续费。(7)从PayableCard派生出信用卡类CreditCard,在其中定义字段limit、rate,以及只读属性Overdraw,分别表示透支额度、还款利率(可简单地设为0.01),以及目前欠款(余额为正时欠款为0,否则为余额的相反数)。在类中重载Pay、Query和Deposit方法,其中支付不能超过透支额度;查询时应输出信用卡的额度、欠款和余额;而存款时如果存在欠款,那么需要扣除还款利息。信用卡存款方法可参照下列代码:public override void Deposit(decimal x) if (Overdraw 0) /如果存在欠款 decimal r = Overdraw * rate; /计算欠款利息 money += x - r; /扣除利息 (8)在程序主方法中使用如下代码来测试上述类型,并解释程序的输出结果(如图6.1所示)static void Main() POS pos1=new POS(010); POS pos2=new POS(021); BankCard cards=new BankCard4; cards0=new BankCard(bj10000001); cards1=new LocalCard(bj90000009,010); cards2=new GlobalCard(sh30000001,021); cards3=new CreditCard(sh80000008,10000); for(int i=0;icards.Length;i+) cardsi.Deposit(2200); Console.WriteLine(0支付前,cardsi); Console.WriteLine(cardsi.Query(); if(cardsi is IPayable) (IPayable)cardsi).Pay(1000,pos1); (IPayable)cardsi).Pay(1190,pos2); Console.WriteLine(0支付后,cardsi); Console.WriteLine(cardsi.Query(); Console.WriteLine(); 图6.1 程序L6_1输出结果题目2、管理学生信息(1)创建C# Windows应用程序L6_2。(2)使用实验4-5中设计的Student类和StudentInfo类。(3)定义Student的派生类Undergraduate和Graduate,为它们定义字段department及其封装属Department,表示学生所在的院系;再为Graduate定义字段tutor及其封装属性Tutor,表示研究生的导师。(4)定位到程序主窗体的代码视图,为窗体类Form1增加一个StudentInfo(使用实验4-5中设计的StudentInfo类)类型的数组字段students,并调用StudentInfo类的AddInfo方法添加几个学生元素,参考代码如下:StudentInfo students = new StudentInfo(10); /初始化具有10个学生的列表public Form1()InitializeComponent(); Student s = new Student(001, 张丽, 计科1201, 88); students.AddInfo(s); s = new UnderGraduate(002, 王晓明, 计信1201, 90); (UnderGraduate)s).Department = 计算机科学与技术; students.AddInfo(s); s = new Graduate(003, 王强, 网络1201, 95); (Graduate)s).Department=网络工程; (Graduate)s).Tutor=王家强; students.AddInfo(s); (5)回到程序主窗体的设计视图,向其中添加一组Label控件和TextBox控件以及一个Button控件(控件内容和布局如图6.2所示)(这部分内容同学们可以根据自己设计的学生信息进行界面设计)(6)为按钮控件定义单击事件处理方法:当用户在窗体第一个文本框中输入学号并按下“查询”按钮时,程序在students数组中查找指定学生对象,并调用成员方法ShowStudentInfo来显示学生信息。参考源代码如下:private void button1_Click(object sender, EventArgs e) string no = textBox1.Text.Trim(); /获取用户输入的学号 if(studentsno=null) /调用索引函数get查询该学号的学生 MessageBox.Show(没有该学生信息,提示,MessageBoxButtons.OK, MessageBoxIcon.Warning); else ShowStudentInfo(studentsno); (7)完成方法ShowStudentInfo的定义,在其中将学生各项信息分别显示在窗体的各个文本框中。参考源代码如下:public void ShowStudentInfo(Student s) textBox2.Text = s.Name; textBox3.Text = s.Class; textBox4.Text = s.Scorce.ToString(); if (s is UnderGraduate) textBox5.Enabled = true; textBox5.Text = (UnderGraduate)s).Department; textBox6.Enabled = false; else if (s is Graduate) textBox5.Enabled = true; textBox5.Text = (Graduate)s

温馨提示

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

评论

0/150

提交评论