第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; }
运行结果:
学习心得:
文件在输出成绩单的时候前面的部分显示不出来了,贺老告诉我是因为屏幕输出缓存区不够用,放不下导致无法显示,让我将结果输出到文件中查看一下,可是我有些忘了怎么弄的了,晚上回来再研究研究