实验6 银行账户类的定义与使用

题目类别: B实验


关键字: 类的定义 抽象类 继承 方法覆盖 多态


内容要求:

一、实验目的

(1)理解对象和类,掌握用类创建对象模型。

(2)理解和掌握抽象类的使用

(3)理解和掌握继承、方法覆盖的使用

(4)初步掌握使用多态性的方法

二、实验内容

按照如下步骤完成实验:

步骤1:定义一个名为Account的抽象类代表一个银行账户类。要求如下:

(1) 放在bank包中;

(2) 数据域包括:id(String类型,代表账号)、name(String类型,代表姓名)、balance(double类型,代表账户中的余额)

(3) 对数据域进行合理的封装。通常银行开户后账号不能修改,存款余额只能通过存款和取款方法修改。

(4) 编写合理有参构造方法,使用参数对数据域进行初始化。

(5) 编写名为deposit的方法,实现存款操作。

参数:double amount,存款金额

返回类型:void

功能:增加余额

(6) 编写名为withdraw的抽象方法,定义取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功

(7) 覆盖toString方法,返回值形式为:[账号,姓名,余额],余额保留2位小数。

(8) 覆盖equals()方法,判断两个账户对象相等的依据是两个对象的账号是相同。

(9) 覆盖hashcode()方法,根据账户对象的账号来定义一个哈希函数。

步骤2:定义一个名为CreditAccount的类代表一个信用卡账户类,继承Account类 ,要求如下:

(1) 放在bank包中;

(2) 数据域包括:limit(double类型,透支额度),表示可以透支的金额,说明:透支是指可以在余额为0的情况下继续取款,欠款不超过透支额度即可。例如透支额度是1000元,则余额最多可以是-1000元;

(3) 对数据域进行合理的封装。

(4) 编写合理的构造方法。

(5) 覆盖withdraw的方法,实现取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功,取款金额超过透支额度时不能取款并返回false。即余额不能低于 (-1*信用额度)。

功能:判断是否可以取款及减少余额

步骤3:定义一个名为SavingAccount的类代表一个储蓄账户类,继承Account类 ,要求如下:

(1) 放在bank包中;

(2) 编写合理的构造方法。

(3) 覆盖withdraw的方法,实现取款操作。

参数:double amount,取款金额

返回类型:boolean,表示取款操作是否成功,取款金额超过余额时不能取款并返回false。

功能:判断是否可以取款及减少余额

步骤4:编写主类Main,放在main包中,在main方法进行如下工作:

(1) 创建1个CreditAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。

(2) 创建1个SavingAccount对象,输出账户信息;然后进行几次存取款操作。每次操作后,输出账户信息。注意要测试取款成功或失败的情况。

(3) 创建2个账号相同的SavingAccount对象,输出这2个对象,判断这2个对象是否相等。

(4) 创建2个账号相同的CreditAccount对象,输出这2个对象,判断这2个对象是否相等。

(5) 创建1个SavingAccount对象和1个CreditAccount对象,输出这2个对象,判断这2个对象是否相等。

提交:打包为可以执行的JAR文档,其中要包含源程序文件。

Main类:

package main;

import bank.CreditAccount;
import bank.SavingAccount;

