#include<iostream>
#include<string>
#include<fstream>
using namespace std;
const int NUM=5;//学生数量
class Student
{
public:
string id;//学号
string name;//姓名
int math;//高数
int english;//英语
int physics;//大物
int digital_ele;//数电
int analogical_ele;//模电
int sum;//总分
float avg;//平均分
friend istream& operator>>(istream& in,Student& p)
{//重载>>操作符
system("cls");
p.sum=0;//设置sum为0
cout<<"请输入学生学号"<<endl;
in>>p.id;
cout<<"请输入学生姓名"<<endl;
in>>p.name;
cout<<"请输入学生高数成绩"<<endl;
in>>p.math;
cout<<"请输入学生英语成绩"<<endl;
in>>p.english;
cout<<"请输入学生物理成绩"<<endl;
in>>p.physics;
cout<<"请输入学生数电成绩"<<endl;
in>>p.digital_ele;
cout<<"请输入学生模电成绩"<<endl;
in>>p.analogical_ele;
p.sum=p.math+p.analogical_ele+p.digital_ele+p.english+p.physics;
p.avg=p.sum/5.0;//获取数据 并计算
cout<<"录入成功"<<endl;
system("pause");
return in;
}
friend ostream& operator<< (ostream& os,Student* p)
{
int sum=0;//记录5门课的总分
int max;//5门课最高分下标
int min;//5门课最低分下标
int i;
ofstream fileout("other.dat",ios::binary);
os<<"高数平均成绩 最高分 最低分"<<endl;
max=min=0;//初始化为0
for(i=0;i<NUM;i++)
{
if(p[max].math<p[i].math)
max=i;
if(p[min].math>p[i].math)
min=i;
sum+=p[i].math;
}
os<<1.0*sum/NUM<<" "<<p[max].math<<" "<<p[min].math<<endl;
os<<"最高分学生学号 姓名"<<endl;
os<<p[max].id<<" "<<p[max].name<<endl;
os<<"最低分学生学号 姓名"<<endl;
os<<p[min].id<<" "<<p[min].name<<endl<<endl;
fileout<<"高数"<<"\r\n";
fileout<<"最高分学号 姓名 分数"<<"\r\n";
fileout<<p[max].id<<"\t"<<p[max].name<<"\t"<<p[max].math<<"\r\n";
fileout<<"最低分学号 姓名 分数"<<"\r\n";
fileout<<p[min].id<<"\t"<<p[min].name<<"\t"<<p[min].math<<"\r\n";
//输出信息 并写入文件
os<<"英语平均成绩 最高分 最低分"<<endl;
max=min=0;
sum=0;
for(i=0;i<NUM;i++)
{
if(p[max].english<p[i].english)
max=i;
if(p[min].english>p[i].english)
min=i;
sum+=p[i].english;
}
os<<1.0*sum/NUM<<" "<<p[max].english<<" "<<p[min].english<<endl;
os<<"最高分学生学号 姓名"<<endl;
os<<p[max].id<<" "<<p[max].name<<endl;
os<<"最低分学生学号 姓名"<<endl;
os<<p[min].id<<" "<<p[min].name<<endl<<endl;
fileout<<"英语"<<"\r\n";
fileout<<"最高分学号 姓名 分数"<<"\r\n";
fileout<<p[max].id<<"\t"<<p[max].name<<"\t"<<p[max].math<<"\r\n";
fileout<<"最低分学号 姓名 分数"<<"\r\n";
fileout<<p[min].id<<"\t"<<p[min].name<<"\t"<<p[min].math<<"\r\n";
os<<"物理平均成绩 最高分 最低分"<<endl;
max=min=0;
sum=0;
for(i=0;i<NUM;i++)
{
if(p[max].physics<p[i].physics)
max=i;
if(p[min].physics>p[i].physics)
min=i;
sum+=p[i].physics;
}
os<<1.0*sum/NUM<<" "<<p[max].physics<<" "<<p[min].physics<<endl;
os<<"最高分学生学号 姓名"<<endl;
os<<p[max].id<<" "<<p[max].name<<endl;
os<<"最低分学生学号 姓名"<<endl;
os<<p[min].id<<" "<<p[min].name<<endl<<endl;
fileout<<"物理"<<"\r\n";
fileout<<"最高分学号 姓名 分数"<<"\r\n";
fileout<<p[max].id<<"\t"<<p[max].name<<"\t"<<p[max].math<<"\r\n";
fileout<<"最低分学号 姓名 分数"<<"\r\n";
fileout<<p[min].id<<"\t"<<p[min].name<<"\t"<<p[min].math<<"\r\n";
os<<"数电平均成绩 最高分 最低分"<<endl;
max=min=0;
sum=0;
for(i=0;i<NUM;i++)
{
if(p[max].digital_ele<p[i].digital_ele)
max=i;
if(p[min].digital_ele>p[i].digital_ele)
min=i;
sum+=p[i].digital_ele;
}
os<<1.0*sum/NUM<<" "<<p[max].digital_ele<<" "<<p[min].digital_ele<<endl;
os<<"最高分学生学号 姓名"<<endl;
os<<p[max].id<<" "<<p[max].name<<endl;
os<<"最低分学生学号 姓名"<<endl;
os<<p[min].id<<" "<<p[min].name<<endl<<endl;
fileout<<"数电"<<"\r\n";
fileout<<"最高分学号 姓名 分数"<<"\r\n";
fileout<<p[max].id<<"\t"<<p[max].name<<"\t"<<p[max].math<<"\r\n";
fileout<<"最低分学号 姓名 分数"<<"\r\n";
fileout<<p[min].id<<"\t"<<p[min].name<<"\t"<<p[min].math<<"\r\n";
os<<"模电平均成绩 最高分 最低分"<<endl;
max=min=0;
sum=0;
for(i=0;i<NUM;i++)
{
if(p[max].analogical_ele<p[i].analogical_ele)
max=i;
if(p[min].analogical_ele>p[i].analogical_ele)
min=i;
sum+=p[i].analogical_ele;
}
os<<1.0*sum/NUM<<" "<<p[max].analogical_ele<<" "<<p[min].analogical_ele<<endl;
os<<"最高分学生学号 姓名"<<endl;
os<<p[max].id<<" "<<p[max].name<<endl;
os<<"最低分学生学号 姓名"<<endl;
os<<p[min].id<<" "<<p[min].name<<endl<<endl;
fileout<<"模电"<<"\r\n";
fileout<<"最高分学号 姓名 分数"<<"\r\n";
fileout<<p[max].id<<"\t"<<p[max].name<<"\t"<<p[max].math<<"\r\n";
fileout<<"最低分学号 姓名 分数"<<"\r\n";
fileout<<p[min].id<<"\t"<<p[min].name<<"\t"<<p[min].math<<"\r\n";
system("pause");
fileout.close();
return os;
}
}stu[NUM];
void Save_File(Student* stu,int n)
{//保存文件
system("cls");//清屏
ofstream fileout("stu_mean.dat",ios::binary);
if(!fileout)
{
cout<<"文件不能被打开!"<<endl;
return ;
}
for(int i=0;i<n;i++)
{//循环写入 学号 姓名 平均分
fileout<<stu[i].id.c_str()<<"\t";
fileout<<stu[i].name.c_str()<<"\t";
fileout<<stu[i].avg<<"\r\n";
}
cout<<"stu_mean.dat存盘成功!\n"<<endl;
system("pause");//暂停
fileout.close();//关闭文件
}
void cmp_file()
{//将文件中保存的数据显示在屏幕上 比对数据是否有问题
system("cls");
cout<<"学号 姓名 平均分"<<endl;
for(int i=0;i<NUM;i++)
cout<<stu[i].id<<" "<<stu[i].name<<" "<<stu[i].avg<<endl;
system("pause");
}
int main()
{
for(int i=0;i<NUM;i++)
cin>>stu[i];//重载>>获取学生信息
Save_File(stu,NUM);//保存文件
cmp_file();//显示数据 用于比对文件
system("cls");
cout<<&stu[0];//重载<<输出
return 0;
}
学生成绩统计管理
最新推荐文章于 2023-09-14 08:07:18 发布