OOP第三次总结分析作业

一、前言

     本次为对题目集7-9的分析总结,题量越来越少,反之,题目难度有明显的提升。

题目集7的知识点:

  1. 继承、多态的应用;
  2. ArrayList泛型的应用方法
  3. Comparable接口及泛型的应用
  4. 单一职责原则的应用
  5. “开-闭”原则的应用

  题目集8的知识点:

  1. 对象的封闭性,可拓展性
  2. 各实体类之间的关系,一对多的组合关系
  3. 单一职责原则的应用

题目集9的知识点:

  1. 继承、多态及抽象类的应用

二、设计与分析

 1.题目集7两题的递进式设计分析总结:

  ①shape类实现Comparable<>接口,由circle类、rectangle类、triangle类和trapezoid类继承shape类,三个类中都有获得各个图形面积的方法;

设计DealCardList类获取主类中的输入,再对数据进行分类,排序、判断以及输出。

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
    //在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args){
        
        ArrayList<Integer> list = new ArrayList<Integer>();
        int num = input.nextInt();
        while(num != 0){
            if(num < 0 || num > 4){ 
                System.out.println("Wrong Format");
                System.exit(0);
            }
            list.add(num);
            num = input.nextInt();
        }
        DealCardList dealCardList = new DealCardList(list);
        if(!dealCardList.validate()){
            System.out.println("Wrong Format");
            System.exit(0);
        }
        dealCardList.showResult();
        input.close();
    }
}

class DealCardList{
    ArrayList<Shape> cardList=new ArrayList<>();

    public DealCardList() {
    }

    public DealCardList(ArrayList<Integer> list) {
     //Scanner input = new Scanner(System.in);
        for (Integer i : list) {
            if (i==0)break;
            switch (i){
                case 1:
                    Circle circle=new Circle(Main.input.nextDouble());
                    circle.setShapeName("Circle",circle);
                    cardList.add(circle);
                   break;
                case 2:
                    Rectangle rectangle=new Rectangle(Main.input.nextDouble(),Main.input.nextDouble());
                    rectangle.setShapeName("Rectangle",rectangle);
                    cardList.add(rectangle);
                    break;
                case 3:
                    Triangle triangle=new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble());
                    triangle.setShapeName("Triangle",triangle);
                    cardList.add(triangle);
                    break;
                case 4:
                    Trapezoid trapezoid=new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble());
                    trapezoid.setShapeName("Trapezoid",trapezoid);
                    cardList.add(trapezoid);
                    break;
            }

        }
    }
    public boolean validate(){
        for (Shape card : cardList) {
            if (!card.validate())
                return false;         
                break;
        }
        return true;
    }   
    public void cardSort(){

        Collections.sort(cardList);
        for (Shape card : cardList) {
         System.out.print(card.getShape());
     }
    }
    public double getAllArea(){
        double sum=0;
        for (Shape card : cardList) {
            sum+=card.getArea();
        }
        return sum;
    }
    public void showResult(){
        System.out.println("The original list:");
        for (Shape card : cardList) {
            System.out.print(card.getShape());
        }
        System.out.println();
        System.out.println("The sorted list:");
        cardSort();
        System.out.println();
        System.out.printf("Sum of area:%.2f\n",getAllArea());
    }
}


abstract class Shape implements Comparable<Shape>{
    private String shapeName;
    Shape shape;
    public Shape() {
    }

    public Shape(String shapeName) {
        this.shapeName = shapeName;
    }

    public String getShapeName() {
        return shapeName;
    }

    public void setShapeName(String shapeName,Shape shape) {
        this.shapeName = shapeName;
        this.shape = shape;
    }
    public Shape getShape(){
        this.shape=shape;
        return shape;
    }
    public abstract double getArea();
    public abstract boolean validate();

