SCAU Java-随堂实验6-银行账户类的定义与使用

解题思路
  • 该题目要求需要采用抽象类/接口进行编程,可知这些所有形状可以有一个共同点,一个共同的父类,结合题目可知这个共同点即为求面积,但是因为每个形状求面积的具体方法不同,故可以在父类中放置一个抽象方法。
    • 所有父类和子类都放在shape包中
//抽象类的代码
package shape;
abstract class shape {
    shape(){}
    abstract public double getArea();
}
  • 每一个子类都需要建立自己的数据域,构造方法,和覆盖父类的求面积方法

  • 因为此题目仅需要求钢板的面积利用率,即只需要知道钢板面积即所有形状的面积和,故在此处不建立每一个子类实例对象,直接调用子类的方法递加求得所有形状的面积和。 实际上还是用new建立对象并调用这个方法,只是没有设置一个变量来指向这个建立的新实例对象。或者用类名来调用static方法,但此处getArea()在逻辑上需要继承父类中的abstract方法,abstract和static又冲突,此处不能这么做。

  • 因为程序需要具有较好的扩展性,例如增加一种形状三角形(类型符为D,记录三角形的三条边长)时,计算利用率的代码不会被修改。故在此题中**不直接涉及统计的所有形状的面积中有几个形状**,而是只求得面积,当新形状加入时,只需要修改计算面积的while循环,在if语句中添加一条新的判断方式,调用该新子类的getArea()方法以递加面积。

项目结构
包结构

截屏2020-12-06下午4.01.40

Main类
package main;

import shape.*;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入钢板的宽度和高度(格式为: xx xx)");
        double width = sc.nextInt();
        double height = sc.nextInt();
        double usingArea = 0.0;
        A steel = new A(width, height);//建立钢板对象,属于A类矩形对象

        System.out.println("请继续输入每一个形状的具体数据,具体形状对应格式如下");
        System.out.println("矩形: A 宽度 高度");
        System.out.println("圆形: B 半径");
        System.out.println("梯形: C 上底宽 下底宽 高度");
        System.out.println("当输入字母为'0'时代表输入结束,将退出数据录入");
        Character letter = sc.next().charAt(0);
        while (!letter.equals('0')) {
            if (letter.equals('A')) {
                double width01 = sc.nextDouble();
                double height01 = sc.nextDouble();
                usingArea += new A(width01,height01).getArea();
            } else if (letter.equals('B')) {
                double radius = sc.nextDouble();
                usingArea += new B(radius).getArea();
            } else if (letter.equals('C')) {
                double upWidth = sc.nextDouble();
                double downWidth = sc.nextDouble();
                double height01 = sc.nextDouble();
                usingArea += new C(upWidth,downWidth,height01).getArea();
            }
            System.out.println("请继续输入数据");
            letter = sc.next().charAt(0);
        }

        String rate = String.format("%.6f", usingArea/steel.getArea()*100) + "%";
        System.out.println("钢板利用率为" + rate);

    }
}
shape类
package shape;

abstract class shape {
    shape(){}
    abstract public double getArea();
}
A类
package shape;

public class A extends shape {
    //这是一个矩形类
    private double width;
    private double height;

    public A(double width,double height){
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
        return height*width;
    }
}
B类
package shape;

public class B extends shape {
    //这是一个圆形类
    private double radius;

    public B(double radius){
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI*radius*radius;
    }
}
C类
package shape;

public class C extends shape{
    //这是一个梯形类
    private double upWidth;
    private double downWidth;
    private double height;

    public C(double upWidth, double downWidth, double height){
        this.upWidth = upWidth;
        this.downWidth = downWidth;
        this.height = height;
    }

    @Override
    public double getArea() {
        return (upWidth/2+downWidth/2)*height;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实验题目 编写一个类实现银行帐户的概念,包括的属性有“帐号”、“储户姓名”、“地址”、“存款余额”,包括的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”等。 实验要求 改写上面的类,增加一个类的静态属性“最小余额”和一个用来修改这个最小余额属性的方法。 改写上面的类,增加一个类的静态属性“活期利率”和封装这个属性的相应方法。 程序模块 实验后的结果验证 总结体会 通过此次实验,我初步掌握了编写一个类的概念,更进一步的熟悉了static等等与之用法相类似的语法类,增强了自己学好JAVA的信心。进一步掌握静态对象和非静态对象的区别与联系。 静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。 非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。 静态对象和非静态对象都是对象,是对象都是要实例化的。不同之处就是2者的数据表现和存储方式不一样。 静态的好处: 引用方便。对于公用类型的变量,直接用 类名.静态方法名 或者 类名.静态变量名就可引用并且直接可以修改其属性值,不用getter和setter方法。 保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。 有效减少多余的浪费。
要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤: 步骤1:编写程序Account.java,其中定义银行账户类Account。该类中有账号、姓名、 存款余额等数据域,余额默认是0;有存款、取款、获取当前余额等方法。其中账号为长度 为12位数字的字符串,姓名为字符串,存款余额为double。 步骤2:编写名为CreditAccount类的信用卡账户类。该类继承自Account类,增加一 个透支限额(double)数据域,透支限额默认为1000。同时该类账户取款时允许透支,但不 能超过透支限额。 步骤3:编写名为SavingAccount的储蓄账户类SavingAccount。该类继承自Account 类。该类账户取款时不允许透支。 步骤4:编写名为Bank的模拟银行类,其中可以存储多个类型可能是信用卡账户或储 蓄账户的对象(可以用数组或ArrayList实现)。该类包含以下方法: 开户:即增加一个新的账户,注意:不允许两个账户的账号相同 销户:即删除一个已有的账户 查询账户:根据一个账号,查询有无该账号的账户 统计目前银行的存款总余额的方法。 统计目前银行的信用卡账户总透支金额的方法。 统计目前总账户数。 统计目前信用卡账户数 统计目前储蓄卡账户数 步骤5:编写客户端类Client.java完成以下功能: 编写一个静态方法,创建一个银行对象,并随机生成10个账号从1000 0000 0000 0000到1000 0000 0000 0009,类型不同的账户。 main方法中模拟几次开户操作。 main方法中模拟几次销户操作。 模拟几个对指定账号的存款和取款操作。 输出银行的总账户数、总余额、总透支数、各类具体账户数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值