Build a Cash Register Project - Build a Cash Register

Tell us what’s happening:

Hi, here’s my problem: I’m absolutely sure my code does what it needs to, still I can’t pass the last test and the tests that depend on specific content of cid array only pass when I edit this array to match the test conditions. I suppose the lesson is broken? Or is there a workaround?

Your code so far

<!-- file: index.html -->

/* file: script.js */

/* file: styles.css */

Your browser information:

User Agent is: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36

Challenge Information:

Build a Cash Register Project - Build a Cash Register

Without seeing your code it’s impossible to say. From the description it sounds like your code might depend on some additional global variables, instead of performing certain calculations every time purchase is made.

Hey there,

Please update the message to include your code. The code was too long to be automatically inserted by the help button.

When you enter a code, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.

You can also use the “preformatted text” tool in the editor (</>) to add backticks around text.

See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (').

Sorry - first time I’m posting here! Here’s my code:

const cash = document.getElementById("cash");
const changeDue = document.getElementById("change-due");
const purchaseBtn = document.getElementById("purchase-btn");

let price = 19.5;
let cid = [
  ['PENNY', 0],
  ['NICKEL', 0.5],
  ['DIME', 0],
  ['QUARTER', 0],
  ['ONE', 0],
  ['FIVE', 0],
  ['TEN', 0],
  ['TWENTY', 0],
  ['ONE HUNDRED', 0]
];

let order = cid.reverse();


const purchase = () => {

let change = cash.value - price;
let cidTotal = cid[0][1] + cid[1][1] + cid[2][1] + cid [3][1] + cid [4][1] + cid [5][1] + cid [6][1] + cid[7][1] + cid[8][1]

	console.log("cid:" + cid);
  console.log("cash:" + cash.value);
  console.log("change:" + change);
  console.log("order" + order);
  console.log("total" + cidTotal);

  if (cash.value < price) {alert("Customer does not have enough money to purchase the item")}
	if (change === 0) {changeDue.innerText = "No change due - customer paid with exact cash"}
    else if (cidTotal === change) {changeDue.innerText = "Status: CLOSED"}
    else {changeDue.innerText = "Status: OPEN "};

  if (change > 100 && order[0][1] > 0){
	let coinsAvailable = order[0][1] / 100;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 100);
	if (coins <= coinsAvailable) {
		cid[0][1] -= coins * 100;
		changeDue.innerText += ` ONE HUNDRED: $${coins * 100} `;
		change -= coins * 100;
	} else {
		cid[0][1] -= coinsAvailable * 100;
		changeDue.innerText += ` ONE HUNDRED: $${coinsAvailable * 100} `;
		change -= coinsAvailable * 100;
	}
  };

  if (change > 20 && order[1][1] > 0){
	let coinsAvailable = order[1][1] / 20;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 20);
	if (coins <= coinsAvailable) {
		cid[1][1] -= coins * 20;
		changeDue.innerText += ` TWENTY: $${coins * 20} `;
		change -= coins * 20;
		change = change.toFixed(2);
		console.log(change);
	} else {
		cid[1][1] -= coinsAvailable * 20;
		changeDue.innerText += ` TWENTY: $${coinsAvailable * 20} `;
		change -= coinsAvailable * 20;
		change = change.toFixed(2);
		console.log(change);
	}
  };

  if (change > 10 && order[2][1] > 0){
	let coinsAvailable = order[2][1] / 10;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 10);
	if (coins <= coinsAvailable) {
		cid[2][1] -= coins * 10;
		changeDue.innerText += ` TEN: $${coins * 10} `;
		change -= coins * 10;
		change = change.toFixed(2);
	} else {
		cid[2][1] -= coinsAvailable * 10;
		changeDue.innerText += ` TEN: $${coinsAvailable * 10} `;
		change -= coinsAvailable * 10;
		change = change.toFixed(2);
	}
  };

  if (change > 5 && order[3][1] > 0){
	let coinsAvailable = order[3][1] / 5;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 5);
	if (coins <= coinsAvailable) {
		cid[3][1] -= coins * 5;
		changeDue.innerText += ` FIVE: $${coins * 5} `;
		change -= coins * 5;
		change = change.toFixed(2);
	} else {
		cid[3][1] -= coinsAvailable * 5;
		changeDue.innerText += ` FIVE: $${coinsAvailable * 5} `;
		change -= coinsAvailable * 5;
		change = change.toFixed(2);
	}
  };

  if (change > 1 && order[4][1] > 0){
	let coinsAvailable = order[4][1] / 1;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 1);
	if (coins <= coinsAvailable) {
		cid[4][1] -= coins * 1;
		changeDue.innerText += ` ONE: $${coins * 1} `;
		change -= coins * 1;
		change = change.toFixed(2);
	} else {
		cid[4][1] -= coinsAvailable * 1;
		changeDue.innerText += ` ONE: $${coinsAvailable * 1} `;
		change -= coinsAvailable * 1;
		change = change.toFixed(2);
	}
  };

  if (change > 0.25 && order[5][1] > 0){
	let coinsAvailable = order[5][1] / 0.25;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 0.25);
	if (coins <= coinsAvailable) {
		cid[5][1] -= coins * 0.25;
		changeDue.innerText += ` QUARTER: $${coins * 0.25} `;
		change -= coins * 0.25;
		change = change.toFixed(2);
	} else {
		cid[5][1] -= coinsAvailable * 0.25;
		changeDue.innerText += ` QUARTER: $${coinsAvailable * 0.25} `;
		change -= coinsAvailable * 0.25;
		change = change.toFixed(2);
	}
  };

  if (change > 0.1 && order[6][1] > 0){
	let coinsAvailable = order[6][1] / 0.1;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 0.1);
	if (coins <= coinsAvailable) {
		cid[6][1] -= coins * 0.1;
		changeDue.innerText += ` DIME: $${coins * 0.1} `;
		change -= coins * 0.1;
		change = change.toFixed(2);
	} else {
		cid[6][1] -= coinsAvailable * 0.1;
		changeDue.innerText += ` DIME: $${coinsAvailable * 0.1} `;
		change -= coinsAvailable * 0.1;
		change = change.toFixed(2);
	}
  };

  if (change > 0.05 && order[7][1] > 0){
	let coinsAvailable = order[7][1] / 0.05;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 0.05);
	if (coins <= coinsAvailable) {
		cid[7][1] -= coins * 0.05;
		changeDue.innerText += ` NICKEL: $${coins * 0.05} `;
		change -= coins * 0.05;
		change = change.toFixed(2);
	} else {
		cid[7][1] -= coinsAvailable * 0.05;
		changeDue.innerText += ` NICKEL: $${coinsAvailable * 0.05} `;
		change -= coinsAvailable * 0.05;
		change = change.toFixed(2);
	}
  };

  if (change > 0.01 && order[8][1] > 0){
	let coinsAvailable = order[8][1] / 0.01;
	console.log("Remaining change: " + change);
	console.log("Coins available: " + coinsAvailable);
    let coins = Math.floor(change / 0.01);
	if (coins <= coinsAvailable) {
		cid[8][1] -= coins * 0.01;
		changeDue.innerText += ` PENNY: $${coins * 0.01} `;
		change -= coins * 0.01;
		change = change.toFixed(2);
	} else {
		cid[8][1] -= coinsAvailable * 0.01;
		changeDue.innerText += ` PENNY: $${coinsAvailable * 0.01} `;
		change -= coinsAvailable * 0.01;
		change = change.toFixed(2);
	}
  };

  console.log("end change:" + change);
  console.log("end cid:" + cid);

  if (change > 0.01 && order[8][1] <= 0.01) {changeDue.innerText = 'Status: INSUFFICIENT_FUNDS'};
}

purchaseBtn.addEventListener("click", purchase);

Try putting that global order array inside purchase.

Really, I’d get rid of this global variable.

share your html too please

Wow, it was THAT simple :smiley: Thank you very much, I can finally move on to the next one!