Skip to content

Commit 7622940

Browse files
committed
Add Module 6
1 parent 7ba999f commit 7622940

35 files changed

+1674
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#### 6.2. Домашняя работа 6.1
2+
3+
**Цель задания**
4+
5+
Освоить на практике наследование классов.
6+
7+
**Что нужно сделать**
8+
9+
**1.** Создайте класс BankAccount, который представляет собой расчётный счёт в банке. У класса необходимо написать методы:
10+
11+
a. Снять со счёта сумму денег (без комиссии).
12+
b. Вносить на счёт сумму денег (без комиссии).
13+
c. Получить остаток на счёте.
14+
15+
**2.** Создайте два класса наследника, расширяющие работу с остатком на счёте:
16+
17+
- Депозитный расчётный счёт, с которого нельзя снимать деньги в течение месяца после последнего внесения.
18+
- Карточный счёт, при снятии денег с которого будет взиматься комиссия 1%.
19+
20+
**Критерии оценки**
21+
22+
«Зачёт» — написаны три класса: родитель и два наследника.
23+
«Незачёт» — задание не выполнено.
24+
25+
**Дополнительное задание***
26+
27+
**Цель задания**
28+
29+
Потренироваться в написании взаимодействия между классами.
30+
31+
**Что нужно сделать**
32+
33+
Напишите метод в классе BankAccount:
34+
35+
```java
36+
boolean send(BankAccount receiver, double amount)
37+
```
38+
39+
для отправки денег с одного счёта на другой. Метод должен вернуть true, если деньги успешно переведены.
40+
41+
**Примечание**
42+
43+
В методе для аргумента amount используйте тип данных, который применили в классе BankAccount. Тип double дан для примера.
44+
45+
**Критерии оценки**
46+
47+
«Зачёт» — метод send() передаёт деньги между счетами с учётом комиссий и ограничений.
48+
«Незачёт» — задание не выполнено.
49+
50+
---------------------------------------------
51+
52+
#### 6.4. Домашняя работа 6.2
53+
54+
**Цель задания**
55+
56+
Научиться исследовать код и выбирать подходящие модификаторы доступа.
57+
58+
**Что нужно сделать**
59+
60+
Изучите методы и переменные проекта задания 6.1 и установите подходящие модификаторы доступа у методов и переменных.
61+
62+
**Критерии оценки**
63+
64+
«Зачёт» — для всех переменных и методов установлены подходящие модификаторы доступа.
65+
«Незачёт» — задание не выполнено.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import java.text.ParseException;
2+
import java.text.SimpleDateFormat;
3+
import java.util.Date;
4+
5+
public class DataFormatExample {
6+
7+
public static void main(String[] args) {
8+
long currentTime = System.currentTimeMillis();
9+
10+
Date currentDate = new Date(currentTime);
11+
System.out.println(currentDate);
12+
13+
String currentStringDate = new SimpleDateFormat("dd.MM.yyyy").format(currentTime);
14+
String currentStringDate2 = new SimpleDateFormat("dd.MM.yyyy").format(currentDate);
15+
16+
System.out.println(currentStringDate);
17+
System.out.println(currentStringDate2);
18+
19+
try {
20+
Date parsedDate = new SimpleDateFormat("dd.MM.yyyy").parse("16.04.2004");
21+
System.out.println(parsedDate);
22+
} catch (ParseException e) {
23+
e.printStackTrace();
24+
}
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import bank.account.BankAccount;
2+
import bank.account.CardBankAccount;
3+
import bank.account.DepositBankAccount;
4+
5+
import java.time.LocalDate;
6+
7+
// Task 6.1.1
8+
// Task 6.1.2
9+
// Task 6.2
10+
public class Main {
11+
12+
public static void main(String[] args) {
13+
// Part 1 - BankAccount
14+
BankAccount myAccount = new BankAccount(500_000.0);
15+
BankAccount partnerAccount = new BankAccount(1_700_000.0);
16+
17+
myAccount.deposit(130_000);
18+
myAccount.withdraw(25_000);
19+
myAccount.send(partnerAccount, 170_000);
20+
System.out.println("-----------------------------------------------");
21+
22+
// Part 2 - DepositBankAccount
23+
DepositBankAccount depositAccount = new DepositBankAccount(500_000);
24+
25+
depositAccount.deposit(200_000);
26+
depositAccount.withdraw(50_000); // не прошло достаточно времени для операции
27+
depositAccount.withdraw(50_000, LocalDate.now().plusDays(32)); // успешная операция
28+
depositAccount.withdraw(125_000, LocalDate.now().plusMonths(2)); // успешная операция
29+
30+
depositAccount.send(myAccount, 75_500); // yе прошло достаточно времени для операции
31+
depositAccount.send(myAccount, 75_500, LocalDate.now().plusMonths(12)); // успешная операция
32+
System.out.println("-----------------------------------------------");
33+
34+
// Part 3 - CardBankAccount
35+
CardBankAccount cardAccount = new CardBankAccount(0);
36+
37+
cardAccount.withdraw(1_000); // операция не прошла
38+
cardAccount.deposit(5_000);
39+
cardAccount.withdraw(10_000_000); // операция не прошла
40+
cardAccount.send(partnerAccount,4_500);
41+
System.out.println("-----------------------------------------------");
42+
43+
System.out.println(myAccount);
44+
System.out.println(partnerAccount);
45+
System.out.println(depositAccount);
46+
System.out.println(cardAccount);
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package bank.account;
2+
3+
public class BankAccount {
4+
5+
protected String accountId;
6+
protected double amount;
7+
public final String CURRENCY = "RUR";
8+
9+
public BankAccount(double amount) {
10+
this.accountId = String.valueOf(System.nanoTime());
11+
if (amount > 0) {
12+
this.amount = amount;
13+
} else {
14+
this.amount = 0;
15+
}
16+
startMessage();
17+
}
18+
19+
protected void startMessage() {
20+
System.out.println("Открыт расчётный " + CURRENCY + " счёт №" + accountId +
21+
". Баланс: " + amount + " " + CURRENCY);
22+
}
23+
24+
public String getAccountId() {
25+
return accountId;
26+
}
27+
28+
// public void setAccountId(String accountId) {
29+
// this.accountId = accountId;
30+
// }
31+
32+
public double balance() {
33+
return amount;
34+
}
35+
36+
public void deposit(double sum) {
37+
if (sum > 0) {
38+
amount += sum;
39+
System.out.println("Счёт №" + accountId + " пополнен на сумму " + sum + " " + CURRENCY +
40+
". Баланс средств после операции: " + amount + " " + CURRENCY);
41+
} else {
42+
System.out.println("Не удалось пополнить счёт №" + accountId + "." +
43+
"Некорректная сумма.");
44+
}
45+
}
46+
47+
public void withdraw(double sum) {
48+
if (sum > 0 && amount >= sum) {
49+
amount -= sum;
50+
System.out.println("Со счёта №" + accountId + " снята сумма " + sum + " " + CURRENCY +
51+
". Остаток средств после операции: " + amount + " " + CURRENCY);
52+
} else {
53+
System.out.println("Не удалось снять средства со счёте №" + accountId +
54+
". Некорректная сумма.");
55+
}
56+
}
57+
58+
public boolean send(BankAccount recipient, double sum) {
59+
if (sum > 0 && this.amount > 0 && this.amount > sum) {
60+
amount -= sum;
61+
recipient.deposit(sum);
62+
System.out.println("Средства со счёта №" + accountId + " в размере "+ sum + " " + CURRENCY +
63+
" успешно переведены на счёт №" + recipient.getAccountId() +
64+
". Остаток средств после операции: " + amount + " " + CURRENCY);
65+
return true;
66+
} else {
67+
System.out.println("Не удалось перевести средства со счёта №" + accountId +
68+
" на счёт №" + recipient.getAccountId() +
69+
". Недостаточная сумма средств.");
70+
return false;
71+
}
72+
}
73+
74+
@Override
75+
public String toString() {
76+
return "Остаток средств на счёте №" + accountId +
77+
" составляет " + amount + " " + CURRENCY;
78+
}
79+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package bank.account;
2+
3+
public class CardBankAccount extends BankAccount {
4+
5+
public static final double COMMISSION = 1.0 / 100;
6+
7+
public CardBankAccount(double amount) {
8+
super(amount);
9+
}
10+
11+
@Override
12+
protected void startMessage() {
13+
System.out.println("Открыт карточный " + CURRENCY + " счёт №" + super.accountId +
14+
". Баланс: " + super.amount + " " + CURRENCY);
15+
}
16+
17+
@Override
18+
public void withdraw(double sum) {
19+
super.withdraw(sum * (1 + COMMISSION));
20+
}
21+
22+
public boolean send(BankAccount recipient, double sum) {
23+
return super.send(recipient,sum * (1 + COMMISSION));
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package bank.account;
2+
3+
import java.time.LocalDate;
4+
5+
public class DepositBankAccount extends BankAccount {
6+
7+
public static final long MONTHS_ALLOW_WITHDRAW = 1;
8+
private LocalDate lastDepositDate;
9+
10+
public DepositBankAccount(double amount) {
11+
super(amount);
12+
lastDepositDate = LocalDate.now();
13+
}
14+
15+
@Override
16+
protected void startMessage() {
17+
System.out.println("Открыт депозитный " + CURRENCY + " счёт №" + super.accountId +
18+
". Баланс: " + super.amount + " " + CURRENCY);
19+
}
20+
21+
@Override
22+
public void deposit(double sum) {
23+
super.deposit(sum);
24+
}
25+
26+
@Override
27+
public void withdraw(double sum) {
28+
if (LocalDate.now().isAfter(lastDepositDate.plusMonths(MONTHS_ALLOW_WITHDRAW))) {
29+
super.withdraw(sum);
30+
} else {
31+
System.out.println("Не удалось снять средства со счёта №" + super.accountId +
32+
". Депозитный расчётный счёт, с которого нельзя снимать деньги" +
33+
" в течение месяца после последнего внесения.");
34+
}
35+
}
36+
37+
public void withdraw(double sum, LocalDate dateOfOperation) {
38+
if (dateOfOperation.isAfter(lastDepositDate.plusMonths(MONTHS_ALLOW_WITHDRAW))) {
39+
super.withdraw(sum);
40+
} else {
41+
System.out.println("Не удалось снять средства со счёте №" + super.accountId +
42+
". Депозитный расчётный счёт, с которого нельзя снимать деньги" +
43+
" в течение месяца после последнего внесения.");
44+
}
45+
}
46+
47+
@Override
48+
public boolean send(BankAccount recipient, double sum) {
49+
if (LocalDate.now().isAfter(lastDepositDate.plusMonths(MONTHS_ALLOW_WITHDRAW))) {
50+
return super.send(recipient, sum);
51+
} else {
52+
System.out.println("Не удалось перевести средства со счёта №" + super.accountId +
53+
" на счёт №" + recipient.getAccountId() +
54+
". Депозитный расчётный счёт, с которого нельзя снимать деньги" +
55+
" в течение месяца после последнего внесения.");
56+
return false;
57+
}
58+
}
59+
60+
public boolean send(BankAccount recipient, double sum, LocalDate dateOfOperation) {
61+
if (dateOfOperation.isAfter(lastDepositDate.plusMonths(MONTHS_ALLOW_WITHDRAW))) {
62+
return super.send(recipient, sum);
63+
} else {
64+
System.out.println("Не удалось перевести средства со счете №" + super.accountId +
65+
" на счёт №" + recipient.getAccountId() +
66+
". Депозитный расчётный счёт, с которого нельзя снимать деньги" +
67+
" в течение месяца после последнего внесения.");
68+
return false;
69+
}
70+
}
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#### 6.6. Домашняя работа 6.3
2+
3+
**Цель задания**
4+
5+
Освоить работу с наследованием, используя абстрактный класс.
6+
7+
**Что нужно сделать**
8+
9+
**1.** Создайте классы, представляющие клиентов банка: абстрактный класс Client, классы для физических лиц, юридических лиц и индивидуальных предпринимателей.
10+
11+
У каждого клиента есть сумма денег на счету (число). Деньги можно положить на счёт, снять и вернуть остаток на счёте. Каждый класс должен содержать метод, который выводит информацию в консоль о счёте: условие пополнения, условие снятия и баланс.
12+
13+
**2.** Реализуйте методы, при которых:
14+
15+
- У физических лиц пополнение и снятие происходит без комиссии.
16+
- У юридических лиц — снятие с комиссией 1%.
17+
- У ИП — пополнение с комиссией 1%, если сумма меньше 1000 рублей. И с комиссией 0,5%, если сумма больше либо равна 1000 рублей.
18+
19+
**Критерии оценки**
20+
21+
«Зачёт» — написан абстрактный класс и три класса наследника.
22+
«Незачёт» — задание не выполнено.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import client.IndividualEntrepreneurClient;
2+
import client.LegalPersonClient;
3+
import client.PhysicalPersonClient;
4+
5+
// Task 6.3
6+
public class Main {
7+
8+
public static void main(String[] args) {
9+
// 1 - Physical person client
10+
PhysicalPersonClient physicalPerson = new PhysicalPersonClient(100_000);
11+
12+
physicalPerson.deposit(25_000);
13+
physicalPerson.withdraw(4_000);
14+
System.out.println(physicalPerson.balance());
15+
System.out.println(physicalPerson);
16+
System.out.println("--------------------------------------------------");
17+
18+
// 2 - Legal person client
19+
LegalPersonClient legalPerson = new LegalPersonClient(2_000_000);
20+
21+
legalPerson.deposit(500_000);
22+
legalPerson.withdraw(100_000);
23+
System.out.println("--------------------------------------------------");
24+
25+
// 3 - Individual entrepreneur client
26+
IndividualEntrepreneurClient individualEntrepreneur = new IndividualEntrepreneurClient(200_000);
27+
28+
individualEntrepreneur.deposit(500);
29+
individualEntrepreneur.deposit(1500);
30+
individualEntrepreneur.deposit(100_000);
31+
individualEntrepreneur.withdraw(25_000);
32+
}
33+
}

0 commit comments

Comments
 (0)