学生成绩管理系统: 统计成绩排序并打印(c++)(内含读取文件.txt及将文件输出excel的方法)

    科技2022-07-16  124

    实验要求:输入30个学生的学号、姓名和5门课程的成绩,计算总分并按照总分排出名次,最后按照学号顺序打印成绩单, 并把成绩单输出为excel文件。

    txt数据:

    2015020981 甲 90 89 99 88 79 2015020986 戌 97 87 97 60 79 2015020970 鹏 97 88 77 80 79 2015020983 丙 92 89 70 88 79 2015020984 丁 93 84 96 36 77 2015020982 乙 61 88 99 84 70 2015020985 戊 94 81 94 82 75 2015020989 三 93 89 99 88 50 2015020994 八 91 88 49 84 70 2015020987 一 99 89 99 88 60 2015020988 二 91 58 69 84 70 2015020969 将 94 51 94 82 75 2015020960 孙 91 88 99 84 99 2015020990 四 93 84 96 86 77 2015020995 九 92 50 99 88 79 2015020992 六 97 87 97 80 79 2015020993 七 90 69 99 88 79 2015020997 张 74 81 54 82 75 2015020996 十 63 84 96 86 77 2015020965 郑 90 88 99 88 79 2015020998 王 97 87 100 80 79 2015020999 李 40 89 99 88 79 2015020963 刘 94 89 94 82 75 2015020961 赵 92 89 99 88 79 2015020962 岳 93 84 96 86 100 2015020966 林 51 88 99 84 70 2015020964 宋 97 87 47 80 79 2015020968 宗 93 84 96 86 57 2015020967 任 92 89 99 70 79 2015020991 五 94 81 44 82 75

     

    源代码:

    #include<iostream> #include<cstdio> #include<fstream> #include<string> #include<algorithm> using namespace std; struct Student {

        int id;     string name;     int score[5];     int total;     int rank; public:     friend ostream & operator<<(ostream & out, const Student &stu);     friend istream & operator>>(istream & in, Student &stu); }; ostream & operator <<(ostream & out, const Student &stu) {     out << stu.id<<"\t"<<stu.name << "\t" << stu.score[0]<<"\t"<< stu.score[1]         <<"\t" << stu.score[2]<<"\t"<< stu.score[3]<<"\t" << stu.score[4] <<"\t"         <<stu.total<<"\t"<<stu.rank<<endl ;     return out; } istream & operator >>(istream & in,  Student &stu) {     in>>stu.id>>stu.name >> stu.score[0]>> stu.score[1]>> stu.score[2]         >> stu.score[3] >>stu.score[4];     return in; } int main() {     string filename1;     int num = 0;     Student stu[100];     int ReadTextFile(string fname, Student stu[]);//从文件中读取TXT数据     void PrintScreen(Student stu[], int n);//打印数据在屏幕中     void Total(Student stu[],int n);//计算总分     void Rank(Student stu[], int n);//计算排名     void Sort(Student stu[], int n);//按学号排序     void WExcel(Student stu[], int n);//在Excel中输出     filename1 = "c:\\score.txt";     num=ReadTextFile(filename1, stu);     Total(stu,num);     Rank(stu, num);     Sort(stu, num);     WExcel(stu, num);     PrintScreen(stu, num);  }

    //从文件中读取TXT数据 int ReadTextFile(string fname, Student stu[]) {     int i = 0;     ifstream fin(fname);     if (!fin)     {         cout << "source text file error\n";         return 0;     }     fin >> stu[i];     while (!fin.eof())     {         i++;         fin >> stu[i];     }     fin.close();      return i; }

    //打印数据在屏幕中 void PrintScreen(Student stu[], int n) {     for (int i = 0; i <n; i++)         cout << stu[i]; } void Total(Student stu[],int n) {     for (int i=0; i < n; i++)     {         stu[i].total= stu[i].score[0] + stu[i].score[1] + stu[i].score[2]             + stu[i].score[3] + stu[i].score[4];     } }

    //计算总分 void Rank(Student stu[], int n) {     int temp,i,j;     for ( i = 0; i < n; i++)     {         temp = 0;         {for (j = 0; j < n; j++)             if (stu[i].total<=stu[j].total)                 temp++;         stu[i].rank = temp;         }     } }

    //按学号排序 void Sort(Student stu[],int n) {     int i, j;     Student temp;     for(i=0;i<n;i++)         for(j=i+1;j<n;j++)             if (stu[i].id>stu[j].id)             {                 temp = stu[i];                 stu[i] = stu[j];                 stu[j] = temp;             } }

    //在Excel中输出 void WExcel(Student stu[], int n) {     ofstream oFile;     oFile.open("1.csv", ios::out | ios::trunc);     oFile << "学号"<<"," << "姓名" << "," << "成绩1" << "," << "成绩2"          << ","<<"成绩3"<<"," << "成绩4"<<" ,"<< "成绩5"<<","         <<"总分"<<","<<"排名"<<endl;     for (int i = 0; i < n; i++)     {         oFile << stu[i].id << "," << stu[i].name << "," << stu[i].score[0]              << "," << stu[i].score[1]<< "," << stu[i].score[2] << ","              << stu[i].score[3] << "," << stu[i].score[4]<<","<<stu[i].total             <<","<<stu[i].rank<<endl;     }     oFile.close(); }

     

     

    Processed: 0.010, SQL: 10