• 第17周项目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;
    
        }
    }
    
    执行结果:









    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    【BZOJ2741】L-分块+可持久化trie
    【BZOJ4241】历史研究-回滚莫队
    【BZOJ4137】火星商店问题(FJOI2015)-线段树分治+可持久化trie
    【HDU4117】GRE Words-AC自动机+线段树优化DP
    noi.ac系列NOIP2018模拟赛参赛实录
    【BZOJ1835】基站选址(ZJOI2010)-DP+线段树优化
    【BZOJ4912】天才黑客(SDOI2017)-最短路+虚树+线段树优化建图
    【HDU4897】Little Devil I-树链剖分
    【UOJ#282】长度测量鸡-数学证明
    10.12
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4685667.html
Copyright © 2020-2023  润新知