앞부분
General Instruction
- 학생 당 100pt
- OOP Paradigm으로 짜세요
- test scenario 없음 -> 만드세요
Overeall System Descriptions
- ATM은 computerized telecommunication device이다. financial institution의 고객이 쓰는
- Fig 1 -> (user must have bank account) -> (debit card: 체크카드(계좌에서 금액 즉시 인출)는 ATM을 통해 bank에 직접 접근할 때 사용) -> ATM은 user information을 로컬에서 가지고 있지 않음 -> 사용자 정보를 검색하고기 위해 외부 은행과 연결되어야 함 -> 다양한 type의 ATM - 각 ATM은 primary bank에서 관리 - 몇 ATM은 non-primary bank accounts의 거래도 되게 함(e.g. 대구은행 계좌 돈을 국민은행 ATM에서 꺼내기) -> ATM은 기본적으로 일정 수준의 돈을 가지고 있어야함,, 바로 user가 사용할 수 있도록 -> ATM은 은행이체(bank transfer)나 수표 예금(check(수표) deposits)과 같은 비현금 거래를 허용 -> System은 ATM/BANK/ACCOUNT로 구성 => implement them so that a user can perform bank transactions via ATMs.
User Interface Requirement
- Banking survice ->(Deposit예금(돈 맡기기))/(Withdraw인출)/(Transfer이체) -Fig 2 ->Display panel: 주요 정보/지시가 text로 뜸, 몇 ATM은 Eng/Kor로 구현 되어야 ->Keypad: 0-9까지의 번호가 돈, passcode, bank accound num같은거 적기위해 필요, OK, Cancel버튼도! ->Cash/Check Insert and Dispenser Slot: cash는 slot을 통해 들어오고 분배된다. (천,오천,만,오만원, 수표(최소 10만원, 1000001, 234567도 ㄱㄴ)로 나뉨), 한번에 돈을 최대 50개씩 넣을 수 있음. ->Card Insert Slot: customer는 debit card를 insert할 수 있음. ATM은 checking passcode같은 적절한 처리해야,, ->Receipt Print Slot: customer는 영수증 요구할 수 있는데 영수증에는 거래에 대한 summarize가 기록, slot을 통해 제공된다. =>input/out은 console을 통해서 구현
Overall System Description
ATM은 은행원의 도움 없이 금융 거래를 가능하게 한 시스템이다. ATM에서 유저들은 사용자 친화적인 유저 인터페이스를 통해 쉽게 거래를 할 수 있다.

