PTA7~9題目集總結與歸納

天心墨語發表於2021-06-20

前言:

  總結三次題目集的知識點、題量、難度等情況。

目錄:

  1. 題目集7(7-1)、(7-2)兩道題目的遞進式設計分析總結
  2. 題目集8和題目集9兩道ATM機模擬題目的設計思路分析總結

一. 題目集7(7-1)、(7-2)兩道題目的遞進式設計分析總結

 

題目集7-1 圖形卡片排序遊戲
 

掌握類的繼承、多型性使用方法以及介面的應用。詳見作業指導書 2020-OO第07次作業-1指導書V1.0.pdf

輸入格式:

  • 首先,在一行上輸入一串數字(1~4,整數),其中,1代表圓形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各數字之間以一個或多個空格分隔,以“0”結束。例如: 1 3 4 2 1 3 4 2 1 3 0
  • 然後根據第一行數字所代表的卡片圖形型別,依次輸入各圖形的相關引數,例如:圓形卡片需要輸入圓的半徑,矩形卡片需要輸入矩形的寬和長,三角形卡片需要輸入三角形的三條邊長,梯形需要輸入梯形的上底、下底以及高。各資料之間用一個或多個空格分隔。

輸出格式:

  • 如果圖形數量非法(小於0)或圖形屬性值非法(數值小於0以及三角形三邊不能組成三角形),則輸出Wrong Format
  • 如果輸入合法,則正常輸出,所有數值計算後均保留小數點後兩位即可。輸出內容如下:
  1. 排序前的各圖形型別及面積,格式為圖形名稱1:面積值1圖形名稱2:面積值2 …圖形名稱n:面積值n ,注意,各圖形輸出之間用空格分開,且輸出最後存在一個用於分隔的空格;
  2. 排序後的各圖形型別及面積,格式同排序前的輸出;
  3. 所有圖形的面積總和,格式為Sum of area:總面積值

輸入樣例1:

在這裡給出一組輸入。例如:

1 5 3 2 0
 

輸出樣例1:

在這裡給出相應的輸出。例如:

Wrong Format
 

輸入樣例2:

在這裡給出一組輸入。例如:

4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 3.5
 

輸出樣例2:

在這裡給出相應的輸出。例如:

The original list:
Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02 
The sorted list:
Circle:98.52 Triangle:4.02 Rectangle:3.22 Trapezoid:1.14 
Sum of area:106.91
 

輸入樣例3:

在這裡給出一組輸入。例如:

4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 8.4
 

輸出樣例3:

在這裡給出相應的輸出。例如:

Wrong Format
 
 
題目集7-2 圖形卡片分組遊戲
 

掌握類的繼承、多型性使用方法以及介面的應用。 具體需求參考作業指導書。

2021-OO第07次作業-2指導書V1.0.pdf

輸入格式:

  • 在一行上輸入一串數字(1~4,整數),其中,1代表圓形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各數字之間以一個或多個空格分隔,以“0”結束。例如:1 3 4 2 1 3 4 2 1 3 0
  • 根據第一行數字所代表的卡片圖形型別,依次輸入各圖形的相關引數,例如:圓形卡片需要輸入圓的半徑,矩形卡片需要輸入矩形的寬和長,三角形卡片需要輸入三角形的三條邊長,梯形需要輸入梯形的上底、下底以及高。各資料之間用一個或多個空格分隔。

輸出格式:

  • 如果圖形數量非法(<=0)或圖形屬性值非法(數值<0以及三角形三邊不能組成三角形),則輸出Wrong Format
  • 如果輸入合法,則正常輸出,所有數值計算後均保留小數點後兩位即可。輸出內容如下:
  1. 排序前的各圖形型別及面積,格式為[圖形名稱1:面積值1圖形名稱2:面積值2 …圖形名稱n:面積值n ],注意,各圖形輸出之間用空格分開,且輸出最後存在一個用於分隔的空格,在結束符“]”之前;
  2. 輸出分組後的圖形型別及面積,格式為[圓形分組各圖形型別及面積][矩形分組各圖形型別及面積][三角形分組各圖形型別及面積][梯形分組各圖形型別及面積],各組內格式為圖形名稱:面積值。按照“Circle、Rectangle、Triangle、Trapezoid”的順序依次輸出;
  3. 各組內圖形排序後的各圖形型別及面積,格式同排序前各組圖形的輸出;
  4. 各組中面積之和的最大值輸出,格式為The max area:面積值

輸入樣例1:

在這裡給出一組輸入。例如:

