如何仅显示文件中的一个帐户?

How do i display only one account from the file?

本文关键字:一个 显示文件 何仅      更新时间:2023-10-16

我是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();
}

问题 : - 如果创建多个帐户,则它将显示一次创建的所有帐户。

这是因为您的view_account()函数循环遍历accounts.txt文件中的所有帐户并打印所有帐户。而不仅仅是您刚刚登录的那个。例如,您可以传递和比较帐号,并仅打印匹配的帐户来解决此问题。


代码可以使用一些抽象。我建议您创建一个类account并重载位移运算符以将它们插入 IO 流接口。

然后,您可以编写一个account_store类,该类可以从文件加载和存储帐户,并将帐户保存在两者之间的内存中。

您可以向这两者添加登录方法。account::login()将验证帐户名,account_store::login_account()将查询帐号并从容器(如果实际存在(中获取匹配的帐户对象,然后尝试登录用户。

其余的控制流应该非常简单,确保仅显示相关帐户的详细信息应该是微不足道的。