    /**
     * 重写了toString的方法
     * 利用Shape类的shapeName变量来表示相应的图形,
     * 而不是用getclass方法得到类名
     * @return
     */
    public int compareTo(Shape shape) {
        return (int)(shape.getArea()-this.shape.getArea());
    }
    @Override
    public String toString() {
        return getShapeName()+":"+String.format("%.2f ",getArea());
    }
    
}


class Circle extends Shape{
    private double radius;

    public Circle() {
    }

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI*radius*radius;
    }

    @Override
    public boolean validate() {
        return this.radius>0;
    }
}

class Rectangle extends Shape{
    private double width,height;

    public Rectangle() {
    }

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    @Override
    public double getArea() {
        return height*width;
    }

    @Override
    public boolean validate() {
        return width>0&&height>0;
    }
}

class Triangle extends Shape{
    private double side1,side2,side3;

    public Triangle() {}

    public Triangle(double side1, double side2, double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    @Override
    public double getArea() {
        double s=0,area=0;
        s=(side1 +side2 +side3)/2;
        area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
        return area;
    }

    @Override
    public boolean validate() {
        if (side1+side2>side3&&side1+side3>side2&&side2+side3>side1) 
            return true;
         else 
            return false;    
    }
}

class Trapezoid extends Shape{
    private double topSide,bottomSide,height;

    public Trapezoid() {}

    public Trapezoid(double topSide, double bottomSide, double height) {
        this.topSide = topSide;
        this.bottomSide = bottomSide;
        this.height = height;
    }

    @Override
    public double getArea() {
        return (topSide+bottomSide)*height/2;
    }

    @Override
    public boolean validate() {
        return topSide>0&&height>0&&bottomSide>0;
    }
}

 

 

②7-2在7-1的基础上进行稍加改动,只需添加各自的arraylist链表存入图形数据,输出添加一些数据即可

 

 

 2.题目集8和9ATM仿真题目的设计分析总结:

  ①创建银行类、账户类、ATM类、银行卡类分别管理输入的信息,储存于链表内,类与类之间实现调用关系实现相关输出,采用迭代器判断数据是否合理。

相关类图如下:

 

②在题目集8的基础上添加贷款的功能,只需添加判断即可

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        UnionPay unionPay = new UnionPay();       
        
        Bank ccb = new Bank("1001","中国建设银行");
        Bank icbc = new Bank("1002","中国工商银行");
        Bank abc=new Bank("1003","中国农业银行");
        unionPay.addBank(ccb);
        unionPay.addBank(icbc);
        unionPay.addBank(abc);
        ATM aTM1 = new ATM("01",ccb);
        ATM aTM2 = new ATM("02",ccb);
        ATM aTM3 = new ATM("03",ccb);
        ATM aTM4 = new ATM("04",ccb);
        ATM aTM5 = new ATM("05",icbc);
        ATM aTM6 = new ATM("06",icbc);
        ATM aTM7 = new ATM("07",abc);
        ATM aTM8 = new ATM("08",abc);
        ATM aTM9 = new ATM("09",abc);
        ATM aTM10 = new ATM("10",abc);
        ATM aTM11 = new ATM("11",abc);
        ccb.addATM(aTM1);
        ccb.addATM(aTM2);
        ccb.addATM(aTM3);
        ccb.addATM(aTM4);
        icbc.addATM(aTM5);
        icbc.addATM(aTM6);
        abc.addATM(aTM7);
        abc.addATM(aTM8);
        abc.addATM(aTM9);
        abc.addATM(aTM10);
        abc.addATM(aTM11);
        
        User Yangguo = new User("360101200102122324","杨过","13856223254");
        User Guojing = new User("360101200012302552","郭靖","13800021124");
        User Zhangwuji = new User("360502199805163221","张无忌","13952110011");
        User Weixiaobao = new User("360201200513243326","韦小宝","13025996587");
        User zhangsanfeng = new User("360722199810107788","张三丰","18178974177");
        User linghuchong = new User("360223197711111211","令狐冲","15727763677");
        User qiaofeng = new User("360788200908099988","乔峰","13670987877");
        User hongqigong = new User("360229299209091188","洪七公","13226276655");
        
