结课项目需求

运用所学的知识,设计计算图形面积和周长的系统,要求用到对象和类,构造方法,继承,抽象类(或接口)和多态。实现如下功能:

  1. 根据菜单提示选择要计算的图像类型。
  2. 输入矩形的长和宽,计算矩形的面积和周长。
  3. 输入圆的半径,计算圆形的面积和周长。(要求保留两位小数)
  4. 输入三角形的三边,计算三角形的面积和周长。
  5. 如果根据菜单提示输入有误,有相关提示并重新选择。
  6. 退出(非右上角x号退出)
框架实现

1.图形父类完成两个抽象方法面积和周长用于子类继承和重写(也可以用接口的方式实现),这里我加了两个shou方法,需要输出面积和周长时直接调用就可以了。

//父类图形
abstract class Shape{abstract double Area();abstract double Girth();abstract void showArea();abstract void showGirth();
}

2.子类继承并重写父类中的方法

                                                                矩形

//子类矩形
class Rectangle extends Shape{double length;double wide;public Rectangle(double length, double wide) {this.length = length;this.wide = wide;}@Overridedouble Area() {return length*wide;}@Overridedouble Girth() {return 2*(length+wide);}@Overridevoid showArea() {System.out.printf("The area of the rectangle:"+"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the rectangle:" +"%.2f", Girth());System.out.println();}
}

//子类圆形
class Circle extends Shape{double radius;final double PI = 3.14;public Circle(double radius) {this.radius = radius;}@Overridedouble Area() {return PI*radius*radius;}@Overridedouble Girth() {return 2*PI*radius;}@Overridevoid showArea() {System.out.printf("The girth of the circle:"+"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the circle:" +"%.2f", Girth());System.out.println();}
}

     三角形

//子类三角形
class Triangle extends Shape{double a,b,c;public Triangle(double a, double b, double c) {this.a = a;this.b = b;this.c = c;}@Overridedouble Girth() {return a + b + c;}@Overridedouble Area() {return Math.sqrt(this.Girth()*(this.Girth()-a)*(this.Girth()-b)*(this.Girth()-c));}@Overridevoid showArea() {System.out.printf("The girth of the triangle:" +"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the triangle:" +"%.2f", Girth());System.out.println();}
}

还需要什么图形自行添加就可以。

下面是需要用到的相关方法

1.主菜单:

//主菜单static void Menu(){System.out.println("*********图形面积周长计算系统*********");System.out.println("*********请挑选需要进行的操作*********");System.out.println("*************1.计算矩形**************");System.out.println("*************2.计算圆形**************");System.out.println("*************3.计算三角形************");System.out.println("*************4.退出******************");}

