實例 異常類

//定義的ATM類
public class ATM {
private String num;//編號
private String bankName;//所屬銀行
private String location;//地址
private int maxMoney;//最大錢數
private int currentMoney;//當前錢數

public void setNum(String num)throws ATMException {
if(num.length()==10)
{
  this.num = num;
}
else
{
throw new ATMException("ATM的編號長度不是10位");
}
}

public String getNum() {
return num;
}

public void setBankName(String bankName)throws ATMException {
if(bankName.length()<8)
{
throw new ATMException("銀行名稱長度不夠");
}
else
{
if(bankName.contains("銀行"))
{
this.bankName=bankName;
}
else
{
throw new ATMException("銀行名稱中不包含銀行這兩個字");
}
}
}

public String getBankName() {
return bankName;
}
public void setLocation(String location) {
this.location = location;
}
public String getLocation() {
return location;
}
public void setMaxMoney(int maxMoney) {
this.maxMoney = maxMoney;
}
public int getMaxMoney() {
return maxMoney;
}
public void setCurrentMoney(int currentMoney) {
this.currentMoney = currentMoney;
}
public int getCurrentMoney() {
return currentMoney;
}

public ATM(String num,String bankName,String location,int maxMoney,int currentMoney)throws ATMException
{
setNum(num);
setBankName(bankName);
this.location=location;
this.maxMoney=maxMoney;
this.currentMoney=currentMoney;
}

//取款的方法,無返回值,需要提供兩個參數,一個是卡對象,一個是取款金額
public void getMoney(BankCard card,String password,int money)throws ATMException
{
if(card.getPassword().equals(password))
{
if(money%100==0)//取款的金額是否是100的倍數
{
if(money<=card.getMoney())//取款金額是否小於等於卡中餘額
{
if(money<=this.getCurrentMoney())
//取款金額是否小於等於取款機中當前的餘額
{
float temp=card.getMoney();
card.setMoney(temp-money);
//將卡中餘額去掉所取得金額
this.setCurrentMoney(this.getCurrentMoney()-money);
//將取款機中的當前餘額去掉所取得金額
System.out.println(card.getCardNum()+"在取款機"+this.getNum()+"上取了"+money+"元");
}
else
{
throw new ATMException("ATM餘額不足,取款取消");
}
}
else
{
throw new ATMException("卡中餘額不足,取款取消");
}
}
else
{
throw new ATMException("取款金額不是100的倍數,取款取消");
}
}
else
{
throw new ATMException("卡號密碼錯誤,取款取消");
}
}

}




public class ATMException extends Exception {


public final static long serialVersionUID=1234456L;

public ATMException(String message)
{
super(message);
}
}


//銀行卡類
public class BankCard {
private String cardNum;//卡號
private String bankName;//所屬銀行
private String name;//持卡人姓名
private String ID;//持卡人的身份證號
private String password;//密碼
private float money;//卡中餘額

public void setCardNum(String cardNum) {
String check=checkCardNum(cardNum);
if(check.equals("卡號校驗正常"))
{
this.cardNum = cardNum;
}
else
{
System.out.println(check);
this.cardNum="00000000000000000";
}
}
public String getCardNum() {
return cardNum;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getBankName() {
return bankName;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setID(String iD) {
if(isContainNoDigit(iD.substring(0,17)))
{
this.ID="000000000000000000";
}
else
{
char ch=iD.charAt(17);//取出最後一位字符
if(((ch>='0')&&(ch<='9'))||(ch=='x')||(ch=='X'))
{
this.ID=iD;
}
else
{
this.ID="000000000000000000";
}
}

}
public String getID() {
return ID;
}
public void setPassword(String password) {
if(isContainNoDigit(password))
{
this.password="000000";
}
else
{
this.password = password;
}
}
public String getPassword() {
return password;
}
public void setMoney(float money) {
if(money>=0)
{
this.money = money;
}
else
{
this.money=0.0f;
}
}
public float getMoney() {
return money;
}

//卡號校驗的方法,方法的返回值爲字符串,需要一個字符串參數
private String checkCardNum(String cardNum)
{
String result="卡號校驗正常";
if(cardNum.length()!=17)
{
result="卡號長度不是17位";
}
else
{
if(isContainNoDigit(cardNum))
{
result="卡號存在有非數字字符";
}
}
return result;
}

//判斷字符串中是否包含有非數字字符
private boolean isContainNoDigit(String str)
{
boolean result=false;
for(int i=0;i<str.length();i++)
{
char ch=str.charAt(i);
if((ch<'0')||(ch>'9'))
{
result=true;
break;//如果有一個字符是非數字字符,則停止判斷
}
}
return result;
}

public BankCard(String cardNum,String bankName,String name,String iD,String password,float money)
{
String check=checkCardNum(cardNum);
if(check.equals("卡號校驗正常"))
{
this.cardNum = cardNum;
}
else
{
System.out.println(check);
this.cardNum="00000000000000000";
}
this.bankName=bankName;
this.name=name;
if(isContainNoDigit(iD.substring(0,17)))
{
this.ID="000000000000000000";
}
else
{
char ch=iD.charAt(17);//取出最後一位字符
if(((ch>='0')&&(ch<='9'))||(ch=='x')||(ch=='X'))
{
this.ID=iD;
}
else
{
this.ID="000000000000000000";
}
}

if(isContainNoDigit(password))
{
this.password="000000";
}
else
{
this.password = password;
}
if(money>=0)
{
this.money = money;
}
else
{
this.money=0.0f;
}
}

}




public class Test {


public static void main(String[] args)
{
//創建一個銀行卡類的對象
BankCard bankCard=new BankCard("62270041001100231","建設銀行","張三","610101199701200011","123456",1500.5f);
//創建一個ATM對象

try
{
ATM atm=new ATM("GS6100001","工商銀行","陝科大",100000,95000);
atm.setBankName("");
atm.setLocation("");
atm.getMoney(bankCard, "123456", 100);
}
catch(ATMException ex)
{
System.out.println(ex.getMessage());
}

//atm.getMoney(bankCard, "111111", 150);
//atm.getMoney(bankCard, "123456", 150);
//atm.getMoney(bankCard, "123456", 1600);
//atm.getMoney(bankCard, "123456", 1200);
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章