我正在使用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
循环中,但这也不起作用。
期待您的回复!
答案 0 :(得分:1)
在构造函数employee::employee()
中,您声明了一些函数而不是来调用它们。看来你需要调用一些成员函数,这些函数应该将成员设置为合理的值。
顺便说一句,你应该学习serialization and deserialization课程来完成这些任务。
进一步阅读: