/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:score.cpp
* 作 者:张浩
* 完成日期:2013年3月13日
* 版本号: v1.0
* 输入描述:
* 问题描述:读取文件
* 输出:
*/
#include <iostream>
#include <fstream>
#include <cstdlib> //在codeblocks下,exit(1)需要这个头文件
using namespace std;
struct Student
{
char num[13]; //尽管都是由数字构成,但看作为字符更合适。学号12位,定义为13个字符,便于处理成字符串
char name[10]; //每个汉字占两个字节,中国人的名字,5个汉字够用
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;
//下面从文件中读取数据到结构体数组,在读入的过程中计算总分
ifstream infile("score.txt",ios::in); //以输入的方式打开文件
if(!infile) //测试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1);
}
i=0;
while(!infile.eof())
{
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();
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; //排序的依据是总分,此for循环找出当前总分最高的学生的下标k
t_stu=stu[k]; //交换,结构体变量可以直接赋值。当然,结构体数组元素的值可以赋值给结构体变量
stu[k]=stu[i];
stu[i]=t_stu;
}
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;
i=0,j=1;
int g;
while(j<=30)
{
if(stu[i].cpp>=60&&stu[i].english>=60&&stu[i].math>=60)
{
cout<<j<<" "<<stu[i].name<<endl;
g=stu[i].grade;
j++;
}
i++;
}
while(g==stu[i].grade)
{
if(stu[i].cpp>=60&&stu[i].english>=60&&stu[i].math>=60)
{
cout<<j<<" "<<stu[i].name<<endl;
}
i++;
}
return 0;
}
运行结果:(成绩排序)
(获奖名单)
心得体会:以后分析成绩可以找我帮忙了。哈哈哈。。。