我目前正在学习c ++并尝试制作自动售货机!我知道我的代码非常糟糕,我很抱歉。 我正在尝试实施银行并让用户从中获得贷款,唯一的问题是银行无法向用户增加资金。这是我的代码。
if(isset($_POST["response"]))
{
$query = "INSERT INTO response(response) VALUES (:response)";
$statement = $conn->prepare($query);
$statement->execute(
array(
':response' => $_POST["response"]
)
);
$query = " INSERT INTO response (student_id)
SELECT studentid
FROM student
WHERE studentid = '".$_SESSION['studentid']."'";
$statement = $conn->prepare($query);
$statement->execute(
);
}
如果输入的金额在正确的范围内,它会调用ColaMachine类的addMoney()Func。
void Bank::askLoan() {
//ColaMachine object
ColaMachine cola;
bool loanGranted = false;
cout << string(100, '\n');
cout << "You do not have enough money!\n\n";
cout << "Would you like to take a loan?\n\n(1)-Yes\n(2)-No\n\n\n";
int choice;
cin >> choice;
switch (choice) {
case 1:
//Print the bank menu!
printBank();
while (loanGranted != true) {
cout << "Enter the amount to lend: $";
cin >> _loanValue;
//Test if _loanValue is less than or = to bankmoney, so they would scam the bank.
if (_loanValue <= _bankMoney) {
//Supposed to add money to the user.
cola.addMoney(_loanValue);
break;
}
else {
cout << "You entered too much! Try again..." << endl;
}
}
break;
case 2:
//User does not want to take a loan! Quit the game!
//Not implemented, yet.
break;
default:
cout << "Bad input! Please retry..." << endl;
}
}
据我所知+ =与_money = _money + money相同;
我在这里做错了什么? GitHub上的完整资源 - https://github.com/Rohukas/-LearningCPP
答案 0 :(得分:1)
问题出在这里
void Bank::askLoan() {
//ColaMachine object
ColaMachine cola;
bool loanGranted = false;
...
每当您致电Bank::askLoad
时,您都会创建一个新的ColaMachine
,这就是上面代码所说的内容。但问题是当您退出ColaMachine
并且Bank::askLoan
被销毁时,对ColaMachine
的任何更改都会被丢弃。这就是你对ColaMachine
所做的更改不坚持的原因。
相反,您希望每次调用ColaMachine
时都使用相同的Bank::askLoad
。在没有看到其余代码的情况下,我不能说最好的方法,但一种方法是将ColaMachine
作为参考参数传递给Bank::askLoad
void Bank::askLoan(ColaMachine& cola) {
bool loanGranted = false;
...
另一种方法是使ColaMachine
成为Bank
class Bank
{
...
void askLoan();
private:
ColaMachine cola;
};
哪个更好?不知道。我认为你需要阅读课堂设计,以及你的课程中的对象应该如何相互关联。这似乎是你现在没有得到的。
=============================================== ==========================
看了你的完整代码后,我发现你在不止一个地方犯了同样的错误。在main
功能中,您声明了Bank
和ColaMachine
。
//ColaMachine Object
ColaMachine cola;
//Bank Object
Bank bank;
这些应该是您创建的唯一两个Bank
和ColaMachine
个对象,所以这是错误的
void ColaMachine::chooseDrink() {
Bank bo;
...
bo.askLoan();
Bank bo
与<{1}}中声明的完全不同银行。与之前的代码一样,每次调用main
时都会创建并销毁Bank bo
。
我认为你应该做的是将main中声明的ColaMachine和Bank变量作为参考参数传递给需要使用它们的代码的其他部分。所以(例如)
ColaMachine::chooseDrink
你需要对这段代码进行大量的重写。
答案 1 :(得分:1)
问题是你在askLoan()
方法中创建了新的可乐对象,它在函数结束时被销毁,所以调用addMoney()
方法修改了那个临时可乐对象的状态。一种选择是通过指向askLoan()
方法的指针提供可乐对象。
例如,在ColaMachine::chooseDrink()
中,您可以调用bo.askLoan(this)
。 this
是指向您调用bo.askLoan()
的对象的指针。
您需要修改askLoan()
签名:
void askLoan(ColaMachine * cola)
并从ColaMachine cola;
本身移除askLoan()
。