实验面向对象编程.docx
- 文档编号:30142353
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:29
- 大小:21.63KB
实验面向对象编程.docx
《实验面向对象编程.docx》由会员分享,可在线阅读,更多相关《实验面向对象编程.docx(29页珍藏版)》请在冰豆网上搜索。
实验面向对象编程
实验项目名称:
面向对象编程实验学时:
8
同组学生姓名:
郁佳慧实验地点:
工科楼A207
实验日期:
实验成绩:
批改教师:
刘晶批改时间:
一、实验目的和要求
(1)熟练掌握Java语言类定义的基本语法;
(2)熟练掌握类成员的访问控制,对象建立的方法;
(3)熟练掌握类构造方法、成员方法的定义和重载;
(4)熟练掌握类继承、多态和抽象性;
(5)熟练掌握接口的定义和实现方法;
(6)掌握基本的异常处理方法;
(7)调试程序要记录调试过程中出现的问题及解决办法;
(8)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;
(9)做完实验后给出本实验的实验报告。
二、实验仪器和设备
奔腾以上计算机,Windows操作系统,装有JDK1.6和Eclipse4.2软件。
三、实验过程
(1)设计复数类,成员变量包括实部和虚部,成员方法包括实现复数加法、减法、比较、字符串描述、比较是否相等等操作。
(2)包的建立与使用:
设计计算器类Calculator,计算加、减、乘、除和立方体体积,并且打包为mypackage。
观察源文件目录下是否生成了mypackage文件夹,在该文件夹中是否有Calculate.class文件。
编辑PackageDemo.java,保存在Calculator.java同一目录下,引用计算器类的各方法显示计算结果。
(3)试编码实现简单的银行业务:
处理简单帐户存取款、查询。
编写银行帐户类BankAccount,包含数据成员:
余额(balance)、利率(interest);操作方法:
查询余额、存款、取款、查询利率、设置利率。
再编写主类UseAccount,包含main()方法,创建BankAccount类的对象,并完成相应操作。
(4)假定根据学生的3门学位课程的分数决定其是否可以拿到学位,对于本科生,如果3门课程的平均分数超过60分即表示通过,而对于研究生,则需要平均超过80分才能够通过。
根据上述要求,请完成以下Java类的设计:
1)设计一个基类Student描述学生的共同特征。
2)设计一个描述本科生的类Undergraduate,该类继承并扩展Student类。
3)设计一个描述研究生的类Graduate,该类继承并扩展Student类。
4)设计一个测试类StudentDemo,分别创建本科生和研究生这两个类的对象,并输出相关信息。
(5)设计三角形类,继承图形抽象类,计算三角形面积和周长。
(6)试编码实现多态在工资系统中的应用:
给出一个根据雇员类型利用abstract方法和多态性完成工资单计算的程序。
Employee是抽象类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、CommissionWorker(除基本工资外还根据销售额发放浮动工资)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。
该例的Employee的每个子类都声明为final,因为不需要再继承它们生成子类。
在主测试类Test中测试各类雇员工资计算结果。
提示:
对所有雇员类型都使用earnings()方法,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。
在超类中声明earnings()为抽象方法,并且对于每个子类都提供恰当的earnings()的实现方法。
为了计算雇员的工资,程序仅仅使用雇员对象的一个超类引用并调用earnings()方法。
在一个实际的工资系统中,各种Employee对象的引用可以通过一个Employee引用数组来实现。
程序依次使用数组的每个元素(Employee引用)调用每个对象的earnings()方法。
Employee类定义如下:
abstractclassEmployee
{
privateStringfirstName;
privateStringlastName;
publicEmployee(Stringfirst,Stringlast)
{
firstName=first;
lastName=last;
}
publicStringgetEmployeeName()
{
returnfirstName;
}
publicStringgetLastName()
{
returnlastName;
}
publicStringtoString()
{
returnfirstName+lastName;
}
publicabstractStringearnings();
}
(7)设计圆柱体类和圆椎体类,继承圆类Circle并实现Volume接口,计算表面积和体积。
(8)异常的捕获:
计算两数相除并输出结果。
使用三个catch子句,分别捕捉输入输出异常、除数为0的异常和参数输入有误异常。
importjava.io.*;
classEx1
{
publicstaticvoidmain(Stringargs[])
{
try{
BufferedReaderstrin=newBufferedReader(
newInputStreamReader(System.in));//建立输入流缓冲区
System.out.print("请输入除数:
");
Stringcl=strin.readLine();//键盘输入
inta=Integer.parseInt(cl);
System.out.print("请输入被除数:
");
cl=strin.readLine();
intb=Integer.parseInt(cl);
intc=b/a;
System.out.println("商为:
"+c);
}
//捕获与I/O有关的异常(空白处补全捕获语句)
//捕获数值转化时的异常,如不能将字符转化成数值
//捕获除数为0的异常
}
}
编译并运行,当产生输入输出异常时显示异常信息;当输入除数为0时,出现算术异常,提示除数为0,并要求重新输入;当输入的不是整数时,如将30输成了3o,出现数值格式异常,提示输入整数。
(9)编写程序包含自定义异常MyException,当100被13和4除时抛出该异常,其余除数显示商值。
要求:
(1)注意选用适当的类成员修饰符(private、protected、public等),比较它们的使用情况;
(2)养成良好的编程习惯,严格按照命名规则为包、类及类成员命名,将每个程序打包,包的命名方式如two.num1表示实验二的第一题;
(3)学会使用Eclipse的各种调试方法;
(4)学会查阅JavaAPI文档,如查找异常类的使用方法。
程序清单:
(建议程序中适当添加注释信息,增强可读性;较长程序可分栏书写,保证报告排版整洁美观。
)
(实验二程序清单续1)
(1)
publicclassfushu{
doublex;
doubley;
publicfushu(doublex1,doubley1)
{
x=x1;
y=y1;
}
publicfushu()
{x=0;
y=0;
}
publicfushufushujia(fushuc1,fushuc2)
{
fushuc=newfushu();
c.x=c1.x+c2.x;
c.y=c1.y+c2.y;
returnc;
}
publicfushufushujianfa(fushuc1,fushuc2)
{
fushuc=newfushu();
c.x=c1.x-c2.x;
c.y=c1.y-c2.y;
returnc;
}
publicStringfushubijiao(fushuc1,fushuc2)
{
doublex=c1.x*c1.x+c1.y*c1.y;
doubley=c2.x*c2.x+c2.y*c2.y;
if(x>y)
return"c1>c2";
else
if(x==y)
return"c1=c2";
else
return"c1 } publicStringtoString() { if(y>=0) return(x+"+"+y+"i"); else { y=-y; return(x+"-"+y+"i"); } } publicbooleanfushuxd(fushuc1,fushuc2) { booleanf=true; if(c1.x==c2.x&&c1.y==c2.y) returnf; else f=false; returnf; } } publicclassfushutest{ publicstaticvoidmain(String[]args) { fushuc1=newfushu(3.0,4.0); fushuc2=newfushu(4.0,5.0); fushuc=newfushu(); System.out.println(c.fushujia(c1,c2)); System.out.println(c.fushujianfa(c1,c2)); System.out.println(c.fushubijiao(c1,c2)); System.out.println(c1.toString()); System.out.println(c2.toString()); if(c.fushuxd(c1,c2)) System.out.println("相等"); else System.out.println("不相等"); } } (2) publicclassCalculator{ floati; floatj; publicCalculatorjia(Calculatorx,Calculatory) { Calculatorc=newCalculator(); c.i=x.i+y.i; returnc; } publicCalculatorjian(Calculatorx,Calculatory) { Calculatorc=newCalculator(); c.i=x.i-y.i; returnc; } publicCalculatorcheng(Calculatorx,Calculatory) { Calculatorc=newCalculator(); c.i=x.i*y.i; returnc; } publicCalculatorchu(Calculatorx,Calculatory) { Calculatorc=newCalculator(); c.i=x.i; c.i=c.i/y.i; returnc; } publicCalculatorlfh() { Calculatorc=newCalculator(); c.i=i*i*i; returnc; } publicfloatfanhui(Calculatorc) { returnc.i; } } publicclassPackageDemo{ publicstaticvoidmain(String[]args) { Calculatori=newCalculator(); Calculatory=newCalculator(); i.i=3; y.i=4; Calculatorc=newCalculator(); System.out.println(c.fanhui(c.jia(i,y))); System.out.println(c.fanhui(c.jian(i,y))); System.out.println(c.fanhui(c.cheng(i,y))); System.out.println(c.fanhui(c.chu(i,y))); System.out.println(i.fanhui(i.lfh())); System.out.println(i.fanhui(y.lfh())); c=c.cheng(c.jia(i,y),c); System.out.println(c.fanhui(c)); } } (3) importjava.util.*; publicclassUseAccount{ publicstaticvoidmain(String[]args) {Scannerreader=newScanner(System.in); BankAccountc=newBankAccount(); inti; floats; booleant=true; System.out.println("1.查询余额"); System.out.println("2.存钱"); System.out.println("3.取钱"); System.out.println("4.设置利率"); System.out.println("5.查询利率"); System.out.println("6.结束退出"); while(t) { System.out.print("请输入要进行的操作编号: "); i=reader.nextInt(); switch(i) { case1: c.yue(c);break; case2: { System.out.print("请输入存入金额: "); s=reader.nextFloat(); c.cunqian(s); break; } case3: { System.out.print("请输入取出金额: "); s=reader.nextFloat(); if(s>c.balance) System.out.println("余额不足"); else c.quqian(s); break; } case4: { System.out.print("请输入利率: "); s=reader.nextFloat(); c.lilu(s); break; } case5: { c.sclilu(); break; } case6: break; } if(i==6) break; } /*c.interest=reader.nextFloat(); while(t) {Stringk; k=reader.nextLine(); if(k.equals("查询余额")) c.yue(c); elseif(k.equals("存钱")) { s=reader.nextFloat(); c.cunqian(s); } elseif(k.equals("取钱")) { s=reader.nextFloat(); c.quqian(s); } elseif(k.equals("查询利率")) { c.sclilu(); } elseif(k.equals("结束")) break; } c.yue(c); */ } } publicclassBankAccount{ staticdoublebalance=0,interest=0; publicstaticvoidyue(BankAccountx) { System.out.println("余额为"+balance+"元"); } publicstaticvoidcunqian(doublei) { balance=balance+i; } publicstaticvoidquqian(doublei) { balance=balance-i; } publicstaticvoidlilu(doublei) { interest=i; } publicstaticvoidsclilu() { System.out.println("利率为"+interest*100+"%"); } } (4) classStudent{ floati,j,k; floats; publicvoidStudent(Studentc) { s=(i+j+k)/3; if(s>60) { System.out.print("可以毕业"); } else System.out.println("不合格"); } } classGraduateextendsStudent{ publicvoidGraduate(Studentc) { if(c.s>80) System.out.println("研究生"); } } classUndergraduateextendsStudent{ publicvoidUndergraduate(Studentc) { if(c.s<=80&&c.s>=60) System.out.println("本科生"); } } importjava.util.*; publicclassStudentDemo{ publicstaticvoidmain(String[]args) {Scannerreader=newScanner(System.in); Studentc=newStudent(); Graduatek=newGraduate(); Undergraduatem=newUndergraduate(); c.i=reader.nextFloat(); c.j=reader.nextFloat(); c.k=reader.nextFloat(); c.Student(c); k.Graduate(c); m.Undergraduate(c); } } (5) importjava.util.*; abstractclassjicheng{ inti,j,k; abstractdoublemianzhi(); abstractintzhouchang(); } classjisuanextendsjicheng { voidjicheng(inti,intj,intk) { super.i=i; super.j=j; super.k=k; } doublemianzhi() { doubles; floatp; p=(i+j+k)/2; s=Math.sqrt(p*(p-i)*(p-j)*(p-k)); returns; } intzhouchang() { returni+j+k; } } publicclassjichengTest{ publicstaticvoidmain(String[]args) { jisuanc=newjisuan(); c.jicheng(3,4,5); System.out.println(c.zhouchang()); System.out.println(c.mianzhi()); } } (6) classBossextendsEmployee{ ints; publicBoss(Stringfirst,Stringlast,inti) { super(first,last); s=i; } publicStringearnings(){ return(super.toString()+String.valueOf(s)); } } classCommissionWorkerextendsEmployee{ inti,j,k; publicCommissionWorker(Stringfirst,Stringlast,inti,intj,intk) { super(first,last); this.i=i;this.j=j;this.k=k; } publicStringearnings(){ return(super.toString()+String.valueOf(i+j*k)); } } classHourlyWorkerextendsEmployee{ inti,j,k; publicHourlyWorker(Stringfirst,Stringlast,inti,intj,intk) { super(first,last); this.i=i;this.j=j;this.k=k; } publicStringearnings(){ return(super.toString()+String.valueOf(i+j*k)); } } classPieceWorkerextendsEmployee{ inti,j,k; publicPieceWorker(Stringfirst,Stringlast,inti,intj,intk) { super(first,last); this.i=i;this.j=j;this.k=k; } publicStringearnings(){ return(super.toString()+String.valueOf(i+j*k)); } } importjava.util.*; abstractclassEmployee { privateStringfirstName; privateStringlastName; publicEmployee(Stringfirst,Stringlast) { firstName=first; lastName=last; } publicStringgetEmployeeName() { retu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 面向 对象 编程