学生成绩统计管理

#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;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值