2.退出方法,输入y代表确认退出,其他的代表否

 static boolean exit(String c,boolean condition){if ("y".equalsIgnoreCase(c)){//判断是否为y,equalsIgnoreCase不区分大小写condition = false;System.out.println("退出成功!");}elseSystem.out.println("继续操作!");return condition;}

3.清屏函数。

每一次走到Switch的最后都进行一次清屏,首先我想到的是和c一样用close(),但是发现java并没有close()这个方法,所以这里我并没有想到好的方法,只能用事件来代替人为的操作鼠标和键盘来实现清理控制台,但是这样有不好的地方,首先,当你清屏之后,控制台中什么也没有直接进行到下一次输入需要操作的选项,所以这里清屏之前需要给出一点友好的提示并再次确认;其次如果清屏快捷键不同也不能使用,我这里清理控制台的快捷键设置为Ctrl+R,如果你的清屏快捷键不是这个的话这个函数你将需要做一些修改。当然你也可以选择不用清屏函数,这个看个人需要。

 //清屏函数,利用GUI来实现鼠标事件和键盘事件Ctrl+R//我这里设置的清屏快捷键为Ctrl+R,如果快捷键为其他的该方法体内的内容不同static void clear()throws AWTException{Robot r = new Robot();r.mousePress(InputEvent.BUTTON3_DOWN_MASK);//按下鼠标右键r.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);//释放鼠标右键r.keyPress(KeyEvent.VK_CONTROL);//按下ctrl键r.keyPress(KeyEvent.VK_R);//按下R键r.keyRelease(KeyEvent.VK_R);//释放R键r.keyRelease(KeyEvent.VK_CONTROL);//释放ctrl键}

4.判断输入格式是否正确

 //判断输入的格式是否符合矩形static boolean IsRectangle(double length,double wide){return length > 0 && wide > 0;}//判断输入是否是圆static boolean IsCircle(double radius){return radius > 0;}//判断输入的三条边能否构成三角形static boolean IsTriangle(double side[]){return side[1] + side[0] > side[2] && side[2] - side[0] < side[1] && side[0] > 0 && side[1] > 0 && side[2] > 0;}

5.是否确认清屏及友好提示

//是否要清屏static void whether() throws AWTException {System.out.println("是否清屏(Y),输入其他的代表否");System.out.println("注意清屏之后控制台什么提示也没有,需要直接输入一次需要选择操作的序号");Scanner in = new Scanner(System.in);String s = in.next();if ("y".equalsIgnoreCase(s))clear();}

6.循环体

 //循环体static void CirculatingBody() throws AWTException {while (isFlag){Scanner in = new Scanner(System.in);Menu();int n = in.nextInt();switch (n){case 1:boolean condition1 = true;while (condition1){double length,wide;do {System.out.print("请输入矩形的长和宽(数字):");length = in.nextDouble();wide = in.nextDouble();if (!IsRectangle(length,wide)){System.out.println("输入数据有误,请从新输入");}}while (!IsRectangle(length,wide));//输入数据有误循环继续重新输入Shape rectangle = new Rectangle(length,wide);//多态向下转型rectangle.showArea();rectangle.showGirth();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition1 = exit(s,condition1);}break;case 2:boolean condition2 = true;while (condition2){double radius;do {System.out.println("请输入圆的半径(数字):");radius = in.nextDouble();if (!IsCircle(radius)){System.out.println("输入有误,请重新输入!");}}while (!IsCircle(radius));//输入有误,重新输入,循环继续Shape circle = new Circle(radius);//多态向下转型circle.showArea();circle.showGirth();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition2 =  exit(s,condition2);}break;case 3:boolean condition3 = true;while (condition3){double []side = new double[3];do {System.out.println("请输入三角形的三条边(数字)");side[0] = in.nextDouble();side[1] = in.nextDouble();side[2] = in.nextDouble();Arrays.sort(side);//将输入的三条边按从小到大排序if (!IsTriangle(side)){//三角形的条件是两边之和大于第三边,两边之差小于第三边//边的长度肯定也不能为0System.out.println("输入的三条边不能构成一个三角形,请重新输入");}}while (!IsTriangle(side));//不能构成三角形重新输入循环继续Shape triangle = new Triangle(side[0],side[1],side[2]);//多态向下转型triangle.showGirth();triangle.showArea();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition3 =  exit(s,condition3);}break;case 4:System.out.println("是否确认退出(Y),输入其他的代表否");String s = in.next();isFlag = exit(s,isFlag);break;default:System.out.println("输入有误,请重新输入");break;}whether();}}
}

下面附上完整代码

import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Scanner;public class ClosingProject {static boolean isFlag = true;//控制循环退出public static void main(String[] args) throws AWTException {//抛出AWT可能出现的异常,下面同理CirculatingBody();//调用循环体}//主菜单static void Menu(){System.out.println("*********图形面积周长计算系统*********");System.out.println("*********请挑选需要进行的操作*********");System.out.println("*************1.计算矩形**************");System.out.println("*************2.计算圆形**************");System.out.println("*************3.计算三角形************");System.out.println("*************4.退出******************");}//退出方法static boolean exit(String c,boolean condition){if ("y".equalsIgnoreCase(c)){//判断是否为y,equalsIgnoreCase不区分大小写condition = false;System.out.println("退出成功!");}elseSystem.out.println("继续操作!");return condition;}//清屏函数,利用GUI来实现鼠标事件和键盘事件Ctrl+R//我这里设置的清屏快捷键为Ctrl+R,如果快捷键为其他的该方法体内的内容不同static void clear()throws AWTException{Robot r = new Robot();r.mousePress(InputEvent.BUTTON3_DOWN_MASK);//按下鼠标右键r.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);//释放鼠标右键r.keyPress(KeyEvent.VK_CONTROL);//按下ctrl键r.keyPress(KeyEvent.VK_R);//按下R键r.keyRelease(KeyEvent.VK_R);//释放R键r.keyRelease(KeyEvent.VK_CONTROL);//释放ctrl键}//是否要清屏static void whether() throws AWTException {System.out.println("是否清屏(Y),输入其他的代表否");System.out.println("注意清屏之后控制台什么提示也没有,需要直接输入一次需要选择操作的序号");Scanner in = new Scanner(System.in);String s = in.next();if ("y".equalsIgnoreCase(s))clear();}//判断输入的格式是否符合矩形static boolean IsRectangle(double length,double wide){return length > 0 && wide > 0;}//判断输入是否是圆static boolean IsCircle(double radius){return radius > 0;}//判断输入的三条边能否构成三角形static boolean IsTriangle(double side[]){return side[1] + side[0] > side[2] && side[2] - side[0] < side[1] && side[0] > 0 && side[1] > 0 && side[2] > 0;}//循环体static void CirculatingBody() throws AWTException {while (isFlag){Scanner in = new Scanner(System.in);Menu();int n = in.nextInt();switch (n){case 1:boolean condition1 = true;while (condition1){double length,wide;do {System.out.print("请输入矩形的长和宽(数字):");length = in.nextDouble();wide = in.nextDouble();if (!IsRectangle(length,wide)){System.out.println("输入数据有误,请从新输入");}}while (!IsRectangle(length,wide));//输入数据有误循环继续重新输入Shape rectangle = new Rectangle(length,wide);//多态向下转型rectangle.showArea();rectangle.showGirth();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition1 = exit(s,condition1);}break;case 2:boolean condition2 = true;while (condition2){double radius;do {System.out.println("请输入圆的半径(数字):");radius = in.nextDouble();if (!IsCircle(radius)){System.out.println("输入有误,请重新输入!");}}while (!IsCircle(radius));//输入有误,重新输入,循环继续Shape circle = new Circle(radius);//多态向下转型circle.showArea();circle.showGirth();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition2 =  exit(s,condition2);}break;case 3:boolean condition3 = true;while (condition3){double []side = new double[3];do {System.out.println("请输入三角形的三条边(数字)");side[0] = in.nextDouble();side[1] = in.nextDouble();side[2] = in.nextDouble();Arrays.sort(side);//将输入的三条边按从小到大排序if (!IsTriangle(side)){//三角形的条件是两边之和大于第三边,两边之差小于第三边//边的长度肯定也不能为0System.out.println("输入的三条边不能构成一个三角形,请重新输入");}}while (!IsTriangle(side));//不能构成三角形重新输入循环继续Shape triangle = new Triangle(side[0],side[1],side[2]);//多态向下转型triangle.showGirth();triangle.showArea();System.out.println("是否返回到上一级(Y),输入其他的代表否");String s = in.next();condition3 =  exit(s,condition3);}break;case 4:System.out.println("是否确认退出(Y),输入其他的代表否");String s = in.next();isFlag = exit(s,isFlag);break;default:System.out.println("输入有误,请重新输入");break;}whether();}}
}//父类图形
abstract class Shape{abstract double Area();abstract double Girth();abstract void showArea();abstract void showGirth();
}//子类矩形
class Rectangle extends Shape{double length;double wide;public Rectangle(double length, double wide) {this.length = length;this.wide = wide;}@Overridedouble Area() {return length*wide;}@Overridedouble Girth() {return 2*(length+wide);}@Overridevoid showArea() {System.out.printf("The area of the rectangle:"+"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the rectangle:" +"%.2f", Girth());System.out.println();}
}
//子类圆形
class Circle extends Shape{double radius;final double PI = 3.14;public Circle(double radius) {this.radius = radius;}@Overridedouble Area() {return PI*radius*radius;}@Overridedouble Girth() {return 2*PI*radius;}@Overridevoid showArea() {System.out.printf("The girth of the circle:"+"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the circle:" +"%.2f", Girth());System.out.println();}
}
//子类三角形
class Triangle extends Shape{double a,b,c;public Triangle(double a, double b, double c) {this.a = a;this.b = b;this.c = c;}@Overridedouble Girth() {return a + b + c;}@Overridedouble Area() {return Math.sqrt(this.Girth()*(this.Girth()-a)*(this.Girth()-b)*(this.Girth()-c));}@Overridevoid showArea() {System.out.printf("The girth of the triangle:" +"%.2f", Area());System.out.println();}@Overridevoid showGirth() {System.out.printf("The girth of the triangle:" +"%.2f", Girth());System.out.println();}
}

Java实训报告----计算图形的周长和面积(保姆级,完整版)相关推荐

  1. android订餐系统实训总结,订餐系统的java实训报告.ppt

    订餐系统的java实训报告.ppt MingD互联网订餐电子商务系统 PPT模板下载 1需求分析2建立数据库3编码4页面设计5测试及调试 项目开发过程 小组分工 数据库部分我们采用Javabean对象 ...

  2. 大专java实训报告_java实训报告

    <java实训报告>由会员分享,可在线阅读,更多相关<java实训报告(13页珍藏版)>请在人人文库网上搜索. 1.北京联合大学管理学院实 训 报 告专业 信息管理与信息系统班 ...

  3. java实训报告怎么写_Java实训报告

    很多同学在大学里面参加完Java实训之后,学校的老师会要求每个人写一份Java实训报告,对于学习理科计算机专业的你来说,写几万行的代码可能不是什么问题,但是让写一份800字的实训报告,那就有些头大了, ...

  4. 大一java实训报告1500字_2019年大学生java实训总结报告

    大学生 java 实训总结报告 大学生 java 实训总结报告是我们在接受了 JAVA 技术专项培训 后书写的总结报告,这是对自己收获的总结 ! 以下是整理的大学生 java 实训总结报告,欢迎大家参 ...

  5. 大一java实训报告1500字_JAVA实训报告

    展开全部 1. 实训的题目及e69da5e6ba903231313335323631343130323136353331333238636637简介: 题目:java计算器应用程序 简介:通过本程序可 ...

  6. 计算机java实训报告,计算机Java实训报告.doc

    实 训 报 告 课程名称: 山寨版QQ 院 (系): 信息科学与工程学院 专业班级: 计算机网络专业08级2班 课程组长: 王二龙 课程成员: 展召振,于明阔 指导教师: 张晓诺 目 录 1.课程设计 ...

  7. java实训报告结论_Java实验报告(二)及总结

    实验二 Java简单类与对象 一. 实验目的 (1) 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: (2) 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象 ...

  8. 大一java实训报告1500字_从800字小作文,到3000字小论文你用了多久? | 校媒FM

    前不久,大四的学长.学姐刚结束被老师们不断"为难"的开题答辩,不少当事人直呼"太难了!". 一个熟悉的学姐是这样在朋友圈吐槽的:"老师提问得也太犀利了 ...

  9. 大一java实训报告1500字_社会实践报告1500字

    社会实践报告1500字 篇一 时光飞逝,不知不觉的就走完了大一的路程.又是一个长期的暑假,在这个暑假之前我已经早早的为自己做好了假期安排,因为有两个多月的假期,我计划放假之后,用一个月的时间去找一份工 ...

最新文章

  1. jsp java乱码转换_Java Web 编码问题一:jsp的编码问题
  2. 大厂程序员和北京户口教师女友买房分歧,要求分配产权怕离婚扯皮
  3. java 字节数组 操作_Java-固定字节数组对象
  4. linux i2c 设备节点读写
  5. css flex排序居中
  6. JDBC连接池C3P0,druid
  7. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](1)
  8. HDU5248:序列变换(二分)
  9. JavaScript | 声明数组并使用数组索引分配元素的代码
  10. 清华源离线安装pytorch_【Pytorch】pytorch安装的时候下载不动
  11. Teamcenter - Index search 找不到相关物件的解决方法
  12. paip.软件版本完善计划VC423
  13. Hi3519A调试记录
  14. 计算机管理里面删打印机就卡住了,打印机任务无法删除怎么办-解决打印机任务无法删除的方法 - 河东软件园...
  15. matlab2021安装教程
  16. pcb元器件通孔焊盘激光焊锡的优势
  17. 激荡20年,芯片产能从零起步到反超美国,中国制造的又一大成就
  18. 解决Vue.directives is not a function报错
  19. Predis的一些操作汇总
  20. 鼠标回报率测试软件用哪个,罗摩G5 垃圾渣鼠标...顺便发一个鼠标回报率测试软件...

热门文章

  1. 中国连锁药店行业发展机遇与竞争格局分析报告2022-2028年版
  2. 计算机无法进入桌面怎么备份,系统崩溃无法启动如何从pe进入系统备份C盘和桌面重要文件...
  3. Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼
  4. window和frame的用法
  5. 系统学习深度学习(六) --LSTM总结
  6. 天涯论坛——python舆情分析汇总(四)
  7. 安卓海外SDK接入问题
  8. 观小林coding图解网络总结
  9. 阿里java开发规范学习笔记 (V1.5华山版)
  10. C# 重写(override)