from customer import Customer from bankaccount import BankAccount from salary_account import SalaryAccount if __name__ == '__main__': # zuerst die benötigten Objekte erstellen. # beide Konti mit Initialwert 1000 erzeugen. Der Überzug beträgt 500. Der Zins ist beliebig. pass # print('Angaben zu Kunde') # print aller Kundendaten (Customer-Objekte) pass print('Angaben zum den Konti') # print aller Konten pass #----------------------------------------------------------------------------------------------- print('\nvon jedem Konto 750.0 beziehen') # von beiden Konten geldbeziehen und den Saldo ausgeben pass #---------------------------------------------------------------------------------------------- print('\nvon jedem Konto noch einmal 400.0 beziehen') # Erneut Geld beziehen mit unterschiedlichen Auswirkungen pass #----------------------------------------------------------------------------------------------- print('\nEnde Monat: 3000.- Lohn wird eingezahlt') # Geld einzahlen und den Effekt prüfen.
class AccountIndexException(Exception): def __init__(self, index, max): super().__init__(f'Ungültiger Indexwert: {max} Einträge vorhanden, Nummer {index} gefordert')
""" provides a class for a bank account """ from customer import Customer class BankAccount: """ A normal bank account Attributes: ----------- - owner: Customer the owner of the bank account - balance: float the current balance of the bank account - interest: float the interest rate of the bank account - type: str the type of the bank account. 'Standard bank account' is the default """ def __init__(self, owner, initial_balance, interest): """ Initializes the object :param owner: The owner of the bank account :param initial_balance: The initial balance of the bank account :param interest: The interest rate """ self._owner = owner self._balance = initial_balance self._interest = interest self._type = 'Standard bank account' owner.add_bank_account(self) def has_available(self, amount): """ Checks if the account has enough money to withdraw the amount """ return amount <= self._balance def deposit_money(self, amount): """ Deposits money to the account :param amount: The amount to deposit """ self._balance += amount def withdraw_money(self, amount): """ Withdraws money from the account :param amount: The amount to withdraw """ if self.has_available(amount): self._balance -= amount return amount else: print('Not enough money available') return 0 @property def owner(self): """ Returns the owner of the bank account :return: The owner of the bank account """ return self._owner @property def balance(self): """ Returns the balance of the bank account :return: The balance of the bank account """ return self._balance @property def interest(self): """ Returns the interest rate of the bank account :return: The interest rate of the bank account """ return self._interest @interest.setter def interest(self, interest): """ Sets the interest rate of the bank account :param interest: The interest rate of the bank account """ self._interest = interest @property def type(self): """ Returns the type of the bank account :return: The type of the bank account """ return self._type def __str__(self): output = '------------------------------------------------\n' output += f'Kunde : {self.owner.name}' + '\n' output += f'Kontotyp : {self._type}' + '\n' output += f'\tSaldo: {self.balance}' + '\n' output += f'\tZins : {self.interest}' return output # Test if __name__ == '__main__': p = Customer('Pia', 24) ac = BankAccount(p, 3500.00, 1.75) print(ac)
""" This module contains the class Customer. """ from person import Person from account_index_exception import AccountIndexException class Customer(Person): """ Defines a customer as a person who has one or more bank accounts. Attributes ---------- - name: str The full name of the customer - age: int The age of the customer - accounts: list A list of bank accounts the customer has """ def __init__(self, name, age): """ Initializes the object :param name: Name of the customer :param age: The age of the customer """ super().__init__(name, age) self._accounts = [] def take_bank_account(self, index): """ Returns the bank account at the given index :param index: The index of the bank account :return: The bank account at the given index :raises AccountIndexException: If the index is out of range """ if index < self.number_of_accounts: return self._accounts[index] raise AccountIndexException(index, len(self._accounts)) def add_bank_account(self, account): """ Adds a bank account to the customer :param account: The bank account to add """ self._accounts.append(account) @property def current_assets(self): """ Returns the current assets of the customer :return: The current assets of the customer """ asset = 0 for account in self._accounts: asset += account.balance return asset def _str__(self): """ Returns a string representation of the customer and his/her accounts """ output = super().__str__() + '\n' for account in self._accounts: output += account + '\n' if __name__ == '__main__': from bankaccount import BankAccount from salary_account import SalaryAccount c = Customer('Pia', 34) bc = BankAccount(c, 1000.00, 1.5) sc = SalaryAccount(c, 5000.00, 2.25, 2500.0) print(c)
""" provides a class to describe a person """ class Person: """ Defines a "general" person with Attributes ---------- - name: str The full name of the person - birth_year: int The year the person was born - address: str The address of the person """ def __init__(self, name, year): """ Initializes the object :param name: Name of the person :param year: The year the person was born """ self._name = name self._birth_year = year self._address = '' @property def name(self): """ Returns the name of the person :return: Name of the person """ return self._name @property def birth_year(self): """ Returns the age of the person :return: Age of the person """ return self._birth_year @property def address(self): """ Returns the address of the person :return: Address of the person """ return self._address @address.setter def address(self, address): """ Sets the address of the person :param address: The address of the person """ self._address = address def __str__(self): """ Returns a string representation of the object """ return f'Person: {self._name}\n\tAlter : {self.birth_year}\n\tAdresse : {self.address}' # nur für Test if __name__ == '__main__': person = Person('Max', 2000) person.address = 'Musterdorf' print(person)
""" provides a class for a salary account """ from bankaccount import BankAccount from customer import Customer class SalaryAccount(BankAccount): """ A salary account Attributes: ----------- - owner: Customer the owner of the bank account - balance: float the current balance of the bank account - interest: float the interest rate of the bank account - overdraw: float the maximum amount that can be overdrawn - type: str the type of the bank account. 'Salary bank account' is the default """ def __init__(self, owner, deposit, interest, overdraft): """ Initializes the object :param owner: The owner of the bank account :param deposit: The initial balance of the bank account :param interest: The interest rate :param overdraft: The maximum amount that can be overdrawn """ super().__init__(owner, deposit, interest) self.overdraft = overdraft self._type = 'Salary bank account' def has_available(self, amount): """ Checks if the account has enough money to withdraw the amount """ return amount <= (self._balance + self._overdraft) @property def overdraft(self): """ Returns the overdraft of the account :return: The overdraft of the """ return self._overdraft @overdraft.setter def overdraft(self, overdraft): """ Sets the overdraft of the account :param overdraft: The overdraft of the account """ self._overdraft = overdraft def __str__(self): """ Returns a string representation of the account """ output = super().__str__() + '\n' output += f'\tÜberzug: {self.overdraft}' return output #Test if __name__ == '__main__': p = Customer('Pia', 24) sc = SalaryAccount(p, 3500.00, 1.75, 1000.00) print(sc)