第十七周项目 6 学生成绩统计(5)

来源:互联网 发布:vb九九乘法表代码简单 编辑:程序博客网 时间:2024/05/16 18:53
/* *Copyright (C) 2014,烟台大学计算机学院 *All rights reserved. *文件名称 :mian.cpp *作    者 :韩娟 *完成日期 :2014年12月22日 *版 本 号 :v1.0 * *问题描述 :score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:              •从文件中读出数据,存放到结构体数组中;              •求出每名同学的总分(可以在读入过程中“顺便”计算);              •输出结构体数组中所有同学的记录。              •按总分排序(降序);              •输出排序后的成绩单;              •有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。 *输入描述 :略 *程序输出 :略 */#include <iostream>#include <fstream>#include <cstdlib>  //在codeblocks下,exit(1)需要这个头文件using namespace std;struct Student{    char num[13];    char name[10];    int cpp;    int math;    int english;    int grade;};const int N=200;int main( ){    int i, j, k, stuNum=0;    //定义结构体数组    Student stu[N], t_stu;    //(1)从文件中读出数据,存放到你定义的结构体数组中;    ifstream infile("score.txt",ios::in);   //以输入的方式打开文件    if(!infile)                 //测试是否成功打开    {        cerr<<"open error!"<<endl;        exit(1);    }    i=0;    while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english)    {        stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english;        ++stuNum;        ++i;    }    infile.close();        cout<<"成绩单"<<endl;    for(i=0; i<stuNum; ++i)    {        cout<<stu[i].num<<"\t"<<stu[i].name<<"\t"<<stu[i].cpp<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].grade<<endl;    }    cout<<endl;    system("PAUSE");    for(i=0; i<stuNum-1; i++)    {        k=i;        for(j=i+1; j<stuNum; j++)            if(stu[j].grade>stu[k].grade) k=j;        t_stu=stu[k];        stu[k]=stu[i];        stu[i]=t_stu;    }    cout<<"排序后的成绩单"<<endl;    for(i=0; i<stuNum; ++i)        {        cout<<stu[i].num<<"\t"<<stu[i].name<<"\t"<<stu[i].cpp<<"\t"<<stu[i].math<<"\t"<<stu[i].english<<"\t"<<stu[i].grade<<endl;    }cout<<endl;    system("PAUSE");    cout<<"以下同学获得奖学金:"<<endl;    i=0,j=1;    int g;    while (j<=30)    {        if (stu[i].cpp>=60&&stu[i].math>=60&&stu[i].english>=60)        {            cout<<j<<'\t'<<stu[i].name<<'\t'<<stu[i].grade<<endl;            g=stu[i].grade;            j++;        }        i++;    }    while(g==stu[i].grade)    {        if (stu[i].cpp>=60&&stu[i].math>=60&&stu[i].english>=60)        {            cout<<j<<'\t'<<stu[i].name<<'\t'<<stu[i].grade<<endl;            j++;        }        i++;    }    return 0;}


知识点总结 :

    这个程序要用到前面的读入程序,要记得固定的模板。

学习心得 :

   程序员真的好累。

0 0