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

来源:互联网 发布:消失的夫妻后续知乎 编辑:程序博客网 时间:2024/05/16 11:06

问题及代码:

/*  * Copyright (c) 2014, 烟台大学计算机与控制工程学院  * All rights reserved.  * 文件名称:test.cpp  * 作    者:郝俊宇   * 完成日期:2014年 12 月 23 日  * 版 本 号:v1.0  *  * 问题描述:score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:•从文件中读出数据,存放到结构体数组中;•求出每名同学的总分(可以在读入过程中“顺便”计算);•输出结构体数组中所有同学的记录。•按总分排序(降序);•输出排序后的成绩单;•有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。从文件中读取数据的参考代码 * 输入描述:无 * 程序输出:对应的结果 */ #include <cstdlib>#include <fstream>#include <iostream>using namespace std;struct Student{    char num[13];    char name[10];    int cpp;    int math;    int english;    int grade;    double average;};const int N=200;int main(){    int i,j,k,q,stuNum=0,h;    Student stu[N],t;    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(q=0; q<stuNum; q++)    {        stu[q].grade=stu[q].cpp+stu[q].math+stu[q].english;        cout<<stu[q].num<<'\t'<<stu[q].name<<'\t'<<stu[q].cpp<<'\t'<<stu[q].math<<'\t'<<stu[q].english<<'\t'<<stu[q].grade<<endl;    }    system("PAUSE");    cout<<"降序排序后的成绩单:"<<endl;    for(j=0; j<stuNum-1; j++)    {        for(k=0; k<stuNum-j-1; k++)            if(stu[k].grade<stu[k+1].grade)            {                t=stu[k];                stu[k]=stu[k+1];                stu[k+1]=t;            }    }    for(h=0; h<stuNum; h++)        cout<<stu[h].num<<'\t'<<stu[h].name<<'\t'<<stu[h].cpp<<'\t'<<stu[h].math<<'\t'<<stu[h].english<<'\t'<<stu[h].grade<<endl;    system("PAUSE");    cout<<"获得奖学金的同学为:"<<endl;    int s=0,l=1,m;    while(l<=30)    {        if(stu[s].cpp>=60&&stu[s].math>=60&&stu[s].english>=60)        {            cout<<l<<'\t'<<stu[s].name<<'\t'<<stu[s].grade<<endl;            m=stu[s].grade;            l++;        }        s++;    }    while(m==stu[s].grade)//和刚才输出的最后一个总分相同的同学都有机会获得奖学金    {        if (stu[s].cpp>=60&&stu[s].math>=60&&stu[s].english>=60)        {            cout<<l<<'\t'<<stu[s].name<<'\t'<<stu[s].grade<<endl;            l++;        }        s++;    }    return 0;}


运行结果:

知识点总结:

从文件读取数据的应用,结构体数组的应用

学习心得:

本来打算根据上一问的程序改的,结果改到一半就不会了,就又按照老师写的方式写的。

0 0
原创粉丝点击