        Account ccbAcc1 = new Account("3217000010041315709",10000.00,Yangguo,ccb);
        Account ccbAcc2 = new Account("3217000010041315715",10000.00,Yangguo,ccb);
        Account ccbAcc3 = new Account("3217000010051320007",10000.00,Guojing,ccb);
        Account icbcAcc1 = new Account("3222081502001312389",10000.00,Zhangwuji,icbc);
        Account icbcAcc2 = new Account("3222081502001312390",10000.00,Zhangwuji,icbc);
        Account icbcAcc3 = new Account("3222081502001312399",10000.00,Zhangwuji,icbc);
        Account icbcAcc4 = new Account("3222081502051320785",10000.00,Weixiaobao,icbc);
        Account icbcAcc5 = new Account("3222081502051320786",10000.00,Weixiaobao,icbc);
        Account ccbAcc4 = new Account("3640000010045442002",10000.00,zhangsanfeng,ccb);
        Account icbcAcc6 = new Account("3640000010045441009",10000.00,linghuchong,icbc);
        Account abcAcc1 = new Account("3630000010033431001",10000.00,qiaofeng,abc);
        Account abcAcc2 = new Account("3630000010033431008",10000.00,hongqigong,abc);
        ccb.addAccount(ccbAcc1);
        ccb.addAccount(ccbAcc2);
        ccb.addAccount(ccbAcc3);
        icbc.addAccount(icbcAcc1);
        icbc.addAccount(icbcAcc2);
        icbc.addAccount(icbcAcc3);
        icbc.addAccount(icbcAcc4);
        icbc.addAccount(icbcAcc5);
        ccb.addAccount(ccbAcc4);
        icbc.addAccount(icbcAcc6);
        abc.addAccount(abcAcc1);
        abc.addAccount(abcAcc2);
        
        Yangguo.addAccount(ccbAcc1);
        Yangguo.addAccount(ccbAcc2);
        Guojing.addAccount(ccbAcc3);
        Zhangwuji.addAccount(icbcAcc1);
        Zhangwuji.addAccount(icbcAcc2);
        Zhangwuji.addAccount(icbcAcc3);
        Weixiaobao.addAccount(icbcAcc4);
        Weixiaobao.addAccount(icbcAcc5);
        zhangsanfeng.addAccount(ccbAcc4);
        linghuchong.addAccount(icbcAcc6);
        qiaofeng.addAccount(abcAcc1);
        hongqigong.addAccount(abcAcc2);
        
        Card ccbCard1 = new Card("6217000010041315709","88888888",ccbAcc1);
        Card ccbCard2 = new Card("6217000010041315715","88888888",ccbAcc1);
        Card ccbCard3 = new Card("6217000010041315718","88888888",ccbAcc2);
        Card ccbCard4 = new Card("6217000010051320007","88888888",ccbAcc3);
        Card icbcCard5 = new Card("6222081502001312389","88888888",icbcAcc1);
        Card icbcCard6 = new Card("6222081502001312390","88888888",icbcAcc2);
        Card icbcCard7 = new Card("6222081502001312399","88888888",icbcAcc3);
        Card icbcCard8 = new Card("6222081502001312400","88888888",icbcAcc3);
        Card icbcCard9 = new Card("6222081502051320785","88888888",icbcAcc4);
        Card icbcCard10 = new Card("6222081502051320786","88888888",icbcAcc5);
        Card ccbCard11 = new Card("6640000010045442002","88888888",ccbAcc4);
        Card ccbCard12 = new Card("6640000010045442003","88888888",ccbAcc4);
        Card icbcCard13 = new Card("6640000010045441009","88888888",icbcAcc6);
        Card abcCard14 = new Card("6630000010033431001","88888888",abcAcc1);
        Card abcCard15 = new Card("6630000010033431008","888888888",abcAcc2);
        
