第17周项目6-学生成绩统计(文件操作一)

第17周项目6--学生成绩统计(文件操作1)
/* 
* Copyright (c) 2014, 烟台大学计算机学院 
* All rights reserved. 
* 文件名称:test.cpp 
* 作    者:刘畅 
* 完成日期:2014 年 12  月  23  日 
* 版 本 号:v1.0 
* 
* 问题描述: score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:

•从文件中读出数据,存放到结构体数组中;
•求出每名同学的总分(可以在读入过程中“顺便”计算);
•输出结构体数组中所有同学的记录。
•按总分排序(降序);
•输出排序后的成绩单;
•有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。
。  
* 输入描述:已初始化,无需输入。
* 程序输出:按照要求输出同学的成绩单。


#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
struct Student
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
};
int main()
{
    int i,j,stuNum=0;
    Student stu[1000],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 (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;
    for (j=0; j<=stuNum-1; ++j)
    {
        for (i=0; i<stuNum-1-j; ++i)
        {
            if (stu[i].grade<stu[i+1].grade)
            {
                t=stu[i];
                stu[i]=stu[i+1];
                stu[i+1]=t;
            }
        }
    }
    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;
    for(i=0; i<30; ++i)
    {
        if((stu[i].cpp>=60)&&(stu[i].math>=60)&&(stu[i].english>=60))
        {

            cout<<stu[i].num<<'\t'<<stu[i].name<<'\t'<<stu[i].grade<<endl;
        }
    }
    for(i=30; i<stuNum; ++i)
    {
        if(stu[i].grade==stu[29].grade)
            cout<<stu[i].num<<'\t'<<stu[i].name<<'\t'<<stu[i].grade<<endl;
    }
    return 0;
}

运行结果:

第17周项目6-学生成绩统计(文件操作一)

第17周项目6-学生成绩统计(文件操作一)


学习心得:

文件在输出成绩单的时候前面的部分显示不出来了,贺老告诉我是因为屏幕输出缓存区不够用,放不下导致无法显示,让我将结果输出到文件中查看一下,可是我有些忘了怎么弄的了,晚上回来再研究研究