用c++设计一个程序建立存储学生信息的二进制文件data,文件中的每条记录包括学生学号、姓名和专业。要求从键盘上输入学生的信息,当输入学号为0时结束.将文件data内的学生信息读出来显示在屏幕上,并统计文件中存储的学生数量。
时间: 2024-10-18 18:10:05 浏览: 56
为了创建一个C++程序,我们首先需要包含必要的头文件,然后定义一个结构体来表示学生信息,接着我们会创建一个函数用于写入数据到二进制文件,另一个函数负责从文件中读取并显示数据,最后是一个主函数处理用户输入和控制流程。
```cpp
#include <iostream>
#include <fstream>
#include <string>
// 定义学生信息结构体
struct Student {
int id;
std::string name;
std::string major;
};
// 写入学生信息到二进制文件
void writeToFile(const Student& student, std::ofstream& file) {
file.write(reinterpret_cast<const char*>(&student), sizeof(Student));
}
// 从二进制文件读取学生信息并显示
void readFromFile(std::ifstream& file) {
Student student;
while (file.read(reinterpret_cast<char*>(&student), sizeof(Student))) {
if (student.id == 0) break; // 结束条件:学号为0
std::cout << "学号: " << student.id << ", 姓名: " << student.name << ", 专业: " << student.major << std::endl;
}
}
// 主函数
int main() {
std::string input;
std::ofstream dataFile("data", std::ios::binary);
if (!dataFile.is_open()) {
std::cerr << "无法打开文件!" << std::endl;
return 1;
}
int numStudents = 0;
while (std::cin >> input && input != "0") {
Student s;
s.id = std::stoi(input); // 转换输入字符串为整数
std::getline(std::cin, input);
s.name = input;
std::getline(std::cin, input);
s.major = input;
writeToFile(s, dataFile);
++numStudents;
}
dataFile.close();
// 读取文件并显示所有学生信息
std::ifstream readFile("data", std::ios::binary);
if (readFile.is_open()) {
readFromFile(readFile);
readFile.close();
} else {
std::cerr << "无法打开文件 for reading!" << std::endl;
}
std::cout << "文件中存储的学生总数: " << numStudents << std::endl;
return 0;
}
```
在这个程序中,用户会被提示输入学生信息,直到他们输入学号为0为止。每次输入一个新的学生,信息都会被写入文件。之后,程序会读取文件中的所有学生信息并显示出来,同时统计并报告存储的学生总数。
阅读全文