import java.security.spec.RSAOtherPrimeInfo;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        double temp;
        System.out.println("请输入信用卡账户id:");
        String id=sc.next();
        System.out.println("请输入账户姓名:");
        String name=sc.next();
        System.out.println("请输入信用额度:");
        double limit=sc.nextDouble();
        CreditAccount a=new CreditAccount(id,name,limit);
        System.out.println("请输入存入金额:");
        temp=sc.nextDouble();
        a.deposit(temp);
        System.out.println("成功存入"+temp+"元");
        System.out.println("请输入取出金额:");
        temp=sc.nextDouble();
        if(a.withdraw(temp)){
            System.out.println("成功取出"+temp+"元");
            System.out.println("账户信息为:");
            System.out.println(a.toString());
        }
        else {
            System.out.println("余额与信用不足");
        }
        System.out.println("请输入取出金额:");
        temp=sc.nextDouble();
        if(a.withdraw(temp)){
            System.out.println("成功取出"+temp+"元");
            System.out.println("账户信息为:");
            System.out.println(a.toString());
        }
        else {
            System.out.println("余额与信用不足");
        }
        System.out.println("----------------");
        System.out.println("请输入储蓄卡账户id:");
        id=sc.next();
        System.out.println("请输入账户姓名:");
        name=sc.next();
        SavingAccount sa=new SavingAccount(id,name);
        System.out.println("请输入存入金额:");
        temp=sc.nextDouble();
        sa.deposit(temp);
        System.out.println("成功存入"+temp+"元");
        System.out.println("请输入取出金额:");
        temp=sc.nextDouble();
        if(sa.withdraw(temp)){
            System.out.println("成功取出"+temp+"元");
            System.out.println("账户信息为:");
            System.out.println(sa.toString());
        }
        else {
            System.out.println("余额不足");
        }
        System.out.println("请输入取出金额:");
        temp=sc.nextDouble();
        if(sa.withdraw(temp)){
            System.out.println("成功取出"+temp+"元");
            System.out.println("账户信息为:");
            System.out.println(sa.toString());
        }
        else {
            System.out.println("余额不足");
        }
        System.out.println("----------------");
        System.out.println("将创建两个id都为2022,名字分别为Lucy和Amy的储蓄卡账户");
        SavingAccount sa1=new SavingAccount("2022","Lucy");
        SavingAccount sa2=new SavingAccount("2022","Amy");
        if(sa1.equals(sa2)){
            System.out.println("两个账户相同");
        }
        else System.out.println("两个账户不相同");
        System.out.println("-----------------");
        System.out.println("将创建两个id都为666,名字分别为ZYX和YSK,信用为100的信用卡账号,");
        CreditAccount a1=new CreditAccount("666","ZYX",100);
        CreditAccount a2=new CreditAccount("666","YSK",100);
        if(a1.equals(a2)){
            System.out.println("两个账户相同");
        }
        else System.out.println("两个账户不相同");
        System.out.println("------------------");
        System.out.println("将创建一个信用卡账户和一个储蓄卡账户");
        System.out.println("请分别输入信用卡账户信息(id,name,limit):");
        CreditAccount a3=new CreditAccount(sc.next(), sc.next(), sc.nextDouble());
        System.out.println("请分别输入储蓄卡账户信息(id,name):");
        SavingAccount sa3=new SavingAccount(sc.next(), sc.next());
        if(a3.equals(sa3)){
            System.out.println("两个账号相同");
        }
        else System.out.println("两个账号不相同");

    }

}

Account类:

package bank;

import java.util.Objects;

public abstract class Account {
    private String id;
    private String name;
    private double balance;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public Account(String id,String name) {
        this.id = id;
        this.name = name;
        balance = 0.0;
    }

    public void deposit(double amount){
        this.balance+=amount;
    }

    abstract public boolean withdraw(double amount);

    @Override
    public String toString() {
        return "["+this.id+","+this.name+","+String.format("%.2f",this.balance)+"]";
    }

    @Override
    public boolean equals(Object obj) {
        Account ac=(Account) obj;
        if(ac.id.equals(this.id))
            return true;
        return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

 

 CreditAccount类:

package bank;

public class CreditAccount extends Account{
    private double limit;

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }

    public CreditAccount(String id, String name,double limit) {
        super(id, name);
        this.limit=limit;
    }

    @Override
    public boolean withdraw(double amount) {
        if(amount>limit+getBalance())
            return false;
        if(amount<=limit+getBalance()){
            setBalance(getBalance()-amount);
            return true;
        }
        return false;
    }


}

SavingAccoun类:

package bank;

public class SavingAccount extends Account{

    public SavingAccount(String id, String name) {
        super(id, name);
    }

    @Override
    public boolean withdraw(double amount) {
        if (amount<=getBalance()){
            setBalance(getBalance()-amount);
            return true;
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值