2-2学生成績統計(強化版)

4256 ワード

/*
*       :    
*     :2014  3 4 
*      :v1.0
*     :                    。
*     : 
*     : 
*     :     ,      ,                 。
*/
#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;
struct Student    
{
    char num[13];   //  
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;    //   
    double average;//  
};
void calculate(Student s[],int n);  //       ,   s   ,  n   
void sort1(Student s[],int n);      //       
void sort2(Student s[],int);      //       
void output(Student [],int);     //     
void outputExcellent(Student [],int);  //     :   285,     90
int i,j;
int main()
{
    Student stu[]= {{"201152501104","Tom",65,69 ,68 },
        {"201152501114","Jeery",94 ,89 ,63 },
        {"201152501138","Speike",67 ,62 ,84 },
        {"201152501204","Tyke",100 ,95 ,91 },
        {"201152501202","Tuffy",59 ,80 ,55 },
        {"201152501115","Butch",100 ,99 ,89 },
        {"201152501201","Lightning",95 ,92 ,99 },
        {"201152501145","Topsy",88 ,56 ,67 },
        {"201152501203","Droopy",62 ,62 ,95 },
        {"201152501140","Drupa",80 ,60 ,86 },
        {"201152501205","Buzz",73 ,90 ,94}
    };
    int stuNum=sizeof(stu)/sizeof(stu[0]);  // sizeof           
    //          
    calculate(stu,stuNum);
    cout<<"      :"<<endl;
    output(stu,stuNum);
    cout<<"     :"<<endl;
    outputExcellent(stu,stuNum);
    //          
    sort1(stu,stuNum);
    cout<<"        :"<<endl;
    output(stu,stuNum);
    //          
    sort2(stu,stuNum);
    cout<<"        :"<<endl;
    output(stu,stuNum);
    return 0;
}
void calculate(Student s[],int n)//       ,   s   ,  n   
{
    for(j=0; j<n; j++)
    {
        s[j].grade=s[j].cpp+s[j].math+s[j].english;
        s[j].average=s[j].grade/3;
    }
    return;
}
void sort1(Student s[],int n)   //       
{
    Student m;
    for(j=0; j<n-1; j++) //     
    {
        for(i=0; i<n-1-j; i++)
        {
            if(s[i].grade<s[i+1].grade)
            {
                m=s[i];
                s[i]=s[i+1];
                s[i+1]=m;
            }
        }
    }
}
void sort2(Student s[],int n)      //       
{
    Student m;
    for(j=0; j<n-1; j++) //     
    {
        for(i=0; i<n-1-j; i++)
        {
            if(s[i].num<s[i+1].num)
            {
                m=s[i];
                s[i]=s[i+1];
                s[i+1]=m;
            }
        }
    }
}
void output(Student s[],int n)     //     
{
    cout<<setw(13)<<"  "<<setw(13)<<"  "<<setw(13)<<"  "<<setw(13)<<"  "<<endl;
    for(j=0; j<n; j++)
    {
        cout<<setw(13)<<s[j].num<<setw(13)<<s[j].name<<setw(13)<<s[j].grade<<setw(13)<<s[j].average<<endl;
    }
}
void outputExcellent(Student s[],int n)  //     :   285,     90
{
    for(i=0; i<n; i++)
    {
        if(s[i].grade>285&&s[i].cpp>90&&s[i].math>90&&s[i].english>90)
            cout<<setw(13)<<s[i].num<<setw(13)<<s[i].name<<setw(13)<<s[i].grade<<setw(13)<<s[i].average<<endl;
    }
}

実行結果:
 
最初はいつも间违いを报告してまだ原因が见つからないで、ああ、変天をしてももとは関数を定义して书かないでコンパイルしてもだめです
ソートするときもその変数はstudentタイプを使いましょう.覚えておいてください~~~
がんばって!!