From f10fdf4a2db83c35fbc981b68f4845cdd375fec4 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Sat, 17 Oct 2020 10:46:34 +0300 Subject: [PATCH 1/6] Deleted .idea and .gradle from index --- .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/6.3/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/6.3/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/6.3/gc.properties | 0 .../6.5/executionHistory/executionHistory.bin | Bin 20071 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/6.5/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/6.5/fileHashes/fileHashes.bin | Bin 18697 -> 0 bytes .gradle/6.5/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/6.5/gc.properties | 0 .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .gradle/buildOutputCleanup/cache.properties | 2 -- .gradle/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/vcs-1/gc.properties | 0 .idea/.gitignore | 3 --- .idea/compiler.xml | 10 --------- .idea/gradle.xml | 18 ---------------- .idea/jarRepositories.xml | 20 ------------------ .idea/misc.xml | 7 ------ .idea/vcs.xml | 6 ------ 20 files changed, 66 deletions(-) delete mode 100644 .gradle/6.3/executionHistory/executionHistory.lock delete mode 100644 .gradle/6.3/fileChanges/last-build.bin delete mode 100644 .gradle/6.3/fileHashes/fileHashes.lock delete mode 100644 .gradle/6.3/gc.properties delete mode 100644 .gradle/6.5/executionHistory/executionHistory.bin delete mode 100644 .gradle/6.5/executionHistory/executionHistory.lock delete mode 100644 .gradle/6.5/fileChanges/last-build.bin delete mode 100644 .gradle/6.5/fileHashes/fileHashes.bin delete mode 100644 .gradle/6.5/fileHashes/fileHashes.lock delete mode 100644 .gradle/6.5/gc.properties delete mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/checksums/checksums.lock delete mode 100644 .gradle/vcs-1/gc.properties delete mode 100644 .idea/.gitignore delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.gradle/6.3/executionHistory/executionHistory.lock b/.gradle/6.3/executionHistory/executionHistory.lock deleted file mode 100644 index a7604be1ef6e9a790cafe5f2e4f8b638218152b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRUG;}#Ck+sR10RnOWA&mnv diff --git a/.gradle/6.3/fileChanges/last-build.bin b/.gradle/6.3/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/6.3/fileHashes/fileHashes.lock b/.gradle/6.3/fileHashes/fileHashes.lock deleted file mode 100644 index 2b22044621848a8e6f14688644e644e50c0b6932..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZP$SDwo3m;F4I0Rl__B^Cou diff --git a/.gradle/6.3/gc.properties b/.gradle/6.3/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/6.5/executionHistory/executionHistory.bin b/.gradle/6.5/executionHistory/executionHistory.bin deleted file mode 100644 index ca603136957a3946fa69672fa1e9609598fd0231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20071 zcmeI)PiWIn90%}p9d(Mbco+`Eiwvi*CH-UCO$Ax$=9K->)jGjLNYmFPTh_#vv~`M3 zWCy`I9S)fY124i*CklEQ{s9jIZ|c>f2T{a>HxV>#8n#gn9qU2l8|cd;@4esey-#1$ zLm)ARX=ZqTV1izm}eOOR=eWy%R5ikZM#43H1~G7&kx+QeSM$Ph7tl0fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZafqy|D z#4x^H_Q!rY#sf&-dBO zg&pB@eP^PHhJr+8Ma_|@WRix(YF65ET(Xp6_n9L@U9rAyF%j<`5_<>xyWLpD4&Lc9 z5T8;_%bY2eR83|rRnOES*P4KTNqBp8!nh&@g>XDO&a4@Ba>5`D&#PKm{!Z#+2M#^` zdGC||;`PDK^^IR&?}}tsM$YQ*!#Q{}9AcfXWr+~1cS$jb&li~Vhrt&11x_q5)* z^x;-b!qy~6#nf&XRJZR7mP*VLz}t-iti3OD2dvw$HshQ_Lzv&C334WH!>lB00Iag zfB*srAbC+xP(l(Q_F9 diff --git a/.gradle/6.5/fileHashes/fileHashes.lock b/.gradle/6.5/fileHashes/fileHashes.lock deleted file mode 100644 index b89035bdbee3e3b6d10f21e051d4d887347333a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQ}>QJ4zd*P?03=qHu05u&1g#Z8m diff --git a/.gradle/6.5/gc.properties b/.gradle/6.5/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 125640c0661a242e02c3c8aa44ade74fd4ef2016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRcxr{wXET`Ur0RkcbB@6>C diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index b774acd..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Thu Oct 08 23:16:29 MSK 2020 -gradle.version=6.3 diff --git a/.gradle/checksums/checksums.lock b/.gradle/checksums/checksums.lock deleted file mode 100644 index 2cf264e3089226e34e453839915ee03153a95c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZR+wZ?0Uv*dYO1}FdkGnxbN diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index c8b5c9a..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 87ca0fc..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index fdc392f..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index b0ec460..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 2f18960bceca04f3d7051f7ea9f96d1309a8fd45 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Mon, 2 Nov 2020 09:08:59 +0300 Subject: [PATCH 2/6] V 10. Added vim swap files to gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 8f242ff..38a19dd 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ # Mobile Tools for Java (J2ME) .mtj.tmp/ +# vim swap files +*.swp + # Package Files # *.jar !gradle-wrapper.jar From aa842219424e5d5639ae2f790ef2da820393b984 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Thu, 5 Nov 2020 09:52:18 +0300 Subject: [PATCH 3/6] V11. A.java deleted --- src/main/java/A.java | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/main/java/A.java diff --git a/src/main/java/A.java b/src/main/java/A.java deleted file mode 100644 index 6be5562..0000000 --- a/src/main/java/A.java +++ /dev/null @@ -1,5 +0,0 @@ -public class A { - public static void main(String ... args){ - System.out.println("Hello, gradle + git!"); - } -} From 2e1543d1f90054f1a26979d3acc02df5b9569204 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Tue, 15 Dec 2020 01:01:05 +0300 Subject: [PATCH 4/6] v11. ATM. --- hw06-ATM/build.gradle | 22 ++++ hw06-ATM/src/main/java/atm/Balanceable.java | 5 + hw06-ATM/src/main/java/atm/Nominal.java | 29 +++++ hw06-ATM/src/main/java/atm/Starter.java | 63 ++++++++++ hw06-ATM/src/main/java/atm/atm/ATM.java | 11 ++ .../src/main/java/atm/atm/impl/ATMImpl.java | 108 ++++++++++++++++++ hw06-ATM/src/main/java/atm/atm/impl/Safe.java | 18 +++ hw06-ATM/src/main/java/atm/cell/Cell.java | 13 +++ .../src/main/java/atm/cell/impl/CellImpl.java | 46 ++++++++ .../java/atm/exceptions/AtmException.java | 4 + .../atm/exceptions/CellIsFullException.java | 4 + settings.gradle | 1 + 12 files changed, 324 insertions(+) create mode 100644 hw06-ATM/build.gradle create mode 100644 hw06-ATM/src/main/java/atm/Balanceable.java create mode 100644 hw06-ATM/src/main/java/atm/Nominal.java create mode 100644 hw06-ATM/src/main/java/atm/Starter.java create mode 100644 hw06-ATM/src/main/java/atm/atm/ATM.java create mode 100644 hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java create mode 100644 hw06-ATM/src/main/java/atm/atm/impl/Safe.java create mode 100644 hw06-ATM/src/main/java/atm/cell/Cell.java create mode 100644 hw06-ATM/src/main/java/atm/cell/impl/CellImpl.java create mode 100644 hw06-ATM/src/main/java/atm/exceptions/AtmException.java create mode 100644 hw06-ATM/src/main/java/atm/exceptions/CellIsFullException.java diff --git a/hw06-ATM/build.gradle b/hw06-ATM/build.gradle new file mode 100644 index 0000000..55b2f50 --- /dev/null +++ b/hw06-ATM/build.gradle @@ -0,0 +1,22 @@ +plugins { + id 'java' + id 'application' +} + +group 'ru.otus' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' +} + +test { + useJUnitPlatform() +} + +mainClassName = 'atm.Starter' \ No newline at end of file diff --git a/hw06-ATM/src/main/java/atm/Balanceable.java b/hw06-ATM/src/main/java/atm/Balanceable.java new file mode 100644 index 0000000..c4b1294 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/Balanceable.java @@ -0,0 +1,5 @@ +package atm; + +public interface Balanceable { + Integer getBalance(); +} \ No newline at end of file diff --git a/hw06-ATM/src/main/java/atm/Nominal.java b/hw06-ATM/src/main/java/atm/Nominal.java new file mode 100644 index 0000000..9483280 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/Nominal.java @@ -0,0 +1,29 @@ +package atm; + +public enum Nominal { + ONE_HUNDRED( 100 ), + TWO_HUNDREDS( 200 ), + FIVE_HUNDRED( 500 ), + ONE_THOUSAND( 1000 ), + TWO_THOUSANDS( 2000 ), + FIVE_THOUSANDS( 5000 ); + + private Integer nominal; + + Nominal( Integer nominal ) { + this.nominal = nominal; + } + + public Integer getNominal() { + return nominal; + } + + public static Nominal getNominalFromInt( Integer value ) { + if ( value == null ) return null; + for ( Nominal nominal : values() ) { + if ( nominal.nominal.equals( value ) ) return nominal; + } + return null; + } +} + diff --git a/hw06-ATM/src/main/java/atm/Starter.java b/hw06-ATM/src/main/java/atm/Starter.java new file mode 100644 index 0000000..3e8ee0a --- /dev/null +++ b/hw06-ATM/src/main/java/atm/Starter.java @@ -0,0 +1,63 @@ +package atm; + +import atm.atm.ATM; +import atm.atm.impl.ATMImpl; + +import java.util.List; +import java.util.Scanner; + +public class Starter { + private ATM atm; + + public static void main(String args[]) { + Starter starter = new Starter(); + starter.atm = ATMImpl.ATMImplBuilder.build(); + String name = "User"; + System.out.println("Hello, my dear friend. What's your name?"); + Scanner scanner = new Scanner(System.in); + Scanner stringScanner; + name = scanner.nextLine(); + System.out.println("Hello " + name + "! What's your command? (add, get, rest, exit)"); + String operation = scanner.nextLine(); + while (!operation.equalsIgnoreCase("exit")) { + switch (operation.toLowerCase()) { + case "add": + System.out.println("What nominal?"); + String nominalsString = scanner.nextLine(); + stringScanner = new Scanner(nominalsString); + Integer value; + while (stringScanner.hasNextInt()) { + value = stringScanner.nextInt(); + Nominal nominal = Nominal.getNominalFromInt(value); + if (nominal != null) { + starter.atm.putCash(nominal); + System.out.println("Success " + nominal.getNominal()); + } else { + System.out.println(value + "? Was it?"); + } + } + break; + case "get": + System.out.println("How much? Enter sum"); + String sumString = scanner.nextLine(); + stringScanner = new Scanner(sumString); + value = stringScanner.nextInt(); + List cash = starter.atm.getCash(value); + System.out.print("Cash included:"); + for (Nominal nominal:cash){ + System.out.print(" " + nominal.getNominal()); + } + System.out.println(""); + break; + case "rest": + System.out.println("Balance is " + starter.atm.getBalance()); + break; + default: + System.out.println("Incorrect command"); + } + + System.out.println(" What's your next command? (add, get, rest, exit)"); + operation = scanner.nextLine(); + } + } +} \ No newline at end of file diff --git a/hw06-ATM/src/main/java/atm/atm/ATM.java b/hw06-ATM/src/main/java/atm/atm/ATM.java new file mode 100644 index 0000000..13ae33c --- /dev/null +++ b/hw06-ATM/src/main/java/atm/atm/ATM.java @@ -0,0 +1,11 @@ +package atm.atm; + +import atm.Nominal; +import java.util.List; + +public interface ATM { + boolean putCash( Nominal cash); + List getCash(Integer sum); + Integer getBalance(); +} + diff --git a/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java b/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java new file mode 100644 index 0000000..dfb0d40 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java @@ -0,0 +1,108 @@ +package atm.atm.impl; + +import atm.Nominal; +import atm.atm.ATM; +import atm.cell.Cell; +import atm.cell.impl.CellImpl; +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + + +public class ATMImpl implements ATM { + private List atmStorage; + + private BufferedReader bufferedReader; + + private ATMImpl() { + + this.atmStorage = new ArrayList<>(); + for (Nominal nominal : Nominal.values()) { + this.atmStorage.add(new CellImpl(nominal, 5)); + } + } + + @Override + public boolean putCash(Nominal cash) { + Cell curCell = null; + for (Cell cellNominalEntry : atmStorage) { + if (cellNominalEntry.getNominal() == cash && cellNominalEntry.getCount() < CellImpl.MAX_COUNT) { + cellNominalEntry.put(1); + return true; + } + } + return false; + } + + @Override + public List getCash(Integer sum) { + if (sum % 100 != 0) { + throw new IllegalArgumentException("Введена некорректная сумма. Минимальная купюра - 100р."); + } + if (sum > this.getBalance()) { + throw new IllegalArgumentException("Запрашиваемая сумма превышает остаток денег в банкомате."); + } + List outList = new ArrayList<>(); + List nominalList = new ArrayList<>(this.atmStorage.stream().map(Cell::getNominal).collect(Collectors.toList())); + nominalList.sort(Comparator.reverseOrder()); + + Map checkMap = new HashMap<>(); + for (Nominal nominal : nominalList) { + Integer mustGive = sum / nominal.getNominal(); + sum = sum % nominal.getNominal(); + Integer canGive = 0; + for (Cell cell : this.atmStorage) + if (cell.getNominal() == nominal) + canGive += cell.getCount(); + if (canGive < mustGive) { + sum += (mustGive - canGive) * nominal.getNominal(); + checkMap.put(nominal, canGive); + } else { + if (!checkMap.containsKey(nominal)) + checkMap.put(nominal, mustGive); + } + } + if (sum != 0) { + int iHave = 0; + for (Nominal key : checkMap.keySet()) { + iHave += key.getNominal() * checkMap.get(key); + } + throw new IllegalArgumentException("Невозможно выдать запрашиваемую сумму имеющимися купюрами, максимально возможная сумма: " + iHave); + } else { + for (Nominal key : checkMap.keySet()) + addBanknotes(checkMap.get(key), key, outList); + } + return outList; + } + + private void addBanknotes(Integer number, Nominal nominal, List outList) { + for (int i = 0; i < number; i++) { + Cell minCountCell = null; + int minCount = Cell.MAX_COUNT; + outList.add(nominal); + for (Cell cell : this.atmStorage) + if (cell.getNominal() == nominal && cell.getCount() > 0 && cell.getCount() <= minCount) { + minCount = cell.getCount(); + minCountCell = cell; + } + minCountCell.get(1); + } + } + + @Override + public Integer getBalance() { + + Integer balance = 0; + for (Cell cell : this.atmStorage) { + balance += cell.getCount() * cell.getNominal().getNominal(); + } + return balance; + } + + public static class ATMImplBuilder { + public static ATMImpl build() { + ATMImpl atm = new ATMImpl(); + return atm; + } + } +} \ No newline at end of file diff --git a/hw06-ATM/src/main/java/atm/atm/impl/Safe.java b/hw06-ATM/src/main/java/atm/atm/impl/Safe.java new file mode 100644 index 0000000..2fff175 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/atm/impl/Safe.java @@ -0,0 +1,18 @@ +package atm.atm.impl; + +import atm.cell.impl.CellImpl; +import java.util.ArrayList; +import java.util.List; + +public class Safe { + private List cells = new ArrayList<>(); + + public List getCells() { + return cells; + } + + public Safe setCells( List cells ) { + this.cells = cells; + return this; + } +} diff --git a/hw06-ATM/src/main/java/atm/cell/Cell.java b/hw06-ATM/src/main/java/atm/cell/Cell.java new file mode 100644 index 0000000..adfda3a --- /dev/null +++ b/hw06-ATM/src/main/java/atm/cell/Cell.java @@ -0,0 +1,13 @@ +package atm.cell; +import atm.Nominal; + +public interface Cell { + public static final Integer MAX_CAPACITY = 10; + public static final Integer MAX_COUNT = 100; + + public void put( Integer count ); + public Integer get( Integer count ); + public Integer getCount(); + public Nominal getNominal(); + public Integer getBalance(); +} diff --git a/hw06-ATM/src/main/java/atm/cell/impl/CellImpl.java b/hw06-ATM/src/main/java/atm/cell/impl/CellImpl.java new file mode 100644 index 0000000..2e151e9 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/cell/impl/CellImpl.java @@ -0,0 +1,46 @@ +package atm.cell.impl; + +import atm.Nominal; +import atm.exceptions.CellIsFullException; + +public class CellImpl implements atm.cell.Cell { + private final Nominal nominal; + private Integer count; + + public CellImpl( Nominal cellNominal, Integer cellCount ) { + this.nominal = cellNominal; + this.count = cellCount; //Initial load + } + + @Override + public void put( Integer count ) { + if (this.count + count > MAX_CAPACITY){ + throw new CellIsFullException(); + } + this.count += count; + } + + @Override + public Integer get( Integer count ) { + Integer toReturn = ( this.count >= count ) ? count : this.count; + this.count -= toReturn; + return toReturn; + } + + @Override + public Integer getCount() { + return this.count; + } + + @Override + public Nominal getNominal() { + return this.nominal; + } + + + @Override + public Integer getBalance() { + return nominal.getNominal()*count; + } +} + diff --git a/hw06-ATM/src/main/java/atm/exceptions/AtmException.java b/hw06-ATM/src/main/java/atm/exceptions/AtmException.java new file mode 100644 index 0000000..ad462a7 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/exceptions/AtmException.java @@ -0,0 +1,4 @@ +package atm.exceptions; + +public class AtmException extends RuntimeException { +} diff --git a/hw06-ATM/src/main/java/atm/exceptions/CellIsFullException.java b/hw06-ATM/src/main/java/atm/exceptions/CellIsFullException.java new file mode 100644 index 0000000..b461432 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/exceptions/CellIsFullException.java @@ -0,0 +1,4 @@ +package atm.exceptions; + +public class CellIsFullException extends AtmException { +} diff --git a/settings.gradle b/settings.gradle index 9a32c0b..435bb60 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'otus_hw' +include 'hw06-ATM' From 52116e681a01261bd252b8803bf2581c9fbced61 Mon Sep 17 00:00:00 2001 From: "Renat I. Kashapov" Date: Sun, 20 Dec 2020 01:47:57 +0300 Subject: [PATCH 5/6] v12. + Single Responsibility. --- hw06-ATM/src/main/java/atm/Balanceable.java | 5 ----- hw06-ATM/src/main/java/atm/Starter.java | 9 ++++---- hw06-ATM/src/main/java/atm/atm/ATM.java | 4 +++- .../src/main/java/atm/atm/ATMService.java | 9 ++++++++ .../src/main/java/atm/atm/impl/ATMImpl.java | 22 ++++--------------- .../java/atm/atm/impl/ATMServiceImpl.java | 22 +++++++++++++++++++ hw06-ATM/src/main/java/atm/atm/impl/Safe.java | 18 --------------- 7 files changed, 43 insertions(+), 46 deletions(-) delete mode 100644 hw06-ATM/src/main/java/atm/Balanceable.java create mode 100644 hw06-ATM/src/main/java/atm/atm/ATMService.java create mode 100644 hw06-ATM/src/main/java/atm/atm/impl/ATMServiceImpl.java delete mode 100644 hw06-ATM/src/main/java/atm/atm/impl/Safe.java diff --git a/hw06-ATM/src/main/java/atm/Balanceable.java b/hw06-ATM/src/main/java/atm/Balanceable.java deleted file mode 100644 index c4b1294..0000000 --- a/hw06-ATM/src/main/java/atm/Balanceable.java +++ /dev/null @@ -1,5 +0,0 @@ -package atm; - -public interface Balanceable { - Integer getBalance(); -} \ No newline at end of file diff --git a/hw06-ATM/src/main/java/atm/Starter.java b/hw06-ATM/src/main/java/atm/Starter.java index 3e8ee0a..59744a0 100644 --- a/hw06-ATM/src/main/java/atm/Starter.java +++ b/hw06-ATM/src/main/java/atm/Starter.java @@ -1,13 +1,13 @@ package atm; -import atm.atm.ATM; +import atm.atm.ATMService; import atm.atm.impl.ATMImpl; - +import atm.atm.impl.ATMServiceImpl; import java.util.List; import java.util.Scanner; public class Starter { - private ATM atm; + private ATMImpl atm; public static void main(String args[]) { Starter starter = new Starter(); @@ -50,7 +50,8 @@ public static void main(String args[]) { System.out.println(""); break; case "rest": - System.out.println("Balance is " + starter.atm.getBalance()); + ATMService atmService = new ATMServiceImpl(starter.atm); + System.out.println("Balance is " + atmService.getBalance()); break; default: System.out.println("Incorrect command"); diff --git a/hw06-ATM/src/main/java/atm/atm/ATM.java b/hw06-ATM/src/main/java/atm/atm/ATM.java index 13ae33c..bb169e5 100644 --- a/hw06-ATM/src/main/java/atm/atm/ATM.java +++ b/hw06-ATM/src/main/java/atm/atm/ATM.java @@ -1,11 +1,13 @@ package atm.atm; import atm.Nominal; +import atm.cell.Cell; + import java.util.List; public interface ATM { boolean putCash( Nominal cash); List getCash(Integer sum); - Integer getBalance(); + List getAtmStorage(); } diff --git a/hw06-ATM/src/main/java/atm/atm/ATMService.java b/hw06-ATM/src/main/java/atm/atm/ATMService.java new file mode 100644 index 0000000..07aa917 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/atm/ATMService.java @@ -0,0 +1,9 @@ +package atm.atm; + +import atm.cell.Cell; +import java.util.List; + +public interface ATMService { + + Integer getBalance(); +} diff --git a/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java b/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java index dfb0d40..bb48542 100644 --- a/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java +++ b/hw06-ATM/src/main/java/atm/atm/impl/ATMImpl.java @@ -4,16 +4,12 @@ import atm.atm.ATM; import atm.cell.Cell; import atm.cell.impl.CellImpl; -import java.io.*; import java.util.*; import java.util.stream.Collectors; - public class ATMImpl implements ATM { private List atmStorage; - private BufferedReader bufferedReader; - private ATMImpl() { this.atmStorage = new ArrayList<>(); @@ -22,6 +18,10 @@ private ATMImpl() { } } + public List getAtmStorage(){ + return new ArrayList<>(this.atmStorage); + } + @Override public boolean putCash(Nominal cash) { Cell curCell = null; @@ -39,13 +39,9 @@ public List getCash(Integer sum) { if (sum % 100 != 0) { throw new IllegalArgumentException("Введена некорректная сумма. Минимальная купюра - 100р."); } - if (sum > this.getBalance()) { - throw new IllegalArgumentException("Запрашиваемая сумма превышает остаток денег в банкомате."); - } List outList = new ArrayList<>(); List nominalList = new ArrayList<>(this.atmStorage.stream().map(Cell::getNominal).collect(Collectors.toList())); nominalList.sort(Comparator.reverseOrder()); - Map checkMap = new HashMap<>(); for (Nominal nominal : nominalList) { Integer mustGive = sum / nominal.getNominal(); @@ -89,16 +85,6 @@ private void addBanknotes(Integer number, Nominal nominal, List outList } } - @Override - public Integer getBalance() { - - Integer balance = 0; - for (Cell cell : this.atmStorage) { - balance += cell.getCount() * cell.getNominal().getNominal(); - } - return balance; - } - public static class ATMImplBuilder { public static ATMImpl build() { ATMImpl atm = new ATMImpl(); diff --git a/hw06-ATM/src/main/java/atm/atm/impl/ATMServiceImpl.java b/hw06-ATM/src/main/java/atm/atm/impl/ATMServiceImpl.java new file mode 100644 index 0000000..5631076 --- /dev/null +++ b/hw06-ATM/src/main/java/atm/atm/impl/ATMServiceImpl.java @@ -0,0 +1,22 @@ +package atm.atm.impl; + +import atm.atm.ATM; +import atm.atm.ATMService; +import atm.cell.Cell; + +public class ATMServiceImpl implements ATMService { + + private ATM atm; + + public ATMServiceImpl(ATM atm){ + this.atm = atm; + } + @Override + public Integer getBalance() { + Integer balance = 0; + for (Cell cell : atm.getAtmStorage()) { + balance += cell.getCount() * cell.getNominal().getNominal(); + } + return balance; + } +} diff --git a/hw06-ATM/src/main/java/atm/atm/impl/Safe.java b/hw06-ATM/src/main/java/atm/atm/impl/Safe.java deleted file mode 100644 index 2fff175..0000000 --- a/hw06-ATM/src/main/java/atm/atm/impl/Safe.java +++ /dev/null @@ -1,18 +0,0 @@ -package atm.atm.impl; - -import atm.cell.impl.CellImpl; -import java.util.ArrayList; -import java.util.List; - -public class Safe { - private List cells = new ArrayList<>(); - - public List getCells() { - return cells; - } - - public Safe setCells( List cells ) { - this.cells = cells; - return this; - } -} From 8cfacb2519f26cf6a46d76b5a1182b7804bf7f14 Mon Sep 17 00:00:00 2001 From: 1121977 Date: Thu, 22 Apr 2021 16:52:55 +0300 Subject: [PATCH 6/6] README update --- README.md | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c29a8be..2aa9b50 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,9 @@ -# Примеры для курса "Разработчик Java" в OTUS +Написать эмулятор АТМ (банкомата). -Группа 2020-09 +Объект класса АТМ должен уметь: -### Преподаватели -Сергей Петрелевич
-Стрекалов Павел
-Александр Оруджев
-Вячеслав Лапин
-Виталий Куценко
-Дмитрий Коган +принимать банкноты разных номиналов (на каждый номинал должна быть своя ячейка) +выдавать запрошенную сумму минимальным количеством банкнот или ошибку если сумму нельзя выдать Это задание не на алгоритмы, а на проектирование. Поэтому оптимизировать выдачу не надо. +выдавать сумму остатка денежных средств +В этом задании больше думайте об архитектуре приложения. Не отвлекайтесь на создание таких объектов как: пользователь, авторизация, клавиатура, дисплей, UI (консольный, Web, Swing), валюта, счет, карта, т.д. Все это не только не нужно, но и вредно! -Студент: -Kashapov Renat (Кашапов Ренат)
-renat.kashapov@gmail.com \ No newline at end of file