Fig1.은 ATM 시스템을 나타낸 것이다.
- System Setup
ATM
- ATM session
- An ATM maintains a session during which a user can make multiple transactions.
- Functional Requirement | (REQ 2.1.) 카드 입력되면 session start | (REQ 2.2.) user 희망할 때 언제든 session 종료 가능 (e.g. cancel button), session 종료 조건 상황 발생 시 종료됨 (e.g. no cash available) | (REQ 2.3.) session 종료될 때, session 중 진행된 모든 거래 활동의summary 출력됨. (e.g.) Account/card info, transaction types (deposit, transfer, withdrawal), and their amount, | (REQ 2.4.) Each transaction has a unique identifier across all sessions.
- User Authorization
- An ATM shall authorize a user before initiating any transactions. This authorization occurs after a user starts a new session by inserting a valid card, and before any transaction is started.
- An ATM does not have the user information locally, so it needs to communicate with a Bank to authorize the user.
- Once a user is authorized, a user may perform multiple transactions without any further authorization until the session ends.
- Functional Requirement | (REQ 3.1.) 입력된 카드가 해당 ATM type에 유효한지 확인함 (System setup 내용 확인) | (REQ 3.2.) 유효하지 않으면 error message 출력 | (REQ 3.3.) user한테 비밀번호 물어봄 (ATM 기기는 user 정보를 가지고 있지 않으므로 Bank 클래스에 card, password 정보 넘겨서 확인받아야 함) | (REQ 3.4.) 비밀번호 틀렸으면 error message 출력 | (REQ 3.5.) 비밀번호 연속 3번 틀리면 session 종료하고 카드 돌려줌
- Deposit
- A user can deposit cash or checks to an ATM via Cash/Check Insert and Dispenser Slot.
- There is a limit in the number of cash or checks that can be deposited per transaction (e.g., 50 paper cashes, 30 paper checks)
- Functional Requirement | (REQ 4.1.) 현금 or 수표 입력받음 + 둘 중에 뭘 입력받을지 물어본 후 + if 현금 → 1000원권, 5000원권, 10000원권, 50000원권 각각 몇 장인지 정보 받아야함 + if 수표 → 얼마짜리 수표가 각각 몇 장인지 정보 받아야함 | (REQ 4.2.) 개수 제한 넘으면 error message 출력 + 개수 제한 설정해야함! | (REQ 4.3.) 현금/수표 accept됨 -> 은행 계좌에 거래 결과 반영 | (REQ 4.4.) 이체 수수료 부과될 수 있음 + if 현금 → system setup에 따라 수수료 부과 | (REQ 4.5.) if 현금 → available cash 늘어남 | (REQ 4.6.) if 수표 → available cash 변화x
- Withdrawal
- user는 specified 금액의 현금만 withdraw 가능함. 수표 x
- session 당 withdrawal 횟수 제한 3임
- transaction 당 withdrawal 금액 제한 50만원임.
- Functional Requirement | (REQ 5.1.) withdrawal amount 물어봄 | (REQ 5.2.) 계좌 잔액 부족 or ATM available cash 제한 초과 시 error message 출력 | (REQ 5.3.) 현금 인출됨 -> 은행 계좌에 거래 결과 반영 | (REQ 5.4.) 이체 수수료 부과될 수 있음 (system setup에 따라 수수료 부과) | (REQ 5.5.) available cash 줄어듦 | (REQ 5.6.) session 당 withdrawal 횟수 제한 3임. (4번 이상 하려고 하면 session 새로 시작해야함) | (REQ 5.7.) transaction 당 금액 제한 50만원
- Transfer
- (Cash transfer) A user can transfer cash to another account (cash needs to be inserted to ATM for this transfer).
- (Account transfer) A user can transfer available fund in one account to another account (no cash insertion to ATM is needed for this transfer).
- Functional Requirement | (REQ 6.1.) cash transfer / account fund transfer 중 transfer type 입력받음 | (REQ 6.2.) 이체해주려는 destination account number 입력받음 | (REQ 6.3.) if cash transfer → 수수료 포함한 현금 입력받고 이체 금액 맞는지 확인 후 | (REQ 6.4.) if account transfer → source account number와 이체 금액 입력받음 | (REQ 6.5.) 이체 수수료 부과될 수 있음 (system setup 확인) | (REQ 6.6.) if cash transfer → available cash 늘어남 | (REQ 6.7.) 이체 끝나면 잔액 변화 (있다면 source account,) destination account에 반영됨
- Display of Transaction History (Admin Menu)
- 관리자는 ATM에 모든 유저에 대한 전체 거래 history를 보여달라 요청할 수 있음(system이 시작할 때)
- Functional Requirement | (REQ 7.1.) admin card를 ATM에 넣어서 session이 시작되면 ATM은 "Transaction History" menu만 띄움 | (REQ 7.2.) "Transaction History"가 선택되면 ATM은 시스템이 시작할 때 모든 거래 내역을 보여줌
- 정보: Transaction ID, Card Number, Transaction Types, Amount, other transaction-specific information
- 각 거래는 다른 타입의 info를 가짐, 그래서 적절한 display가 필요하다 | (REQ 7.3.) "Transaction History"정보는 external file(txt 같은거)로 output 됨
- Multi-language support
- ATM은 한국어만 쓰거나 한국어/영어를 사용
- bilingual이면 ATM은 lang 선택하도록 display함(English/Korean)
- 모든 메뉴는 고른 언어로 표시
- Functional Requirement | (REQ 8.1.) bilingual은 선택 가능하게 옵션 제공해야함 | (REQ 8.2.) 언어 하나 골라지면 모든 메뉴는 고른 언어로 표시
![[Notion] :](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fc0389671-d63b-4c5d-a65d-5113fb1666a2%2Faf276f8d-c43c-4190-a784-11927a8f1c86%2F%25EB%2585%25B8%25EC%2585%2598_%25EC%2595%2584%25EC%259D%25B4%25EC%25BD%2598.png?table=block&id=244dd211-78d0-4c22-8c35-2efb01da5258&cache=v2)