📄 cstudent.cpp
字号:
#include "CStudent.h"
#include <fstream.h>
#include <string.h>
#include <windows.h> //头文件的包含会发生重叠
void CStudent::inRecord(int i)
{
cout<<"输入一个学生的信息:\n";
cout<<"编号,姓名,性别,年龄,数学成绩,计算机成绩,英语成绩\n";
cin>>num>>name>>sex>>age>>mathScore>>computerScore>>EnglishScore;
ofstream outfile("stu.dat",ios::binary| ios::ate); //| ios::ate一定要加在后面哦!
if(!outfile)
{
cerr<<"open error!"<<endl;
abort();
}
int sz=sizeof(CStudent);
outfile.seekp(i*sz);
outfile.write((const char*)this, sz);
outfile.close();
}
bool CStudent::searchByNum(int id,int n)
{
if(id>n) return false;
ifstream infile("stu.dat",ios::in|ios::binary);
if(!infile)
{
cerr<<"open error!"<<endl;
abort();
}
int sz=sizeof(CStudent);
infile.seekg(sz*(id-1)); //定位文件指针在第id-1个学生处
if (id - 1 > long(infile.tellg() / sizeof(*this))) //如果当前的文件指针还不满足
return false;
infile.read((char*)this, sizeof(*this)); //将磁盘上sizeof(*this)个字节写到this指针
//指向的当前对象中
infile.close();
return true;
}
bool CStudent::searchByName(char *nam,int n)
{
ifstream infile("stu.dat",ios::in|ios::binary);
if(!infile)
{
cerr<<"open error!"<<endl;
abort();
}
while(infile.tellg() !=signed(n * sizeof(CStudent))) //从前往后扫描
{
infile.read((char*)this, sizeof(CStudent)); //写到当前对象
if(strcmp(name, nam) == 0)
return true;
}
infile.close();
return false;
}
void CStudent::someScore()
{
float sum=mathScore+computerScore+EnglishScore;
float ava=sum/3;
cout<<"总成绩为: "<<sum<<" 平均成绩为:"<<ava<<endl<<endl;;
}
void CStudent::AboutTotalScore(int n)
{
ifstream infile("stu.dat",ios::in|ios::binary);
if(!infile)
{
cerr<<"open error!"<<endl;
abort();
}
while(infile.tellg()!=signed(n * sizeof(CStudent)))
{
infile.read((char*)this, sizeof(*this));
if(this->sex == 'm' && this->mathScore+this->computerScore+this->EnglishScore > 270)
cout << *this;
}
infile.close();
}
ostream& operator << (ostream&output,CStudent&s)
{//原本用" "的,用setw()才好!
output<<s.num<<" "<<s.name<<" "<<s.sex<<" "<<s.age<<" "
<<s.mathScore<<" "<<s.computerScore<<" "<<s.EnglishScore<<endl;
return output;
}
int main()
{
CStudent student;
int N;int id1;char namee[20];
cout<<"输入学生个数:";
cin>>N;
for(int i=0;i<N;i++)
student.inRecord(i);
cout<<"请输入要查找的学生的编号:";
cin>>id1;
if(student.searchByNum(id1,N))
cout<<"这个学生的信息为"<<student<<endl;
else cout<<"不存在这个学生!!!\n";
cout<<"请输入要查找的学生的姓名:";
cin>>namee;
if(student.searchByName(namee,N))
cout<<"这个学生的信息为"<<student<<endl;
else cout<<"不存在这个学生!!!\n";
cout<<"输入一个学生的编号,计算他的成绩:";
cin>>id1;
if(student.searchByNum(id1,N))student.someScore();
else cout<<"不存在这个学生!!!\n";
cout<<"总成绩大于270分的男同学的信息\n";
student.AboutTotalScore(N);
cout<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -