void school_order(School *temp,int type) //type=0按总分,type=1按男总分,type=2按女总分,
{
    School *p,*q,*small,*temp1;
    temp1=new School;
    temp1->next=NULL;
    p=temp;
    while(p) 
    {
        small=p;
        q=p->next;
        while(q) 
        {
            switch(type)
            {
            case 0:
                if((q->boy+q->girl)<(small->girl+small->boy)) 
                {
                    small=q; 
                }
                break;
            case 1:
                if(q->boy<small->boy) 
                {
                    small=q; 
                }
                break;
            case 2:
                if(q->girl<small->girl) 
                {
                    small=q; 
                }
                break;
            default:
                cout<<"error"<<endl;
            }
            if(small!=p) 
            {
                temp1->boy=p->boy; 
                p->boy=small->boy; 
                small->boy=temp1->boy;
                temp1->girl=p->girl; 
                p->girl=small->girl; 
                small->girl=temp1->girl;
                strcpy(temp1->name,p->name);
                strcpy(p->name,small->name); 
                strcpy(small->name,temp1->name);
                temp1->number=p->number; 
                p->number=small->number; 
                small->number=temp1->number;    //将学校的名字互换
            }
            q=q->next;
        }
        p=p->next;
    }
}
Sport * head2;
int sport_isexist(int a)    //检查运动项目(编号)是否已经存在
{
    int b=0;
    Sport *p;
    p=head2;
    p=p->next;
    while(p)
    {
        if(p->number==a)
        {
            return 1;
        }
        p=p->next;
    }
    return 0;
}
void sport_add()        //添加项目
{
    Sport * p;
    int mark=0;
    p=new Sport;
    cout<<"请输入项目名称:";
    cin>>p->name;
    char c;
    while (mark!=1)
    {
        cout<<"请输入项目编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(sport_isexist(c))
            {
                cout<<"该编号已存在"<<endl;
            }
            else
            {
                mark=1;
                p->number=c;
            }
        }
    }
    mark=0;
    while (mark!=1)
    {
        cout<<"请输入项目类型(0为女子项目,1为男子项目):";
        cin>>c;
        p->isboy=(int)(c-'0');//字符转换成数字
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else if(p->isboy<0||p->isboy>1)
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            mark=1;
            p->isboy=c;
        }
    }
    mark=0;
    while (mark!=1)
    {
        cout<<"请输入项目名次情况(0为取前3名,1为取前5名):";
        cin>>c;
        p->is3=(int)(c-'0');
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else if(p->is3<0||p->is3>1)
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            mark=1;
            p->is3=c;
        }
    }
    mark=0;
    while (mark!=1)
    {
        cout<<"请输入第一名的学校编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(!school_isexist(c))
            {
                cout<<"该学校不存在,请先添加";
            }
            else
            {
                mark=1;
                p->first=c;
                if(p->is3=='0')
                    school_addmark(5,c,p->isboy);
                else
                    school_addmark(7,c,p->isboy);
            }
        }    
    }
    mark=0;
    while (mark!=1)
    {
        cout<<"请输入第二名的学校编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(!school_isexist(c))
            {
                cout<<"该学校不存在,请先添加";
            }
            else
            {
                mark=1;
                p->second=c;
                if(p->is3=='0')
                    school_addmark(3,c,p->isboy);
                else
                    school_addmark(5,c,p->isboy);
            }
        }
    }
    mark=0;
    while (mark!=1)
    {
        cout<<"请输入第三名的学校编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(!school_isexist(c))
            {
                cout<<"该学校不存在,请先添加";
            }
            else
            {
                mark=1;
                p->third=c;
                if(p->is3=='0')
                    school_addmark(2,c,p->isboy);
                else
                    school_addmark(3,c,p->isboy);
            }
        }
    }
    mark=0;
    if(p->is3=='1')
    {
        while (mark!=1)
        {
        cout<<"请输入第四名的学校编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(!school_isexist(c))
            {
                cout<<"该学校不存在,请先添加";
            }
            else
            {
                mark=1;
                p->fourth=c;
                school_addmark(2,c,p->isboy);
            }
        }
        }
        mark=0;
        while (mark!=1)
        {
        cout<<"请输入第五名的学校编号:";
        cin>>c; 
        if (!isdigit(c))
        {
            cout<<"数据非法"<<endl;
        }
        else
        {
            if(!school_isexist(c))
            {
                cout<<"该学校不存在,请先添加"<<endl;
            }
            else
            {
                mark=1;
                p->fifth=c;
                school_addmark(1,c,p->isboy);
            }
        }
        }
    }
    else
    {
        p->fourth='0';
        p->fifth='0';
    }
    p->next=head2->next;
    head2->next=p;
    cout<<"成功添加了一个运动项目"<<endl;
}
int sport_getlong(Sport *first)                //得到项目链表长度
{
    int i=0;
    while (first->next!=NULL)
    {
        i++;
        first=first->next;
    }
    return i;
}
void sport_write()                            //将项目数据写入文本文档
{
    Sport * p;
    p=head2;
    p=p->next;
    ofstream outfile("Sport.txt",ios::out);
    outfile<<sport_getlong(p)+1<<" ";
    while (p!=NULL)
    {
        outfile<<p->name<<" "<<p->number<<" "<<p->isboy<<" "<<p->is3<<" "<<p->first<<" "<<p->second<<" "<<p->third<<" "<<p->fourth<<" "<<p->fifth<<" ";
        p=p->next;
    }
    outfile.close();
    cout<<"Write Success!"<<endl;
}
void sport_read()                            //从文本读取项目数据
{
    int i;
    ifstream infile ("Sport.txt",ios::in);
    infile>>i;
    while(i>0)
    {
        Sport * p;
        p=new Sport;
        infile>>p->name>>p->number>>p->isboy>>p->is3>>p->first>>p->second>>p->third>>p->fourth>>p->fifth;
        p->next=head2->next;
        head2->next=p;
        i--;
    }
    cout<<"Sport Data Read Success!"<<endl;
}
void sport_output(Sport *p)                        //输出项目的情况
{
    cout<<"   name  "<<"\t"<<"Num"<<" "<<"B/G"<<" "<<"3/5"<<"  "<<"first"<<"  "<<"second"<<"  "<<"third"<<"   "<<"fourth"<<"   "<<"fifth"<<" "<<endl;
    while(p)
    {
        cout<<p->name<<"\t"<<" "<<getint(p->number)<<"  "<<getint(p->isboy)<<"  "<<getint(p->is3)<<" ";
        school_show(p->first);
        school_show(p->second);
        school_show(p->third);
        school_show(p->fourth);
        school_show(p->fifth);
        p=p->next;
    }
    cout<<endl;
}
void sport_search(int a)                        //搜索项目
{
    Sport *p;
    p=head2;
    p=p->next;
    while(p)
    {
        if(p->number==a)
        {
            cout<<"项目名:"<<p->name<<endl<<"项目类型:";
            if(p->isboy==1)
            {
                cout<<"男子项目";
            }
            else
            {
                cout<<"女子项目";
            }
            cout<<endl<<"第一名:";
            school_show(p->first);
            cout<<endl<<"第二名:";
            school_show(p->second);
            cout<<endl<<"第三名:";
            school_show(p->third);
            cout<<endl<<"第四名:";
            school_show(p->fourth);
            cout<<endl<<"第五名:";
            school_show(p->fifth);
            return;
        }
        p=p->next;
    }
    cout<<"无此编号";
}
void main()                            //运动会程序主函数
{
    system("color 2b");    //改变背景,前景色
    head1=new School;
    head1->next=NULL;
    head2=new Sport;
    head2->next=NULL;
    //school_add();
    sport_read();
    school_read();
    //sport_add();
    School * p1;
    Sport * p2;
    p1=head1;
    p1=p1->next;
    p2=head2;
    p2=p2->next;
    char choose;
    char temp;
    //string ch="  ";
    int a=1;
    while(a!=0)
    {
        cout<<endl;
        cout<<"                 .oO欢迎使用运动员分数统计Oo.       "<<endl;
        cout<<"         **********************************************************"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *   1.输入运动项目;             2.输入学校;              *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *   3.按学校编号输出总分;       4.按总分排序;            *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *   5.按男团体总分排序;         6.按女团体总分排序;      *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *   7.按项目编号查询;           8.按学校编号查询;        *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *                       0.退出                           *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         *           提示:需先输入学校后才能输入运动项目         *"<<endl;
        cout<<"         *                                                        *"<<endl;
        cout<<"         **********************************************************"<<endl;
        cout<<"                              请选择:";
        //cin>>ch;
        //choose=int(ch[0])+int(ch[1])-'0';    //处理异常状态
        cin>>choose;
        if (!isdigit(choose))
        {
            system("cls");
            cout<<"操作非法1"<<endl;
        }
        else
        {
            switch(getint(choose))
            {
                case 1:
                    system("cls");
                    cout<<"当前项目:"<<endl;
                    sport_output(p2);
                    cout<<"当前学校:"<<endl;
                    school_output(p1);
                    sport_add();
                    break;
                case 2:
                    system("cls");
                    school_add();
                    break;
                case 3:
                    system("cls");
                    school_output(p1);
                    break;
                case 4:
                    system("cls");
                    school_order(p1,0);
                    school_output(p1);
                    break;
                case 5:
                    system("cls");
                    school_order(p1,1);
                    school_output(p1);
                    break;
                case 6:
                    system("cls");
                    school_order(p1,2);
                    school_output(p1);
                    break;
                case 7:
                    system("cls");
                    cout<<"请输入项目编号:";
                    cin>>temp;
                    sport_search(temp);
                    break;
                case 8:
                    system("cls");
                    cout<<"请输入学校编号:";
                    cin>>temp;
                    school_search(temp);
                    break;
                case 0:
                    system("cls");
                    a=0;
                    break;
                default:
                    system("cls");
                    cout<<"操作非法\n";
            }
        }
    }
    school_write();
    sport_write();
    system("exit");
}