在数据库文件中创建10个空白记录

时间:2017-11-16 06:28:05

标签: c++ class for-loop constructor binaryfiles

我正在使用for循环尝试创建一个10个记录的“空白”文件,其值设置为0或使用我班级的构造函数为空白,如下所示:

class employee {

char name[30], hire_date[30], salary[30];
int ID;

public:

employee(string = "", int = 0, string = "", string = "") {
    void setHireDate(string);
    string getHireDate();

    void setname(string);
    string getName();

    void setsal(string);
    string getsal();

    void setId(int);
    int getId();

}

int main()的开头。我的程序可能创建空白数据库文件的部分

int main()
{
int a, id;
string name, hire_date, salary;

cout << "Welcome to Mahendra Pruitt's Employee Database!\nEnter a number for the option you would like to select:\nPlease choose option 0 if you haven't already chosen that one.\n" <<
    "0 - Create a blank new database file that will overwrite all existing data." << endl
    << "1 - Choose employee IDs (1-10) and change or add information to their file" << endl
    << "2 - Select whether or not you would like to update, view, or add a new record." << endl;

cin >> a;


// creating a blank database file
employee blankelist;

if (a == 0) {
    while (a == 0) {
        if (a == 0) {


            ofstream outdatabase("database.dat", ios::out | ios::binary);
            for (int i = 0; i < 10; i++) {
                outdatabase.write(reinterpret_cast <const char *> (&blankelist), sizeof(employee));
            }

            cout << "Enter the number 1 or 2: " << endl
                << "1 - Choose employee IDs (1-10) and change or add information to their file" << endl
                << "2 - Select whether or not you would like to update, view, or add a new record." << endl;
            cin >> a;

        }
    }
}

在我的程序的其余部分,我使用一个单独的员工实例,我称之为“雇用”...查看我的一个功能示例,其目的是输出要查看的存储信息:

void outputLine(ostream &output, employee &employed, int i, fstream &readfromfile)
{
int id = i;
readfromfile.seekg((id - 1) * sizeof(employee));
readfromfile.read(reinterpret_cast <char *>(&employed), sizeof(employee));
output << "ID: " << employed.getId() << endl
    << "Name: " << employed.getName() << endl
    << "Salary: " << employed.getsal() << endl
    << "Hire date: " << employed.getHireDate() << endl;
}

当我运行创建这些空白文件的选项并尝试查看记录时,它显示数字/乱码...请参阅下面的输出:

Enter your choice:
1 - Update an account
2 - Add a new account
3 - View record
4 - End program
3
Which record would you like to view? (1-10). Enter 0 to go back to the menu.:
1
ID: -858993460
Name:  ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
Salary: ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
Hire date: 
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
  

如何让我的程序进行设置,以便每当我运行创建空白记录的部分时,它会创建它们,如果我尝试查看记录,它会显示为空白?

我也尝试过以下声明:

 outdatabase.write(reinterpret_cast <const char *> (&employed), sizeof(employee));

而不是

 outdatabase.write(reinterpret_cast <const char *> (&blankelist), sizeof(employee));

在我的for循环中,但这也不起作用。

期待您的回复!

1 个答案:

答案 0 :(得分:1)

在构造函数employee::employee()中,您声明了一些函数而不是来调用它们。看来你需要调用一些成员函数,这些函数应该将成员设置为合理的值。

顺便说一句,你应该学习serialization and deserialization课程来完成这些任务。

进一步阅读: