From 27ac1785094d1d75b73f54b239fce9785449487e Mon Sep 17 00:00:00 2001 From: PavelShershnoyv Date: Mon, 1 Nov 2021 20:02:43 +0500 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=205=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/task_1/index.ts | 40 +++++++++++++++++++++++++++---- src/task_2/index.ts | 30 ++++++++++++++++------- src/task_3/index.ts | 58 ++++++++++++++++++++++++++++++++++++--------- src/task_4/index.ts | 19 +++++++++++---- src/task_5/index.ts | 40 ++++++++++++++++++------------- 5 files changed, 142 insertions(+), 45 deletions(-) diff --git a/src/task_1/index.ts b/src/task_1/index.ts index 52f4a7d..5d989fc 100644 --- a/src/task_1/index.ts +++ b/src/task_1/index.ts @@ -31,17 +31,49 @@ export interface IMoneyUnit { } export class MoneyRepository { - private _repository: any; + private _repository: IMoneyUnit[]; - constructor(initialRepository: any) { + constructor(initialRepository: IMoneyUnit[]) { this._repository = initialRepository; } - public giveOutMoney(count: any, currency: any): any { + public giveOutMoney(count: number, currency: Currency): boolean { + this._repository.sort((x,y) => parseInt(y.moneyInfo.denomination) - parseInt(x.moneyInfo.denomination)); + for(const obj of this._repository){ + const denomination: number = parseInt(obj.moneyInfo.denomination); + if(obj.moneyInfo.currency !== currency || denomination > count || obj.count === 0){ + continue; + }else{ + const ost: number = count/denomination; + if (ost > obj.count){ + count -= obj.count * denomination; + obj.count = 0; + }else{ + count -= ost*denomination; + obj.count -= ost; + } + } + } + return count === 0; } - public takeMoney(moneyUnits: any): any { + public takeMoney(moneyUnits: IMoneyUnit[]): boolean { + for (let j = 0; j< moneyUnits.length; j++){ + let canTake: boolean; + for (let i = 0; i < this._repository.length; i++) { + if (this._repository[i].moneyInfo.denomination === moneyUnits[j].moneyInfo.denomination + && this._repository[i].moneyInfo.currency === moneyUnits[j].moneyInfo.currency) { + this._repository[i].count += moneyUnits[j].count; + canTake = true; + } + } + if (!canTake){ + this._repository.push({ moneyInfo: { denomination: moneyUnits[j].moneyInfo.denomination, + currency: moneyUnits[j].moneyInfo.currency }, count: moneyUnits[j].count }); + } + } + return true; } } \ No newline at end of file diff --git a/src/task_2/index.ts b/src/task_2/index.ts index 461dbe9..46d2d2e 100644 --- a/src/task_2/index.ts +++ b/src/task_2/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ /** Задача 1 - BankOffice * Имеется класс BankOffice. Который должен хранить пользователей и банковские карты. * Пользователи банка могу иметь карту, а могут не иметь. @@ -32,23 +33,34 @@ export interface IBankUser { } export class BankOffice { - private _users: any; - private _cards: any; + private _users: IBankUser[]; + private _cards: ICard[]; - constructor(users: any, cards: any) { - this._users = users; - this._cards = cards; + constructor(users: IBankUser[], cards: ICard[]) { + this._users = users; + this._cards = cards; } - public authorize(userId: any, cardId: any, cardPin: any): any { + public authorize(userId: string, cardId: string, cardPin: string): boolean { + const user: IBankUser = this._users.find(user => user.id === userId); + const card: ICard = user.cards.find(card => card.id === cardId); + return user.cards.indexOf(card) !== -1 && card.pin === cardPin; } - public getCardById(cardId: any): any { + public getCardById(cardId: string): ICard { + const notCard: ICard = this._cards.find(card => card.id === cardId); + if (notCard === undefined) { + const userCard: IBankUser = this._users.find(user => user.cards.find(card => card.id === cardId)); - } + return userCard === undefined ? undefined : userCard.cards.find(card => card.id === cardId); + } - public isCardTiedToUser(cardId: any): any { + return notCard; + } + public isCardTiedToUser(cardId: string): boolean { + return this._users.find(user => user.cards.find( + card => card.id === cardId)) !== undefined; } } \ No newline at end of file diff --git a/src/task_3/index.ts b/src/task_3/index.ts index 9020644..f5abb1b 100644 --- a/src/task_3/index.ts +++ b/src/task_3/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ /** Задача 3 - UserSettingsModule * Имеется класс UserSettingsModule. Который должен отвечать за * изменение настроек пользователя. @@ -18,32 +19,67 @@ */ import { UserSettingOptions } from '../enums'; +import { IBankUser, BankOffice, ICard } from '../task_2'; export class UserSettingsModule { - private _bankOffice: any; - private _user: any; + private _bankOffice: BankOffice; + private _user: IBankUser; - public set user(user: any) { - this._user = user; + public set user(user: IBankUser) { + this._user = user; } - constructor(initialBankOffice: any) { - this._bankOffice = initialBankOffice; + constructor(initialBankOffice: BankOffice) { + this._bankOffice = initialBankOffice; } - private changeUserName(newName: any): any { + private changeUserName(newName: string): boolean { + if (this._user !== null && this._user !== undefined) { + if (this._user.name !== newName) { + this._user.name = newName; + return true; + } + } + + return false; } - private changeUserSurname(newSurname: any): any { + private changeUserSurname(newSurname: string): boolean { + if (this._user !== null && this._user !== undefined) { + if (this._user.surname !== newSurname) { + this._user.surname = newSurname; + + return true; + } + } + return false; } - private registerForUserNewCard(newCardId: any): any { + private registerForUserNewCard(newCardId: string): boolean { + const card: ICard = this._bankOffice.getCardById(newCardId); + if (this._user !== null && this._user !== undefined && card !== undefined) { + if(!this._bankOffice.isCardTiedToUser(card.id)) { + this._user.cards.push(card); + + return true; + } + } + return false; } - public changeUserSettings(option: UserSettingOptions, argsForChangeFunction: any): any { - + public changeUserSettings(option: UserSettingOptions, argsForChangeFunction: string): boolean { + switch(option) { + case UserSettingOptions.name: + return this.changeUserName(argsForChangeFunction); + case UserSettingOptions.surname: + return this.changeUserSurname(argsForChangeFunction); + case UserSettingOptions.newCard: + return this.registerForUserNewCard(argsForChangeFunction); + default: + return false; + } } } \ No newline at end of file diff --git a/src/task_4/index.ts b/src/task_4/index.ts index bdd7528..d895770 100644 --- a/src/task_4/index.ts +++ b/src/task_4/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ /** Задача 4 - CurrencyConverterModule * Имеется класс CurrencyConverterModule. Который должен отвечать за * конвертацию валют. @@ -16,15 +17,23 @@ */ import { Currency } from '../enums'; +import { IMoneyUnit, MoneyRepository } from '../task_1'; export class CurrencyConverterModule { - private _moneyRepository: any; + private _moneyRepository: MoneyRepository; - constructor(initialMoneyRepository: any) { - this._moneyRepository = initialMoneyRepository; + constructor(initialMoneyRepository: MoneyRepository) { + this._moneyRepository = initialMoneyRepository; } - public convertMoneyUnits(fromCurrency: Currency, toCurrency: Currency, moneyUnits: any): any { - + public convertMoneyUnits(fromCurrency: Currency, toCurrency: Currency, moneyUnits: IMoneyUnit): number { + switch (fromCurrency) { + case toCurrency: + return 0; + case Currency.USD: + return Number(moneyUnits.moneyInfo.denomination) * moneyUnits.count * 70; + case Currency.RUB: + return Number(moneyUnits.moneyInfo.denomination) * moneyUnits.count / 70; + } } } \ No newline at end of file diff --git a/src/task_5/index.ts b/src/task_5/index.ts index 7423c32..3ceefd2 100644 --- a/src/task_5/index.ts +++ b/src/task_5/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ /** Задача 5 - BankTerminal * Имеется класс BankTerminal. Класс представляет банковский терминал. * Требуется: @@ -16,8 +17,8 @@ */ import { Currency, UserSettingOptions } from '../enums'; -import { MoneyRepository } from '../task_1'; -import { BankOffice, IBankUser } from '../task_2'; +import { IMoneyUnit, MoneyRepository } from '../task_1'; +import { BankOffice, IBankUser, ICard } from '../task_2'; import { UserSettingsModule } from '../task_3'; import { CurrencyConverterModule } from '../task_4'; @@ -28,30 +29,37 @@ export class BankTerminal { private _currencyConverterModule: CurrencyConverterModule; private _authorizedUser: IBankUser; - constructor(initBankOffice: any, initMoneyRepository: any) { - this._moneyRepository = initMoneyRepository; - this._bankOffice = initBankOffice; - this._userSettingsModule = new UserSettingsModule(initBankOffice); - this._currencyConverterModule = new CurrencyConverterModule(initMoneyRepository); + constructor(initBankOffice: BankOffice, initMoneyRepository: MoneyRepository) { + this._moneyRepository = initMoneyRepository; + this._bankOffice = initBankOffice; + this._userSettingsModule = new UserSettingsModule(initBankOffice); + this._currencyConverterModule = new CurrencyConverterModule(initMoneyRepository); } - public authorizeUser(user: any, card: any, cardPin: any): any { + public authorizeUser(user: IBankUser, card: ICard, cardPin: string): boolean { + if (this._bankOffice.authorize(user.id, card.id, cardPin)) { + this._userSettingsModule.user = user; + this._authorizedUser = user; - } - - public takeUsersMoney(moneyUnits: any): any { + return true; + } + return false; } - public giveOutUsersMoney(count: any): any { - + public takeUsersMoney(moneyUnits: IMoneyUnit[]): boolean { + return this._moneyRepository.takeMoney(moneyUnits); } - public changeAuthorizedUserSettings(option: UserSettingOptions, argsForChangeFunction: any): any { - + public giveOutUsersMoney(count: number): boolean { + return this._moneyRepository.giveOutMoney(count, Currency.RUB); } - public convertMoneyUnits(fromCurrency: Currency, toCurrency: Currency, moneyUnits: any): any { + public changeAuthorizedUserSettings(option: UserSettingOptions, argsForChangeFunction: string): boolean { + return this._userSettingsModule.changeUserSettings(option, argsForChangeFunction); + } + public convertMoneyUnits(fromCurrency: Currency, toCurrency: Currency, moneyUnits: IMoneyUnit): number { + return this._currencyConverterModule.convertMoneyUnits(fromCurrency, toCurrency, moneyUnits); } } \ No newline at end of file From 2bdaff49c12ad8f54a150225a5381dd9d42bb739 Mon Sep 17 00:00:00 2001 From: PavelShershnoyv Date: Sun, 21 Nov 2021 16:02:34 +0500 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/task_1/index.ts | 3 +-- src/task_3/index.ts | 37 ++++++++++++++----------------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src/task_1/index.ts b/src/task_1/index.ts index 5d989fc..1a42ca6 100644 --- a/src/task_1/index.ts +++ b/src/task_1/index.ts @@ -69,8 +69,7 @@ export class MoneyRepository { } } if (!canTake){ - this._repository.push({ moneyInfo: { denomination: moneyUnits[j].moneyInfo.denomination, - currency: moneyUnits[j].moneyInfo.currency }, count: moneyUnits[j].count }); + this._repository.push(moneyUnits[j]) } } diff --git a/src/task_3/index.ts b/src/task_3/index.ts index f5abb1b..b1eabf1 100644 --- a/src/task_3/index.ts +++ b/src/task_3/index.ts @@ -19,7 +19,7 @@ */ import { UserSettingOptions } from '../enums'; -import { IBankUser, BankOffice, ICard } from '../task_2'; +import { IBankUser, BankOffice } from '../task_2'; export class UserSettingsModule { private _bankOffice: BankOffice; @@ -34,40 +34,31 @@ export class UserSettingsModule { } private changeUserName(newName: string): boolean { - if (this._user !== null && this._user !== undefined) { - if (this._user.name !== newName) { - this._user.name = newName; - - return true; - } + if (!this._user || this._user.name === newName) { + return false; } + this._user.name = newName; - return false; + return true; } private changeUserSurname(newSurname: string): boolean { - if (this._user !== null && this._user !== undefined) { - if (this._user.surname !== newSurname) { - this._user.surname = newSurname; - - return true; - } + if (!this._user || this._user.surname === newSurname) { + return false; } + this._user.surname = newSurname; - return false; + return true; } private registerForUserNewCard(newCardId: string): boolean { - const card: ICard = this._bankOffice.getCardById(newCardId); - if (this._user !== null && this._user !== undefined && card !== undefined) { - if(!this._bankOffice.isCardTiedToUser(card.id)) { - this._user.cards.push(card); - - return true; - } + if (!this._bankOffice.isCardTiedToUser(newCardId) && this._bankOffice.getCardById(newCardId)) { + this._user.cards.push(this._bankOffice.getCardById(newCardId)) + + return true } - return false; + return false } public changeUserSettings(option: UserSettingOptions, argsForChangeFunction: string): boolean {