文件输入流录入五名学生成绩,并对五人成绩进行操作

采用简单的方法,简单的语句对学生成绩进行操作。

 

1.计算每一科目的总分,平均分,最高分,最低分
2.输出学生的学号,姓名,所有成绩以及总分,平均分,gpa(加权值)
3.根据学生的名字升序排列
4.根据学生的学号升序排到
5.根据学生的学号查询学生的排名并展示他的成绩
6.根据学生的姓名查询学生的排合并展示他的成绩
7.由分数书成5个阶段: A(90——100) B(80—— 90)C(70—— 80). D(60——70) F(0-59)
计算每一科目每一阶段的人数及百分比

#include<iostream>
#include<string>//fileName.c_str()函数调用
#include<fstream>//文件流头文件
#include<iomanip>//流操作符
#include<stdio.h>

using namespace std;//申请内存空间,
//输出 学生号,学生姓名,所有成绩,总分,平均分,和每个学生的绩点,保存结果到指定文件。

struct student
{
    string sno;//学号
    string name;//姓名
	double score[5];//五门科目成绩
	double perSum;//每名学生五门科目总成绩
	double perAvg;//每名学生五门科目平均分
	double perGpa;//gpa(加权值)
	int Rank;//
}stud1[8];//结构体大小为8个,可以录入8人成绩信息

void inputScoreFromFile();//调用函数,将文件内容读入磁盘
int menu();//菜单选项
void displayScoreStudent();//显示单个学生信息,计算每一科目的总分,平均分,最高分,最低分
void displayAll();//输出学生的学号,姓名,所有成绩以及总分,平均分,gpa(加权值)
void sortByName(struct  student[]);//按照学生姓名冒泡排序
void sortBySno(struct  student[]);//按照学生姓名冒泡排序
void searchBySno();//根据学生的学号查询学生的排名并展示他的成绩
int searchByName(struct student[],string enterByName);//根据学生的姓名查询学生的排名并展示他的成绩
void searchByPercentage(struct student[]);//第七题,计算每一科目每一阶段的人数及百分比
void SAG();
void RANK();

int main()
{
    int itemSelected=0;//承接菜单项返回值,然后进入switch选项
    while(true){//while(true)死循环,必须有结束循环标准,for(;;)
        inputScoreFromFile();
        SAG();
		RANK();
        itemSelected=menu();
        string enterName;//输入学生姓名进行查找
        switch(itemSelected){
        case 1:
            displayScoreStudent();
            break;
        case 2:
            displayAll();
            break;
        case 3:
            sortByName(stud1);
            break;
        case 4:
            sortBySno(stud1);
            break;
        case 5:
            searchBySno();
            break;
        case 6:
            cin>>enterName;
            searchByName(stud1,enterName);
            break;
        case 7:
            searchByPercentage(stud1);
            break;
        case 0:
            return 0;
        default:
            cout<<"Wrong choose you entered!"<<endl;
        }
    }
	return 0;
}

int n=0;//定义为全局变量
void inputScoreFromFile()//转存到磁盘上
{
    ifstream iofile("F:\\scores.txt",ios::in);//文件打开

	if(!iofile.is_open())
	{
        cerr<<"Error:opening file fail"<<endl;
	}

	while(!iofile.eof()&&n<8)
	{
		iofile>>stud1[n].sno>>stud1[n].name>>stud1[n].score[0]>>stud1[n].score[1]>>stud1[n].score[2]>>stud1[n].score[3]>>stud1[n].score[4];
		n++;
	}
	iofile.close();//关闭文件
}

int menu()//菜单
{
    cout<<"1.计算每一科目的总分,平均分,最高分,最低分"<<endl;
    cout<<"2.输出学生的学号,姓名,所有成绩以及总分,平均分,gpa(加权值)"<<endl;
    cout<<"3.根据学生的名字升序排列"<<endl;
    cout<<"4.根据学生的学号升序排到"<<endl;
    cout<<"5.根据学生的学号查询学生的排名并展示他的成绩"<<endl;
    cout<<"6.根据学生的姓名查询学生的排名并展示他的成情"<<endl;
    cout<<"7.按标准计算每一科目每一阶段的人数及百分比"<<endl;
    cout<<"Select the desired option:";
    int choose;
    cin>>choose;
    return choose;//返回值
}
void SAG()//对结构体一些变量赋值
{
	for(int i=0;i<8;i++)
		{
			stud1[i].perSum=stud1[i].score[0]+stud1[i].score[1]+stud1[i].score[2]+stud1[i].score[3]+stud1[i].score[4];
			stud1[i].perAvg=stud1[i].perSum/5;
			stud1[i].perGpa=(stud1[i].score[0]*3+stud1[i].score[1]*2+stud1[i].score[2]*4+stud1[i].score[3]*3+stud1[i].score[4]*3)/(3+2+4+3+3);
		}
}

void RANK()
{
for(int i=0;i<8;i++)
	{
		stud1[i].Rank=1;
		for(int j=0;j<8;j++)
		{
			if(i==j)continue;
			if(stud1[i].perSum<stud1[j].perSum)	stud1[i].Rank++;
		}
	}
}

void displayScoreStudent()//1
{//显示单个学生信息,计算每一科目的总分,平均分,最高分,最低分
	int m=0;
    double sum[5];//求和变量值
    double average[5];//求平均值
    double min[5];//求最小值
    double max[5];//求最大值
    for(int i=0;i<5;i++)
    {
		 sum[i]=stud1[0].score[i]+stud1[1].score[i]+stud1[2].score[i]+stud1[3].score[i]+stud1[4].score[i]+stud1[5].score[i]+stud1[6].score[i]+stud1[7].score[i];
    }
    for(int i=0;i<5;i++)
    {
        average[i]=sum[i]/8;
    }
    for(int i=0;i<5;i++)
    {
        double minNumber=9999;
        for(int j=0;j<8;j++)
        {
            if(minNumber>stud1[j].score[i])
            {
                minNumber=stud1[j].score[i];
            }
        }
		min[i]=minNumber;
    }
    for(int i=0;i<5;i++)
    {
        double maxNumber=0;
        for(int j=0;j<8;j++)
        {
            if(maxNumber<stud1[j].score[i])
            {
                maxNumber=stud1[j].score[i];
            }

        }
		max[i]=maxNumber;
    }
    cout<<"ECE101:"<<sum[0]<<"ECE102:"<<sum[1]<<"ECE103:"<<sum[2]<<"ECE104:"<<sum[3]<<"ECE105:"<<sum[4]<<endl;
    cout<<"ECE101:"<<average[0]<<"ECE102:"<<average[1]<<"ECE103:"<<average[2]<<"ECE104:"<<average[3]<<"ECE105:"<<average[4]<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<"ECE10"<<(i+1)<<setw(6)<<":"<<min[i];
    }
    cout<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<"ECE10"<<(i+1)<<setw(6)<<":"<<max[i];
    }
    cout<<endl;
}

void displayAll()//2
{
		for(int i=0;i<8;i++)
	{
		cout<<"sno:"<<stud1[i].sno<<"name:"<<stud1[i].name<<"ECE101:"<<stud1[i].score[0]<<"ECE102:"
		<<stud1[i].score[1]<<"ECE103:"<<stud1[i].score[2]<<"ECE104:"<<stud1[i].score[3]<<"ECE105:"<<stud1[i].score[4]<<"perSum:"<<stud1[i].perSum<<"perAvg:"<<stud1[i].perAvg<<"perGpa:"<<stud1[i].perGpa<<endl;
	}
		ofstream outfile("D:\\stud.dat",ios::binary);
	if(!outfile)
	{
		cerr<<"Error:open error!"<<endl;
	}
	else
		for(int i=0;i<8;i++)
			outfile.write((char*)&stud1[i],sizeof(stud1[i]));
	outfile.close();
}

void sortByName(struct  student stud1[])//3
{
    int i,j;
    student character;//定义一个结构体
    for(i=0;i<8-1;i++)
    {
        for(j=0;j<8-1-i;j++)
        {
            if(stud1[j].name>stud1[j+1].name)
            {
                character=stud1[j];
                stud1[j]=stud1[j+1];
                stud1[j+1]=character;
            }
        }
    }
    for(int i=0;i<8;i++)
	{
		cout<<"sno:"<<stud1[i].sno<<setw(6)<<"name:"<<stud1[i].name<<setw(10)
		<<"ECE101:"<<stud1[i].score[0]<<setw(10)<<"ECE102:"<<stud1[i].score[0]<<setw(10)
		<<"ECE103:"<<stud1[i].score[0]<<setw(10)<<"ECE104:"<<stud1[i].score[0]<<setw(10)
		<<"ECE105:"<<stud1[i].score[0]<<endl;
	}
}

