2008年10月23日 星期四

Chap5-2:成績計算(更新)

成績處理作業
試利用結構設計一程式,可輸入全班同學(5人)的成績(英文、數學、國文) ,並計算出平均成績。
程式需要可按照需求以不同科目為索引,由大至小排列學生成績績。

提示:結構欄位中應有學號欄位,其餘自定

------------------------------------------------<程式開頭>--------------------------------------
//電子三乙9526215吳國志

#include <iostream>
#include <iomanip>
using namespace std;

//宣告學生儲存的學號ID、英文成績en、數學成績ma、國文成績ch以及平均av
struct student
{
    int ID[6];
    float en[6], ma[6], ch[6], av[6];
}IN, out;//宣告輸入IN以及輸出out的儲存位置


//宣告副程式:氣泡排序法
void change(int);
//宣告副程式:輸出排序結果
void print(int);


int main()
{
    int p=5;//人數(矩陣上限為5人)
    int i=0, j=0, f=0;
   
    //輸入成績
    cout<<"成績計算系統\n請輸入"<<p<<"位同學學號(數字)、英文、數學、國文成績\n";
    for(i=0;i<p;i++)
    {
        cout<<"\n請輸入第"<<i+1<<"位同學學號\n";
        cin>>IN.ID[i];
        cout<<"\n英文成績";
        cin>>IN.en[i];
        cout<<"\n數學成績";
        cin>>IN.ma[i];
        cout<<"\n國文成績";
        cin>>IN.ch[i];
        IN.av[i]=(IN.en[i]+IN.ma[i]+IN.ch[i])/3;
    }
   
    //將輸入值傳給輸出用的儲存位置
    for(i=0;i<p;i++)
    {
        out.ID[i]=IN.ID[i];
        out.en[i]=IN.en[i];
        out.ma[i]=IN.ma[i];
        out.ch[i]=IN.ch[i];
        out.av[i]=IN.av[i];
    }
   
    cout<<"\n【成績排行榜】\n";
    while(f!=6)
    {
        cout<<"選擇排行依據(輸入數字)\n1.以學號\n2.以英文分數\n3.以數學分數\n4.以國文分數\n5.以平均\n6.離開\n\n"<<"請輸入功能項目:";
        cin>>f;
       
        //排序判斷程式  
        switch (f) {
                //以學號成績排序(直接輸出)  
            case 1:
                for(j=0;j<p;j++)
                {
                    for(i=0;i<p;i++)
                    {              
                        if((out.ID[i]>out.ID[i+1]) && (out.ID[i+1]!=0))
                            change(i);
                    }
                }
                cout<<"\n以學號來排序\n";
                print(p);
                break;
               
                //以英文成績排序  
            case 2:
                for(j=0;j<p;j++)
                {
                    for(i=0;i<p;i++)
                    {              
                        if(out.en[i]<out.en[i+1])
                            change(i);
                    }
                }
                cout<<"\n以英文分數來排序\n";
                print(p);
                break;
               
                //以數學成績排序  
            case 3:
                for(j=0;j<p;j++)
                {
                    for(i=0;i<p;i++)
                    {
                        if(out.ma[i]<out.ma[i+1])
                            change(i);
                    }
                }
                cout<<"\n以數學分數來排序\n";
                print(p);
                break;
               
                //以國文成績排序
            case 4:
                for(j=0;j<p;j++)
                {
                    for(i=0;i<p;i++)
                    {
                        if(out.ch[i]<out.ch[i+1])
                            change(i);
                    }
                }
                cout<<"\n以國文分數來排序\n";
                print(p);
                break;
               
                //以平均排序  
            case 5:
                for(j=0;j<p;j++)
                {
                    for(i=0;i<p;i++)
                    {
                        if(out.av[i]<out.av[i+1])
                            change(i);
                    }
                }
                cout<<"\n以平均分數來排序\n";
                print(p);
                break;
               
            default:
                break;
        }
        if(f>6 || f<1)
            cout<<"輸入錯誤請重新輸入\n\n";
    }
   
    return 0;
}



//副程式:氣泡排序法
void change(int a)
{   
    int x;
    float y;   
    y=out.av[a], out.av[a]=out.av[a+1], out.av[a+1]=y;
    y=out.en[a], out.en[a]=out.en[a+1], out.en[a+1]=y;
    y=out.ma[a], out.ma[a]=out.ma[a+1], out.ma[a+1]=y;
    y=out.ch[a], out.ch[a]=out.ch[a+1], out.ch[a+1]=y;
    x=out.ID[a], out.ID[a]=out.ID[a+1], out.ID[a+1]=x;       
}

//副程式:輸出排序結果
void print(int p)
{  
    cout<<"排名\t學號\t英文\t數學\t國文\t平均\n";   
    for(int i=0;i<p;i++)
        cout<<i+1<<".\t"<<setw(5)<<out.ID[i]<<"\t"<<setw(5)<<out.en[i]<<"\t"<<setw(5)<<out.ma[i]<<"\t"<<setw(5)<<out.ch[i]<<"\t"<<setw(5)<<out.av[i]<<"\n";
    cout<<endl;
}
------------------------------------------------<程式結尾>--------------------------------------

程式執行畫面

沒有留言:

張貼留言