实例 异常类

来源:互联网 发布:美编软件 编辑:程序博客网 时间:2024/05/18 13:23
//定义的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);
}
}

原创粉丝点击