贰西格玛 ATM

这里主要想分享ATM这道题, 其余和面经都一样

题目是: 给定五个interface(除了display以外, 其余皆为***空的***)

- Display
    - string readInput(string displayText)
    - void showError(string errMsg)
    - void showMessage(string msg)
- AccountStore
- CardHandler
- CashDispenser
- CashInTake

请设计每个interface需要的methods来implement一个ATM以下的功能:

  1. createAccount
  2. login
  3. withdraw
  4. deposit
  5. checkBalance
  6. logout
    …etc

Example

1. createAccount
void createAccount() {
    string name = _display.readInput("Enter your name");
    string address = _display.readInput("Enter your address");

    // 除了display以外的interface皆为空的, 所以这里containsUser就是你要设计的
    if (_accountStore.containsUser(name, address)) {
        _display.showError("User already exists");
        return;
    }

    string pincode = _display.readInput("Enter pincode");

    // 这里, 我们设计卡片都带有userId, 之后只需要read卡片的userId再让user输入pincode, 即可login
    string userId = _accountStore.createUser(name, address, pincode);

    // ATM会做出一张实体的卡片并带有userId发给user
    _cardHandler.createCard(userId);
}

2. withdraw
void withdraw() {
    // 从卡片中读取userId
    string userId = _cardHandler.readCard();
    string pincode = _display.readInput("Enter pincode");
    if (!_accountStore.verify(userId, pincode)) {
        _display.showError("Invalid card or pincode");
        return;
    }

    string amountStr = _display.readInput("Enter withdraw amount");
    int amount = int.parse(amountStr);

    // 扣除这个user的balance, 如果余额不足, 则不继续
    if (!_accountStore.withdraw(userId, amount)) {
         _display.showError("Not enough balance");
         return;
    }


    // 发钞
    _cardDispenser.dispense(amount);-baidu 1point3acres
}

这里就随意写写, 有错误就别经结了
这里只考虑一台ATM, 你也能和面试官讨论如果有多个ATM的时候, 这些method要怎么设计比较好
下午面了四个managers还是跪了, 不知道标准为何

补充内容 (2018-11-6 18:27):
比较像是设计另外4个interface的API

比较像是设计另外4个interface的API

所以请问一下每个类都有哪些方法?比如createAccount和withdraw是在哪个类里面的?谢谢