        ccbAcc1.addCard(ccbCard1);
        ccbAcc1.addCard(ccbCard2);
        ccbAcc2.addCard(ccbCard3);
        ccbAcc3.addCard(ccbCard4);
        icbcAcc1.addCard(icbcCard5);
        icbcAcc2.addCard(icbcCard6);
        icbcAcc3.addCard(icbcCard7);
        icbcAcc3.addCard(icbcCard8);
        icbcAcc4.addCard(icbcCard9);
        icbcAcc5.addCard(icbcCard10);
        ccbAcc4.addCard(ccbCard11);
        ccbAcc4.addCard(ccbCard12);
        icbcAcc6.addCard(icbcCard13);
        abcAcc1.addCard(abcCard14);
        abcAcc2.addCard(abcCard15);
        
        StringBuilder sb = new StringBuilder();
        
        String data;
        
        while(!((data = input.nextLine()).equals("#"))) {
            sb.append(data + "\n");
        }        
        
        String[] dt = sb.toString().split("\n");
        for(int i = 0; i < dt.length; i++) {
            String[] dataLine = dt[i].toString().split("\\s+");
            
            if(dataLine.length == 1) {
                GetBalance gb = new GetBalance(unionPay);
                System.out.println("业务:查询余额 "+"¥"+String.format("%.2f", gb.getBalance(dataLine[0])));
            }else {
                Withdraw wd = new Withdraw(unionPay,dataLine[0],dataLine[1],dataLine[2],Double.parseDouble(dataLine[3]));
                wd.withdraw();
            }
        }       
    }
}

class Bank {
    private String bankNO;
    private String bankName;
    private ArrayList<Account> accountList = new ArrayList<Account>();
    private ArrayList<ATM> ATMList = new ArrayList<ATM>();

    public Bank() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Bank(String bankNO, String bankName) {
        super();
        this.bankNO = bankNO;
        this.bankName = bankName;
    }

    public String getBankNO() {
        return bankNO;
    }

    public void setBankNO(String bankNO) {
        this.bankNO = bankNO;
    }

    public String getBankName() {
        return bankName;
    }

    public void setBankName(String bankName) {
        this.bankName = bankName;
    }

    public void addAccount(Account account) {
        this.accountList.add(account);
    }

    public void removeAccount(Account account) {
        this.accountList.remove(account);
    }
    
    public void addATM(ATM aTM) {
        this.ATMList.add(aTM);
    }
    
    public void removeATM(ATM aTM) {
        this.ATMList.remove(aTM);
    }

    public ArrayList<Account> getAccountList() {
        return accountList;
    }

    public void setAccountList(ArrayList<Account> accountList) {
        this.accountList = accountList;
    }

    public ArrayList<ATM> getATMList() {
        return ATMList;
    }

    public void setATMList(ArrayList<ATM> aTMList) {
        ATMList = aTMList;
    }
}

class User {
    private String ID;
    private String name;
    private String Phone;
    ArrayList<Account> list = new ArrayList<Account>();

    public User() {
        super();
        // TODO Auto-generated constructor stub
    }    

    public User(String iD, String name, String phone) {
        super();
        ID = iD;
        this.name = name;
        Phone = phone;
    }

    public String getID() {
        return ID;
    }

    public void setID(String iD) {
        ID = iD;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }    

    public String getName() {
        return name;
    }

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

    public void addAccount(Account account) {
        this.list.add(account);
    }

    public void removeAccount(Account account) {
        this.list.remove(account);
    }
}

class Account {
    private String accountNO;
    private double balance = 0;
    private User user = null;
    private Bank bank = null;
    private static ArrayList<Card> list = new ArrayList<Card>();

    public Account() {
        super();
        // TODO Auto-generated constructor stub
    }   

