C++ 银行系统不工作

C++ 银行系统不工作,c++,C++,由于某种原因,我的银行脚本不起作用。更具体地说,search()不起作用。我有点理解为什么它没有,可能是因为if(obj.returnId()==n),但我不知道如何修复它。当我搜索一个帐户时,它只允许我找到最后一个帐户,而不是以前的任何帐户。这是我的密码: #include "stdafx.h" #include <iostream> #include <string> #include <string.h> #include <fstream>

由于某种原因,我的银行脚本不起作用。更具体地说,
search()
不起作用。我有点理解为什么它没有,可能是因为if(obj.returnId()==n),但我不知道如何修复它。当我搜索一个帐户时,它只允许我找到最后一个帐户,而不是以前的任何帐户。这是我的密码:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
#include <Windows.h>
#include <conio.h>
using namespace std;
bool loop = true;

class account
{
          int id;
         char name[40];
         char password[40];
public:
          void getData()
          {
                     cout << "\nEnter your name: ";
                     cin >> name;
                     cout << "\nEnter ID: ";
                     cin >> id;
                     cout << "\Enter pass: ";
                     cin >> password;
          }
          void showData()
          {
                     cout << "\nName: ";
                     puts(name);
                     cout << "\nID: " << id;
                     cout << "\n";
          }
          int returnId()
          {
              return id;
          }
};

void createAccount()
{
    account obj;
    ofstream fileCreate;
    fileCreate.open("accounts.dat", ios::binary|ios::app);
    obj.getData();
    fileCreate.write((char*)&obj,sizeof(obj));
    fileCreate.close();
}

void display()
{
    account obj;
    ifstream fileRead;
    fileRead.open("accounts.dat", ios::binary);
    while(fileRead.read((char*)&obj, sizeof(obj)))
    {
        obj.showData();
    }
    fileRead.close();
}

void search(int n)
{
    account obj;
    ifstream fileRead;
    fileRead.open("accounts.dat", ios::binary);
    while(fileRead.read((char *) &obj, sizeof(obj)) );
    {
        fileRead.seekg(0,ios::beg);
        if(obj.returnId() == n)
        {
            obj.showData();
        }
        else {
            cout << "\nUser not foud!\n";
        }
    }
    fileRead.close();
}








void main()
{
    cout << "Welcome to the Bank.\n\n";

    while (loop==true)
    {
        char choice[10];
        cout << "Please select an option:\n";
        cout << "------------------------------------------------\n";
        cout << "(a)Log into an account\n(b)Create an account\n(s)Search an account\n(e)Exit\n";
        cout << "------------------------------------------------\n";
        cout << "Choice: ";
        cin >> choice;
        choice[0] = tolower(choice[0]);
        cout << "\n------------------------------------------------\n\n";

        switch (choice[0])
        {
        case 'a':
            display();
            break;
        case 's':
            int n;
            cout << "Enter the ID of the account: ";
            cin >> n;
            search(n);
            break;
        case 'b':
            createAccount();
            break;
        case 'e':
            loop = false;
            break;
        default:
            system("CLS");
            cout << "The option \"" << choice[0] <<  "\" is invalid.\n\n\n\n";
            break;
        }

    };
    cout << "\n\n\n";
    cout << "Click anything to exit.";
    getch();
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
布尔循环=真;
类别帐户
{
int-id;
字符名[40];
字符密码[40];
公众:
void getData()
{
姓名;
cout>id;
cout>密码;
}
void showData()
{

cout您可能找不到您要查找的条目,因为每次从文件中读取条目时,您都会将位置重置为开头。这意味着您的循环将永远运行,一遍又一遍地读取同一条目,而永远找不到您要查找的条目。

您可能找不到您要查找的条目因为每次从文件中读取条目时,都会将位置重置为开头。这意味着您的循环将永远运行,一次又一次地读取同一条目,而永远找不到您搜索的条目。

查找可能是问题:

while(fileRead.read((char *) &obj, sizeof(obj)) ) //;
{
    // seek to start?
    //fileRead.seekg(0,ios::beg);
    ...
}
看看

放在一边,使用

cout << "text" << endl;

cout搜索可能是问题所在:

while(fileRead.read((char *) &obj, sizeof(obj)) ) //;
{
    // seek to start?
    //fileRead.seekg(0,ios::beg);
    ...
}
看看

放在一边,使用

cout << "text" << endl;

cout您的问题是这行末尾的分号:

while(fileRead.read((char *) &obj, sizeof(obj)) );
这使得这个循环有一个空的主体,所以你基本上读取了整个文件,然后扔掉结果,除了最后一个条目

除此之外:

fileRead.seekg(0,ios::beg);

我不知道你为什么需要它,它只会让你一遍又一遍地阅读第一个条目。

你的问题是这行末尾的分号:

while(fileRead.read((char *) &obj, sizeof(obj)) );
这使得这个循环有一个空的主体,所以你基本上读取了整个文件,然后扔掉结果,除了最后一个条目

除此之外:

fileRead.seekg(0,ios::beg);

我不知道你为什么需要它,它只会让你一遍又一遍地阅读第一个条目。

另一个错误是,当你测试了所有帐户并且它们都失败时,你只应该说“用户未找到”。你的循环(当你删除分号时)每次测试失败后都会说“未找到用户”。

另一个错误是,当您测试了所有帐户并且它们都失败时,您应该只说“未找到用户”。您的循环(当您删除分号时)每次测试失败后都会说“用户未找到”。

保存这样的类非常脆弱,并且由于函数指针和vTables的原因,它可能无法正确读回。请使用适当的序列化库。另外,
n
是字符吗?如果是,请尝试以下操作:
if(obj.returnId()='n'))
您本可以从此示例中删除大量代码,但仍然会产生错误。下次,请尝试发布一个最小的示例。保存这样的类非常脆弱,并且由于函数指针和vTables,它可能无法正确读回。请改用适当的序列化库。
n
也是字符吗?如果是,请尝试this:
if(obj.returnId()=“n”)
您本可以从此示例中删除大量代码,但仍然会产生错误。下次,请尝试发布一个最小的示例。“\n”本身是一个与平台无关的换行符。endl是一个“\n”加一个刷新操作。“\n”本身是一个与平台无关的换行符。endl是一个“\n”加一个刷新操作。除了分号表示seekg不在循环中。除了有一个分号表示seekg不在循环中之外。非常感谢,我不敢相信我在一段时间结束时放了分号()。我感谢大家的帮助:)非常感谢,我不敢相信我在一段时间结束时放了分号()。我感谢大家的帮助:)