Hey All!
I think I have finally got the Cash Register project for freecodecamp working.
But the only problem is that for some reason the freecodecamp tests arent accepting it?
Even though to me it looks like the results are all correct.
I would really appreciate anyone who could check this out with me, and let me know where im going wrong,
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cash Register</title>
</head>
<body>
<h1>Cash Register</h1>
<input id = "cash">
<div id = "change-due"></div>
<button id = "purchase-btn" onclick = "press()">purchase</button>
<div id = "register">Register</div>
<script src = "script.js"></script>
</body>
</html>
javascript:
let price = 19.5;
let cash = document.getElementById("cash");
let changeDue = document.getElementById("change-due");
let cashValue = parseFloat(cash.value);
let cid = [
["PENNY", 0.5],
["NICKEL", 0],
["DIME", 0],
["QUARTER", 0],
["ONE", 0],
["FIVE", 0],
["TEN", 0],
["TWENTY", 0],
["ONE HUNDRED", 0]
];
let totalStock = (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]);
let reg = {
0.01: cid[0][1],
0.05: cid[1][1],
0.1: cid[2][1],
0.25: cid[3][1],
1: cid[4][1],
5: cid[5][1],
10: cid[6][1],
20: cid[7][1],
100: cid[8][1],
}
function press() {
let cashValue = parseFloat(cash.value);
let change = parseFloat(cashValue - price);
if (cashValue < price || cash.value.trim() === "") {
alert("Customer does not have enough money to purchase the item");
} else if (cashValue === price) {
changeDue.innerHTML = ("No change due - customer paid with exact cash");
} else if (totalStock < change) {
console.log("Total Stock: " + totalStock)
console.log("Price: " + price)
changeDue.innerHTML = "Status: INSUFFICIENT_FUNDS";
} else {
calc();
console.log("total stock: " + totalStock)
console.log("change: " + change)
}
}
function calc() {
let cashValue = parseFloat(cash.value);
let uneditedChange = parseFloat(cashValue - price);
let change = parseFloat(cashValue - price);
console.log("cash: " + cashValue + " - " + "price: " + price + " = change: " + uneditedChange.toFixed(2))
const stock = Object.keys(reg).sort(function(a, b) {
return a - b;
});
stock.reverse();
stock.forEach(key => {
while (change.toFixed(2) >= parseFloat(key) && reg[key] > 0) {
change -= key;
console.log("Change: " + change.toFixed(2) + " Key " + key + " reg: " + reg[key])
reg[key] -= key;
if (parseFloat(reg[key].toFixed(2)) < parseFloat(key)){
console.log(reg[key] + " < " + key)
console.log("PROBLEM NO MONEY")
break;
}
}
let a = cid[0][1] - reg[0.01];
let b = cid[1][1] - reg[0.05];
let c = cid[2][1] - reg[0.1];
let d = cid[3][1] - reg[0.25];
let e = cid[4][1] - reg[1];
let f = cid[5][1] - reg[5];
let g = cid[6][1] - reg[10];
let h = cid[7][1] - reg[20];
let i = cid[8][1] - reg[100];
let gimme = [
["PENNY", a.toPrecision(1)],
["NICKEL", b.toFixed(2)],
["DIME", c.toPrecision(1)],
["QUARTER", d.toFixed(1)],
["ONE", e.toFixed(0)],
["FIVE", f.toFixed(0)],
["TEN", g.toFixed(0)],
["TWENTY", h.toFixed(0)],
["ONE HUNDRED", i.toFixed(0)]
];
if (reg[key] <= 0) {
changeDue.innerHTML = "Status: CLOSED";
} else {
changeDue.innerHTML = "Status: OPEN";
}
if (change > 0) {
changeDue.innerHTML = "Status: INSUFFICIENT_FUNDS";
} else {
if (i > 0) {
changeDue.innerHTML += "<br>" + (gimme[8][0]) + ": " + "$" + (gimme[8][1]);
}
if (h > 0) {
changeDue.innerHTML += "<br>" + (gimme[7][0]) + ": " + "$" + (gimme[7][1]);
}
if (g > 0) {
changeDue.innerHTML += "<br>" + (gimme[6][0]) + ": " + "$" + (gimme[6][1]);
}
if (f > 0) {
changeDue.innerHTML += "<br>" + (gimme[5][0]) + ": " + "$" + (gimme[5][1]);
}
if (e > 0) {
changeDue.innerHTML += "<br>" + (gimme[4][0]) + ": " + "$" + (gimme[4][1]);
}
if (d > 0) {
changeDue.innerHTML += "<br>" + (gimme[3][0]) + ": " + "$" + (gimme[3][1]);
}
if (c > 0) {
changeDue.innerHTML += "<br>" + (gimme[2][0]) + ": " + "$" + (gimme[2][1]);
}
if (b > 0) {
changeDue.innerHTML += "<br>" + (gimme[1][0]) + ": " + "$" + (gimme[1][1]);
}
if (a > 0){
changeDue.innerHTML += "<br>" + (gimme[0][0]) + ": " + "$" + (gimme[0][1]);
}
}
});
}