在二进制文件中查找一个最高分和最低分的学生(P322)

#include <iostream>
#include <fstream>
using namespace std;

class CStudent
{
public:
char id[11]; //学号
char name[21]; //姓名
int score; //成绩
};
int main()
{
CStudent stu;
int count = 0,maxScore,minScore,maxNo,minNo;
maxScore = INT_MIN; //C++整型数的最小值
minScore = INT_MAX; //C++整型数的最大值
maxNo = minNo = 0;
ifstream inFile("students.dat",ios::in|ios::binary); //以二进制读方式打开
if(!inFile) //条件成立,则说明文件打开出错
{
cout<<"创建文件失败"<<endl;
return 0;
}
while (inFile.read((char*)&stu,sizeof(CStudent))) //顺序读取文件中的记录
{
if(stu.score > maxScore) //查找最高分学生
{ maxScore = stu.score; //记录当前最高分
maxNo = count; //maxNo记录当前最高分记录号
}
else if(stu.score < minScore) //查找最低分学生
{ minScore = stu.score; //记录当前最高分
minNo = count; //minNo记录当前最低分记录号
}
count++; //记录数+1
}
inFile.clear(); //将流恢复为正常状态
inFile.seekg(sizeof(CStudent)*maxNo,ios::beg);//文件指针移动到最高分记录
inFile.read((char*)&stu,sizeof(CStudent)); //读入最高分记录
cout<<"最高分记录:"
<<maxNo<<";"<<stu.id<<","<<stu.name<<","<<stu.score<<endl;
inFile.seekg(sizeof(CStudent)*minNo,ios::beg); //文件指针移动到最低分记录
inFile.read((char*)&stu,sizeof(CStudent)); //读入最低分记录
cout<<"最低分记录:"
<<minNo<<";"<<stu.id<<","<<stu.name<<","<<stu.score<<endl;
inFile.close();
return 0;
}

posted @ 2020-04-14 09:26  CollisionDimension  阅读(139)  评论(0)    收藏  举报