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; } } } } }
