У меня есть вопрос относительно назначения, которое у меня есть.
здесь у меня есть 2 класса, класс сотрудников и класс gm
void GM::addEmployee(fstream& afile, int noOfRecords)
{
afile.open("EmployeeInfo.dat", ios::in | ios::binary);
employee::eInfo e;
employee emp;
char name[80];
cout << "\nAdd Employee Info" << endl;
cout << "---------------------" << endl;
cout << "New Employee Username: ";
cin.clear();
cin.ignore(100, '\n');
cin.getline(name, 80);
//Check if there is already an entry inside the file with this name.
//If yes, add fail
bool flag = true;
if(noOfRecords > 0)
{
for(int i=1; i<=noOfRecords; i++)
{
afile.read (reinterpret_cast <char *>(&e), sizeof(e));
if(!strcmp(name, e.username))
{
cout << "Username is used, add GM failed" << endl;
flag = false;
}
}
}
afile.close();
if(flag)
{
//open in appending mode
afile.open("EmployeeInfo.dat", ios::out | ios::app | ios::binary);
strcpy(e.username, name);
cout << "Please Enter New Employee Password: ";
cin.getline(e.password, 80);
cout << "\nPlease Enter New Employee Appointment "
<< "\n(0 = GM / 1 = HM / "
<< "2= BS / 3 = FOS)\n : ";
cin >> e.eid;
cin.clear();
cin.ignore(100, '\n');
emp.dist = strlen(e.password);
emp.caesar_encrypt(e.password, 3, emp.dist);
afile.write(reinterpret_cast <const char *>(&e), sizeof(e));
afile.close();
cout << "\nEmployee Added" << endl;
}
}
Вышеупомянутая функция является функцией моего класса GM, который заключается в том, чтобы добавлять сотрудников.
Я объявил структуру в классе сотрудника как
struct eInfo
{
char username [80];
char password [80];
int eid;
};
Проблема с этим способом заключается в том, что когда я пытаюсь добавить сотрудника, мои данные EmployeeInfo.dat исчезают. все становится пустым после того, как я использовал функцию add employee.
может ли кто-нибудь направить меня на то, что я сделал неправильно?
Это неверный способ чтения данных в e
:
afile.read(reinterpret_cast<char*>(&e), sizeof(e));
Аналогичным образом, это неправильный способ записи данных из e
:
afile.write(reinterpret_cast<const char*>(&e), sizeof(e));
Если вам нужно распечатать или прочитать данные e
, вам нужно сделать это по одному. Более того, использование read
/write
в этом контексте не обязательно, потому что вы просто используете экстрактор и вставку:
afile >> e.username; // ... afile << e.username << e.password;
afile
на какую функцию? Извините, я, кажется, не понимаю ... Кстати, это C ++ .