1 5 3 2 0
 

輸出樣例1:

在這裡給出相應的輸出。例如:

Wrong Format
 

輸入樣例2:

在這裡給出一組輸入。例如:

4 2 1 3 0
3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 3.5
 

輸出樣例2:

在這裡給出相應的輸出。例如:

The original list:
[Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02 ]
The Separated List:
[Circle:98.52 ][Rectangle:3.22 ][Triangle:4.02 ][Trapezoid:1.14 ]
The Separated sorted List:
[Circle:98.52 ][Rectangle:3.22 ][Triangle:4.02 ][Trapezoid:1.14 ]
The max area:98.52
 

輸入樣例3:

在這裡給出一組輸入。例如:

2 1 2 1 1 3 3 4 4 1 1 1 2 1 0
2.3 3.5 2.5 4.5 2.1 2.6 8.5 3.2 3.1 3.6 8.5 7.5 9.1245 6.5 3.4 10.2 11.2 11.6 15.4 5.8 2.13 6.2011 2.5 6.4 18.65
 

輸出樣例3:

在這裡給出相應的輸出。例如:

The original list:
[Rectangle:8.05 Circle:19.63 Rectangle:9.45 Circle:21.24 Circle:226.98 Triangle:4.65 Triangle:29.80 Trapezoid:50.49 Trapezoid:175.56 Circle:105.68 Circle:14.25 Circle:120.81 Rectangle:16.00 Circle:1092.72 ]
The Separated List:
[Circle:19.63 Circle:21.24 Circle:226.98 Circle:105.68 Circle:14.25 Circle:120.81 Circle:1092.72 ][Rectangle:8.05 Rectangle:9.45 Rectangle:16.00 ][Triangle:4.65 Triangle:29.80 ][Trapezoid:50.49 Trapezoid:175.56 ]
The Separated sorted List:
[Circle:1092.72 Circle:226.98 Circle:120.81 Circle:105.68 Circle:21.24 Circle:19.63 Circle:14.25 ][Rectangle:16.00 Rectangle:9.45 Rectangle:8.05 ][Triangle:29.80 Triangle:4.65 ][Trapezoid:175.56 Trapezoid:50.49 ]
The max area:1601.31
 

輸入樣例4:

在這裡給出一組輸入。例如:

1 1 3 0
6.5 12.54 3.6 5.3 6.4
 

輸出樣例4:

在這裡給出相應的輸出。例如:

The original list:
[Circle:132.73 Circle:494.02 Triangle:9.54 ]
The Separated List:
[Circle:132.73 Circle:494.02 ][][Triangle:9.54 ][]
The Separated sorted List:
[Circle:494.02 Circle:132.73 ][][Triangle:9.54 ][]
The max area:626.75
 
 
聚合一Main類:
 

聚合二Main類:

 

 

 

 

 

比較與分析:
  剛開始看到這兩個題時,我還沒反應過來是怎麼回事,以為是兩個一樣的題目,只是輸出的方式不一樣而已。後來細看兩個類圖,原來差異在這裡。
  聚合一的聚合連線是鏈式連線,環環相扣,無法跨越呼叫。而聚合二是以dataUtil工具類作為連線體,以自身為中心,建立了Year,Month,Day三個物件,方便呼叫。
  相似的程式碼我就沒貼上去了,主體Main函式就是這樣的了,雖然看起來有點複雜,但是方便呼叫。
  計算下n天或前n天的程式碼就不多重複了,可以看看上一篇blog,那裡有。難的就是計算兩個日期相差幾天,這裡給出一下我寫的參考程式碼:
  先比較兩個日期誰前誰後,才好求倆日期相差的天數,畢竟電腦不是人腦,不能一眼就看出誰前誰後。
   

二·題目集8和題目集9兩道ATM機模擬題目的設計思路分析總結

 

題目集8(7-1 )ATM機類結構設計(一) 

設計ATM模擬系統,具體要求參見作業說明。 OO作業8-1題目說明.pdf

輸入格式:

每一行輸入一次業務操作,可以輸入多行,最終以字元#終止。具體每種業務操作輸入格式如下:

  • 存款、取款功能輸入資料格式: 卡號 密碼 ATM機編號 金額(由一個或多個空格分隔), 其中,當金額大於0時,代表取款,否則代表存款。
  • 查詢餘額功能輸入資料格式: 卡號

輸出格式:

