2017年2月19日 星期日

ATM-01

程式設計總是讓人覺得複雜又不知道從哪裡開始,所以我寫下自己設計系統的過程讓人參考,也歡迎指教

一開始,我們必須給一個最小可運作的基準,好建立使用者的使用“故事”
ps.如果不知道什麼是故事,這裡有一個網址 user story

一個銀行帳戶管理介面,可能有修改密碼,轉帳,列印明細的功能,而最基本必須成立的有提款與存款
所以我們有了兩個基本情境
1.Bob走到atm前,他要把剛剛領到的打工薪水存進帳戶,他看見一個介面,介面上有兩個選項,一個是存款,一個是提款,他選擇了存款,並看到新的介面,這個介面要求你放入現金,並有一個確認按鈕,Bob放入他的打工收入,並按下確認,介面上跳出一個視窗告訴Bob他的存款成功了,end
2.提款擁有一個差不多的故事,差別在於是輸入提款金額

我們試用這個介面,我們發現一個問題:沒有登入機制,我們無法分辨究竟是誰的帳號被操作,一切變得混亂,atm怎麼知道怎麼把錢放進Bob的帳戶呢?而Bob也將從不知名的地方取出存款,這不合理

所以,我們發現了故事的漏洞,於是我們修改它,我們加入了登入的情節
看起來,流程好像沒有什麼大問題,所以我們暫定了這個介面的版本

現在,我們得實現帳戶操作的程式,以證明我們的程式確實擁有我們所想的能力
我們決定第一步先實現存款的功能,而實現的前置條件是存款需要使用者告知金額(無論那是如何告知),以及將存款持久化的程式部件
Scanner sc = new Scanner(System.in);
System.out.println("請輸入金額:");
int value = sc.nextInt();
// 只有詢問一次

因為我們還沒有提款機,我們無法做到故事中的“放入鈔票”,所以我們讓使用者敲敲鍵盤來實現,而持久化,我們選擇暫時不處理,因為我們還不需要任何記錄,但是我們必須讓存款行為成功,所以我們先將存款資料放進了一個List中,以紀錄的每一筆金額對應一次交易
private static List<Integer> save;
    save = new ArrayList<>();         // 在main()中初始化
    save.add(value);                  // 紀錄這筆交易
最後為了確認有成功紀錄,把save列表全部印出
for (int s : save) {
    System.out.println(" "+s);
}
全部的程式
import java.util.*;

public class Main {
    private static List<Integer> save;
    public static void main(String[] args) {
        save = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入金額:");
        int value = sc.nextInt();
        save.add(value);
        for (int s : save) {
            System.out.println(" "+s);
        }
    }
}
我們很快的實現了最簡單的程式,我們在下一篇中將重構這份程式碼

NEXT: ATM 02

沒有留言:

張貼留言