菜鸟编程 一个练习

来源:互联网 发布:uu加速器mac版 编辑:程序博客网 时间:2024/06/08 06:17

最近,笔者做了一个有趣的练习,在这里分享一下。





#include <iostream>
#include <cstring>

using namespace std;

int number = -1;

class student
{
public :
    student(){}
    student(unsigned int id,int score,char name[20])
    {
        this->id = id;
        strcpy(this->name,name);
        this->score = score;
    }
    friend void printout(int number,student *p);
    friend bool cmpid(unsigned int id,int number,student *p);
    friend void searchid(unsigned int id,int number,student *p);
    friend void searchname(char search_name[],int number,student *p);
    friend void idsort(int number,student *p);
    friend void scoresort(int number,student *p);

    void printout();
private:
    unsigned int id;
    char name[20];
    int score;
};

void student::printout()
{
    cout << id << ' ' << name << ' ' << score << endl;
}

void printout(int number,student *p);
bool cmpid(unsigned int id,int number,student *p);
void searchid(unsigned int id,int number,student *p);
void searchname(char search_name[],int number,student *p);
void idsort(int number,student *p);
void scoresort(int number,student *p);

int main()
{
    student *p = new student[10000];
    student *p2 = new student[10000];
    student *p1 = new student[10000];

    unsigned int id = 0;
    int score = 0,judge_number = 0;
    char name[20];
    bool flag = 0;

    while(!flag)
    {
        cin >> judge_number;
        switch(judge_number)
        {
            case 1:
            {
                bool flag2 = 0;
                cin >> id >> name >> score;
                flag2 = cmpid(id,number,&p[0]);
                if(flag2) break;
                number++;
                student temp(id,score,name);
                p[number] = temp;
                p1[number] = temp;
                p2[number] = temp;
                cout << "SUCCESS" << endl;
                break;
            }
            case 2:
            {
                printout(number,&p[0]);
                break;
            }
            case 3:
            {
                unsigned int search_id = 0;
                cin >> search_id;
                searchid(search_id,number,&p[0]);
                break;
            }
            case 4:
            {
                char search_name[20];
                cin >> search_name;
                searchname(search_name,number,&p[0]);
                break;
            }
            case 5:
            {
                idsort(number,&p1[0]);
                break;
            }
            case 6:
            {
                scoresort(number,&p2[0]);
                break;
            }
            case 7:
            {
                cout << "END"; flag = 1;
                break;
            }
        }
    }
    delete []p;
    p = 0;
    delete []p1;
    delete []p2;
    p1 = 0;
    p2 = 0;
    return 0;
}

void printout(int number,student *p)
{
    for(int i = 0;i <= number;i++)
    {
        if(number == -1) return ;
        else p[i].printout();
    }
    return ;
}

bool cmpid(unsigned int id,int number,student *p)
{
    for(int i = 0;i <= number;i++)
    {
        if(number == -1) return 0;
        if(p[i].id == id)
        {
            cout << "FAILED\n";
            return 1;
        }
    }
    return 0;
}

void searchid(unsigned int id,int number,student *p)
{
    if(number == -1) return;
    for(int i = 0;i <= number;i++)
    {
        if(p[i].id == id)
        {
            p[i].printout();
        }
    }
}
void searchname(char search_name[],int number,student *p)
{
    if(number == -1) return;
    int judge = 0;
    for(int i = 0;i <= number;i++)
    {
        judge = strcmp(search_name,p[i].name);
        if(judge == 0)
        {
            p[i].printout();
            return ;
        }
    }
}
void idsort(int number,student *p){
    for(int i = 1;i <= number;i++){
        for(int j = 0;j <= number-i;j++){
            student temp = p[j];
            if(p[j].id > p[j+1].id){
                p[j] = p[j+1];
                p[j+1] = temp;
            }
        }
    }
    printout(number,&p[0]);
}
void scoresort(int number,student *p)
{
    for(int i = 1;i <= number;i++){
        for(int j = 0;j <= number-i;j++){
            student temp = p[j];
            if(p[j].score < p[j+1].score){
                p[j] = p[j+1];
                p[j+1] = temp;
            }
        }
    }
    printout(number,&p[0]);
}