排序系統的主選單及功能實現

bigbigship發表於2014-06-16

設計一主選單,實現如下功能:

(1)      字母排序

設定輸入字母的個數,輸入字母元素後,可以按從小到大也可以按從大到小的順序排列輸出。

(2)      數字排序

設定輸入數字的個數,輸入數字元素後,可以按從小到大也可以按從大到小的順序排列輸出。並對這些陣列元素進行求和,求積。

(3)      字串排序

輸入字串,可以按從小到大也可以按從大到小的順序排列輸出。

(4)      幫助及注意 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#define N 1000
using namespace std;


void start()
{
        cout<<endl<<"          ============================================================"<<endl;
        cout<<endl<<"         |   ★    ★    ★     ★    ★     ★     ★    ★          |"<<endl;
        cout<<endl<<"         |                  歡迎您使用本系統                          |"<<endl;
        cout<<endl<<"         |                                                            |"<<endl;
        cout<<endl<<"         |                                     AUTHOR---bigbigship    |"<<endl;
        cout<<endl<<"          ============================================================"<<endl;
}
void help()
{
        cout<<endl<<"          幫助說明:                                        "<<endl;
        cout<<endl<<"                1.程式可以從大到小也可以從小到大輸出        "<<endl;
        cout<<endl<<"                2.字母排序需注意字母輸入個數                "<<endl;
        cout<<endl<<"                3.數字可以進行排序,求和,求積最小公倍數    "<<endl;
        cout<<endl<<"                4.字串排序有字元本身排序和多個字串,    "<<endl;
        cout<<endl<<"                  並且子啊輸入時可以任意輸入                "<<endl;
}
void menu()
{
    cout<<endl<<"          menu"<<endl;
    cout<<endl<<"               1.字母排序"<<endl;
    cout<<endl<<"               2.數字排序"<<endl;
    cout<<endl<<"               3.字串排序"<<endl;
    cout<<endl<<"               4.幫助及注意"<<endl;
    cout<<endl<<"               5.退出"<<endl;
    cout<<"         Please input your order:  ";
}
char a[N];
int b[N];
bool cmp1(int  a,int  b)
{
    return a>b;
}
void sortchar()
{
    char x;
    int n;
    cout<<"         K.從小到大排序"<<endl;
    cout<<"         L.從大到小排序"<<endl;
    cout<<"         請輸入您要排的順序: ";
    cin>>x;
    cout<<endl<<"         請輸入您要排的字元的個數: ";
    cin>>n;
    cout<<endl<<"         請輸入您要排的字元: ";
    for(int i=0;i<n;i++)
        cin>>a[i];
    if(x=='K'){
        sort(a,a+n);
        cout<<endl<<"         該字元從小到大輸出:"<<endl<<"         ";
        cout<<a;
    }
    else{
        sort(a,a+n,cmp1);
        cout<<endl<<"         該字元從大到小輸出:"<<endl<<"         ";
        cout<<a;
    }
    cout<<endl<<"         "<<"Do you want to continue sorting?(Y/N)"<<"         ";
    cin>>x;
    cout<<endl;
    if(x=='Y')
        sortchar();
    else
        return;
}
int gcd(int a,int b)
{
    if(b)
        return gcd(b,a%b);
    return a;
}
int lcm(int a,int b)
{
    int x=gcd(a,b);
    return a*b/x;
}
void sortnum()
{
    int n,d,ans;
    char x;
    cout<<"         K.從小到大排序"<<endl;
    cout<<"         L.從大到小排序"<<endl;
    cout<<"         請輸入您要排的順序: ";
    cin>>x;
    cout<<endl<<"         請輸入您要排的字元的個數: ";
    cin>>n;
    cout<<endl<<"         請輸入您要排的字元: ";
    for(int i=0;i<n;i++)
        cin>>b[i];
    if(x=='K'){
        sort(b,b+n);
        cout<<endl<<"         該字元從小到大輸出:"<<endl<<"         ";
        for(int i=0;i<n;i++)
            cout<<b[i]<<" ";
        cout<<endl;
    }
    else{
        sort(b,b+n,cmp1);
        cout<<endl<<"         該字元從大到小輸出:"<<endl<<"         ";
        for(int i=0;i<n;i++)
                cout<<b[i]<<" ";
        cout<<endl;
    }
    cout<<"         你還可以對這組數進行求和,求積,求最小公倍數"<<endl;
    cout<<"         n.求和   m.求積   p.求最小公倍數   q.退出"<<endl<<"         ";
    cin>>x;
    if(x=='n'){
        ans=0;
        for(int i=0;i<n;i++)
            ans+=b[i];
        cout<<endl<<"它們的和:  "<<ans<<endl;
    }
    if(x=='m'){
        ans=1;
        for(int i=0;i<n;i++)
            ans*=b[i];
        cout<<endl<<"它們的積:  "<<ans<<endl;
    }
    if(x=='p'){
        ans=1;
        for(int i=0;i<n;i++)
            ans=lcm(ans,b[i]);
        cout<<endl<<"         它們的最小公倍數:  "<<ans<<endl;
    }
    if(x=='q'){
         cout<<endl<<"         "<<"請問要繼續排序嗎?(Y/N)"<<"         ";
         cin>>x;
         cout<<endl;
         if(x=='Y')
             sortnum();
         else
            return;
    }
}
void sortstr()
{
    char x;
    int l;
    cout<<"         1.字串本身排序"<<endl;
    cout<<"         2.多個字串排序"<<endl<<"         ";
    cin>>l;
    cout<<"         K.從小到大排序"<<endl;
    cout<<"         L.從大到小排序"<<endl;
    cout<<"         請輸入您要排的順序: ";
    cin>>x;
    if(l==1){
        cout<<endl<<"         請輸入您要排的字串: ";
        cin>>a;
        int len=strlen(a);
        if(x=='K')
           sort(a,a+len);
        else
            sort(a,a+len,cmp1);
        cout<<a<<endl;
    }
    else{
        int num;
        cout<<endl<<"         請輸入您要排的字串個數: ";
        cin>>num;
        cout<<endl<<"         請輸入您要排的字串: ";
        if(x=='K'){
          while(num--){
            cin>>a;
            int len=strlen(a);
            sort(a,a+len);
            cout<<"         "<<a<<endl;
          }
        }
        else{
          while(num--){
            cin>>a;
            int len=strlen(a);
            sort(a,a+len);
            cout<<"         "<<a<<endl;
          }
        }
    }
    cout<<endl<<"         "<<"請問要繼續排序嗎?(Y/N)"<<"         ";
         cin>>x;
         cout<<endl;
         if(x=='Y')
             sortstr();
         else
            return;
}
int main()
{
    start();
    menu();
    int order;
    while(cin>>order){
        if(order<1||order>5){
            cout<<"         input error ,please input again   ";
            continue;
        }
        switch(order)
        {
            case 1: sortchar();break;
            case 2: sortnum();break;
            case 3: sortstr();break;
            case 4: help();break;
            case 5: return 0;
        }
        menu();
    }
    return 0;
}

程式碼無版權 可以任意修改,共同進步

相關文章