commit 72514365ebf1e4fcfd9d932981046e05bcb1bd88 Author: Ali Can Zeybek Date: Thu Jan 9 20:02:51 2025 +0300 first commit diff --git a/Code/ATM.java b/Code/ATM.java new file mode 100644 index 0000000..60b5e5e --- /dev/null +++ b/Code/ATM.java @@ -0,0 +1,66 @@ +import java.sql.Time; + +public class ATM { + + private int minimumAmount; + private int maximumAmount; + private int limitTimeForOperation; + + /** + * + * @param password + */ + public String verify(String password) { + // TODO - implement ATM.verify + throw new UnsupportedOperationException(); + } + + /** + * + * @param accountNum + */ + public void readAccountNum(int accountNum) { + // TODO - implement ATM.readAccountNum + throw new UnsupportedOperationException(); + } + + public Message checkAvailabilityOfCashInATM() { + // TODO - implement ATM.checkAvailabilityOfCashInATM + throw new UnsupportedOperationException(); + } + + public Message verifyInputAmount() { + // TODO - implement ATM.verifyInputAmount + throw new UnsupportedOperationException(); + } + + public Time checkTime() { + // TODO - implement ATM.checkTime + throw new UnsupportedOperationException(); + } + + public int getMinimumAmount() { + return minimumAmount; + } + + public int getMaximumAmount() { + return maximumAmount; + } + + public int getLimitTimeForOperation() { + return limitTimeForOperation; + } + + public void setMinimumAmount(int minimumAmount) { + this.minimumAmount = minimumAmount; + } + + public void setMaximumAmount(int maximumAmount) { + this.maximumAmount = maximumAmount; + } + + public void setLimitTimeForOperation(int limitTimeForOperation) { + this.limitTimeForOperation = limitTimeForOperation; + } + +} diff --git a/Code/Account.java b/Code/Account.java new file mode 100644 index 0000000..fb6722d --- /dev/null +++ b/Code/Account.java @@ -0,0 +1,32 @@ +public class Account { + + private int account_number; + private String password; + private double balance; + private int accountType; + public int getAccount_number() { + return account_number; + } + public String getPassword() { + return password; + } + public double getBalance() { + return balance; + } + public int getAccountType() { + return accountType; + } + public void setAccount_number(int account_number) { + this.account_number = account_number; + } + public void setPassword(String password) { + this.password = password; + } + public void setBalance(double balance) { + this.balance = balance; + } + public void setAccountType(int accountType) { + this.accountType = accountType; + } + +} diff --git a/Code/AccountType.java b/Code/AccountType.java new file mode 100644 index 0000000..e7e9e8b --- /dev/null +++ b/Code/AccountType.java @@ -0,0 +1,18 @@ +public class AccountType { + + private int typeID; + private String typeName; + public void setTypeID(int typeID) { + this.typeID = typeID; + } + public void setTypeName(String typeName) { + this.typeName = typeName; + } + public int getTypeID() { + return typeID; + } + public String getTypeName() { + return typeName; + } + +} diff --git a/Code/AdministrativeStaff.java b/Code/AdministrativeStaff.java new file mode 100644 index 0000000..e715a7b --- /dev/null +++ b/Code/AdministrativeStaff.java @@ -0,0 +1,2 @@ +public class AdministrativeStaff extends Employee { +} \ No newline at end of file diff --git a/Code/Balances.java b/Code/Balances.java new file mode 100644 index 0000000..88153c5 --- /dev/null +++ b/Code/Balances.java @@ -0,0 +1 @@ +public class Balances extends Class {} diff --git a/Code/Bank.java b/Code/Bank.java new file mode 100644 index 0000000..6cb7e72 --- /dev/null +++ b/Code/Bank.java @@ -0,0 +1,2 @@ +public class Bank { +} \ No newline at end of file diff --git a/Code/Branch.java b/Code/Branch.java new file mode 100644 index 0000000..b7e01c0 --- /dev/null +++ b/Code/Branch.java @@ -0,0 +1,2 @@ +public class Branch { +} \ No newline at end of file diff --git a/Code/Card.java b/Code/Card.java new file mode 100644 index 0000000..72e3252 --- /dev/null +++ b/Code/Card.java @@ -0,0 +1,17 @@ +public class Card { + + private int number; + + /** + * + * @param number + */ + public Card(int number) { + this.number = number; + } + + public int getNumber() { + return this.number; + } + +} diff --git a/Code/CardReader.java b/Code/CardReader.java new file mode 100644 index 0000000..f02dd5e --- /dev/null +++ b/Code/CardReader.java @@ -0,0 +1,37 @@ +public class CardReader { + + private ATM atm; + + /** + * + * @param atm + */ + public CardReader(ATM atm) { + this.atm = atm; + throw new UnsupportedOperationException(); + } + + public Card readCard() { + // TODO - implement CardReader.readCard + throw new UnsupportedOperationException(); + } + + public void ejectCard() { + // TODO - implement CardReader.ejectCard + throw new UnsupportedOperationException(); + } + + public void retainCard() { + // TODO - implement CardReader.retainCard + throw new UnsupportedOperationException(); + } + + public ATM getAtm() { + return atm; + } + + public void setAtm(ATM atm) { + this.atm = atm; + } + +} diff --git a/Code/CashDispenser.java b/Code/CashDispenser.java new file mode 100644 index 0000000..e858371 --- /dev/null +++ b/Code/CashDispenser.java @@ -0,0 +1,47 @@ +public class CashDispenser { + + private Log log; + private Money cashOnHand; + + /** + * + * @param log + */ + public CashDispenser(Log log) { + // TODO - implement CashDispenser.CashDispenser + throw new UnsupportedOperationException(); + } + + /** + * + * @param initialCash + */ + public void setInitialCash(Money initialCash) { + // TODO - implement CashDispenser.setInitialCash + throw new UnsupportedOperationException(); + } + + /** + * + * @param amount + */ + public boolean checkCashOnHand(Money amount) { + // TODO - implement CashDispenser.checkCashOnHand + throw new UnsupportedOperationException(); + } + + /** + * + * @param amount + */ + public void dispenseCash(Money amount) { + // TODO - implement CashDispenser.dispenseCash + throw new UnsupportedOperationException(); + } + + public void putCash() { + // TODO - implement CashDispenser.putCash + throw new UnsupportedOperationException(); + } + +} diff --git a/Code/Class.java b/Code/Class.java new file mode 100644 index 0000000..366f84e --- /dev/null +++ b/Code/Class.java @@ -0,0 +1,2 @@ +public class Class { +} \ No newline at end of file diff --git a/Code/Customer.java b/Code/Customer.java new file mode 100644 index 0000000..f6f180d --- /dev/null +++ b/Code/Customer.java @@ -0,0 +1,18 @@ +public class Customer extends Person { + + private int ID_Number; + public int getID_Number() { + return ID_Number; + } + public int getAccount_number() { + return account_number; + } + public void setID_Number(int iD_Number) { + ID_Number = iD_Number; + } + public void setAccount_number(int account_number) { + this.account_number = account_number; + } + private int account_number; + +} diff --git a/Code/DatabaseProxy.java b/Code/DatabaseProxy.java new file mode 100644 index 0000000..a9b169b --- /dev/null +++ b/Code/DatabaseProxy.java @@ -0,0 +1,32 @@ +public class DatabaseProxy { + + /** + * + * @param accountNum + */ + public String selectPasswordByAccountNum(int accountNum) { + // TODO - implement DatabaseProxy.selectPasswordByAccountNum + throw new UnsupportedOperationException(); + } + + public void minusBalance() { + // TODO - implement DatabaseProxy.minusBalance + throw new UnsupportedOperationException(); + } + + public void plusBalance() { + // TODO - implement DatabaseProxy.plusBalance + throw new UnsupportedOperationException(); + } + + public int createNewAccount() { + // TODO - implement DatabaseProxy.createNewAccount + throw new UnsupportedOperationException(); + } + + public void checkTheBalance() { + // TODO - implement DatabaseProxy.checkTheBalance + throw new UnsupportedOperationException(); + } + +} diff --git a/Code/Deposit.java b/Code/Deposit.java new file mode 100644 index 0000000..bf6b5f2 --- /dev/null +++ b/Code/Deposit.java @@ -0,0 +1,28 @@ +public class Deposit extends Transaction { + + private int to; + private Money amount; + + /** + * + * @param atm + * @param session + * @param card + * @param pin + */ + public Deposit(ATM atm, Session session, Card card, int pin) { + // TODO - implement Deposit.Deposit + throw new UnsupportedOperationException(); + } + + public Message getSpecificsFromCustomer() { + // TODO - implement Deposit.getSpecificsFromCustomer + throw new UnsupportedOperationException(); + } + + public Receipt completeTransaction() { + // TODO - implement Deposit.completeTransaction + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Display.java b/Code/Display.java new file mode 100644 index 0000000..3bd95e7 --- /dev/null +++ b/Code/Display.java @@ -0,0 +1,45 @@ +public class Display { + + public Display() { + // TODO - implement Display.Display + throw new UnsupportedOperationException(); + } + + /** + * + * @param message + */ + public void display(String message) { + // TODO - implement Display.display + throw new UnsupportedOperationException(); + } + + /** + * + * @param prompt + */ + public int readPIN(String prompt) { + // TODO - implement Display.readPIN + throw new UnsupportedOperationException(); + } + + /** + * + * @param prompt + * @param menu + */ + public int readMenuChoice(String prompt, String[] menu) { + // TODO - implement Display.readMenuChoice + throw new UnsupportedOperationException(); + } + + /** + * + * @param prompt + */ + public Money readAmount(String prompt) { + // TODO - implement Display.readAmount + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Employee.java b/Code/Employee.java new file mode 100644 index 0000000..3c50ee1 --- /dev/null +++ b/Code/Employee.java @@ -0,0 +1,27 @@ +import java.util.Date; + +public class Employee extends Person { + + private int employeeID; + private Date joined; + public int getEmployeeID() { + return employeeID; + } + public void setEmployeeID(int employeeID) { + this.employeeID = employeeID; + } + public Date getJoined() { + return joined; + } + public void setJoined(Date joined) { + this.joined = joined; + } + public int getCategory() { + return Category; + } + public void setCategory(int category) { + Category = category; + } + private int Category; + +} diff --git a/Code/EmployeeCategory.java b/Code/EmployeeCategory.java new file mode 100644 index 0000000..8f9df80 --- /dev/null +++ b/Code/EmployeeCategory.java @@ -0,0 +1,18 @@ +public class EmployeeCategory { + + private int categoryID; + private String categoryName; + public int getCategoryID() { + return categoryID; + } + public void setCategoryID(int categoryID) { + this.categoryID = categoryID; + } + public String getCategoryName() { + return categoryName; + } + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + +} diff --git a/Code/Inquiry.java b/Code/Inquiry.java new file mode 100644 index 0000000..ee38526 --- /dev/null +++ b/Code/Inquiry.java @@ -0,0 +1,35 @@ +public class Inquiry extends Transaction { + + private int from; + + public int getFrom() { + return from; + } + + public void setFrom(int from) { + this.from = from; + } + + /** + * + * @param atm + * @param session + * @param card + * @param pin + */ + public Inquiry(ATM atm, Session session, Card card, int pin) { + // TODO - implement Inquiry.Inquiry + throw new UnsupportedOperationException(); + } + + public Message getSpecificsFromCustomer() { + // TODO - implement Inquiry.getSpecificsFromCustomer + throw new UnsupportedOperationException(); + } + + public Receipt completeTransaction() { + // TODO - implement Inquiry.completeTransaction + throw new UnsupportedOperationException(); + } + +} diff --git a/Code/Log.java b/Code/Log.java new file mode 100644 index 0000000..1928fc9 --- /dev/null +++ b/Code/Log.java @@ -0,0 +1,40 @@ +public class Log { + + public Log() { + // TODO - implement Log.Log + throw new UnsupportedOperationException(); + } + + /** + * + * @param message + */ + public void logSend(Message message) { + // TODO - implement Log.logSend + throw new UnsupportedOperationException(); + } + + /** + * + * @param status + */ + public void logResponse(Status status) { + // TODO - implement Log.logResponse + throw new UnsupportedOperationException(); + } + + /** + * + * @param amount + */ + public void logCashDispensed(Money amount) { + // TODO - implement Log.logCashDispensed + throw new UnsupportedOperationException(); + } + + public void logEnvelopeAccepted() { + // TODO - implement Log.logEnvelopeAccepted + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Message.java b/Code/Message.java new file mode 100644 index 0000000..32bc54e --- /dev/null +++ b/Code/Message.java @@ -0,0 +1,2 @@ +public class Message { +} \ No newline at end of file diff --git a/Code/Money.java b/Code/Money.java new file mode 100644 index 0000000..54b94e3 --- /dev/null +++ b/Code/Money.java @@ -0,0 +1,3 @@ +public class Money extends Class { + +} diff --git a/Code/NetworkToBank.java b/Code/NetworkToBank.java new file mode 100644 index 0000000..d4280be --- /dev/null +++ b/Code/NetworkToBank.java @@ -0,0 +1,54 @@ +import java.net.InetAddress; + +public class NetworkToBank { + + private Log log; + private InetAddress bankAddress; + + /** + * + * @param log + * @param bankAddress + */ + public NetworkToBank(Log log, InetAddress bankAddress) { + // TODO - implement NetworkToBank.NetworkToBank + throw new UnsupportedOperationException(); + } + + public void openConnection() { + // TODO - implement NetworkToBank.openConnection + throw new UnsupportedOperationException(); + } + + public void closeConnection() { + // TODO - implement NetworkToBank.closeConnection + throw new UnsupportedOperationException(); + } + + /** + * + * @param message + * @param balances + */ + public Status sendMessage(Message message, Balances balances) { + // TODO - implement NetworkToBank.sendMessage + throw new UnsupportedOperationException(); + } + + public Log getLog() { + return log; + } + + public void setLog(Log log) { + this.log = log; + } + + public InetAddress getBankAddress() { + return bankAddress; + } + + public void setBankAddress(InetAddress bankAddress) { + this.bankAddress = bankAddress; + } + +} diff --git a/Code/OperationStaff.java b/Code/OperationStaff.java new file mode 100644 index 0000000..2eebc71 --- /dev/null +++ b/Code/OperationStaff.java @@ -0,0 +1,2 @@ +public class OperationStaff extends Employee { +} \ No newline at end of file diff --git a/Code/OperatorPanel.java b/Code/OperatorPanel.java new file mode 100644 index 0000000..46925a5 --- /dev/null +++ b/Code/OperatorPanel.java @@ -0,0 +1,19 @@ +public class OperatorPanel { + + private ATM atm; + + /** + * + * @param atm + */ + public OperatorPanel(ATM atm) { + // TODO - implement OperatorPanel.OperatorPanel + throw new UnsupportedOperationException(); + } + + public Money getInitialCash() { + // TODO - implement OperatorPanel.getInitialCash + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Person.java b/Code/Person.java new file mode 100644 index 0000000..b704f53 --- /dev/null +++ b/Code/Person.java @@ -0,0 +1,46 @@ +public class Person { + + private String givenName; + private String middleName; + private String familyName; + private int gender; + private String homeAddress; + public String getGivenName() { + return givenName; + } + public void setGivenName(String givenName) { + this.givenName = givenName; + } + public String getMiddleName() { + return middleName; + } + public void setMiddleName(String middleName) { + this.middleName = middleName; + } + public String getFamilyName() { + return familyName; + } + public void setFamilyName(String familyName) { + this.familyName = familyName; + } + public int getGender() { + return gender; + } + public void setGender(int gender) { + this.gender = gender; + } + public String getHomeAddress() { + return homeAddress; + } + public void setHomeAddress(String homeAddress) { + this.homeAddress = homeAddress; + } + public int getPhoneNumber() { + return phoneNumber; + } + public void setPhoneNumber(int phoneNumber) { + this.phoneNumber = phoneNumber; + } + private int phoneNumber; + +} diff --git a/Code/Receipt.java b/Code/Receipt.java new file mode 100644 index 0000000..b46432f --- /dev/null +++ b/Code/Receipt.java @@ -0,0 +1,2 @@ +public class Receipt { +} \ No newline at end of file diff --git a/Code/ReceiptPrinter.java b/Code/ReceiptPrinter.java new file mode 100644 index 0000000..00609d3 --- /dev/null +++ b/Code/ReceiptPrinter.java @@ -0,0 +1,17 @@ +public class ReceiptPrinter { + + public ReceiptPrinter() { + // TODO - implement ReceiptPrinter.ReceiptPrinter + throw new UnsupportedOperationException(); + } + + /** + * + * @param receipt + */ + public void printReceipt(Receipt receipt) { + // TODO - implement ReceiptPrinter.printReceipt + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Session.java b/Code/Session.java new file mode 100644 index 0000000..391e1dd --- /dev/null +++ b/Code/Session.java @@ -0,0 +1,2 @@ +public class Session extends Class { +} diff --git a/Code/Status.java b/Code/Status.java new file mode 100644 index 0000000..e25becf --- /dev/null +++ b/Code/Status.java @@ -0,0 +1 @@ +public class Status extends Class {} diff --git a/Code/TechnicalStaff.java b/Code/TechnicalStaff.java new file mode 100644 index 0000000..7bae59c --- /dev/null +++ b/Code/TechnicalStaff.java @@ -0,0 +1,2 @@ +public class TechnicalStaff extends Employee { +} \ No newline at end of file diff --git a/Code/TicketMachine.java b/Code/TicketMachine.java new file mode 100644 index 0000000..ffa51d8 --- /dev/null +++ b/Code/TicketMachine.java @@ -0,0 +1,8 @@ +public class TicketMachine { + + public int getNumber() { + // TODO - implement TicketMachine.getNumber + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file diff --git a/Code/Transaction.java b/Code/Transaction.java new file mode 100644 index 0000000..eac7ec5 --- /dev/null +++ b/Code/Transaction.java @@ -0,0 +1,32 @@ +public class Transaction { + + protected ATM atm; + protected Session session; + protected Card card; + protected int pin; + public ATM getAtm() { + return atm; + } + public void setAtm(ATM atm) { + this.atm = atm; + } + public Session getSession() { + return session; + } + public void setSession(Session session) { + this.session = session; + } + public Card getCard() { + return card; + } + public void setCard(Card card) { + this.card = card; + } + public int getPin() { + return pin; + } + public void setPin(int pin) { + this.pin = pin; + } + +} diff --git a/Code/Transfer.java b/Code/Transfer.java new file mode 100644 index 0000000..84622c7 --- /dev/null +++ b/Code/Transfer.java @@ -0,0 +1,53 @@ +public class Transfer extends Transaction { + + private int from; + private int to; + private Money amount; + + /** + * + * @param atm + * @param session + * @param card + * @param pin + */ + public Transfer(ATM atm, Session session, Card card, int pin) { + // TODO - implement Transfer.Transfer + throw new UnsupportedOperationException(); + } + + public Message getSpecificsFromCustomer() { + // TODO - implement Transfer.getSpecificsFromCustomer + throw new UnsupportedOperationException(); + } + + public Receipt completeTransaction() { + // TODO - implement Transfer.completeTransaction + throw new UnsupportedOperationException(); + } + + public int getFrom() { + return from; + } + + public void setFrom(int from) { + this.from = from; + } + + public int getTo() { + return to; + } + + public void setTo(int to) { + this.to = to; + } + + public Money getAmount() { + return amount; + } + + public void setAmount(Money amount) { + this.amount = amount; + } + +} diff --git a/Code/Withdrawal.java b/Code/Withdrawal.java new file mode 100644 index 0000000..5a1c999 --- /dev/null +++ b/Code/Withdrawal.java @@ -0,0 +1,44 @@ +public class Withdrawal extends Transaction { + + private int from; + private Money amount; + + /** + * + * @param atm + * @param session + * @param card + * @param pin + */ + public Withdrawal(ATM atm, Session session, Card card, int pin) { + // TODO - implement Withdrawal.Withdrawal + throw new UnsupportedOperationException(); + } + + public int getFrom() { + return from; + } + + public void setFrom(int from) { + this.from = from; + } + + public Money getAmount() { + return amount; + } + + public void setAmount(Money amount) { + this.amount = amount; + } + + public Message getSpecificsFromCustomer() { + // TODO - implement Withdrawal.getSpecificsFromCustomer + throw new UnsupportedOperationException(); + } + + public Receipt completeTransaction() { + // TODO - implement Withdrawal.completeTransaction + throw new UnsupportedOperationException(); + } + +} diff --git a/Final Report.doc b/Final Report.doc new file mode 100644 index 0000000..2d03d50 Binary files /dev/null and b/Final Report.doc differ diff --git a/Management/DeploymentDiagram1.png b/Management/DeploymentDiagram1.png new file mode 100644 index 0000000..240d31f Binary files /dev/null and b/Management/DeploymentDiagram1.png differ diff --git a/Management/GanttChart.xlsx b/Management/GanttChart.xlsx new file mode 100644 index 0000000..30e3967 Binary files /dev/null and b/Management/GanttChart.xlsx differ diff --git a/Management/Project-Risk-Assessment.doc b/Management/Project-Risk-Assessment.doc new file mode 100644 index 0000000..67f70fa Binary files /dev/null and b/Management/Project-Risk-Assessment.doc differ diff --git a/Management/Skillset.doc b/Management/Skillset.doc new file mode 100644 index 0000000..b8e30d2 Binary files /dev/null and b/Management/Skillset.doc differ diff --git a/Management/Work-Breakdown-Structure.doc b/Management/Work-Breakdown-Structure.doc new file mode 100644 index 0000000..dc6dd42 Binary files /dev/null and b/Management/Work-Breakdown-Structure.doc differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4e390c --- /dev/null +++ b/README.md @@ -0,0 +1,529 @@ +# Group Project- ATM + +## Lets finish this project step by step with timeline + +First I want write everything in word file which is explanation or details of the diagram. + +Cant we draw UML Diagram using Visual_Paradigm? + +1. System analysis: study, understand, and define requirements for the system (model of the system's functional requirements) +2. Defining the boundaries of the problem +3. Use-case model +4. Deployment view +5. Sequence diagram and operation +6. Design to code (UML design diagram) + +This is our final group project of Object Oriented Programming and Analysis subject. Our project is to build a bank ATM software system. In this document we will try to explain the requirements and functionality of the ATM system. In another word, we will analyse the system and try to make you to understand how we build the system and how it works for banks. It is obvious that ATM is part of bank so we will show the whole picture of Banking system but we will only focus on ATM system. Ofcause bank can operate without ATM but ATM is positive impact on bank and their income. Also, ATM will make easy for customers to make money transections. + +# PROBLEM STATEMENT + +When they came into being, ATMs were treated to be a boon for the general public. There was no need to stand in queues in banks to withdraw money,no need to go the branch for years even to get a cheque deposited, cash deposited or for getting the cheque book issued. + +- When ATM were first developed there were only few ATM’s and people had to travel long distance to access ATM +- People who were not familiar to the ATM machines they faced a lo tof problems for accessing it. +- There were many security issues faced before ATM was introduced and after its introduction some security issues were solved. +- Some ATMs display the message “Your request cannot be processed now”, the meaning of which has to be interpreted by the customer only. It can mean that the ATM does not have sufficient funds, or that your account has some problem, or it may also mean that the server of the bank is not working +- The servers of the banks working so slowly that it is difficult to understand if the problem is with the machine or the banks's server + +# 1. Introduction +Under indroduction we will explain the following areas. +- Main Purpose of the project. +- Scope of the project +- Overview of whole system +- Definition of some of the important words we used in this documents and the system. + +## 1.1 Purpose +This document mainly describes the software requirements and functionality of the ATM machine. And we will build the software system for ATM. It is intended for the designer developer and maintainer of the ATM. Also if any bank which dont have ATM services we might be able to sell the software or work for them to build a ATM system. + +![](giphy.gif) +Example of how customers use this system +![](giphys.gif) + +## 1.2 Scope +The function of the ATM is to support a computerized banking network. + +## 1.3 Overview +The remainder of this document is organized as follows. There will be some definitions of important terms. Section 2 contains a general description of the ATM. Section 3 identies the specic functional requirements the external interfaces and performance requirements of the ATM. + +## 1.4 Definitions +- ATM : An Automatic Teller Machine (ATM) is a computer based machine, connected to a network, that offers, as basic functions to users, access to bank account (balance, bank transfers) and retrieval of money. + +- Cash Card : A card assigned to a bank customer that authorizes access to accounts using an ATM machine Each card contains a bank code and a card numbers, coded in accordance with national standards on credit cards and cash cards The bank code uniquely identities the bank within the consortium The card number determines the accounts that the card can access A card does not necessarily access all of a customer's accounts Each cash card is owned by a single customer, but multiple copies of it may exist, so the possibility of simultaneous use of the same card from different machines must be considered. + +- Bank : An establishment authorized by a government to accept deposits, pay interest, clear checks, make loans, act as an intermediary in financial transactions, and provide other financial services to its customers. + +- Bank computer : The computer owned by a bank that interfaces with the ATM network and the bank's own cashier stations. A bank may actually have its own internal network of computers to process accounts, but we are only concerned with the one that interacts with the network. + +- Account: A single account in a bank against which transactions can be applied. Accounts may be of various types with at least checking and savings. A customer can hold more than one account. + +- Customer: The holder of one or more accounts in a bank. A customer can consist of one or more persons or corporations, the correspondence is not relevant to this problem. The same person holding an account at a different bank is considered a different customer + +- Transaction : (TB) can be defined as the set of instruments and services that a bank offers to trading partners to financially support their reciprocal exchanges of goods (e.g.trade), monetary flows (e.g., cash), or commercial papers (e.g., exchanges) + +# 2. General Description + +## 2.1 Product Perspective +The ATM network doesn't work independentlyIt has to work together with the computers software owned by banks. There are clearly defined interfaces for the different systems + +## 2.2 Product Functions +The software should support a computerized banking network Each bank provides its own computer to maintain its own accounts and process transactions against them. Automatic teller machines communicate with the banks, computers. An automatic teller machine accepts a cash cards interacts with the users communicates with the bank computer to carry out the transactions dispenses cash and prints receipts. The system requires appropriate record keeping and security provisions. The system must handle concurrent access to the same account correctly. The banks will provide their own software for their own computers. The cost of the shared system will be apportioned to the banks according go the number of customers with cash cards. + +## 2.3 User Characteristics +- Customer + The customer interacts with the ATM network via the ATM. It must be very easy for + them to use the ATM. They should be supported by the system in every possible way. + +- Maintainer(IT Technician from Bank) + It should be easy to maintain the whole system. The maintainer should be the only + person that is allowed to connect a new ATM to the network. + +# 3.Defining the Boundaries of the Problem + +## 3.1 The hardware on which our software must execute + +- The processor (like CPU) in the ATM device. +- Time and date are supplied by a clock. +- User input is provided through a keypad. +- The screen of the ATM will show user the interface + +## 3.2 Defining the context + +![context diagram](./UML/atmsystemcontext.jpg) + +For this system, User and Maintainer are dependent on the ATM for its services as they use its navigation information, operate it, and maintain it, respectively. On the other hand, the power services of the ATM will be provided by an external system, the External Power actor. Meanwhile, the information of accounts of users are provided by bank system. So, the ATM system should communicate with it. + +## 3.3 Scenarios + +Now, let's walk through several scenarios of doing some operates on the ATM. + +1. First, a user should insert a cash card into the ATM. After it, the user should finish each step with 60 seconds. otherwise, the ATM will swallow the card. +2. Second, the system will show a interface that let the user to enter the password. And there are three options: correction, confirm, Take the card. If the user find that he entered wrong password, then he can choose the correction option, and he can enter the password again. Then, he(she) should choose the confirm option, and the ATM system will communicate with the bank system as well as check whether the password entered is right. if it's not correct, it will show the wrong information and user should enter password again. However, if the user can just entered the wrong password three times, the card will be frozen. +3. After the user entered the right password, the interface will show some options(such changing password, Transfer money, Inquiry, withdrawal, deposit, take the card). +4. If the user choose the option of changing password, then the system will ask the user to enter the original password. after the user entered the correct password, then the user can enter the new password to change the old password. +5. If the user choose the option of Transfer money, then the system will first show some prompts. And after the user confirmed, then he(she) can enter the account that he(she) want to transfer money to. At last, he(she) should enter the amount of money he(she) want to transfer and confirm. +6. If the user choose the option of Inquiry, then the system will show two options, the first one is detailed inquiry, the second one is balance inquiry. If the user choose the first one, then it will show the recent ten transactions details. If the user choose the second one, it will show balance of the account and the balance that can be used. +7. If the user choose the option of withdrawal, it will show a interface that let the user to enter the amount of money he(she) want to withdraw. and after the user entered the number and confirmed, the ATM will send the money to the user. However, if the amount entered by the user exceeds the balance in the card, then it show a message to tell the user. And then the user should enter a appropriate amount and confirm. At last, the system will show a show a successful transaction message(includes the amount of the transaction and the fee). +8. If the user choose the option of deposit, then it open the cover, and show a message to let the user to put the money into the ATM. If there are no faults, then it will show some successful information to the user. +9. If the user choose the option of take the card, then he can retrieve his(her) card and end the transaction. + +# 4. Specic Requirements + +## 4.1 Functional Requirements +The functional requirements are organized in two sections +- First requirements of the ATM +- Second requirements of the bank +## 4.1.1 Requirements of the ATM +The requirements for the ATM are organized in the following way: General requirements, requirements for authorization, requirements for a transaction. + +## General +## Functional requirement 1 +- Description + Initialize parameters t,k,m,n. (t = Total fund in the ATM at start of day, k = Maximum withdrawal per day and account, m = mMximum withdrawal per transaction, n = Minimum cash in the ATM to permit a transaction) + + +- Input + ATM is initialized with t dollars k,m,n are entered. + +- Processing + Storing the parameters. + +- Output + Parameters are set. + +## Functional requirement 2 +- Description + If no cash card is in the ATM, the system should display initial display. + +## Functional requirement 3 +- Description + If ATM is running out of money, no card should be accepted. An error message is displayed. + +- Input + A card is entered. + +- Processing + The amount of cash is less than total fund in the ATM at start of day. + +- Output + Display an error message Return cash card. + +## Authorization +The authorization starts after a customer has entered his card in the ATM + +## Functional requirement 4 +- Description : +The ATM has to check if the entered card is a valid cash-card. + +- Input : +Customer enters the cash card. + +- Processing : +Check if it is a valid cash card. It will be valid if +1) the information on the card can be read. +2) it is not expired. + +- Output : +Display error message and return cash card if it is invalid. + +## Functional requirement 5 +- Description : +If the cash card is valid, the ATM should read the serial number and bank code. + +- Input : +Valid cash card. + +- Processing : +Read the serial number. + +- Output : +Initiate authorization dialog. + +## Functional requirement 6 +- Description : +The serial number should be logged. + +- Input : +Serial number from cash card + +- Processing : +Log the number + +- Output : +Update to log file. + +## Functional requirement 7 +- Description : +Authorization dialog : +The user is requested to enter his password. The ATM verifies the bank code and password with the bank computer + +- Input : +Password from user, bank code from cash card. + +- Processing: +Send serial number and password to bank computer, receive response from bank. + +- Output: +Accept or reject authorization from bank. + +## Functional requirement 8 +- Description : +Different negative answers from bank computer for authorization dialog. + +- Input : +Response from bank or authorization dialog :
+ + + "bad password" if the password was wrong, + + "bad bank code" if the cash card of the bank is not supported by the ATM, + + "bad account" if there are problems with the account. + +- Processing :If the ATM gets any of these messages from the bank computer, the card will be ejected and the user will get the relevant error message. + +- Output : +Card is ejected and error message is displayed. + +## Functional requirement 9 +- Description : +If password and serial number are ok, the authorization process is finished + +- Input : +The ATM gets accept from the bank computer from authorization process + +- Processing : +Finishing authorization + +- Output : +Start transaction dialog + +## Functional requirement 10 +- Description : +If a card was entered more than three times in a row at any ATM and the password was wrong each time, the card is kept by the ATM. A message will be displayed that the customer should call the bank. + +- Input : +Entering a wrong password for the fourth time in succession + +- Processing : +Initiate authorization process. Response from bank computer is to keep the card + +- Output : Display error message that the customer should call the bank. + +## Functions +These are the requirements for the different functions the ATM should provide after authorization. + +## Functional requirement 11 +- Description : +The kind of transactions the ATM offers is: withdrawal + +- Input : +Authorization successfully completed. Enter the amount to withdraw. + +- Processing : +Amount entered is compared with m ( m = Maximum withdrawal per transaction) + +- Output : Amount of money to be dispensed is displayed. Begin initial withdrawal sequence. + +## Functional requirement 12 +- Description :
+Initial withdrawal sequence : If it is too much withdrawal redo the transaction. + +- Input : +Customer has entered the amount of money + +- Processing : +Error if the amount is greater than m (m = Maximum withdrawal per transaction) + +- Output : Start transaction or re-initiate transaction dialog if the amount is not within the pre-defined transaction policy. + +## Functional requirement 13 +- Description :
+Perform transaction + +- Input : +Initial withdrawal sequence successful + +- Processing : +Send request to the bank computer. + +- Output : Wait for response from the bank computer. + +## Functional requirement 14 +- Description :
+If the transaction is successful, the money is dispensed. + +- Input : +ATM gets message "transaction succeeded" from the bank computer. + +- Processing : +ATM prints receipt, updates Total fund in the ATM at start of day and ejects the card. Dialog +Customer should take the card. + +- Output : After the Customer has taken the card the money is dispensed. + +## Functional requirement 15 +- Description :
+If the money is dispensed, the amount is logged + +- Input : +The number of 20 yuan bills requested is dispensed to the customer. + +- Processing : +Log the amount of money against the serial number of the card. + +- Output : +Amount logged together with the serial number. Response sent to bank for money dispensed. + +## Functional requirement 16 +- Description :
+If the transaction is not successful, an error message should be displayed. The card should be ejected. + +- Input : +ATM gets message "transaction not successful" from the bank computer. + + +- Processing :
+ATM displays error message, Dialog : +"Customer should take the card" + +- Output : +Eject card. + +## Functional requirement 17 +- Description :
+If customer want transfer money from one account to another account. + +- Input : +Banck account number and amount want tranfer. + + +- Processing :
+verify the bank account and the amount + +- Output : +send transaction log to database and message to display + +## 4.1.2 Requirements of the bank computer for the ATM + +### Authorization +The bank computer gets a request from the ATM to verify an account. + +## Functional requirement 1 +- Description :
+The bank computer checks if the the bank code is valid. A bank code is valid if the cash card was issued by the bank. + +- Input : +Request from the ATM to verify card Serial number and password. + +- Processing : +Check if the cash card was issued by the bank. + +- Output : +Valid or invalid bank code. + +## Functional requirement 2 +- Description :
+If it is not a valid bank code, the bank computer will send a message to the ATM. + +- Input : +Invalid bank code + +- Processing : +Process message + +- Output : +The bank computer sends the message "bad bank code" to the ATM. + +## Functional requirement 3 +- Description :
+The bank computer checks if the the password is valid for a valid cash card. + +- Input : +Request from the ATM to verify password + +- Processing : +Check password of the customer. + +- Output : +Valid or invalid password + +## Functional requirement 4 +- Description :
+If it is not a valid password, the bank computer will send a message to the ATM + +- Input : +Invalid password + +- Processing : +Process message, Update count for in valid password for the account. + +- Output : +The bank computer sends the message "bad password" to the ATM. + +## Functional requirement 5 +- Description :
+If it is a valid cash card and a valid password but there are problems with the account, the bank will send a message to the ATM that there are problems + +- Input : +Valid cash card and password + +- Processing : +Process message + +- Output : +The bank sends "bad account" to the ATM. + +## Functional requirement 6 +- Description :
+If it is a valid cash card, a valid password and there are no problems with the account the bank computer will send a message to the ATM that everything is ok + +- Input : +Valid cash card, password and account + +- Processing : +Process message + +- Output : +Send "account ok" to the ATM. + +### Transaction +The bank computer gets a request to process a transaction from the ATM. + +## Functional requirement 7 +- Description :
+After a request the bank computer processes the transaction. + +- Input : +Request to process a transaction on an account and amount m to withdraw. + +- Processing : +Process transaction ( together with the software of the bank). Update k for amount (k = Maximum withdrawal per day and account) + +- Output : +If transaction succeeded, the bank computer sends the message "transaction succeeded" to the ATM. If not, it will send "transaction failed". + +## Functional requirement 8 +- Description :
+Update account after money is dispensed + +- Input : +Response from ATM about money dispensed. + +- Processing : +Updates account + +- Output : +New account record + +## Functional requirement 9 +- Description :
+Each bank has a limit k for each account about the amount of money that is a vailable via cash card each day/monthly + +- Input : +Request to process transaction. + +- Processing : +Check if the amount of money doesn't exceed k (k = Maximum withdrawal per day and account) + +- Output : +If the amount exceeds the limit, the transaction will fail. + +## Functional requirement 10 +The bank only provides security for their own computer and their own software. + +## 4.2 External Interface Requirement +### 4.2.1 User Interfaces + +The interface of the ATM must fulfill ergonomic requirements. The following is just an example for a possible interface to the ATM + +ATMInterface + +### 4.2.2 Hardware Interfaces +The ATM network has to provide hardware interfaces to: +- various printers +- various ATM machines :
+There are several companies producing the ATM machines. +- several types of networks The exact specifcation of the hardware interfaces is not part of this document + +### 4.2.3 Software Interfaces +The ATM network has to provide software interfaces to: +- the software used by different banks +- different network softwar
+The exact, detailed specifcation of the software interfaces is not part of this document. + +### 4.2.4 Communication Interfaces +There is no restriction of the ATM network to a specific network protocol as long as the performance requirements are satisfied. + +## 4.3 Performance Requirements +### Performance requirement 1 +- Description
+Error message should be displayed at least 30 sec. + +### Performance requirement 2 +- Description
+If there is no response from the bank computer after a request within 2 minutes the card is rejected with an error message + +### Performance requirement 3 +- Description
+The ATM dispenses money if and only if the withdrawal from the account is processed and accepted by the bank. + +### Performance requirement 4 +- Description
+Each bank may be processing transactions from several ATMs at the same time. + +## 4.4 Attributes +### 4.4.1 Availability +The ATM network has to be available 24 hours a day. + +### 4.4.2 Security +The ATM network should provide maximal security. In order to make that much more transparent there are the following requirements
++ It must be impossible to plug into the network + +### 4.4.3 Maintainability +Only maintainers are allowed to connect new ATM's to the network. (Maintainer) + +### 4.4.4 Transferability/Conversions +Not Applicable for now + +## 4.5 Other Requirements +### 4.5.1 Data Base +The ATM must be able to use several data formats according to the data formats that are provided by the data bases of different banks. A transaction should have all the properties of a data base transaction (Atomicity, Consistency, Isolation, Durability). +### 4.5.2 Cash machine requirements +In order to ensure the accuracy of the cash.The cash machine of ATM can accurately identify the denomination of cash. The machine must be inspected more than three times, regardless of withdrawing money or saving money. If the cash error, re-check three times, three consecutive incorrect cash will be returned to the user. diff --git a/UML/ATM Activity Diagram.jpg b/UML/ATM Activity Diagram.jpg new file mode 100644 index 0000000..e273e3b Binary files /dev/null and b/UML/ATM Activity Diagram.jpg differ diff --git a/UML/ATM Communication Diagram.jpg b/UML/ATM Communication Diagram.jpg new file mode 100644 index 0000000..a21760c Binary files /dev/null and b/UML/ATM Communication Diagram.jpg differ diff --git a/UML/ATM Component Diagram.jpg b/UML/ATM Component Diagram.jpg new file mode 100644 index 0000000..da48f30 Binary files /dev/null and b/UML/ATM Component Diagram.jpg differ diff --git a/UML/ATMStartupSequenceDiagram.PNG b/UML/ATMStartupSequenceDiagram.PNG new file mode 100644 index 0000000..84905c0 Binary files /dev/null and b/UML/ATMStartupSequenceDiagram.PNG differ diff --git a/UML/ATMStateDiagram.PNG b/UML/ATMStateDiagram.PNG new file mode 100644 index 0000000..6091b1a Binary files /dev/null and b/UML/ATMStateDiagram.PNG differ diff --git a/UML/ClassDiagram.PNG b/UML/ClassDiagram.PNG new file mode 100644 index 0000000..91368a0 Binary files /dev/null and b/UML/ClassDiagram.PNG differ diff --git a/UML/DeploymentDiagram.PNG b/UML/DeploymentDiagram.PNG new file mode 100644 index 0000000..6fbe6da Binary files /dev/null and b/UML/DeploymentDiagram.PNG differ diff --git a/UML/MainSceneSequenceDiagram.jpg b/UML/MainSceneSequenceDiagram.jpg new file mode 100644 index 0000000..fff8d97 Binary files /dev/null and b/UML/MainSceneSequenceDiagram.jpg differ diff --git a/UML/ShutdownSequenceDiagram.PNG b/UML/ShutdownSequenceDiagram.PNG new file mode 100644 index 0000000..680d4e3 Binary files /dev/null and b/UML/ShutdownSequenceDiagram.PNG differ diff --git a/UML/Use Case Diagram.jpg b/UML/Use Case Diagram.jpg new file mode 100644 index 0000000..a4485c6 Binary files /dev/null and b/UML/Use Case Diagram.jpg differ diff --git a/UML/atmsystemcontext.jpg b/UML/atmsystemcontext.jpg new file mode 100644 index 0000000..0fd59e9 Binary files /dev/null and b/UML/atmsystemcontext.jpg differ diff --git a/giphy.gif b/giphy.gif new file mode 100644 index 0000000..0ca9037 Binary files /dev/null and b/giphy.gif differ diff --git a/giphys.gif b/giphys.gif new file mode 100644 index 0000000..07810d6 Binary files /dev/null and b/giphys.gif differ diff --git a/project-marking-sheet.pdf b/project-marking-sheet.pdf new file mode 100644 index 0000000..a4a8867 Binary files /dev/null and b/project-marking-sheet.pdf differ