①輸入錯誤處理

  • 如果輸入卡號不存在,則輸出Sorry,this card does not exist.
  • 如果輸入ATM機編號不存在,則輸出Sorry,the ATM's id is wrong.
  • 如果輸入銀行卡密碼錯誤,則輸出Sorry,your password is wrong.
  • 如果輸入取款金額大於賬戶餘額,則輸出Sorry,your account balance is insufficient.
  • 如果檢測為跨行存取款,則輸出Sorry,cross-bank withdrawal is not supported.

②取款業務輸出

輸出共兩行,格式分別為:

[使用者姓名]在[銀行名稱]的[ATM編號]上取款¥[金額]

當前餘額為¥[金額]

其中,[]說明括起來的部分為輸出屬性或變數,金額均保留兩位小數。

③存款業務輸出

輸出共兩行,格式分別為:

[使用者姓名]在[銀行名稱]的[ATM編號]上存款¥[金額]

當前餘額為¥[金額]

其中,[]說明括起來的部分為輸出屬性或變數,金額均保留兩位小數。

④查詢餘額業務輸出

¥[金額]

金額保留兩位小數。

輸入樣例1:

在這裡給出一組輸入。例如:

6222081502001312390 88888888 06 -500.00
#
 

輸出樣例1:

在這裡給出相應的輸出。例如:

張無忌在中國工商銀行的06號ATM機上存款¥500.00
當前餘額為¥10500.00
 

輸入樣例2:

在這裡給出一組輸入。例如:

6217000010041315709  88888888 02 3500.00
#
 

輸出樣例2:

在這裡給出相應的輸出。例如:

楊過在中國建設銀行的02號ATM機上取款¥3500.00
當前餘額為¥6500.00
 

輸入樣例3:

在這裡給出一組輸入。例如:

6217000010041315715
#
 

輸出樣例3:

在這裡給出相應的輸出。例如:

¥10000.00
 

輸入樣例4:

在這裡給出一組輸入。例如:

6222081502001312390 88888888 06 -500.00
6222081502051320786 88888888 06 1200.00
6217000010041315715 88888888 02 1500.00
6217000010041315709  88888888 02 3500.00
6217000010041315715
#
 

輸出樣例4:

在這裡給出相應的輸出。例如:

張無忌在中國工商銀行的06號ATM機上存款¥500.00
當前餘額為¥10500.00
韋小寶在中國工商銀行的06號ATM機上取款¥1200.00
當前餘額為¥8800.00
楊過在中國建設銀行的02號ATM機上取款¥1500.00
當前餘額為¥8500.00
楊過在中國建設銀行的02號ATM機上取款¥3500.00
當前餘額為¥5000.00
¥5000.00
 
 

思路與應用:

  


