建立某单位职工通讯录的二进制数据文件,文件中的每个记录包括:职工编号、姓名、电话号码、邮政编码和住址。然后读取文件的内容,在显示器上浏览文件内容。使用C++实现
时间: 2024-01-24 16:17:39 浏览: 199
以下是一个简单的实现,使用结构体存储每个职工信息,使用fstream库进行文件读写操作:
```cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 职工信息结构体
struct Employee {
int id;
string name;
string phone;
string zipcode;
string address;
};
// 将一个职工信息写入二进制文件
void writeEmployee(ofstream& out, const Employee& emp) {
out.write(reinterpret_cast<const char*>(&emp), sizeof(emp));
}
// 从二进制文件中读取一个职工信息
void readEmployee(ifstream& in, Employee& emp) {
in.read(reinterpret_cast<char*>(&emp), sizeof(emp));
}
int main() {
// 打开文件流
ofstream out("employees.dat", ios::binary);
if (!out.is_open()) {
cerr << "Failed to open file!" << endl;
return 1;
}
// 写入几个职工信息
Employee emp1 = { 1001, "Alice", "12345678", "123456", "123 Main St." };
Employee emp2 = { 1002, "Bob", "87654321", "654321", "456 High St." };
writeEmployee(out, emp1);
writeEmployee(out, emp2);
// 关闭文件流
out.close();
// 重新打开文件流进行读取
ifstream in("employees.dat", ios::binary);
if (!in.is_open()) {
cerr << "Failed to open file!" << endl;
return 1;
}
// 读取每个职工信息并输出到控制台
Employee emp;
while (!in.eof()) {
readEmployee(in, emp);
if (in.gcount() != sizeof(emp)) {
break;
}
cout << "ID: " << emp.id << endl;
cout << "Name: " << emp.name << endl;
cout << "Phone: " << emp.phone << endl;
cout << "Zipcode: " << emp.zipcode << endl;
cout << "Address: " << emp.address << endl;
cout << endl;
}
// 关闭文件流
in.close();
return 0;
}
```
在该实现中,我们使用了结构体 `Employee` 存储每个职工信息。`writeEmployee` 函数将一个 `Employee` 结构体写入二进制文件,使用 `reinterpret_cast` 将结构体指针转换为 `const char*` 类型以便进行文件写入操作。`readEmployee` 函数从二进制文件中读取一个 `Employee` 结构体,使用 `reinterpret_cast` 将 `char*` 类型数据转换为 `Employee*` 类型。在 `main` 函数中,我们首先打开文件流 `out`,并使用 `writeEmployee` 函数将两个职工信息写入二进制文件。然后关闭 `out` 文件流,重新打开文件流 `in` 进行读取操作。使用 `readEmployee` 函数读取每个职工信息,输出到控制台,并在读取结束后关闭 `in` 文件流。
阅读全文