首页 > 代码库 > 第十七周项目6 读取文件,多文件处理

第十七周项目6 读取文件,多文件处理

要求:

score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:

在这个程序采用多文件处理:

技术分享

main.cpp

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void in_line_grade(Student [],int);      //按总分降序排序
void output(Student [],int);     //输出成绩单
void in_line_award(Student [],int);  //
void cpp(Student [],int);
void name(Student [],int);
int main( )
{
    int i ,stuNum=0;
    //定义结构体数组
    Student stu[200];
    //从文件中读出数据,存放到你定义的结构体数组中;
    ifstream infile("score.txt",ios::in); 	//以输入的方式打开文件
    if(!infile)   				//测试是否成功打开
    {
        cerr<<"open error!"<<endl;
    }
    i=0;
    while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english)
    {
        ++stuNum;
        ++i;
    }
    infile.close();

    for(i=0; i<stuNum; i++)
    {
        stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english;
        stu[i].average=stu[i].grade/3.0;
    }
    cout<<"数据读取完毕"<<endl;
    int x;
    do
    {
        cout<<"请选择下面的功能:"<<endl;
        cout<<"1.输出成绩单"<<endl;
        cout<<"2.按总分排序并输出成绩单"<<endl;
        cout<<"3.输出获奖学金的同学的名单"<<endl;
        cout<<"4.输出C++不及格的姓名和c++成绩"<<endl;
        cout<<"5.输出您要查找人的成绩"<<endl;
        cout<<"0.结束"<<endl;
        cout<<"请输入您的选择:";
        cin>>x;
        switch(x)
        {
            case 0:break;
            case 1:output(stu,stuNum);break;
            case 2:in_line_grade(stu,stuNum);break;
            case 3:in_line_award(stu,stuNum);break;
            case 4:cpp(stu,stuNum);break;
            case 5:name(stu,stuNum);break;
            default :
            cout<<"你的输入有误,请从新输入"<<endl;
        }

    }while(x!=0);
    return 0;
}

c++.cpp

#include <iomanip>
#include <iostream>
using namespace std;
struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};

void cpp(Student s[],int n)  //输出优秀者:总分超285,单科不低于90
{
    int a[200];
    for(int i=0; i<n; i++)
        a[i]=s[i].cpp;
    int k=0;
      cout<<setiosflags(ios::left);
    for(int i=0; i<n; i++)
        if(a[i]<60)
        {
            k++;
            if(k%4==0)
                cout<<setw(8)<<s[i].name<<setw(8)<<s[i].cpp<<endl;
            else
                cout<<setw(8)<<s[i].name<<setw(8)<<s[i].cpp;

        }
        cout<<endl;

}

in_line_award.cpp

#include <iomanip>
#include <iostream>
using namespace std;
struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};

void in_line_award(Student s[],int n)  //输出优秀者:总分超285,单科不低于90
{
    int a[200],i;
    for( i=0; i<n; i++)
        a[i]=s[i].grade;
    for(int i=n-1; i>=0; i--)
        for(int j=n-i-2; j>=0; j--)
            if(a[j]<a[j+1])
            {
                int k;
                k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
                Student t;
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
    int k=0;
    cout<<setiosflags(ios::right);
    for( i=0; k<30; i++)
        if(s[i].cpp<60||s[i].math<60||s[i].english<60)
            k--;
        else
        {
            k++;
            if(k%5==0)
                cout<<setw(12)<<s[i].name<<endl;
            else cout<<setw(12)<<s[i].name;
        }
    int t;
    t=s[i].grade;
    for(; s[i].grade==t; i++)
    {
        if(s[i].cpp<60||s[i].math<60||s[i].english<60)
            continue;
        else
        {
            k++;
            if(k%5==0)
                cout<<setw(12)<<s[i].name<<endl;
            else cout<<setw(12)<<s[i].name;
        }
    }
    cout<<endl;
}

in_line_grade.cpp

struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void output(Student [],int);     //输出成绩单

void in_line_grade(Student s[],int n)      //°´×Ü·Ö½µÐòÅÅÐò
{
    int a[200];
    for(int i=0; i<n; i++)
        a[i]=s[i].grade;
    for(int i=n-1; i>=0; i--)
        for(int j=n-i-2; j>=0; j--)
            if(a[j]<a[j+1])
            {
                int k;
                k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
                Student t;
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
    output(s,n) ;

}

name.cpp

#include <iostream>
#include <iomanip>
using namespace std;
struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void name(Student s[],int n)
{
    string a[200];
    for(int i=0; i<n; i++)
        a[i]=s[i].num;
    char Cin[20];
    cout<<"请输入您要查找人的学号:";
    cin>>Cin;
    int i;
    for(i=0; i<n; i++)
    {
        if(a[i]==Cin)
            break;
    }
    if(i==n)
        cout<<"抱歉,查无此人"<<endl;
    else
    {
        cout<<"学号"<<setw(20)<<"名字"<<setw(8)<<"C++"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8);
        cout<<"总分"<<setw(16)<<"平均成绩"<<endl;
        cout<<s[i].num<<setw(12)<<s[i].name<<setw(8);
        cout<<s[i].cpp<<setw(8)<<s[i].math<<setw(8)<<s[i].english<<setw(8);
        cout<<s[i].grade<<setw(16)<<s[i].average<<endl;
    }


}

output.cpp

#include <iomanip>
#include <iostream>
using namespace std;
struct Student    //同项目1
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void output(Student s[],int n)     //输出成绩单
{
    cout<<"学号"<<setw(20)<<"名字"<<setw(8)<<"C++"<<setw(8)<<"数学"<<setw(8)<<"英语"<<setw(8);
    cout<<"总分"<<setw(16)<<"平均成绩"<<endl;

    for(int i=0; i<n; i++)
    {
        cout<<s[i].num<<setw(12)<<s[i].name<<setw(8);
        cout<<s[i].cpp<<setw(8)<<s[i].math<<setw(8)<<s[i].english<<setw(8);
        cout<<s[i].grade<<setw(16)<<s[i].average<<endl;

    }
}
运行结果:

技术分享

技术分享

技术分享


技术分享

技术分享


第十七周项目6 读取文件,多文件处理