    public Account(String accountNO, double balance, User user, Bank bank) {
        super();
        this.accountNO = accountNO;
        this.balance = balance;
        this.user = user;
        this.bank = bank;
    }

    public void addCard(Card card) {
        list.add(card);
    }

    public void removeCard(Card card) {
        list.remove(card);
    }

    public double getBalance() {
        return balance;
    }

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

    public String getAccountNO() {
        return accountNO;
    }

    public void setAccountNO(String accountNO) {
        this.accountNO = accountNO;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public ArrayList<Card> getList() {
        return list;
    }

    public void setList(ArrayList<Card> list) {
        Account.list = list;
    }
    
    public static Account getAmountbyCardNO(String cardNO) {
        Iterator<Card> cardItr = Account.list.iterator();
        Card card = null;
        
        while(cardItr.hasNext()) {
            card = cardItr.next();
            if(card.getCardNO().equals(cardNO)) {
                return card.getAccount();
            }
        }
        
        return null;
    }
}

class Card {
    private String cardNO;
    private String cardPassword;
    private Account account = null;

    public Card() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Card(String cardNO, String cardPassword, Account account) {
        super();
        this.cardNO = cardNO;
        this.cardPassword = cardPassword;
        this.account = account;
    }

    public String getCardNO() {
        return cardNO;
    }

    public void setCardNO(String cardNO) {
        this.cardNO = cardNO;
    }

    public String getCardPassword() {
        return cardPassword;
    }

    public Account getAccount() {
        return account;
    }

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

    public void setCardPassword(String cardPassword) {
        this.cardPassword = cardPassword;
    }

    public boolean checkCard() {
        Pattern p = Pattern.compile("\\d{16}+");
        Matcher m = p.matcher(this.cardNO);
        return m.matches();
    }

    public boolean checkPassword(String password) {
        return this.cardPassword.equals(password);
    }    
}

class ATM {
    private String ATMID;
    private Bank bank = null;

    public ATM() {
        super();
        // TODO Auto-generated constructor stub
    }   

    public ATM(String aTMID, Bank bank) {
        super();
        ATMID = aTMID;
        this.bank = bank;
    }

    public String getATMID() {
        return ATMID;
    }

    public void setATMID(String aTMID) {
        ATMID = aTMID;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }
}

class Withdraw {
    private UnionPay unionPay;
    private String cardNO;
    private String cardPassword;
    private String ATMID;
    private double amount;
    
    public Withdraw() {
        super();
        // TODO Auto-generated constructor stub
    }
    

    public Withdraw(UnionPay unionPay, String cardNO, String cardPassword, String aTMID, double amount) {
        super();
        this.unionPay = unionPay;
        this.cardNO = cardNO;
        this.cardPassword = cardPassword;
        ATMID = aTMID;
        this.amount = amount;
    }
    
    public Withdraw(String cardNO, String cardPassword, String aTMID, double amount) {
        super();
        this.cardNO = cardNO;
        this.cardPassword = cardPassword;
        ATMID = aTMID;
        this.amount = amount;
    }


