Initial commit

This commit is contained in:
commit 0ab1c26e39
15 changed files with 356 additions and 0 deletions

3
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name Normal file
View File

@ -0,0 +1 @@
bank

10
.idea/bank.iml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,17 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N802" />
</list>
</option>
</inspection_tool>
<inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="true">
<option name="processCode" value="false" />
<option name="processLiterals" value="false" />
<option name="processComments" value="false" />
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (hangman)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/bank.iml" filepath="$PROJECT_DIR$/.idea/bank.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

79
Account.py Normal file
View File

@ -0,0 +1,79 @@
from datetime import date
from Operation import Operation
class Account:
_owner = None
_id = None
_balance = 0.0
_max_debit = 100.0
_operations = []
_currency = None
def __init__(self, currency, owner, id):
self.setCurrency(currency)
self.setOwner(owner)
self.setId(id)
def setOwner(self, owner):
self._owner = owner
def getOwner(self):
return self._owner
def setId(self, id):
self._id = id
def getId(self):
return self._id
def setCurrency(self, currency):
self._currency = currency
def getCurrency(self):
return self._currency
def getBalance(self):
return self._balance
def changeBalance(self, amount, ):
self.checkDebit(amount)
self.createOperation("wypłata" if amount < 0 else "wpłata", amount, )
self._balance += amount
def getDebit(self):
return self._max_debit
def checkDebit(self, amount):
if self.getBalance() + amount < -self.getDebit():
raise Exception("Debit exceeded!")
def addOperation(self, operation):
self._operations.append(operation)
def incomingTransfer(self, amount, sender, title='Work payment'):
self.createOperation('Incoming transfer', amount, sender, title)
def outgoingTransfer(self, amount, recipient, title='Money transfer'):
self.createOperation('Outgoing transfer', amount, recipient, title)
def withdraw(self, amount):
if abs(amount) > self.getBalance() + self.getDebit():
raise Exception("Not enough money!")
if abs(amount) > self.getBalance():
print("You're in debt!")
self.changeBalance(-amount)
print(f"Withdrawal successful, balance: {self.getBalance()} {self.getCurrency()}")
def deposit(self, amount):
if not (amount % 10):
raise Exception("Deposit must be a multiple of 10")
self.createOperation("Deposit", amount, self, "Deposit at an ATM")
def createOperation(self, type, amount, person, title):
operation = Operation(type, amount, person, title, date.today())
self.addOperation(operation)
def getOperations(self):
return self._operations

53
Bank.py Normal file
View File

@ -0,0 +1,53 @@
class Bank:
_accounts = []
_peopleID = {
"people": [],
"bankers": []
}
_name = None
_capital = None
def __init__(self, name):
self.setBankName(name)
self._capital = None
def setBankName(self, name):
self._name = name
def getBankName(self):
return self._name
def setCapital(self, value):
self._capital = value
def getCapital(self):
return self._capital
def changeCapital(self, value):
self.getCapital() + value
def getIds(self):
return self._peopleID
def addId(self, person):
self._peopleID["people"].append(person)
def deleteId(self, id):
self.getIds()["people"].remove(id)
def addAccount(self, account, id):
self.addId(id)
self._accounts.append(account)
def getAccounts(self):
return self._accounts
def deleteAccount(self, account):
self.deleteId(account.getID())
account.getOwner().deleteAccount(account)
self.changeCapital(-account.getBalance())
self._accounts.remove(account)
def _hireBanker(self, banker):
banker.setBank(self)
self._peopleID["bankers"].append(banker)

29
Banker.py Normal file
View File

@ -0,0 +1,29 @@
import random
from Account import Account
from Person import Person
class Banker(Person):
_bank = None
def __init__(self, name, surname, currency):
super().__init__(name, surname, currency)
def setBank(self, bank):
self._bank = bank
def getBank(self):
return self._bank
def openAccount(self, person):
newID = random.randint(1, 999)
while newID in self.getBank().getIds():
newID = random.randint(1, 999)
person.addAccount(self.getBank().getBankName(), newID)
account = Account(person.getCurrency(), person, newID)
self.getBank().addAccount(account, newID)
return account
def closeAccount(self, account):
self.getBank().deleteAccount(account)

18
Boss.py Normal file
View File

@ -0,0 +1,18 @@
from Person import Person
class Boss(Person):
_bank = None
def __init__(self, name, surname, currency, bank):
super().__init__(name, surname, currency)
self.setBank(bank)
def getBank(self):
return self._bank
def setBank(self, value):
self._bank = value
def hireBanker(self, banker):
self.getBank()._hireBanker(banker)

46
Operation.py Normal file
View File

@ -0,0 +1,46 @@
class Operation:
_operationTypes = None
_amount = None
_person = None
_title = None
_date = None
def __init__(self, type, amount, person, title, date):
self.setOperationType(type)
self.setAmount(amount)
self.setPerson(person)
self.setTitle(title)
self.setDate(date)
def getDate(self):
return self._date
def setDate(self, value):
self._date = value
def getTitle(self):
return self._title
def setTitle(self, title):
self._title = title
def getPerson(self):
return self._person
def setPerson(self, value):
self._person = value
def getOperationType(self):
return self._operationTypes
def setOperationType(self, value):
self._operationTypes = value
def getAmount(self):
return self._amount
def setAmount(self, value):
self._amount = value
def __str__(self):
return f"Operation type: {self.getOperationType()}\nAmount: {self.getAmount()}\nAccount: {self.getPerson()}, \nDate: {self.getDate()}"

51
Person.py Normal file
View File

@ -0,0 +1,51 @@
import re
class Person:
_name = None
_surname = None
_accounts = []
_currency = None
def __init__(self, name, surname, currency):
self.setName(name)
self.setSurname(surname)
self.setCurrency(currency)
def setName(self, name):
self._name = self._validateInput(name)
def getName(self):
return self._name
def setSurname(self, surname):
self._surname = self._validateInput(surname)
def getSurname(self):
return self._surname
def addAccount(self, bank, id):
self._accounts.append((bank, id))
def getAccounts(self):
return self._accounts
def deleteAccount(self, account):
self.getAccounts().remove(account)
def getFullName(self):
return f"{self._name} {self._surname}"
def setCurrency(self, currency):
self._currency = currency
def getCurrency(self):
return self._currency
@staticmethod
def _validateInput(input_value):
flag = re.search("^[a-zA-ZżźćńółęąśŻŹĆĄŚĘŁÓŃ]+$", input_value)
if flag:
return input_value.capitalize()
else:
raise Exception("Incorrect input!")

22
main.py Normal file
View File

@ -0,0 +1,22 @@
from Boss import Boss
from Bank import Bank
from Banker import Banker
from Person import Person
mbank = Bank('mBank')
ludzik = Person('adam', "KOWALSKI", '')
czlowiek = Person('jan', 'nowak', '')
kierwonik = Banker('bożena', 'nowak', '')
admin = Boss('wojciech', 'grzybowski', '', mbank)
admin.hireBanker(kierwonik)
konta = kierwonik.getBank().getAccounts()
print(konta)
czlowiek_konto = kierwonik.openAccount(czlowiek)
czlowiek_konto.changeBalance(10)
print([konto.getId() for konto in konta])
kierwonik.openAccount(ludzik)
print([konto.getOwner().getFullName() for konto in konta])
for konto in konta:
konto.changeBalance(-101)
print([konto.getBalance() for konto in konta])