0

我正在编写一个类似于数据库的程序。它需要一个工作编号、名字、姓氏、工作描述和工作持续时间。

对于描述,我只知道如何从文件中读取单个单词字符串。这是我的代码。

// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int jobNumber;
    string fName;
    string lName;
    string jobTask;
    int jobDuration;
    int Rate = 40;
    int Price = jobDuration * Rate;
    int totalJobs = 0;
    ifstream ClientDataBase("example.txt");

    while (ClientDataBase >> jobNumber >> fName >> lName >> jobTask >> jobDuration)
    {
        cout << jobNumber << ' ' << fName << ' ' << lName << ' ' << jobTask << ' ' << jobDuration << "hours" << endl;
        totalJobs++;
    }
    cout << "\nThere are a total of " << totalJobs << " recorded in this database" << endl;
    ofstream ClientDatabase("example.txt", ios::app);
    cout << "Enter new clients job number, first name, last name, job task, duration of task" << endl;
    cout << "press Ctrl+Z to quit\n\n" << endl;
    while (cin >> jobNumber >> fName >> lName >> jobTask >> jobDuration)
    {
        ClientDatabase << jobNumber << ' ' << fName << ' ' << lName << ' ' << jobTask << ' ' << jobDuration << endl;
    }
}

使用此布局,我插入数据,关闭文件,重新打开并查看数据已存储,我可以再次添加更多。但jobTask只能是一个字。无论如何我可以做到,这样描述可以比一个词长,并且仍然能够以自定义格式从文件中读取它?例如jobTask,可能正在执行“诊断和修复”,但要将其输入到文件中,我实际上只能使用“修复”,但这可能意味着任何事情。

4

1 回答 1

0

你的文件的组织方式会给你带来麻烦,使用一些特定的字符来分隔你的数据会很有帮助。

例如,您可以执行以下操作:

employee1=job_number:first_name:last_name:job_description:job_duration
employee2=job_number:first_name:last_name:job_description:job_duration
employee3=job_number:first_name:last_name:job_description:job_duration
// etc..

在您的程序中,您将读取一行,将其保存在缓冲区中,处理您的缓冲区(解析它,检索您的数据,检查语法等),擦除它然后读取一个新行,等等...

由于您的单词没有用空格分隔,因此您的问题显然已经消失,以及您以后可能会遇到的许多其他问题。

使用 iostream 非常简单,这不会给您带来任何麻烦,即使这样做了,您也知道该去哪里!

祝你好运

于 2012-12-23T05:20:56.603 回答