Build a Cash Register Project - Build a Cash Register

Tell us what’s happening:

i’ve tried everything but it keep failing the tasks where the price is not defined. in practice my code works fine. but still failing the same tests again and again. and after running the tests in the console it says [ReferenceError: _randomnumber not defined] although it is nowhere in my code. im stuck on this for so long. plz help

Your code so far

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Cash Register</title>
    <link rel="stylesheet" href="./styles.css" />
  </head>
  <body>
    <main>
      <h1>Cash Register Project</h1>
      <div id="counter">
      <div id="change-due"></div>
        <p id="bs">Enter cash from customer:</p>
        <div id="cashed">
        <input type="number" id="cash" class="user-input" value="" />
        <button class="check-btn-styles" id="purchase-btn">Purchase</button>
        </div>
      </div>
      <div id="box">
        <div id="price-screen">
        </div>
          <div id="cid"></div>
      </div>
    </main>
    <script src="./script.js"></script>
  </body>
</html>

/* file: styles.css */

let price = 19.5;
let cid = [
  ['PENNY', 1.01],
  ['NICKEL', 2.05],
  ['DIME', 3.1],
  ['QUARTER', 4.25],
  ['ONE', 90],
  ['FIVE', 55],
  ['TEN', 20],
  ['TWENTY', 60],
  ['ONE HUNDRED', 100]
];

const change = document.getElementById('change-due');
const cash = document.getElementById('cash');
const sale = document.getElementById('purchase-btn');
const priceScreen = document.getElementById('price-screen');
const cashDrawerDisplay = document.getElementById('cid');

let currencyUnits = [
  ['PENNY', 0.01],
  ['NICKEL', 0.05],
  ['DIME', 0.1],
  ['QUARTER', 0.25],
  ['ONE', 1],
  ['FIVE', 5],
  ['TEN', 10],
  ['TWENTY', 20],
  ['ONE HUNDRED', 100]
];

sale.addEventListener("click",()=>{
  const cashValue = parseFloat(cash.value);
  const changeDue = cashValue - price;

  if(cashValue<price){
    alert("Customer does not have enough money to purchase the item");
    return;
  }

  if(cashValue === price){
    change.innerText = "No change due - customer paid with exact cash";
    return;
  }

  const changeResult = getChange(changeDue, cid);

  if(changeResult.status === "INSUFFICIENT_FUNDS"||changeResult.status === "CLOSED"){
    change.innerText = `Status: ${changeResult.status} ${formatChange(changeResult.change)}`
  } else{
    let changeText = `Status: OPEN ${formatChange(changeResult.change)}`;
    change.innerText = changeText;
  }

})

const getChange = (changeDue,cid) => {
  let totalCid = cid.reduce((sum, [_,amount])=>
    sum + amount,0).toFixed(2);
  if(totalCid < changeDue){
    return {status:"INSUFFICIENT_FUNDS", change: [] }
  }

  let changeArray = [];
  let remainingChange = changeDue

  for(let i = currencyUnits.length-1 ; i>=0 ; i-- ){
    let unit = currencyUnits[i][0];
    let unitValue = currencyUnits[i][1];
    let unitInDrawer = cid[i][1];

    if(unitValue <= remainingChange && unitInDrawer > 0){
      let amountFromUnit = 0;

      while(remainingChange >= unitValue && unitInDrawer > 0){
        remainingChange = (remainingChange - unitValue).toFixed(2);
        unitInDrawer -= unitValue;
        amountFromUnit += unitValue;
      }

      if(amountFromUnit > 0){
        changeArray.push([unit,amountFromUnit])
      }
    }
  }
  if(remainingChange > 0){
    return {status:"INSUFFICIENT_FUNDS", change: [] }
  }

  if(changeDue == totalCid){
    return {status:"CLOSED", change: cid }
  }
  return {status:"OPEN", change: changeArray }
}

const formatChange = changeArray => changeArray.map(([unit,amount])=>`${unit}: $${amount.toFixed(2)}`).join(" ");

// console.log(formatChange([["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]))

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

Challenge Information:

Build a Cash Register Project - Build a Cash Register

hi there, welcome to the forum!

This is a known issue with this project which should be fixed soon. Please move on to something else and return in a few days when hopefully the fix will be in place.

Thank you for the reply . I’m relieved

2 Likes

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.