Hi everyone,
So I’ve been trying to complete the Cash Register project. I honestly think i’ve done it in such a round about way that it might look disgusting to most of you.
But the logic works… almost
Right now they way the code is it is calculating the change required perfectly, except when I enter 100 when the price is 3.26 it only uses $5 twice when it can use it more
I set up an IF statement to only stop using the currency if we have less “stock” than the change value we are using.
Honestly would really appreicate any help, Its kind of long but if you paste the code in yourself you can see what I mean:
Left is what my code gives, the middle is what it is supposed to give
Its blowing my mind (How is 45 less than 5!!!)
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">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 = 3.26;
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]
];
let register = document.getElementById("register");
register.innerHTML += "<br>" + "Price: " + price
register.innerHTML += "<br>" + "<br>" + (cid[0][0] + ": $" + cid[0][1]);
register.innerHTML += "<br>" + (cid[1][0] + ": $" + cid[1][1]);
register.innerHTML += "<br>" + (cid[2][0] + ": $" + cid[2][1]);
register.innerHTML += "<br>" + (cid[3][0] + ": $" + cid[3][1]);
register.innerHTML += "<br>" + (cid[4][0] + ": $" + cid[4][1]);
register.innerHTML += "<br>" + (cid[5][0] + ": $" + cid[5][1]);
register.innerHTML += "<br>" + (cid[6][0] + ": $" + cid[6][1]);
register.innerHTML += "<br>" + (cid[7][0] + ": $" + cid[7][1]);
register.innerHTML += "<br>" + (cid[8][0] + ": $" + cid[8][1]);
let cash = document.getElementById("cash");
let changeDue = document.getElementById("change-due");
function press() {
let cashValue = parseFloat(cash.value);
// console.log("cash value: " + cashValue)
// console.log("price: " + 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 {
calc();
}
}
let reg = {
0.01: 1.01,
0.05: 2.05,
0.1: 3.1,
0.25: 4.25,
1: 90,
5: 55,
10: 20,
20: 60,
100: 100,
}
function calc() {
let cashValue = parseFloat(cash.value);
console.log("calc activated")
let changeFinal = cashValue - price;
let change = changeFinal;
register.innerHTML = ("Register");
register.innerHTML += "<br>" + ("Change: " + changeFinal.toFixed(2));
const stock = Object.keys(reg).sort(function(a, b) {
return a - b;
});
console.log(stock.reverse())
stock.forEach(key => {
console.log("currency: " + key + " stock: $" + reg[key].toFixed(2) + " change: " + change.toFixed(2))
while (change.toFixed(3) >= parseInt(key)) {
let hug = reg[key] -= key;
hug.toFixed(2);
change -= key;
console.log("stock: " + reg[key])
if ((reg[key]).toFixed(2) <= 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.toFixed(2)],
["NICKEL", b.toFixed(2)],
["DIME", c.toFixed(2)],
["QUARTER", d.toFixed(2)],
["ONE", e.toFixed(2)],
["FIVE", f.toFixed(2)],
["TEN", g.toFixed(2)],
["TWENTY", h.toFixed(2)],
["ONE HUNDRED", i.toFixed(2)]
];
console.log(gimme)
changeDue.innerHTML = "Status: OPEN";
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]);
}
register.innerHTML += "<br>" + ("Price: " + price);
register.innerHTML += "<br>" + "<br>" + (cid[0][0] + ": $" + reg[0.01].toFixed(2));
register.innerHTML += "<br>" + (cid[1][0] + ": $" + reg[0.05].toFixed(2));
register.innerHTML += "<br>" + (cid[2][0] + ": $" + reg[0.1].toFixed(2));
register.innerHTML += "<br>" + (cid[3][0] + ": $" + reg[0.25].toFixed(2));
register.innerHTML += "<br>" + (cid[4][0] + ": $" + reg[1].toFixed(2));
register.innerHTML += "<br>" + (cid[5][0] + ": $" + reg[5].toFixed(2));
register.innerHTML += "<br>" + (cid[6][0] + ": $" + reg[10].toFixed(2));
register.innerHTML += "<br>" + (cid[7][0] + ": $" + reg[20].toFixed(2));
register.innerHTML += "<br>" + (cid[8][0] + ": $" + reg[100].toFixed(2));
}