    public void withdraw() {
        /***/        
        Card card = ValidateData.getCardbyCardNO(unionPay, cardNO);
        if(card == null) {
            System.out.println("Sorry,this card does not exist.");
            System.exit(0);
        }
        
        
        ATM aTM = ValidateData.getATMbyATMID(unionPay, ATMID);
        if(aTM == null) {
            System.out.println("Sorry,the ATM's id is wrong.");
            System.exit(0);
        }
        
        Account account = Account.getAmountbyCardNO(cardNO);
        double balance = account.getBalance();
        
        /**
         * 
         */
        if(!card.getCardPassword().equals(cardPassword)) {
            System.out.println("Sorry,your password is wrong.");
            System.exit(0);
        }
        
        /**
         * 
         */
        
        if (amount > balance) {
            if(!cardNO.equals("6640000010045442002")&&!cardNO.equals("6640000010045442003")&&
            !cardNO.equals("6640000010045441009")&&!cardNO.equals("6630000010033431001")&&!cardNO.equals("6630000010033431008")) {
            System.out.println("Sorry,your account balance is insufficient.");
           System.exit(0);
              }
        }
        
        /**
         * 
         */
        
//        if (account.getBank().getBankNO() != aTM.getBank().getBankNO()) {
//            System.out.println("Sorry,cross-bank withdrawal is not supported.");
//            System.exit(0);
//        }    
        
      if(account.getBank().getBankNO() != aTM.getBank().getBankNO()) {
         
              if(amount-balance>50000) {
                  System.out.println("Sorry,your account balance is insufficient.");
                  System.exit(0);
              }
            else {
             if(amount-balance<0) {
              if(aTM.getBank().getBankNO()=="1001") 
                  account.setBalance(balance - amount*1.02);
              else if(aTM.getBank().getBankNO()=="1002")
                  account.setBalance(balance - amount*1.03);
              else
                  account.setBalance(balance - amount*1.04);
             }
             else {
               if(aTM.getBank().getBankNO()=="1001") {
                if(!cardNO.equals("6640000010045442002")&&!cardNO.equals("6640000010045442003")&&
                !cardNO.equals("6640000010045441009")&&!cardNO.equals("6630000010033431001")&&!cardNO.equals("6630000010033431008")) {
                if(balance - amount*1.02-(amount-balance)*0.05<0) {     
                    System.out.println("Sorry,your account balance is insufficient.");
                    System.exit(0);
                }
                else
                     account.setBalance(balance - amount*1.02-(amount-balance)*0.05);     
                  }
                  else
                      account.setBalance(balance - amount*1.02-(amount-balance)*0.05);
              }
                 else if(aTM.getBank().getBankNO()=="1002") {
                   if(!cardNO.equals("6640000010045442002")&&!cardNO.equals("6640000010045442003")&&
                           !cardNO.equals("6640000010045441009")&&!cardNO.equals("6630000010033431001")&&!cardNO.equals("6630000010033431008")) {
                           if(balance - amount*1.03-(amount-balance)*0.05<0) {     
                               System.out.println("Sorry,your account balance is insufficient.");
                               System.exit(0);    
                           }
                           else
                                account.setBalance(balance - amount*1.03-(amount-balance)*0.05);     
                             }
                       else
                           account.setBalance(balance - amount*1.03-(amount-balance)*0.05);     
                 }
                             else {
                               if(!cardNO.equals("6640000010045442002")&&!cardNO.equals("6640000010045442003")&&
                                    !cardNO.equals("6640000010045441009")&&!cardNO.equals("6630000010033431001")&&!cardNO.equals("6630000010033431008")) {
                                    if(balance - amount*1.04-(amount-balance)*0.05<0)    { 
                                        System.out.println("Sorry,your account balance is insufficient.");
                                    System.exit(0);    
                                    }
                                    else
                                         account.setBalance(balance - amount*1.04-(amount-balance)*0.05);     
                                      }
                                      else
                                          account.setBalance(balance - amount*1.04-(amount-balance)*0.05);
                             }
             }
          }
      }
      else {
          if(amount-balance<0)
              
           account.setBalance(balance - amount);//
          else
            account.setBalance(balance - (amount-balance)*0.05-amount);
      }
        if(amount >= 0) {
            showResult(account,1);
        }else {
            showResult(account,0);
        }
        
    }
    