void sortBySno(struct  student stud1[])//4
{
    int i,j;
    student character;
    for(i=0;i<8-1;i++)
    {
        for(j=0;j<8-1-i;j++)
        {
            if(stud1[j].sno>stud1[j+1].sno)
            {
                character=stud1[j];
                stud1[j]=stud1[j+1];
                stud1[j+1]=character;
            }
        }
    }
    for(int i=0;i<8;i++)
	{
		cout<<"sno:"<<stud1[i].sno<<setw(6)<<"name:"<<stud1[i].name<<setw(10)
		<<"ECE101:"<<stud1[i].score[0]<<setw(10)<<"ECE102:"<<stud1[i].score[1]<<setw(10)
		<<"ECE103:"<<stud1[i].score[2]<<setw(10)<<"ECE104:"<<stud1[i].score[3]<<setw(10)
		<<"ECE105:"<<stud1[i].score[4]<<endl;
	}
}

void searchBySno()//5
{
	string ID;
	cout<<"请输入学号:"<<endl;
	cin>>ID;
	for(int i=0;i<8;i++)
	{
		if(ID==stud1[i].sno)
		{
			cout<<"sno:"<<stud1[i].sno<<"name:"<<stud1[i].name
			<<"ECE101:"<<stud1[i].score[0]<<"ECE102:"<<stud1[i].score[1]
			<<"ECE103:"<<stud1[i].score[2]<<"ECE104:"<<stud1[i].score[3]
			<<"ECE105:"<<stud1[i].score[4]<<"rank:"<<stud1[i].Rank<<endl;
			break;//对于单个for循环,break能够跳出循环,对于双层for循环,只能跳出最内层循环
		}
		if(i==7&&ID!=stud1[i].sno)
		 cout<<"学号不存在!"<<endl;
	}
}

int searchByName(struct student stud1[],string enterName)//6
{
    int i,j=0,num;
    double chooseValue;
    for(i=0;i<8;i++)
    {
        if(enterName==stud1[i].name)
        {
            num=i;//记录下该学生的结构体数组下标
            j=1;
            chooseValue=stud1[i].score[0]+stud1[i].score[1]+stud1[i].score[2]+stud1[i].score[3]+stud1[i].score[4];
        }
    }
    if(j==0)
    {
        cout<<"Error:Incorrect name!"<<endl;
        return 0;
    }
    double sum[8];//利用数组,承接每位学生的总分
    for(i=0;i<8;i++)
    {
        sum[i]=stud1[i].score[0]+stud1[i].score[1]+stud1[i].score[2]+stud1[i].score[3]+stud1[i].score[4];
    }
    double value1;
    for(i=0;i<8-1;i++)//对学生总分进行排序
    {
        for(j=0;j<8-1-i;j++)
        {
            if(sum[j]<sum[j+1])
            {
                value1=sum[j];
                sum[j]=sum[j+1];
                sum[j+1]=value1;
            }
        }
    }
    for(i=0;i<8;i++)
    {
        if(chooseValue==sum[i])
        {
            cout<<"该学生排名为:"<<(i+1)<<"sno:"<<stud1[num].sno<<setw(6)<<"name:"<<stud1[num].name<<setw(10)
		<<"ECE101:"<<stud1[num].score[0]<<setw(10)<<"ECE102:"<<stud1[num].score[1]<<setw(10)
		<<"ECE103:"<<stud1[num].score[2]<<setw(10)<<"ECE104:"<<stud1[num].score[3]<<setw(10)
		<<"ECE105:"<<stud1[num].score[4]<<endl;
        }
    }
    return 0;
}

