Java实验13 银行账户存取款业务

题目类别: 实验



关键字: 对象类型转换、覆盖、继承、多态



内容要求:

要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤:

     步骤 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 方法中模拟几次销户操作。

模拟几个对指定账号的存款和取款操作。

输出银行的总账户数、总余额、总透支数、各类具体账户数。



实现代码:

Account类:

package cn.zg;

/**
 * @author zg
 */
public class Account {
    /**
     * 账户
     */
    private String account;
    /**
     * 姓名
     */
    private String name;
    /**
     * 存款余额
     */
    private double money;

    /**
     * 构造
     */
    public Account() {
        this.money=0.0;
    }

    public Account(String account){
        this.account=account;
    }

    public Account(String account, String name, double money) {
        this.account = account;
        this.name = name;
        this.money = money;
    }

    /**
     *访问器和修改器
     */
    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getName() {
        return name;
    }

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

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    /**
     * 存款
     * @param money 存款金额
     * @return 是否存款成功
     */
    public boolean addMoney(double money){
        this.money+=money;
        return true;
    }

    /**
     * 取款
     * @param money 取款金额
     * @return 是否取款成功
     */
    public boolean minusMoney(double money){
        if(this.money-money>0){
            this.money-=money;
            return true;
        }
        return false;
    }
}



CreditAccount类:

package cn.zg;

/**
 * @author zg
 */
public class CreditAccount extends Account{
    /**
     * 透支限额
     */
    private double overdue;

    /**
     * 构造
     */
    public CreditAccount() {
    }

    public CreditAccount(String account, String name, double money, double overdue) {
        super(account, name, money);
        this.overdue = overdue;
    }

    /**
     * 访问器和修改器
     */
    public double getOverdue() {
        return overdue;
    }

    public void setOverdue(double overdue) {
        this.overdue = overdue;
    }

    /**
     * 取款时允许透支,但不能超过透支限额
     * @param money 透支金额
     * @return 是否透支成功
     */
    public boolean over(double money){
        if(overdue-money<0){
            return false;
        }
        overdue-=money;
        return true;
    }
}



>

SavingAccount类:

package cn.zg;

/**
 * @author zg
 */
public class SavingAccount extends Account{
    public SavingAccount() {
    }

    public SavingAccount(String account, String name, double money) {
        super(account, name, money);
    }
}



Bank类:

package cn.zg;

import java.util.ArrayList;

/**
 * @author zg
 */
public class Bank {
    /**
     * 存储多个类型可能是信用卡账户或储蓄账户的对象
     */
    ArrayList<Account> accounts=new ArrayList<>();

    /**
     * 开户
     * @param account 待开户账户
     * @return 是否开户成功
     */
    public boolean add(Account account){
        for (Account acc : accounts) {
            if(acc.getAccount().equals(account.getAccount())){
                //  不允许两个账户的账号相同
                return false;
            }
        }
        return accounts.add(account);
    }

    /**
     * 销户
     * @param account 待销户账户
     * @return 是否销户成功
     */
    public boolean delete(Account account){
        for (Account acc : accounts) {
            if(acc.getAccount().equals(account.getAccount())){
                return accounts.remove(acc);
            }
        }
        return false;
    }

    /**
     * 根据一个账号,查询有无该账号的账户
     * @param account 要查询的账号
     * @return 有无该账号的账户
     */
    public boolean query(Account account){
        for (Account acc : accounts) {
            if(acc.getAccount().equals(account.getAccount())){
                return true;
            }
        }
        return false;
    }

    /**
     *
     * @return 统计目前银行的信用卡账户总透支金额
     */
    public double sumOfOverdue(){
        double sum=0;
        for (Account account : accounts) {
            if(account instanceof CreditAccount){
                sum+=(1000-((CreditAccount) account).getOverdue());
            }
        }
        return sum;
    }

    /**
     *
     * @return 统计目前银行的存款总余额
     */
    public double sumOfMoney(){
        double sum=0;
        for (Account account : accounts) {
            sum+=account.getMoney();
        }
        sum-=sumOfOverdue();
        return sum;
    }

