IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java实训报告----计算图形的周长和面积(保姆级完整版) -> 正文阅读

[Java知识库]Java实训报告----计算图形的周长和面积(保姆级完整版)

结课项目需求

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

  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;
    }

    @Override
    double Area() {
        return length*wide;
    }

    @Override
    double Girth() {
        return 2*(length+wide);
    }

    @Override
    void showArea() {
        System.out.printf("The area of the rectangle:"+"%.2f", Area());
        System.out.println();
    }

    @Override
    void 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;
    }

    @Override
    double Area() {
        return PI*radius*radius;
    }

    @Override
    double Girth() {
        return 2*PI*radius;
    }

    @Override
    void showArea() {
        System.out.printf("The girth of the circle:"+"%.2f", Area());
        System.out.println();
    }

    @Override
    void 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;
    }

    @Override
    double Girth() {
        return a + b + c;
    }

    @Override
    double Area() {
        return Math.sqrt(this.Girth()*(this.Girth()-a)*(this.Girth()-b)*(this.Girth()-c));
    }

    @Override
    void showArea() {
        System.out.printf("The girth of the triangle:" +"%.2f", Area());
        System.out.println();
    }

    @Override
    void 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("退出成功!");
        }
        else
            System.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)){
                                //三角形的条件是两边之和大于第三边,两边之差小于第三边
                                //边的长度肯定也不能为0
                                System.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("退出成功!");
        }
        else
            System.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)){
                                //三角形的条件是两边之和大于第三边,两边之差小于第三边
                                //边的长度肯定也不能为0
                                System.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;
    }

    @Override
    double Area() {
        return length*wide;
    }

    @Override
    double Girth() {
        return 2*(length+wide);
    }

    @Override
    void showArea() {
        System.out.printf("The area of the rectangle:"+"%.2f", Area());
        System.out.println();
    }

    @Override
    void 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;
    }

    @Override
    double Area() {
        return PI*radius*radius;
    }

    @Override
    double Girth() {
        return 2*PI*radius;
    }

    @Override
    void showArea() {
        System.out.printf("The girth of the circle:"+"%.2f", Area());
        System.out.println();
    }

    @Override
    void 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;
    }

    @Override
    double Girth() {
        return a + b + c;
    }

    @Override
    double Area() {
        return Math.sqrt(this.Girth()*(this.Girth()-a)*(this.Girth()-b)*(this.Girth()-c));
    }

    @Override
    void showArea() {
        System.out.printf("The girth of the triangle:" +"%.2f", Area());
        System.out.println();
    }

    @Override
    void showGirth() {
        System.out.printf("The girth of the triangle:" +"%.2f", Girth());
        System.out.println();
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:41:02  更:2021-12-08 13:41:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:28:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码