void searchByPercentage(struct student stud1[])//7
{
    int array[5][5];//五门科目分五个等级成绩
    int i,j;
    for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			array[i][j]=0;
		}
		cout<<endl;
	}
    for(i=0;i<8;i++)
    {
        if(stud1[i].score[0]>=90&&stud1[i].score[0]<100)
        {
            array[0][0]+=1;
        }
        if(stud1[i].score[0]>=80&&stud1[i].score[0]<90)
        {
            array[0][1]+=1;
        }
        if(stud1[i].score[0]>=70&&stud1[i].score[0]<80)
        {
            array[0][2]+=1;
        }
        if(stud1[i].score[0]>=60&&stud1[i].score[0]<70)
        {
            array[0][3]+=1;
        }
        if(stud1[i].score[0]>=0&&stud1[i].score[0]<60)
        {
            array[0][4]+=1;
        }
    }
        for(i=0;i<8;i++)
    {
        if(stud1[i].score[1]>=90&&stud1[i].score[1]<100)
        {
            array[1][0]++;
        }
        if(stud1[i].score[1]>=80&&stud1[i].score[1]<90)
        {
            array[1][1]++;
        }
        if(stud1[i].score[1]>=70&&stud1[i].score[1]<80)
        {
            array[1][2]++;
        }
        if(stud1[i].score[1]>=60&&stud1[i].score[1]<70)
        {
            array[1][3]++;
        }
        if(stud1[i].score[1]>=0&&stud1[i].score[1]<60)
        {
            array[1][4]++;
        }
    }
    for(i=0;i<8;i++)
    {
        if(stud1[i].score[2]>=90&&stud1[i].score[2]<100)
        {
            array[2][0]++;
        }
        if(stud1[i].score[2]>=80&&stud1[i].score[2]<90)
        {
            array[2][1]++;
        }
        if(stud1[i].score[2]>=70&&stud1[i].score[2]<80)
        {
            array[2][2]++;
        }
        if(stud1[i].score[2]>=60&&stud1[i].score[2]<70)
        {
            array[2][3]++;
        }
        if(stud1[i].score[2]>=0&&stud1[i].score[2]<60)
        {
            array[2][4]++;
        }
    }
    for(i=0;i<8;i++)
    {
        if(stud1[i].score[3]>=90&&stud1[i].score[3]<100)
        {
            array[3][0]++;
        }
        if(stud1[i].score[3]>=80&&stud1[i].score[3]<90)
        {
            array[3][1]++;
        }
        if(stud1[i].score[3]>=70&&stud1[i].score[3]<80)
        {
            array[3][2]++;
        }
        if(stud1[i].score[3]>=60&&stud1[i].score[3]<70)
        {
            array[3][3]++;
        }
        if(stud1[i].score[3]>=0&&stud1[i].score[3]<60)
        {
            array[3][4]++;
        }
    }
    for(i=0;i<8;i++)
    {
        if(stud1[i].score[4]>=90&&stud1[i].score[4]<100)
        {
            array[4][0]++;
        }
        if(stud1[i].score[4]>=80&&stud1[i].score[4]<90)
        {
            array[4][1]++;
        }
        if(stud1[i].score[4]>=70&&stud1[i].score[4]<80)
        {
            array[4][2]++;
        }
        if(stud1[i].score[4]>=60&&stud1[i].score[4]<70)
        {
            array[4][3]++;
        }
        if(stud1[i].score[4]>=0&&stud1[i].score[4]<60)
        {
            array[4][4]++;
        }
    }
    for(i=0;i<5;i++ )
    {
        for(j=0;j<5;j++)
        {
            cout<<array[i][j];
        }
        cout<<endl;
    }
    //输出等级所占比例
 //   double array1[5][5];//存储科目成绩所占比例
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            double munber=0;
            double  a=0;
            if(array[i][j]!=0)
            {
                munber=(double)array[i][j]/8;
                double a=munber*100;
                if(j==0)
                {
                    cout<<"科目ECE10"<<i<<setw(6)<<"所在阶段90--100"<<setw(6)<<a<<"%"<<endl;
                }
                if(j==1)
                {
                    cout<<"科目ECE10"<<i<<setw(6)<<"所在阶段80--90"<<setw(6)<<a<<"%"<<endl;
                }
                if(j==2)
                {
                    cout<<"科目ECE10"<<i<<setw(6)<<"所在阶段70--80"<<setw(6)<<a<<"%"<<endl;
                }
                if(j==3)
                {
                    cout<<"科目ECE10"<<i<<setw(6)<<"所在阶段60--70"<<setw(6)<<a<<"%"<<endl;
                }
                if(j==4)
                {
                    cout<<"科目ECE10"<<i<<setw(6)<<"所在阶段0--60"<<setw(6)<<a<<"%"<<endl;
                }
            }
        }
    }
}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值