hp培训练习题(类的特性)

2.写一个父类 账户(Account)(属性:id,password,name,personId,email,余额balance;方法:存款deposit,取款withdraw为一空方法)
  写一个子类 储蓄账户(SavingAccount,覆盖父类的取款方法)
  写一个子类 信用账户 (CreditAccount,属性:行用额度ceiling,覆盖父类的取款方法)

  写一个银行类Bank作测试,属性:账户数组,账户数量,方法:开户register,登录login,存款deposit,取款withdraw,设置透支额度setCeiling,
统计所有账户余额总和getAllBalance,统计所有信用帐户透支额度的总和getAllCeiling,工具方法:按id查询账户getAccountById,写出测试主方法测试各个功能。

 

package business;
import model.*;
public class Bank {
	private Account[] as=new Account[100];
	private int size;
	
	//开户方法,返回新创建的Account对象
	public Account register(long id,String pass1,String pass2,String name,String personId,String email,int type){
		if (!(pass1.equals(pass2))) {
			System.out.println("两次密码输入不一致!");
			return null;
		}
		Account c=null;
		if (type==0) c=new SavingAccount(id,pass1,name,personId,email);
		else if (type==1) c=new CreditAccount(id,pass1,name,personId,email);
		else return null;
		
		if (size==as.length) expand();
		as[size]=c;
		size++;
		
		return c;
	}
	
	//登录 
	public Account login(long id,String pass){
		Account c=this.getAccountById(id);
		if (c==null){
			System.out.println("id 不存在!");
			return null;
		}
		if(!( pass.equals(c.getPassword()))){
			System.out.println("密码错误!");
			return null;
		}
		System.out.println("欢迎你回来,"+c.getName());
		return c;
	}
	
	//存款
	public Account deposit(long id,double money){
		Account c=this.getAccountById(id);
		c.deposit(money);
		return c;
	}
	
	//取款
	public Account withdraw(long id,double money){
		Account c=this.getAccountById(id);
		c.withdraw(money);
		return c;
	}
	
	//设置透支额度
	public Account setCeiling(long id,double ceiling){
		Account c=this.getAccountById(id);
		if (c instanceof CreditAccount){
			CreditAccount ca=(CreditAccount)c;
			ca.setCeiling(ceiling);
		}
		return c;
	}
	
	
	//统计所有帐户余额总和
	public double getAllBalance(){
		double d=0;
		for(int i=0;i<size;i++){
			d+=as[i].getBalance();
		}
		return d;
	}
	
	//统计所有信用帐户透支额度的总和
	public double getAllCeiling(){
		double d=0;
		for(int i=0;i<size;i++){
			if (as[i] instanceof CreditAccount){
				CreditAccount ca=(CreditAccount)as[i];
				d+=ca.getCeiling();
			}
		}
		return d;
	}
	
	// 在数组中根据id找Account对象,找不到的话会返回null
	private Account getAccountById(long id){
		for(int i=0;i<size;i++){
			if (as[i].getId()==id) return as[i];
		}
		return null;
	}
	
	private void expand(){
		Account[] a=new Account[as.length*2];
		System.arraycopy(as,0,a,0,as.length);
		as=a;
	}
	
	public static void main(String[] args){
		Bank b=new Bank();
		b.register(1,"123","123","huxinzhe","111111","huxz@tarena.com.cn",0);
		b.register(2,"123","123","liucy","2222222","liucy@tarena.com.cn",1);
		b.deposit(1,100);
		b.deposit(2,200);
		b.setCeiling(2,1000);
		b.withdraw(2,300);
		
		System.out.println(b.getAllBalance());
		System.out.println(b.getAllCeiling());
	}
}



package model;
public class Account{
	private long id;
	private String password;
	private String name;
	private String personId;
	private String email;
	private double balance;
	public Account()
	{
		id=10001L;
	}
	public Account(long id,String password, String name, String personid, String email)
	{
		this();
		this.id=id;
		this.name=name;
		this.password=password;
		this.personId=personid;
		this.email=email;
	}
	
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance){
		this.balance=balance;
	}
	public String getEmail() {
		return email;
	}
	public long getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public String getPassword() {
		return password;
	}
	public String getPersonId() {
		return personId;
	}
	public void deposit(double money)
	{
		this.balance=this.balance+money;
	}
	public void withdraw(double money)
	{
	}
}



package model;
public class CreditAccount extends Account{
	private double ceiling;
	public double getCeiling(){
		return this.ceiling;
	}
	public void setCeiling(double ceiling){
		this.ceiling=ceiling;
	}
	public CreditAccount(long id,String password, String name, String personid, String email){
		super(id,password,name,personid,email);
	}
	
	public void withdraw(double money)
	{
		if (this.getBalance()-money>=(-1)*ceiling) {
			this.setBalance(this.getBalance()-money);
		}
	}
}


package model;
public class SavingAccount extends Account{
	public SavingAccount(long id,String password, String name, String personid, String email){
		super(id,password,name,personid,email);
	}
	public void withdraw(double money)
	{
		if (this.getBalance()-money>=0) {
			this.setBalance(this.getBalance()-money);
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值