void StaffManage::Pack() { ofstream oFile("tem.txt"); oFile.close(); fstream outFile("tem.txt", ios::app ); Staff* pStaff; int cur_count = 0; for (int pos = 0; pos < count; pos++) { if (!indexTable[pos].delTag) { file.seekg(indexTable[pos].position, ios::beg); indexTable[pos].position = file.tellg(); if (indexTable[pos].staffType == 'e') pStaff = new Salesman; else if (indexTable[pos].staffType == 'l')pStaff = new Manager; else pStaff = new SalesManager; pStaff->Read(file); pStaff->Write(outFile); delete pStaff; indexTable[cur_count++] = indexTable[pos]; } } count = cur_count; file.close(); outFile.close(); remove("staff.txt"); rename("tem.txt", "staff.txt"); file.open("staff.txt,ios::in|ios::out"); }请逐句讲解
时间: 2024-01-15 17:05:25 浏览: 117
这段代码是一个名为`StaffManage`的类的一个成员函数`Pack()`,它的作用是将当前的员工信息写入到文件中。
首先,代码创建一个名为`tem.txt`的文件,并关闭它:
```c++
ofstream oFile("tem.txt");
oFile.close();
```
接着,代码打开这个文件,使用`ios::app`参数以追加的方式写入文件:
```c++
fstream outFile("tem.txt", ios::app );
```
然后,代码定义一个指针变量`pStaff`,以及一个整型变量`cur_count`,用于记录当前未被删除的员工数量。
接下来,代码使用一个循环遍历当前的员工信息表格,如果当前记录未被标记为删除,那么就读取该记录,并将其写入到文件中。具体的读写操作由员工类型的`Read()`和`Write()`函数完成。
在写入文件之后,代码将指针变量`pStaff`释放,并将当前记录的位置信息存储到`indexTable[cur_count]`中。最后,代码将当前的员工数量更新为未被删除的员工数量,关闭文件,并删除原来的`staff.txt`文件,将`tem.txt`文件重命名为`staff.txt`,并重新打开`staff.txt`文件,以备后续操作:
```c++
indexTable[cur_count++] = indexTable[pos];
count = cur_count;
file.close();
outFile.close();
remove("staff.txt");
rename("tem.txt", "staff.txt");
file.open("staff.txt,ios::in|ios::out");
```
阅读全文