JAVA练习题---银行账户管理系统

Hi大家好,这是我的第一篇博客,前段时间在学Java,给大家分享一道综合性练习题,所以废话少说上代码!!!

银行账户管理系统
项目名称 :Bank Account Management System 银行账户管理系统简称 BAM
项目描述 : 这是一一个银行账户管理系统 , 用户可以操作自己的银行账户 .
项目实施方式 : 这是一个同步练习 , 随着 Java 课程的深入 , 这个项目将趋于完整 , 学员的任务是随着知识点的深入,完成 每一个进阶的项目要求。
1.

 

账户类代码

public class Account {
    private long id;
    private static long pid; //用来分配账号的id
    private String password;
    private String name;
    private String personId;
    private double balance;

    public Account() {
    }

    public Account(long id, String password, String name, String personId, double balance) {
        this.id = id;
        this.password = password;
        this.name = name;
        this.personId = personId;
        this.balance = balance;
    }

    //成员方法
    public double deposit(double money) {
        balance+=money;
        return balance;
    }
    //取款
    public boolean withdraw(double money) {
        if (balance>money) {
            balance-=money;
            return true;
        }
        else {
            System.out.println("取款数目过大");
            return false;
        }
    }


    //练习2:封装

    public long getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

    public double getBalance() {
        return balance;
    }

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

2. 信用类账户和储蓄类账户  继承账户类  

父类有参数的方法不会自动继承,在子类的构造方法中可以用super(参数)来调用父类构造方法

package entity;

/*
  信用账户
 */
public class CreditAccount extends Account {
    public CreditAccount(long id,String name,String personId,String password,double balance) {
        super(id, password, name, personId, balance);
    }
    //取款,对父类方法的重写
    //信用账户可以透支
    @Override
    public boolean withdraw(double money) {
        if (money>super.getBalance()+10000) {
            //取钱透支超过10000元
            return false;
        }else {
            //将余额中的钱减少
            super.setBalance(super.getBalance()-money);
            return true;
        }
    }
}
package entity;

/*
 储蓄账户
 */
public class SavingAccount extends Account {
    public SavingAccount(long id,String name,String personId,String password,double balance) {
        super(id, password, name, personId, balance);
    }

    @Override
    public boolean withdraw(double money) {
        if (money>super.getBalance()){
            return false;
        }else {
            super.setBalance(super.getBalance()-money);
            return true;
        }
    }
}

 Bank类代码

package 银行账户管理系统.biz;
import com.sun.source.tree.IfTree;
import entity.Account;
import entity.CreditAccount;
import entity.SavingAccount;

/*
 银行类
 1.当前所有账户对象的集合,存放在数组中
 2.当前账户数量
 方法:
 1.用户开户,需要的参数: id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号
 2.用户登录,参数:id,密码 返回登陆账户的账号
 3.用户存款,参数:id,存款数额,返回void
 4.用户取款,参数:id,取款数额,返回void
 5.查询余额,参数:id,返回该账户的余额double
 用户会通过调用Bank对象以上的方法来操作自己的账户
 */
public class Bank {
    //当前所有的账户对象的集合,存放在数组中,对数组声明并初始化
    private Account accounts[] = new Account[20];//账户集合
    private int number; //账户数目

    public Bank() {
        accounts = new Account[20];
        number = 0;
    }

    private Account selectAccountById(long id) {
        Account acu=null;
        for (int i=1;i<accounts.length;i++){
            if (accounts[i].getId()==id) {
                //根据id找到用户 如果从数组中找到相应的卡号和密码,则返回整个对象
                acu=accounts[i];
                break;
            }
        }
        return acu;
    }

    //开户方法
    public Account openAccount(long id, String pass1, String pass2, String name, String personID, int type) {
        //创建一个新帐户
        Account acc = null;
        //判断两次密码是否一致
        if (pass1.equals(pass2)) {
            //如果返回为真,则说明密码一致
            //账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户
            if (type == 1) {
                acc = new CreditAccount(id, name, pass1, personID, 1);
                //刚开卡,可以定义balance=1
            }else{acc = new SavingAccount(id, name, pass1, personID, 1);}
                return acc;
            } else {//如果两次密码不一致,则开卡不成功,返回一个null。
                return null;
            }
        }

        //登录
        public Account login(long id,String password) {
        //遍历数组
            Account acu=selectAccountById(id);
             if (acu==null) {
                 return null;
             }else {
                 if (acu.getPassword().equals(password)){
                     //判断密码是否正确 对了就返回对象
                     return acu;
                 }else {return null;}
             }
        }

        //存款
       public void saveMoney(long id,double money) {
        //直接调用账户类里方法
           Account ac=selectAccountById(id);
           ac.deposit(money);
       }

       //取款
       public void outputMoney(long id,double money) {
        Account ac=selectAccountById(id);
        ac.withdraw(money);
       }

       //查询余额
      public double selectMoney(long id){
        Account ac=selectAccountById(id);
        return ac.getBalance();
      }
    }

 测试页面代码编写思路

  1.输出语句主页面编写 

  2.scanner实现键盘录入数据后,switch循环调用Bank里的方法,当然也可以把主页面编写的方法写在Bank类里,在测试页面里进行调用方法即可。

今天更新就到这里!做的不好的地方请多指教!

猜你喜欢

转载自blog.csdn.net/wuyomhchang/article/details/123577099