简单的银行系统(JavaScript)

问题描述 投票:1回答:1

我的主要目标是建立一个简单的银行系统(转移,撤回,接收,交易历史,addCard),每个用户最多可以拥有3张卡。

这是我的代码:

const parameters = {
    tax: 0.05,
    cardsLimit: 3
}

function userCard(number) {
    const cardInformation = { 
    balance: 100,
    transactionLimit: 100,
    historyLogs: [],
    key: number 
    }

    // getCardOptions - return iformation about card
    function getCardOptions() {
      return cardInformation;
    }


    // putCredits
    function putCredits(amount) {
        cardInformation.balance = cardInformation.balance + amount;
        updateHistoryLogs('Received credits', amount)
    }

    // takeCredits
    function takeCredits(amount) {
            cardInformation.balance = cardInformation.balance - amount + amount * parameters.tax;
            updateHistoryLogs('Withdrawal of credits', amount);
    }

    // setTransactionLimit
    function setTransactionLimit(amount) {
        cardInformation.transactionLimit = amount;
        updateHistoryLogs('Transaction limit change', amount);
    }

    // transferCredits
    function transferCredits(amount, card) {
        let amountwithTaxes = amount + amount * parameters.tax;
        if (amountwithTaxes > cardInformation.balance) {
            console.log('Not enough money')
        } else if (amountwithTaxes > cardInformation.transactionLimit) {
            console.log('Amount exceed the Transaction limit')
        } else {
            this.takeCredits(amount);
            card.putCredits(amount);
        }
    }

    // Logs about past transactions
    function updateHistoryLogs(operation, credits) {
        let input = {
            operation,
            credits,
            operationTime: new Date().toLocaleString('en-GB')
        };
        cardInformation.historyLogs.push(input);
    }
    return {
      getCardOptions,
      putCredits,
      takeCredits,
      setTransactionLimit,
      transferCredits
      };

}

// addCard/getcardbyKey
class UserAccount {
    constructor(name) {
        this.name = name;
        this.cards = [];
    }
    addCard() {
        if (this.cards.length < parameters.cardsLimit) {
            console.log('You\'ve got too many cards')
        } else {
            this.cards.push(userCard(this.cards.length + 1));
        }
    }
    getCardByKey(number) {
        return this.cards[number - 1];
    }
}

当我尝试执行它并进行多次交易时,发生以下错误:

未捕获的TypeError:无法读取未定义的属性'putCredits'

我已经在我的main函数中定义了putCredits属性,并且不知道为什么代码没有执行。

感谢任何帮助和建议!

这是我正在尝试执行的代码:

let user = new UserAccount('John');

user.addCard()
user.addCard()

let card1 = user.getCardByKey(1);
let card2 = user.getCardByKey(2);

card1.putCredits(1000);
card1.setTransactionLimit(500);
card1.transferCredits(500, card2);

card2.takeCredits(50);

console.log(card1.getCardOptions()); 
javascript
1个回答
4
投票

问题是你永远不会添加任何卡,因为你有一个不正确的if条件。所以,当你试图访问一张卡片时:let card1 = user.getCardByKey(1);你没有定义。

你的addCard if条件应该是这样的:

if (this.cards.length > parameters.cardsLimit)

代码:

const parameters = {
    tax: 0.05,
    cardsLimit: 3
}

function userCard(number) {
    const cardInformation = { 
    balance: 100,
    transactionLimit: 100,
    historyLogs: [],
    key: number 
    }

    // getCardOptions - return iformation about card
    function getCardOptions() {
      return cardInformation;
    }


    // putCredits
    function putCredits(amount) {
        cardInformation.balance = cardInformation.balance + amount;
        updateHistoryLogs('Received credits', amount)
    }

    // takeCredits
    function takeCredits(amount) {
            cardInformation.balance = cardInformation.balance - amount + amount * parameters.tax;
            updateHistoryLogs('Withdrawal of credits', amount);
    }

    // setTransactionLimit
    function setTransactionLimit(amount) {
        cardInformation.transactionLimit = amount;
        updateHistoryLogs('Transaction limit change', amount);
    }

    // transferCredits
    function transferCredits(amount, card) {
        let amountwithTaxes = amount + amount * parameters.tax;
        if (amountwithTaxes > cardInformation.balance) {
            console.log('Not enough money')
        } else if (amountwithTaxes > cardInformation.transactionLimit) {
            console.log('Amount exceed the Transaction limit')
        } else {
            this.takeCredits(amount);
            card.putCredits(amount);
        }
    }

    // Logs about past transactions
    function updateHistoryLogs(operation, credits) {
        let input = {
            operation,
            credits,
            operationTime: new Date().toLocaleString('en-GB')
        };
        cardInformation.historyLogs.push(input);
    }
    return {
      getCardOptions,
      putCredits,
      takeCredits,
      setTransactionLimit,
      transferCredits
      };

}

// addCard/getcardbyKey
class UserAccount {
    constructor(name) {
        this.name = name;
        this.cards = [];
    }
    addCard() {
        if (this.cards.length > parameters.cardsLimit) {
            console.log('You\'ve got too many cards')
        } else {
            this.cards.push(userCard(this.cards.length + 1));
        }
    }
    getCardByKey(number) {
        return this.cards[number - 1];
    }
}


let user = new UserAccount('John');

user.addCard()
user.addCard()

let card1 = user.getCardByKey(1);
let card2 = user.getCardByKey(2);

card1.putCredits(1000);
card1.setTransactionLimit(500);

card1.transferCredits(500, card2.getCardOptions().balance);

card2.takeCredits(50);
console.log(card1.getCardOptions()); 
© www.soinside.com 2019 - 2024. All rights reserved.