- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 c++ 的新手,目前面临一些障碍,希望有人能帮助我解决这个问题。下面是我的代码:
首先,用户需要输入“帐号”、“账户持有人姓名”和“存款”,所有数据将存储到自动创建的文本文件中。然后用户需要使用正确的“帐号”和“账户持有人姓名”登录。但是登录成功后,会显示用户刚才创建的所有账号。
程序名称:银行管理系统
问题:- 如果创建多个账户,则显示一次创建的所有账户。
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std ;
void create_account ()
{ long long int acc_no ;
string name ;
double deposit ;
char choice ;
do{
system ("cls");
cout << "PLEASE CREATE YOUR ACCOUNT !" << endl ;
cout << "ENTER THE ACCOUNT NO : " ;
cin >> acc_no ;
cout <<"ENTER THE NAME OF THE ACCOUNT HOLDER : " ;
cin.ignore() ;
getline( cin, name ) ;
cout << "ENTER AMOUNT FOR DEPOSIT : RM " ;
cin >> deposit ;
ofstream outfile ("accounts.txt", ios::app) ;
outfile << endl << acc_no << " " << name << " " << deposit << endl ;
outfile.close() ;
cout << endl << endl ;
cout << "ACCOUNT SUCCESSFULLY CREATED !" << endl << endl ;
system ("pause") ;
do{
cout << "DO YOU WANT TO CONTINUE ? "<< endl ;
cout << "ENTER YOUR CHOICE ( Y OR N ): " ;
cin >> choice ;
}while (choice != 'y' && choice != 'Y' && choice != 'n' && choice != 'N' );
}while (choice == 'y' || choice == 'Y');
}
void view_account ()
{
ifstream infile("accounts.txt",ios :: in ) ;
string x , y , z ;
while (infile >> x >> y >> z )
{
cout << endl <<"***************************************************"
<< endl << "ACCOUNT NUMBER IS : " << x
<< endl << "ACCOUNT HOLDER NAME IS : " << y
<< endl << "BALANCE AMOUNT : RM " << z << endl
<< endl <<"***************************************************" ;
}
infile.close() ;
cout << endl << endl ;
system("pause");
}
void login()
{ string acc_no1, name1;
int offset ;
string line ;
ifstream infile ;
infile.open("accounts.txt");
cout << endl << endl ;
cout << "PLEASE LOGIN YOUR ACCOUNT ! " << endl ;
cout << "ENTER YOU ACCOUNT NO : " ;
cin >> acc_no1 ;
cout << "ENTER ACCOUNT HOLDER NAME : ";
cin.ignore() ;
getline ( cin , name1 ) ;
if (infile.is_open())
{
while(!infile.eof())
{
getline (infile,line);
if ( (offset = line.find(acc_no1,0)) != string::npos && ((offset = line.find(name1,0)) != string::npos) )
{
cout << "LOGIN SUCCESSFULLY" << endl ;
system("pause");
view_account ();
}
}
infile.close() ;
}else
cout << "" ;
system("cls") ;
cout << endl << "LOGIN FAILED !" << endl ;
system("pause");
}
int main ()
{
create_account () ;
login();
}
最佳答案
Problem : - if create more than one account, then it will display all the accounts that have created at one time.
那是因为您的 view_account()
函数遍历 accounts.txt
文件中的所有帐户并打印所有这些帐户。而不仅仅是您刚刚登录的那个。例如,您可以传递并比较帐号并仅打印匹配的帐号来解决此问题。
您的代码可以使用一些抽象。我建议您创建一个类 account
和 overload the bitshift operators用于将它们插入 IO 流接口(interface)。
然后您可以编写一个account_store
类,它可以从文件和hold the accounts in memory 加载和存储帐户。介于两者之间。
您可以为这两个添加登录方法。 account::login()
将验证帐户名称,account_store::login_account()
将查询帐号并从容器中获取匹配的帐户对象(如果实际上present),然后尝试登录用户。
剩下的控制流程应该很简单,确保只显示相关帐户的详细信息应该很简单。
关于c++ - 我如何只显示文件中的一个帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57950674/
我是一名优秀的程序员,十分优秀!