    /**
     *
     * @return 统计目前总账户数
     */
    public int count(){
        return  accounts.size();
    }

    /**
     *
     * @return 统计目前信用卡账户数
     */
    public int countOfCredit(){
        int count=0;
        for (Account account : accounts) {
            if(account instanceof CreditAccount){
                count++;
            }
        }
        return count;
    }

    /**
     *
     * @return 统计目前储蓄卡账户数
     */
    public int countOfSaving(){
        int count=0;
        for (Account account : accounts) {
            if(account instanceof SavingAccount){
                count++;
            }
        }
        return count;
    }
}



Client类:

package cn.zg;

import java.util.Random;

/**
 * @author zg
 */
public class Client {

    public static void main(String[] args) {
        Bank bank=create();

        //  模拟几次开户操作
        boolean zg = bank.add(new SavingAccount("1000000000000001", "zg", 0));
        //  1000000000000001账号已存在,开户失败
        print(zg);
        boolean zcg = bank.add(new SavingAccount("1000000000000010", "zcg", 0));
        print(zcg);
        boolean zzw = bank.add(new CreditAccount("1000000000000011", "zzw", 0,1000));
        print(zzw);

        //  模拟几次销户操作
        print2(bank.delete(new Account("1000000000000001")));
        print2(bank.delete(new Account("1000000000000006")));
        print2(bank.delete(new Account("1000000000000009")));

        //  模拟几个对指定账号的存款操作
        for (Account account : bank.accounts) {
            if("1000000000000011".equals(account.getAccount())){
                account.addMoney(100000);
            }else if("1000000000000001".equals(account.getAccount())){
                account.addMoney(1000);
            }else if("1000000000000005".equals(account.getAccount())){
                account.addMoney(1688);
            }
        }

        //  模拟几个对指定账号的取款操作
        for (Account account : bank.accounts) {
            if("1000000000000011".equals(account.getAccount())){
                account.minusMoney(111);
            }else if("1000000000000001".equals(account.getAccount())){
                account.minusMoney(111);
            }else if("1000000000000005".equals(account.getAccount())){
                account.minusMoney(111);
            }
        }

        //  模拟所有信用卡账号的透支操作
        for (Account account : bank.accounts) {
            if(account instanceof CreditAccount){
                ((CreditAccount)account).over(111);
            }
        }

        //  输出银行的总账户数、总余额、总透支数、各类具体账户数
        System.out.println("银行的总账户数:"+bank.count());
        System.out.println("银行的总余额:"+bank.sumOfMoney());
        System.out.println("银行的总透支数:"+bank.sumOfOverdue());
        System.out.println("银行的信用卡账户数:"+bank.countOfCredit());
        System.out.println("银行的储蓄卡账户数:"+bank.countOfSaving());

    }

    /**
     * 随机生成 10 个账号从 1000 0000 0000 0000 到 1000 0000 0000 0009、类型不同的账户。
     * @return Bank对象
     */
    public static Bank create(){
        Bank bank = new Bank();
        Random random = new Random();
        String prefix="100000000000000";
        while(bank.count()<10){
            int i=random.nextInt(10);
            if(i%2==0){
                bank.add(new CreditAccount(prefix+i,"小"+i,0,1000));
            }else{
                bank.add(new SavingAccount(prefix+i,"小"+i,0));
            }
        }
        return bank;
    }


    public static void print(boolean flag){
        if(flag){
            System.out.println("开户成功!");
        }else{
            System.out.println("开户失败!");
        }
    }

    public static void print2(boolean flag){
        if(flag){
            System.out.println("销户成功!");
        }else{
            System.out.println("销户失败!");
        }
    }
}



效果展示:
在这里插入图片描述

  • 13
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
[新手练习题] 步骤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到1000 0000 0009、型不同的账户。 main方法中模拟几次开户操作。 main方法中模拟几次销户操作。 模拟几个对指定账号的存款和取款操作。 输出银行的总账户数、总余额、总透支数、各具体账户数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值