程式碼:
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","中國工商銀行");
        unionPay.addBank(ccb);
        unionPay.addBank(icbc);

        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);

        ccb.addATM(aTM1);
        ccb.addATM(aTM2);
        ccb.addATM(aTM3);
        ccb.addATM(aTM4);
        icbc.addATM(aTM5);
        icbc.addATM(aTM6);

        User Yangguo = new User("360101200102122324","楊過","13856223254");
        User Guojing = new User("360101200012302552","郭靖","13800021124");
        User Zhangwuji = new User("360502199805163221","張無忌","13952110011");
        User Weixiaobao = new User("360201200513243326","韋小寶","13025996587");

        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);

        ccb.addAccount(ccbAcc1);
        ccb.addAccount(ccbAcc2);
        ccb.addAccount(ccbAcc3);
        icbc.addAccount(icbcAcc1);
        icbc.addAccount(icbcAcc2);
        icbc.addAccount(icbcAcc3);
        icbc.addAccount(icbcAcc4);
        icbc.addAccount(icbcAcc5);


        Yangguo.addAccount(ccbAcc1);
        Yangguo.addAccount(ccbAcc2);
        Guojing.addAccount(ccbAcc3);
        Zhangwuji.addAccount(icbcAcc1);
        Zhangwuji.addAccount(icbcAcc2);
        Zhangwuji.addAccount(icbcAcc3);
        Weixiaobao.addAccount(icbcAcc4);
        Weixiaobao.addAccount(icbcAcc5);

        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);

        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);

        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 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) {
            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);
        }

        account.setBalance(balance - 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;
        }
        String userName = account.getUser().getName();
        String bankName = account.getBank().getBankName();
        System.out.println(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;
    }

    /**
     * 校驗ATM ID是否存在
     * @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();
    }
}

 

 

題目集9(7-1) ATM機類結構設計(二)
 

設計ATM模擬系統,具體要求參見作業說明。 OO作業9-1題目說明.pdf

輸入格式:

每一行輸入一次業務操作,可以輸入多行,最終以字元#終止。具體每種業務操作輸入格式如下:

  • 取款功能輸入資料格式: 卡號 密碼 ATM機編號 金額(由一個或多個空格分隔)
  • 查詢餘額功能輸入資料格式: 卡號

輸出格式:

①輸入錯誤處理

  • 如果輸入卡號不存在,則輸出Sorry,this card does not exist.
  • 如果輸入ATM機編號不存在,則輸出Sorry,the ATM's id is wrong.
  • 如果輸入銀行卡密碼錯誤,則輸出Sorry,your password is wrong.
  • 如果輸入取款金額大於賬戶餘額,則輸出Sorry,your account balance is insufficient.

②取款業務輸出

輸出共兩行,格式分別為:

業務:取款 [使用者姓名]在[銀行名稱]的[ATM編號]上取款¥[金額]

當前餘額為¥[金額]

其中,[]說明括起來的部分為輸出屬性或變數,金額均保留兩位小數。

③查詢餘額業務輸出

業務:查詢餘額 ¥[金額]

金額保留兩位小數。

輸入樣例1:

在這裡給出一組輸入。例如:

6222081502001312390 88888888 06 500.00
#
 

輸出樣例1:

在這裡給出相應的輸出。例如:

業務:取款 張無忌在中國工商銀行的06號ATM機上取款¥500.00
當前餘額為¥9500.00
 

輸入樣例2:

在這裡給出一組輸入。例如:

6217000010041315709  88888888 06 3500.00
#
 

輸出樣例2:

在這裡給出相應的輸出。例如:

業務:取款 楊過在中國工商銀行的06號ATM機上取款¥3500.00
當前餘額為¥6395.00
 

輸入樣例3:

在這裡給出一組輸入。例如:

6217000010041315715
#
 

輸出樣例3:

在這裡給出相應的輸出。例如:

業務:查詢餘額 ¥10000.00
 

輸入樣例4:

在這裡給出一組輸入。例如:

6222081502001312390 88888888 01 500.00
6222081502051320786 88888888 06 1200.00
6217000010041315715 88888888 02 1500.00
6217000010041315709  88888888 02 3500.00
6217000010041315715
#
 

輸出樣例4:

在這裡給出相應的輸出。例如:

業務:取款 張無忌在中國建設銀行的01號ATM機上取款¥500.00
當前餘額為¥9490.00
業務:取款 韋小寶在中國工商銀行的06號ATM機上取款¥1200.00
當前餘額為¥8800.00
業務:取款 楊過在中國建設銀行的02號ATM機上取款¥1500.00
當前餘額為¥8500.00
業務:取款 楊過在中國建設銀行的02號ATM機上取款¥3500.00
當前餘額為¥5000.00
業務:查詢餘額 ¥5000.00
 

輸入樣例5:

在這裡給出一組輸入。例如:

6640000010045442002 88888888 09 3000
6640000010045442002 88888888 06 8000
6640000010045442003 88888888 01 10000
6640000010045442002
#
 

輸出樣例5:

在這裡給出相應的輸出。例如:

業務:取款 張三丰在中國農業銀行的09號ATM機上取款¥3000.00
當前餘額為¥6880.00
業務:取款 張三丰在中國工商銀行的06號ATM機上取款¥8000.00
當前餘額為¥-1416.00
業務:取款 張三丰在中國建設銀行的01號ATM機上取款¥10000.00
當前餘額為¥-11916.00
業務:查詢餘額 ¥-11916.00
 
 
程式碼:
        System.out.println("業務:"+type+" " + userName + "在" + bankName + "的" + ATMID + "號ATM機上" + type + String.format("¥%.2f", amount));
        System.out.println("當前餘額為" + String.format("¥%.2f", account.getBalance()));

 

 


 

總結:

  這次的blog題目集總結歸納,總體來說,完成的還是可以的。在PTA上完成了習題後,過了幾天,我又忘記了很多東西,經過這次總結歸納,我又想起了一部分知識,首先就是正規表示式,還是要多練多記,加以鞏固;其次就是類圖,類圖還是有地方看不懂,接下來還是要重點去複習一下類圖的關係,繼承和多型也是要複習的。

  實驗這種東西,能夠反映出哪裡沒掌握,哪裡出錯。還是要多練習了,但是如果知識不牢固,沒學好,那實驗做起來還是好難的啊。

相關文章