- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个 ATM 风格的程序,但目前它并不能完全满足我的需要...
我需要获取当前余额,当从支票或储蓄中转账时,它应该将其添加到支票中并从储蓄中减去。确实如此,但不正确...
输入示例
-=[ Funds Transfer ]=-
-=[ Savings to Checking ]=-
Account Name: nomadic
Amount to transfer: $400
New Balance in Checking: $900 // original was 500
New Balance in Savings: $7.7068e+012 // this should now be 1100...
这是我的代码,代码很多,但是没有错误,所以把它扔进 IDE 编译应该对任何愿意提供帮助的人来说都相当快。
mainBankClass.h
#ifndef MAINBANKCLASS_H
#define MAINBANKCLASS_H
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Banking
{
protected:
string checkAcctName, saveAcctName; // Name on the account
int acctNumber[13]; // Account number
float acctBalance, initSaveDeposit, initCheckDeposit, depAmt; // amount in account, and amount to deposit
public:
char getBalanceChoice(); // Get name on account for displaying relevant information
char newAccountMenu(); // Create a new account and assign it a random account number
void invalid(char *); // If an invalid option is chosen
char menu(); // Print the main menu for the user.
virtual float deposit(){ return 0; } // virtual function for deposits
// virtual float withdrawal() = 0; // Virtual function for withdrawals
void fatal(char *); // Handles fatal errors.
Banking();
};
class Checking : public Banking
{
public:
friend ostream operator<<(ostream &, Checking &);
friend istream operator>>(istream &, Checking &);
Checking operator <= (const Checking &) const;
void newCheckingAccount();
void viewCheckingBalance();
void transferFromSaving();
float deposit() { return (acctBalance += depAmt); }
};
class Saving : public Banking
{
public:
friend ostream &operator<<(ostream &, Saving &);
friend istream &operator>>(istream &, Saving &);
Saving operator <= (const Saving &) const;
void newSavingAccount();
void viewSavingBalance();
void transferFromChecking();
float deposit() { return (acctBalance += depAmt); }
};
class checkAndSave : public Banking
{
public:
void newCheckAndSave();
void viewBothBalances();
};
#endif
bankAccount.cpp
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <fstream>
#include <time.h>
#include "MainBankClass.h"
/*****************************\
| BANKING CONSTRUCTOR |
\*****************************/
Banking::Banking()
{
string acctName; // Name on the account
acctNumber[13] = 0; // Account number
acctBalance = 0;
initCheckDeposit = 0;
initSaveDeposit = 0;
depAmt = 0;
};
/********************************\
| The following code is to print the menu |
| and recieve the users choice on what |
| they want to do with the ATM |
\********************************/
char Banking::menu()
{
char choice;
system("cls");
cout << "\t\t -=[ Main Menu ]=- \n\n"
<< "\tA) Create New Account\n"
<< "\tB) View Account Balance\n"
<< "\tC) Transfer Funds From Checking To Savings\n"
<< "\tD) Transfer Funds From Savings To Checking\n"
<< "\tE) Exit\n"
<< "\n\n\tSelection: ";
cin >> choice;
cin.ignore();
choice = toupper(choice);
while(!isalpha(choice))
{
invalid("[!!] Invalid selection.\n[!!] Choose a valid option: ");
cin >> choice;
cin.ignore();
}
return choice;
}
/*********************\
| Will read in account choic |
| and display it for the user |
\*********************/
char Banking::getBalanceChoice()
{
char choice;
fstream saveFile("saving.dat", ios::in | ios::beg);
system("cls");
cout << "\t\t -=[ View Account Balance ]=-\n\n";
cout << "A) View Checking Account\n"
<< "B) View Saving Account\n"
<< "C) View Checking \\ Saving Account\n" << endl;
cout << "Choice: ";
cin >> choice;
choice = toupper(choice);
if(!isalpha(choice))
fatal(" [!!] Invalid Choice");
return choice;
}
/***************************\
| Incase an invalid decision to made |
| this throws the error message sent |
| to it by the calling area |
\***************************/
void Banking::invalid(char *msg)
{
cout << msg;
}
/*************************\
| Used if files can not be opened |
| and exits with code 251: |
| miscommunication with server |
\*************************/
void Banking::fatal(char *msg)
{
cout << msg;
exit(1);
}
/***************************\
| Create an account, either checking |
| or savings, or both. |
| Must should create a randomly |
| generated account number that will |
| correspond with each account. |
\***************************/
/************************\
NOTE:: WILL BE UPDATED
TO CONTAIN A PIN FOR
ACCOUNT VERIFICATION
*************************/
char Banking::newAccountMenu()
{
srand(time(NULL)); // Seed random generator with time initialized to NULL
char acctChoice; // choice for the account type
ofstream checkFile("checking.dat", ios::out | ios::app); // For saving checking accounts
ofstream saveFile("saving.dat", ios::out | ios::app); // For saving savings accounts
system("cls");
cout << "\t\t-=[ New Account Creation ]=-\n\n" << endl;
cout << "A) Checking Account\n"
<< "B) Savings Account\n"
<< "C) Checking and Saving Account\n" << endl;
cout << "New account type: ";
cin >> acctChoice;
acctChoice = toupper(acctChoice);
cin.clear();
cin.sync();
return acctChoice;
}
/*********************************************************************
**********************************************************************
CHECKING ACCOUNT CODE
**********************************************************************
**********************************************************************/
// New Checking Account Creation
void Checking::newCheckingAccount()
{
system("cls");
ofstream checkFile("checking.dat", ios::out | ios::app); // For saving checking accounts
cout << "\t\t -=[ New Checking Account ]=- \n" << endl;
cout << "Name of the main holder to be on the account: ";
getline(cin, checkAcctName);
cout << "Initial deposit amount: $";
cin >> initCheckDeposit;
if(initCheckDeposit <= 0)
{
while(initCheckDeposit <= 0)
{
invalid("[!!] 0 or negative amount entered\nMaybe a typo?\n");
cout << "Deposit Amount: $";
cin >> initCheckDeposit;
}
}
if(!checkFile)
fatal("[!!] Fatal Error 251: Miscommunication with server\n");
checkFile << checkAcctName << endl;
for(int j = 0; j < 13; j++)
{
acctNumber[j] = (rand() % 10); // Build a random checking account number
checkFile << acctNumber[j];
}
checkFile << endl;
checkFile << initCheckDeposit << endl;
checkFile.close();
}
void Checking::viewCheckingBalance()
{
fstream checkFile("checking.dat", ios::in | ios::beg);
string name;
int i = 0;
double balance = 0;
system("cls");
cout << "\t\t -=[ View Checking Account ]=-\n\n" << endl;
cout << "Account Name: ";
cin.sync();
getline(cin, name);
getline(checkFile, checkAcctName);
while(name != checkAcctName && !checkFile.fail())
{
i++;
getline(checkFile, checkAcctName);
}
if(name == checkAcctName)
{
system("cls");
cout << "\t\t -=[ Checking Account Balance ]=-\n\n" << endl;
cout << "Account Name: " << checkAcctName << "\n";
cout << "Account Number: ";
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
checkFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
cout << acctNumber[j];
}
// if balance a problem, try the below commented out line
// checkFile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl;
checkFile >> acctBalance;
cout << "Balance: $" << fixed << showpoint << setprecision(2) << acctBalance << endl;
}
else
fatal("[!!] Invalid Account\n");
checkFile.close();
getchar();
}
void Checking::transferFromSaving() // Move funds FROM SAVINGS to CHECKING
{
system("cls");
string name;
long checkPos = 0;
long savePos = 0;
float savingBalance = 0;
string saveAcctName;
int i = 0;
cin.clear();
fstream saveFile("saving.dat", ios::in | ios::out | ios::beg);
fstream checkFile("checking.dat", ios::in | ios::out | ios::beg);
cout << "\t\t-=[ Funds Transfer ]=-" << endl;
cout << "\t\t-=[ Savings to Checking ]=-" << endl;
cout << "Account Name: ";
cin.sync();
getline(cin, name);
getline(checkFile, checkAcctName);
while(name != checkAcctName && !checkFile.fail())
{
i++;
getline(checkFile, checkAcctName);
}
getline(saveFile, saveAcctName);
while(name != saveAcctName && !saveFile.fail())
{
i = 0;
i++;
getline(saveFile, saveAcctName);
}
if(name == checkAcctName)
{
cout << "Amount to transfer: $";
float depAmt = 0;
cin >> depAmt;
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
checkFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
}
checkPos = checkFile.tellg(); // if the file is found, get the position of acctBalance and store it in ptrPos
checkFile.seekg(checkPos);
checkFile >> acctBalance;
savePos = saveFile.tellg();
saveFile.seekg(savePos); // sending the cursor in the file to ptrPos + 1 to ignore white space
saveFile >> savingBalance;
if(savingBalance < depAmt) // if checking account does not have enough funds, exit with NSF code
fatal("[!!] Insufficient Funds\n");
acctBalance += depAmt; // can be changed to an overloaded operator
savingBalance -= depAmt; // can be changed to an overloaded operator
checkFile.seekp(checkPos); // go to position previously set above
checkFile << acctBalance; // write new balance to checkFile
saveFile.seekp(savePos); // same thing as above comment
saveFile << savingBalance; // write new balance to saveFile
cout << "New Balance in Checking: $" << acctBalance << endl; // will be removed later
cout << "New Balance in Savings: $" << savingBalance << endl; // will be removed later aswell
}
else
fatal("[!!] Linked accounts do not exist.\n"); // if account is not found
saveFile.close();
checkFile.close();
}
/********************************************************
********************************************************
SAVING ACCOUNT CODE
*********************************************************
*********************************************************/
void Saving::newSavingAccount()
{
system("cls");
ofstream saveFile("saving.dat", ios::out | ios::app); // For saving savings accounts
cout << "\t\t -=[ New Savings Account ]=- \n" << endl;
cout << "Name of the main holder to be on account: ";
getline(cin, saveAcctName);
cout << "Deposit Amount: $";
cin >> initSaveDeposit;
if(initSaveDeposit <= 0)
{
while(initSaveDeposit <= 0)
{
invalid("[!!]0 or negative value entered.\nPerhaps a typo?\n");
cout << "Deposit amount: $";
cin >> initSaveDeposit;
}
}
if(!saveFile)
fatal("[!!] Fatal Error 251: Miscommunication with server\n");
saveFile << saveAcctName << endl;
for(int j = 0; j < 13; j++)
{
acctNumber[j] = (rand() % 10);
saveFile << acctNumber[j];
}
saveFile << endl;
saveFile << initSaveDeposit << endl;
saveFile.close();
}
void Saving::viewSavingBalance()
{
string name;
int i = 0;
fstream saveFile("saving.dat", ios::in | ios::beg);
cin.clear();
system("cls");
cout << "\t\t -=[ View Saving Account ]=-\n\n" << endl;
cout << "Account Name: ";
cin.sync();
getline(cin, name);
getline(saveFile, saveAcctName);
while(name != saveAcctName && !saveFile.fail())
{
i++;
getline(saveFile, saveAcctName);
}
if(name == saveAcctName)
{
system("cls");
cout << "\t\t -=[ Saving Account Balance ]=-\n\n" << endl;
cout << "Account Name: " << saveAcctName << "\n";
cout << "Account Number: ";
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
saveFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
cout << acctNumber[j];
}
// if balance a problem, try the below commented out line
// checkFile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl;
saveFile >> acctBalance;
cout << "Balance: $" << fixed << showpoint << setprecision(2) << acctBalance << endl;
}
else
fatal("[!!] Invalid Account\n");
saveFile.close();
getchar();
}
// NEED TO WORK ON THIS PORTION TOMORROW AND MONDAY, ADD OVERLOADED OPS FOR ASSIGNMENT!!!!!!!
void Saving::transferFromChecking() // This is to take money FROM checking and ADD IT TO SAVING
{
system("cls");
string name;
long savePos = 0;
long checkPos = 0;
float checkingBalance = 0;
string checkAcctName;
int i = 0;
cin.clear();
fstream saveFile("saving.dat", ios::in | ios::out | ios::beg);
fstream checkFile("checking.dat", ios::in | ios::out | ios::beg);
cout << "\t\t-=[ Funds Transfer ]=-" << endl;
cout << "\t\t-=[ Checking to Savings ]=-" << endl;
cout << "Account Name: ";
cin.sync();
getline(cin, name);
getline(saveFile, saveAcctName);
getline(checkFile, checkAcctName);
while(name != saveAcctName && name != checkAcctName && !saveFile.fail() && !checkFile.fail())
{
i++;
getline(saveFile, saveAcctName);
getline(checkFile, checkAcctName);
}
if(name == saveAcctName)
{
cout << "Amount to transfer: $";
float depAmt = 0;
cin >> depAmt;
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
saveFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
}
savePos = saveFile.tellg(); // if the file is found, get the position of acctBalance and store it in ptrPos
saveFile.seekg(savePos);
saveFile >> acctBalance;
checkPos = checkFile.tellg();
checkFile.seekg(checkPos); // if file is found, store current position of the cursor to ptrPos
checkFile >> checkingBalance;
if(checkingBalance < depAmt) // if checking account does not have enough funds, exit with NSF code
fatal("[!!] Insufficient Funds\n"); // Can also place overloaded op here
acctBalance += depAmt; // can be changed to an overloaded operator
checkingBalance -= depAmt; // can be changed to an overloaded operator
saveFile.seekg(savePos); // go to position previously set above
saveFile << acctBalance; // write new balance to saveFile
checkFile.seekg(checkPos); // same thing as above comment
checkFile << checkingBalance; // write new balance to checkFile
cout << "New Balance in Savings: $" << acctBalance << endl; // will be removed later
cout << "New Balance in Checking: $" << checkingBalance << endl; // will be removed later aswell
}
else
fatal("[!!] Linked accounts do not exist.\n"); // if account is not found
saveFile.close();
checkFile.close();
}
/********************************************
********************************************
CHECK AND SAVE CODE
**********************************************
**********************************************/
void checkAndSave::newCheckAndSave()
{
system("cls");
ofstream saveFile("saving.dat", ios::out | ios::app); // For saving savings accounts
ofstream checkFile("checking.dat", ios::out | ios::app); // For saving checking accounts
cout << "\t -=[ New Checking & Saving Account ]=- \n" << endl;
cout << "Name of the main holder to be on account: ";
getline(cin, checkAcctName);
saveAcctName = checkAcctName;
cout << "Checking Deposit Amount: $";
cin >> initCheckDeposit;
if(initCheckDeposit <= 0)
{
while(initCheckDeposit <= 0)
{
invalid("[!!] 0 or negative amount entered\nMaybe a typo?\n");
cout << "Deposit Amount: $";
cin >> initCheckDeposit;
}
}
cout << "Saving Deposit Amount: $";
cin >> initSaveDeposit;
if(initSaveDeposit <= 0)
{
while(initSaveDeposit <= 0)
{
invalid("[!!]0 or negative value entered.\nPerhaps a typo?\n");
cout << "Deposit amount: $";
cin >> initSaveDeposit;
}
}
if(!saveFile || !checkFile)
fatal("[!!] Fatal Error 251: Miscommunication with server\n");
checkFile << checkAcctName << endl;
saveFile << saveAcctName << endl;
for(int j = 0; j < 13; j++)
{
acctNumber[j] = (rand() % 10);
checkFile << acctNumber[j];
saveFile << acctNumber[j];
}
saveFile << endl;
saveFile << initSaveDeposit << endl;
checkFile << endl;
checkFile << initCheckDeposit << endl;
checkFile.close();
saveFile.close();
}
void checkAndSave::viewBothBalances()
{
string name;
int i = 0;
fstream checkFile("checking.dat", ios::in | ios::beg);
fstream saveFile("saving.dat", ios::in | ios::beg);
system("cls");
cin.clear();
cout << "\t-=[ Saving & Checking Account Balance ]=-\n\n" << endl;
cout << "Account Name: ";
cin.sync();
getline(cin, name);
getline(checkFile, checkAcctName);
saveAcctName = name;
/**********************\
| Checking Account portion |
| of the checking & savings |
| overview |
\**********************/
while(name != checkAcctName && !checkFile.fail())
{
i++;
getline(checkFile, checkAcctName);
}
system("cls");
if(name != checkAcctName && checkFile.fail())
invalid("\n\n[!!] No Checking Account Found\n");
cout << "\t\t -=[ Checking Account ]=- \n" << endl;
cout << "Account Name: " << checkAcctName << "\n";
cout << "Account Number: ";
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
checkFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
cout << acctNumber[j];
}
// if balance a problem, try the below commented out line
// checkFile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl;
checkFile >> acctBalance;
cout << "Balance: $" << fixed << showpoint << setprecision(2) << acctBalance << endl;
/*********************\
| Saving Account portion |
| of the checking & saving |
| overview |
\*********************/
getline(saveFile, saveAcctName);
while(name != saveAcctName && !saveFile.fail())
{
i++;
getline(saveFile, saveAcctName);
}
if(name != saveAcctName && saveFile.fail())
invalid("\n\n[!!] No Saving Account Found\n");
if(name == saveAcctName)
{
cout << "\t\t -=[ Saving Account ]=-\n\n" << endl;
cout << "Account Name: " << saveAcctName << "\n";
cout << "Account Number: ";
for(int j = 0; j < 13; j++)
{
char input_number;
stringstream converter;
saveFile.get(input_number);
converter << input_number;
converter >> acctNumber[j];
cout << acctNumber[j];
}
// if balance a problem, try the below commented out line
// checkFile.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl;
saveFile >> acctBalance;
cout << "Balance: $" << fixed << showpoint << setprecision(2) << acctBalance << endl;
}
if(name != saveAcctName && name != checkAcctName && saveFile.fail() && checkFile.fail())
fatal("[!!] No Accounts Have Been Found\n");
checkFile.close();
saveFile.close();
getchar();
}
main.cpp
#include <iostream>
#include "MainBankClass.h"
using namespace std;
int main()
{
Banking bank;
Checking check;
Saving save;
checkAndSave CanS;
char choice;
choice = bank.menu(); // Call the banking menu
switch(choice)
{
case 'A':
choice = bank.newAccountMenu();
switch(choice)
{
case 'A':
check.newCheckingAccount();
break;
case 'B':
save.newSavingAccount();
break;
case 'C':
CanS.newCheckAndSave();
break;
default:
system("cls");
bank.fatal("[!!] Invalid option\n");
break;
}
break;
/***********************************************/
case 'B':
choice = bank.getBalanceChoice();
switch(choice)
{
case 'A':
check.viewCheckingBalance();
break;
case 'B':
save.viewSavingBalance();
break;
case 'C':
CanS.viewBothBalances();
break;
default:
bank.fatal("Invalid decision\n");
break;
}
/*************************************************/
break;
case 'C':
check.transferFromSaving();
break;
case 'D':
save.transferFromChecking();
break;
case 'E':
system("cls");
cout << "\t\t-=[ Disconnecting From System ]=-\n";
cout << "\t\t\t Thank you" << endl;
cout << "\t\t Have a nice day!" << endl;
exit(1);
break;
default:
system("cls");
bank.invalid("\n\n\n\n\t\t [+] Invalid Selection \n\t\t[+] Disconnecting From System \n\t\t\tGood-bye \n\n\n\n\n\n\n");
exit(1);
break;
}
return 0;
}
最佳答案
这种错误简直是求调试器。我不知道您的问题出在哪里(代码很长),但我知道如果您只是在调试器中单步执行此操作,您将能够准确地看到出现问题的时刻。
关于c++ - 正确覆盖文件元素时出现问题(数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717564/
我知道 C++ 中的 overriding 是什么。但是,是否存在覆盖?如果有,是什么意思? 谢谢。 最佳答案 在 C++ 术语中,您有 覆盖(与类层次结构中的虚拟方法相关)和 重载(与具有相同名称但
我想捕获位于另一个元素下的元素的鼠标事件。 这是我所拥有的示例:http://jsfiddle.net/KVLkp/13/ 现在我想要的是当鼠标悬停在红色方 block 上时蓝色方 block 有黄色
以下报道 here我尝试创建一个带有重叠散点图的箱线图。 但是当我运行时: In [27]: table1.t_in[table1.duration==6] Out[27]: counter 7
有一个 JS Fiddle here , 你能在不克隆到新对象的情况下替换 e.target 吗? 下面重复了那个 fiddle 的听众; one.addEventListener('click',
首先要解决重复的可能性: 我不是询问 Override 是什么、它的含义或 @Override 在 java 文档注释之外。那是我不是问 /**Some JavaDoc Comment*/ @over
我想要高于定义的数组。它存储点及其坐标。 public static List simpleGraph(List nodes) { int numEdges = nodes.size() *
我在 http://olisan.dk/blog/ 有一个博客- 如您所见,有一个 28 像素的高间隙(边距顶部)...在 style.css 中: margin-top: 0; 也被设置为 marg
Vulkan 句柄是指向 struct 的不透明指针,或者只是无符号的 64 位整数,具体取决于 VK_USE_64_BIT_PTR_DEFINES 的值: #if (VK_USE_64_BI
我正在尝试提供一个行为类似于 DataGridTextColumn 的 DataGrid 列,但在编辑模式下有一个附加按钮。我查看了 DataGridTemplateColumn,但似乎更容易将 Da
使用 Django 1.10 我想在用户名中允许\字符,因为我在使用“django.contrib.auth.middleware.RemoteUserMiddleware”的 Windows 环境中
我正在尝试使用 ffmpeg 将 Logo 放入 rtmp 流中。我的 ffmpeg 版本是 ffmpeg version 4.3.1目前在我的复杂过滤器中,我有: ffmpeg -re -i 'v
是否有用于Firebase 3存储的方法/规则来禁用文件更新或覆盖? 我为数据库找到了data.exists(),但没有为存储找到解决方案。 最佳答案 TL; DR:在Storage Security
我有两个 Docker Compose 文件,docker-compose.yml看起来像这样 version: '2' services: mongo: image: mongo:3.2
我需要覆盖 JPA 中的集合表吗?也许有人有想法 public class nationality{ @Embedded @AttributeOverrides({
嗨,我正在使用 WIX 和下面的代码将文件安装到目录中。 我的应用程序的工作方式是用户可以在该目录中复制他们自己的文件,覆盖他们喜欢的内容
我正在尝试为 Lua 中的字符串实现我自己的长度方法。 我已成功覆盖字符串的 len() 方法,但我不知道如何为 # 运算符执行此操作。 orig_len = string.len function
在Scala 2.10.4中,给出以下类: scala> class Foo { | val x = true | val f = if (x) 100 else 200
我想做上面的事情。 我过去覆盖了许多文件...... block ,模型,助手......但这个让我望而却步。 谁能看到我在这里做错了什么: (我编辑了这段代码......现在包括一些建议......
根据javadoc An instance method in a subclass with the same signature (name, plus the number and the ty
我有一段代码,只要有可用的新数据作为 InputStream 就会生成新数据。每次都覆盖同一个文件。有时文件在写入之前变为 0 kb。 Web 服务会定期读取这些文件。我需要避免文件为 0 字节的情况
我是一名优秀的程序员,十分优秀!