    public void showResult(Account account,int flag) {
        String type = "";
        if(flag == 1) {
            type = "取款";            
        }else {
            type = "存款";
            amount *= -1;
        }
        ATM aTM = ValidateData.getATMbyATMID(unionPay, ATMID);
        String userName = account.getUser().getName();
        //String bankName = account.getBank().getBankName();
        String bankName = aTM.getBank().getBankName();
        System.out.println("业务:"+type+" "+userName + "在" +
                bankName + "的" + ATMID + "号ATM机上" + type +"¥"+ String.format("%.2f", amount));
                System.out.println("当前余额为" +"¥"+ String.format("%.2f", account.getBalance()));
    }
}

class ValidateData {
    /**
     * 
     * @param unionPay
     * @param cardNO
     * @return
     */
    public static Card getCardbyCardNO(UnionPay unionPay,String cardNO) {
        Card card = null;
        Iterator<Bank> bankItr = unionPay.getBankList().iterator();
        
        while(bankItr.hasNext()) {
            ArrayList<Account> accountList = bankItr.next().getAccountList();
            Iterator<Account> accountItr = accountList.iterator();
            while(accountItr.hasNext()) {
                ArrayList<Card> cardList = accountItr.next().getList();
                Iterator<Card> cardItr = cardList.iterator();
                while(cardItr.hasNext()) {
                    card = cardItr.next();
                    if(card.getCardNO().equals(cardNO)) {
                        return card;
                    }
                }
            }
        }
        return null;
    }
    
    /**
     *
     * @param unionPay
     * @param ATMID
     * @return
     */
    public static ATM getATMbyATMID(UnionPay unionPay,String ATMID) {
        Iterator<Bank> bankItr = unionPay.getBankList().iterator();
        Bank bank = null;
        ATM aTM = null;
        
        while(bankItr.hasNext()) {
            bank = bankItr.next();
            Iterator<ATM> aTMItr = bank.getATMList().iterator();    
            
            while(aTMItr.hasNext()) {
                aTM = aTMItr.next();
                if(aTM.getATMID().equals(ATMID)) {
                    return aTM;
                }
            }            
        }        
        return null;    
    }
}

class UnionPay {
    private ArrayList<Bank> bankList = new ArrayList<Bank>();

    public UnionPay() {
        super();
        // TODO Auto-generated constructor stub
    }

    public UnionPay(ArrayList<Bank> bankList) {
        super();
        this.bankList = bankList;
    }

    public ArrayList<Bank> getBankList() {
        return bankList;
    }

    public void setBankList(ArrayList<Bank> bankList) {
        this.bankList = bankList;
    }
    
    public void addBank(Bank bank) {
        this.bankList.add(bank);
    }
    
    public void removeBank(Bank bank) {
        this.bankList.remove(bank);
    }    
}

class GetBalance {
    private UnionPay unionPay;
    
    public GetBalance() {
        super();
        // TODO Auto-generated constructor stub
    }

    public GetBalance(UnionPay unionPay) {
        super();
        this.unionPay = unionPay;
    }

    public double getBalance(String cardNO) {
        return ValidateData.getCardbyCardNO(unionPay, cardNO).getAccount().getBalance();
    }
}

 

 

三、踩坑心得

  1.题目集7-1中较难解决的问题是重写compareTo方法以及要熟练运用Arraylist链表的处理方法,7-2只需在7-1的基础上完善一些代码即可,没有复杂之处。

  2.题目集8和9重点在于合理规划所得数据,存入恰当的类中,各类所需要的方法大体一致,困难之处在于实现功能的方法,我借鉴采用老师提供的思路加以完善,但对于某些测试点的正误仍然无从判别。

 

四、改进建议

1.Arraylist对于分组数据的处理作用极大,还可以将不同组数据进行绑定,熟练掌握相关功能能极大优化代码量;

2.对于数据的比较可以实现接口comparable,重写toString方法有助于输出的简化;

3.collection排序可以对对象排序;

五、总结

   1.多看书勤思考,遇事不决上百度,迫不得已问同学,自己思考出来的才能成为自己的,学习是先模仿再理解的过程,在这之上可以实现创新,写代码是很好的锻炼思维的机会。

  2.多学多练才能有提高,先动脑再动手,好的思路是成功的关键,方向错了怎么走都是错的。

posted @ 2021-06-16 13:05  菜旦  阅读(49)  评论(0)    收藏  举报