实验目的:学会利用结构体
实验内容:所有同学的成绩表等用结构体做
* 程序头部注释开始
实验内容:所有同学的成绩表等用结构体做
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者:冯珍珍
* 完成日期: 2011年 12 月 18日
* 版本号:
#include <fstream>
#include<iostream>
#include <iomanip>
#include <string>
using namespace std;
struct student
{
char num[12];
string name;
int grade[3];
int sum;
};
int main( )
{
void open_file(student *p); //从文件中读取数据
void select_score(student *p); //对数据进行排序
void show_score(student *p);//输出降序后的数据
void school_reward(student *p);//输出获得奖学金的同学名单。
student student[180],score,*p;
p=student;
open_file(p);
select_score(p);
cout<<"学号为"<<setw(16)<<"人名"<<setw(8)<<"c++"<<setw(8)<<"高数"<<setw(8)<<"英语"<<setw(8)<<"总成绩"<<endl;
show_score(p);
cout<<"获得奖学金的同学名单为:"<<endl;
school_reward(p);
return 0;
}
//定义从文件输入函数;
void open_file(student *p)
{
int j;
ifstream infile("score.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(j=0;j<180;j++)
{
infile>>(p+j)->num>>(p+j)->name>>(p+j)->grade[0]>>(p+j)->grade[1]>>(p+j)->grade[2];//读入学生成绩;
(p+j)->sum=((p+j)->grade[0]+(p+j)->grade[1]+(p+j)->grade[2]);
}
infile.close();
}
//定义函数;
void show_score(student *p)
{
for(int j=0;j<180;j++)
{
cout<<(p+j)->num<<" "<<setw(8)<<(p+j)->name<<setw(8)<<(p+j)->grade[0]
<<" "<<(p+j)->grade[1]<<" "<<(p+j)->grade[2]<<"\t"<<(p+j)->sum<<endl;
}
cout<<endl;
}
//定义排序函数;
void select_score(student *p)
{
int i,j;
student score;
for(i=0;i<179;i++)
for(j=0;j<179-i;j++)
{
if((p+j)->sum<(p+j+1)->sum)
{
score=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=score;
}
}
}
//找出得奖学金的学生;
void school_reward(student *p)
{
for(int j=0;j<30;j++)
{
if((p+j)->grade[0]>=60&&(p+j)->grade[1]>=60&&(p+j)->grade[2]>=60)
{
if(j%5==0)
cout<<endl;
cout<<setw(8)<<(p+j)->name<<" "<<setiosflags(ios::left);
}
else j--;
}
}
上级感言:这个程序对我来说真很难;