---恢复内容开始---
题目如下:
[实验任务一]:面积计算(设计型)。
1、 实验要求:
实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分
析等内容。
2、实验内容:
(1)设计一个形状类 Shape,包含一个 getArea()方法,该方法不包含实际语句。
(2)在 Shape 类基础上设计圆形、矩形、三角形和梯形四个子类,要求根据实际形状重
写 getArea()方法。
(3)设计一个 TestShape 类,包含变量 area(存储总面积)、静态方法 countArea(Shape s),
该方法负责把参数中的形状面积加入到 area 中。在 main 函数中新建(2)中四种类型的对象
s1、s2、s3、s4,通过调用 countArea 方法把四个对象面积累加到 area 中,最后输出 area。
[实验任务二]:抽象类和接口的设计(设计型)。
1、 实验要求:
(1)能实现抽象类的继承关系;
(2)程序应包括各个被调用方法的执行结果的显示。
(3)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
并给出解决办法。(附运行界面、源代码)。
2、 实验内容:
(1) 定义抽象类 Shape,抽象方法为 showArea(),求出面积并显示,定义矩形
类 Rectangle,正方形类 Square,圆类 Circle,根据各自的属性,用 showArea
方法求出各自的面积,在 main 方法中构造 3 个对象,调用 showArea 方法。
(2) 定义接口 DiagArea,其中包含方法 double getDiagonal()求对角线长, double
getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和
方法,定义一个正方形类继承矩形类(如矩形有长 w 和宽 h,正方形有边
x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线
长),在另一类中的主方法里使用测试该类。
[实验任务三]:班级信息管理类设计(设计综合型实验)
1、 实验要求:
(1)能实现类的继承关系;
(2)用多种方法创建各个类的对象;
(3)程序应包括各个被调用方法的执行结果的显示。
(4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
并给出解决办法。(附运行界面、源代码)。
2、 实验内容:
(1)定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,
以及设置和获取这些属性值的方法成员;
(2)再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学
号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程
序,完成一个具有班级学生信息管理功能的程序。
[实验任务四]:按照题目要求设计并编写一个 JAVA 程序(综合设计型)
1、 实验要求:
(1) 能实现类的继承关系;
(2) 用多种方法创建各个类的对象;
(3)程序应包括各个被调用方法的执行结果的显示。
(4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,并
给出解决办法。(附运行界面、源代码)。
2、实验内容:学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学
生的管理和对教师的管理在他们身上都有体现。
(1)设计两个信息管理接口 StudentManageInterface 和 TeacherManageInterface。其中,
StudentInterface 接口包括 setFee()方法和 getFee()方法,分别用于设置和获取学生的学费;
TeacherInterface 接口包括 setPay()方法和 getPay()方法,分别用于设置和获取教师的工资
(2)定义一个研究生类 Graduate,实现 StudentInterface 接口和 TeacherInterface 接口,它定
义的成员变量有 name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足
2000 元,则输出“provide a loan”(需要贷款)信息。
(3)提示:
①定义两个接口,分别在其中申明两个方法。
②定义主类 Graduate,实现这两个接口。
③ 定义主类的成员变量,和构造方法。
④ 给出四个接口方法的实现。
⑤ 给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出
是否需要贷款的信息。
⑥ 写 main 方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是
否需要贷款的方法。
下面是实验结果:
设计思想:
通过java之间对类的继承的了解,及其对接口和抽象类的定义,使用,来完成本节课的实验练习,并且通过练习掌握其中的技巧,熟练运用这些定义,来完成本节课的实验
源程序:
实验一:面积计算
//MainTest.java
1package shape; 2//洪鼎淇 信1705-3 20173627 3public class MainTest { 4 5 public static void main(String[] args) { 6 // TODO 自动生成的方法存根 7 Circle s1=new Circle(3); 8 Triangle s2=new Triangle(3,3); 9 Juxing s3=new Juxing(3,3); 10 Tixing s4=new Tixing(2,3,4); 11 System.out.println(TestShape.countArea(s1)); 12 System.out.println(TestShape.countArea(s2)); 13 System.out.println(TestShape.countArea(s3)); 14 System.out.println(TestShape.countArea(s4)); 15 16 } 17 18}
//Shape.java
1package shape; 2 3public abstract class Shape { 4 public abstract double getArea(); 5} 6class Circle extends Shape 7{ 8 final double PI=3.1415926; 9 private double x; 10 public Circle(double bian) 11 { 12 x=bian; 13 } 14 public double getArea() 15 { 16 return x*x*PI; 17 } 18 19} 20class Triangle extends Shape 21{ 22 private double width,height; 23 public Triangle(double bian,double gao) 24 { 25 width=bian; 26 height=gao; 27 } 28 public double getArea() 29 { 30 return width*height/2; 31 } 32} 33class Juxing extends Shape 34{ 35 private double width,height; 36 public Juxing(double bian,double gao) 37 { 38 width=bian; 39 height=gao; 40 } 41 public double getArea() 42 { 43 return width*height; 44 } 45} 46class Tixing extends Shape 47{ 48 private double width1,width2,height; 49 public Tixing(double bian1,double bian2,double gao) 50 { 51 width1=bian1; 52 width2=bian2; 53 height=gao; 54 } 55 public double getArea() 56 { 57 return (width1+width2)*height/2; 58 } 59} 60class TestShape 61{ 62 private static double area; 63 TestShape() 64 { 65 area=0; 66 } 67 public static double countArea(Shape s) 68 { 69 area+=s.getArea(); 70 return area; 71 } 72 73}
实验二:抽象类和接口的设计
第一小题:
//DiagArea.java
1package diagArea; 2//洪鼎淇 信1705-3 20173627 3public interface DiagArea { 4 double getDiagonal(); 5 double getArea(); 6} 7class Rectangle implements DiagArea 8{ 9 double w,h; 10 Rectangle(double bian,double gao) 11 { 12 w=bian; 13 h=gao; 14 } 15 public double getDiagonal() 16 { 17 return Math.sqrt(Math.pow(w, 2)+Math.pow(h, 2)); 18 } 19 public double getArea() 20 { 21 return h*w; 22 } 23} 24class Square extends Rectangle 25{ 26 double x; 27 Square(double a) 28 { 29 super(a,a); 30 } 31}
//TestDiag.java
1package diagArea; 2 3public class TestDiag { 4 public static void main(String args[]) 5 { 6 Rectangle s1=new Rectangle(3,4); 7 Square s2=new Square(3); 8 System.out.println("矩形的对角线长度为:"+s1.getDiagonal()); 9 System.out.println("矩形的面积为:"+s1.getArea()); 10 System.out.println("正方形的对角线长度为:"+s2.getDiagonal()); 11 System.out.println("正方形的面积为:"+s2.getArea()); 12 } 13}
第二小题:
//Shape.java
1package shape1; 2//信1705-3 洪鼎淇 20173627 3public abstract class Shape { 4 public abstract void showArea(); 5} 6class Rectangle extends Shape 7{ 8 double width,height; 9 Rectangle(double bian,double gao) 10 { 11 width=bian; 12 height=gao; 13 } 14 public void showArea() 15 { 16 System.out.println("该矩形的面积为:"+(width*height)); 17 } 18} 19class Square extends Shape 20{ 21 double width; 22 Square(double bian) 23 { 24 width=bian; 25 } 26 public void showArea() 27 { 28 System.out.println("该正方形的面积为:"+(width*width)); 29 } 30} 31class Circle extends Shape 32{ 33 private final double PI=3.1415926; 34 private double width; 35 Circle(double bian) 36 { 37 width=bian; 38 } 39 public void showArea() 40 { 41 System.out.println("该圆形的面积为:"+(width*width*PI)); 42 } 43}
//TestShape.java
1package shape1; 2 3public class TestShape { 4 5 public static void main(String[] args) { 6 // TODO 自动生成的方法存根 7 Rectangle s1=new Rectangle(3,4); 8 s1.showArea(); 9 Square s2=new Square(3); 10 s2.showArea(); 11 Circle s3=new Circle(3); 12 s3.showArea(); 13 } 14 15}
实验三:班级信息管理类
//BanjiManager.java
1package banjiinfo; 2//洪鼎淇 信1705-3 20173627 3import java.util.Iterator; 4import java.util.Scanner; 5import java.util.Vector; 6 7 8 9public class BanjiManager { 10 Vector<Student> map=new Vector<Student>(); 11 Iterator<Student> it; 12 Scanner can; 13 BanjiManager() 14 { 15 can=new Scanner(System.in); 16 } 17 public static void main(String args[]) 18 { 19 BanjiManager a=new BanjiManager(); 20 a.run(); 21 } 22 public void run() 23 { 24 int k=1; 25 while(k<=5&&k>=1) 26 { 27 k=showmenu(); 28 } 29 System.out.println("已退出系统"); 30 can.close(); 31 } 32 public int showmenu() 33 { 34 System.out.println("大学生班级管理菜单"); 35 System.out.println("1.添加学生"); 36 System.out.println("2.删除学生"); 37 System.out.println("3.修改学生"); 38 System.out.println("4.查看所有学生"); 39 System.out.println("5.查看学生信息"); 40 System.out.println("其他数字.退出循环"); 41 int num=can.nextInt(); 42 if(num==1) 43 { 44 tianjia(); 45 } 46 else if(num==2) 47 { 48 shanchu(); 49 } 50 else if(num==3) 51 { 52 xiugai(); 53 } 54 else if(num==4) 55 { 56 show(); 57 } 58 else if(num==5) 59 { 60 chaxun(); 61 } 62 return num; 63 } 64 public void tianjia() 65 { 66 Student st=new Student(); 67 String x=null,n=null,s=null,s1=null; 68 double s2=0; 69 System.out.println("请输入要添加的学号"); 70 if(can.hasNext()) 71 { 72 x=can.next(); 73 } 74 if(canAdd(x)) 75 { 76 System.out.println("请输入姓名,性别,籍贯和大学入学成绩"); 77 if(can.hasNext()) 78 { 79 n=can.next(); 80 } 81 if(can.hasNext()) 82 { 83 s=can.next(); 84 } 85 if(can.hasNext()) 86 { 87 s1=can.next(); 88 } 89 if(can.hasNext()) 90 { 91 s2=can.nextInt(); 92 } 93 st.setId(x); 94 st.setName(n); 95 st.setSex(s); 96 st.setAddress(s1); 97 st.setScore(s2); 98 map.add(st); 99 } 100 else System.out.println("学号重复,请重新输入"); 101 } 102 public void shanchu() 103 { 104 String x=null; 105 System.out.println("请输入要删除的学号"); 106 if(can.hasNext()) 107 { 108 x=can.next(); 109 } 110 if(lookp(x)!=0) 111 { 112 map.removeElementAt(lookp(x)-1); 113 } 114 else System.out.println("查无此学号"); 115 116 } 117 public void chaxun() 118 { 119 Student st=new Student(); 120 String x=null; 121 System.out.println("请输入你想要查询的信息"); 122 if(can.hasNext()) 123 { 124 x=can.next(); 125 } 126 it=map.iterator(); 127 while(it.hasNext()) 128 { 129 st=it.next(); 130 if(x.equals(st.getId())) 131 { 132 System.out.println("该学生信息如下所示(学号,姓名,性别,籍贯,大学入学成绩)"); 133 System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore()); 134 return; 135 } 136 } 137 System.out.println("没有找到要找到的信息"); 138 139 } 140 public void show() 141 { 142 Student st=new Student(); 143 if(map.size()==0) 144 { 145 System.out.println("没有任何学生信息"); 146 return; 147 } 148 149 it=map.iterator(); 150 System.out.println("所有学生信息如下(学号,姓名,性别,籍贯,大学入学成绩):"); 151 while(it.hasNext()) 152 { 153 st=it.next(); 154 System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore()); 155 } 156 } 157 public void xiugai() 158 { 159 Student st=new Student(); 160 String x=null,n=null,s=null,x1=null,s1=null; 161 double s2=0; 162 System.out.println("请输入要修改的学号"); 163 if(can.hasNext()) 164 { 165 x=can.next(); 166 } 167 if(!canAdd(x)) 168 { 169 System.out.println("请输入要修改的学号,姓名,性别,籍贯和大学入学成绩"); 170 if(can.hasNext()) 171 { 172 n=can.next(); 173 } 174 if(can.hasNext()) 175 { 176 s=can.next(); 177 } 178 if(can.hasNext()) 179 { 180 s1=can.next(); 181 } 182 if(can.hasNext()) 183 { 184 s2=can.nextInt(); 185 } 186 187 if(canChange(x1,lookp(x))) 188 { 189 st.setId(x); 190 st.setName(n); 191 st.setSex(s); 192 st.setAddress(s1); 193 st.setScore(s2); 194 map.setElementAt(st, lookp(x)); 195 } 196 else System.out.println("学号重复,请重新输入"); 197 198 } 199 else System.out.println("查无此学号"); 200 } 201 //---------------------------------------------- 202 public int lookp(String xuehao) 203 { 204 Student st=new Student(); 205 int i=0; 206 it=map.iterator(); 207 while(it.hasNext()) 208 { 209 i++; 210 st=it.next(); 211 if(st.getId().equals(xuehao)) 212 break; 213 } 214 return i; 215 } 216 public boolean canChange(String xuehao,int n) 217 { 218 Student st=new Student(); 219 int i=0; 220 it=map.iterator(); 221 boolean ok=true; 222 while(it.hasNext()) 223 { 224 i++; 225 st=it.next(); 226 if(i==n) 227 continue; 228 if(st.getId().equals(xuehao)) 229 { 230 ok=false; 231 break; 232 } 233 } 234 return ok; 235 } 236 public boolean canAdd(String xuehao) 237 { 238 Student st=new Student(); 239 it=map.iterator(); 240 boolean ok=true; 241 while(it.hasNext()) 242 { 243 st=it.next(); 244 if(st.getId().equals(xuehao)) 245 { 246 ok=false; 247 break; 248 } 249 } 250 return ok; 251 } 252}
//People.java
1package banjiinfo; 2 3public class People { 4 String name,sex; 5 public String getName() { 6 return name; 7 } 8 9 public void setName(String name) { 10 this.name = name; 11 } 12 13 public String getSex() { 14 return sex; 15 } 16 17 public void setSex(String sex) { 18 this.sex = sex; 19 } 20 21 22 23}
//Student.java
1package banjiinfo; 2 3public class Student extends People { 4 String name,id,address; 5 Student() 6 { 7 super(); 8 } 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public String getId() { 16 return id; 17 } 18 public void setId(String id) { 19 this.id = id; 20 } 21 public String getAddress() { 22 return address; 23 } 24 public void setAddress(String address) { 25 this.address = address; 26 } 27 public double getScore() { 28 return score; 29 } 30 public void setScore(double score) { 31 this.score = score; 32 } 33 double score; 34 35}
实验四:按照题目要求设计一个java程序
//Graduate.java
1package graduate; 2//洪鼎淇 信1705-3 20173627 3public class Graduate implements StudentManagerInterface, TeacherManagerInterface { 4 public static void main(String args[]) 5 { 6 Graduate zhanshan=new Graduate(); 7 zhanshan.setFee(2200); 8 zhanshan.setPay(3400); 9 if(zhanshan.getPay()-zhanshan.getFee()<2000) 10 { 11 System.out.println("provide a loan"); 12 } 13 } 14 15 @Override 16 public void setPay(double a) { 17 // TODO 自动生成的方法存根 18 pay=a; 19 } 20 21 @Override 22 public double getPay() { 23 // TODO 自动生成的方法存根 24 return 0; 25 } 26 27 @Override 28 public void setFee(double a) { 29 // TODO 自动生成的方法存根 30 fee=a; 31 } 32 33 @Override 34 public double getFee() { 35 // TODO 自动生成的方法存根 36 return 0; 37 } 38 double fee=0; 39 double pay=0; 40}
//StudentManagerInterface.java
1package graduate; 2public interface StudentManagerInterface 3{ 4 5 void setFee(double a); 6 double getFee(); 7}
//TeacherManagerInterface.java
1package graduate; 2 3public interface TeacherManagerInterface { 4 5 void setPay(double a); 6 double getPay(); 7}
实验结果截图:
实验一:面积计算
下面是实验的结果截图

程序输入的信息如下所示

实验二:抽象类与接口类的设计
第一小题:

第一小题输入的信息如下所示:

第二小题:

第二小题输入的信息如下所示:

实验三:班级信息管理类设计
实验的截图如下所示

实验四:按照题目要求设计并编写一个Java程序
按照题目于要求设计

其中输入的数据如下所示:

实验总结:
通过本次课的练习,掌握了类之间继承的基本用法,并且还能够粗略领悟到在哪一方面能够使用到,例如同一方法的在不同类的相同定义,这里大概就是面对对象的思想的体现,总的来说这是一节学习到很多知识的实验课。并且,在抽象类和接口的设计上有了初步的认识,了解到了其中的语法,这在我之前的java学习中尚且没有学习过,领悟颇深的一次实验。
---恢复内容结束---