C语言课程设计


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>

#define space printf("\t\t\t\t");
#define enter printf("\n\n\n\n\n\n");
#define pause space;printf("请回车键继续");getchar();getchar();

struct athlete
{
    char name[40];
    char sex;
    double score;
    int x;
    athlete *next;
};

struct kind
{
    char s[40];
    athlete *head;
    kind *next;
}*K,*KE;

void recorde(athlete *head)               //根据类别录入信息
{
    athlete *NEW=(athlete *)malloc(sizeof(athlete));
    NEW->next=NULL;
    NEW->score=0;
    space;
    printf("请输入姓名:");
    scanf("%s",NEW->name);
    space
    getchar();
    printf("请输入性别(M/F/O):");
    scanf("%c",&NEW->sex);
    space;
    printf("请输入运动员编号:");
    scanf("%d",&NEW->x);
    athlete *p=head->next;
    if(p==NULL)
    {
        head->next=NEW;
    }
    else
    {
        while(p!=NULL)
        {
            if(p->x<=NEW->x&&(p->next==NULL||p->next->x>=NEW->x))
            {
                NEW->next=p->next;
                p->next=NEW;
                break;
            }
            if(p->x>NEW->x&&p->next==NULL)
            {
                head->next=NEW;
                NEW->next=p;
            }
            p=p->next;
        }
    }
    space;
    printf("创建完毕\n");
}

void creat_kind(char s[40])                  //创建新类别
{
    kind *p=(kind *)malloc(sizeof(kind));
    p->next=NULL;
    p->head=(athlete *)malloc(sizeof(athlete));
    p->head->next=NULL;
    strcpy(p->s,s);
    KE->next=p;
    KE=KE->next;
}

kind *find_kind(char s[40])                 //查找类别,返回类别指针
{
    kind *p=K->next;
    while(p!=NULL)
    {
        if(!strcmp(p->s,s))
            return p;
        p=p->next;
    }
    space
    printf("not found\n");
    space
    printf("please enter again\n");
    pause
    return K;
}

athlete *find_name(athlete *head,char name[])                 //在类别中按姓名查找
{
    athlete *p=head->next;
    while(p!=NULL)
    {
        if(!strcmp(p->name,name))
        {
            return p;
        }
        p=p->next;
    }
    if(p == NULL)
    {
        printf("No such name.\n");
        pause
        return head;
    }
}

athlete *find_x(athlete *head,int x)        //在类别中按编号查找
{
    athlete *p=head->next;
    while(p!=NULL)
    {
        if(p->x == x)
        {
            return p;
        }
        p=p->next;
    }
    if(p == NULL)
    {
        printf("No such name.\n");
        pause
        return head;
    }
}

void change(athlete *head)                        //在类别中修改
{
    printf("请选择:\n");
    printf("1、按姓名修改\n");
    printf("2、编号修改\n");
    int c;
    scanf("%d",&c);
    switch(c)
    {
    case 1:
    {
        char name[40];
        scanf("%s",name);
        athlete *p=find_name(head,name);
        if(p!=head)
        {
            space
            printf("请输入姓名:");
            scanf("%s",p->name);
            getchar();
            space
            printf("请输入性别(M/F/O):");
            scanf("%c",&p->sex);
            space
            printf("请输入运动员编号:");
            scanf("%d",&p->x);
        }
    }
    break;
    case 2:
    {
        char kind[40],x;
        scanf("%s %c",kind,&x);
        athlete *p=find_x(head,x);
        if(p!=head)
        {
            space
            printf("请输入姓名:");
            scanf("%s",p->name);
            getchar();
            space
            printf("请输入性别(M/F/O):");
            scanf("%c",&p->sex);
            space
            printf("请输入运动员编号:");
            scanf("%d",&p->x);
        }
    }
    break;
    default:
        space
        printf("输入错误\n");
    }
}

void print(athlete *head)               //按类别输出
{
    athlete *p=head->next;
    while(p!=NULL)
    {
        printf("姓名:");
        printf("%s",p->name);
        printf("性别:");
        printf("%c",&p->sex);
        printf("编号:");
        printf("%d",&p->x);
    }
}

void prints(athlete *p)
{
    space;
    printf("姓名:");
    printf("%s\n",p->name);
    space;
    printf("性别:");
    printf("%c\n",p->sex);
    space;
    printf("编号:");
    printf("%d\n",p->x);
    pause;
}

void put_kind(athlete *head)
{
    athlete *p=head->next;
    while(p!=NULL)
    {
        space;
        printf("编号:");
        printf("%d\n",p->x);
        space;
        printf("姓名:");
        printf("%s\n",p->name);
        space;
        printf("性别:");
        printf("%c\n",p->sex);
        space
        printf("成绩:");
        printf("%.2lf\n",p->score);
        p=p->next;
        printf("\n\n");
    }
}

void all_put()
{
    kind *p=K->next;
    if(p==NULL)
    {
        space
        printf("数据为空\n");
        pause
        return ;
    }
    while(p!=NULL)
    {
        space
        printf("%s\n",p->s);
        put_kind(p->head);
        p=p->next;
        printf("================================================================================\n");
    }
    pause
}

void set_score(athlete *head)
{
    athlete *p=head->next;
    if(p==NULL)
    {
        space
        printf("此类中运动员信息为空\n");
        pause
        return ;
    }
    while(p!=NULL)
    {
        prints(p);
        printf("请核对信息是否正确,无语后再进行成绩录入,成绩一旦录入,将无法进行更改\n");
        getchar();
        printf("是否正确?(Y/N)");
        char ok;
        scanf("%c",&ok);
        if(ok=='Y'||ok=='y')
        {
            printf("请输入该运动员成绩:");
            scanf("%lf",&p->score);
        }
        else
        {
            printf("返回主界面,请对该运动员信息进行修改后再录入成绩\n");
            return ;
        }
        p=p->next;
    }
}

void kind_3(athlete *head,char *name)                          //文件处理部分
{
    FILE *fp;
    int m=0,f=0,o=0;
    char *s=(char *)malloc(sizeof(name)+2);
    strcpy(s,name);
    strcat(s,"m");
    printf("%s\n",s);
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    athlete *p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='M')
        {
            m++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
    strcpy(s,name);
    strcat(s,"f");
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='F')
        {
            f++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
    strcpy(s,name);
    strcat(s,"o");
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='O')
        {
            o++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
    space
    printf("在%s项目中,共有%d人参赛",name,m+f+o);
    space
    printf("其中男性%d 女性%d 其他%d\n",m,f,o);
    space
    printf("是否需要查看详细数据?(Y/N)");
    char ok;
    getchar();
    scanf("%c",&ok);
    if(ok=='N'||ok=='n')
        return ;
    else
    {
        athlete temp;
        strcpy(s,name);
        strcat(s,"m");
        space
        printf("男运动员信息:\n");
        fp=fopen(s,"rb");
        while(fread(&temp,sizeof(temp),1,fp)==1)
        {
            space
            printf("姓名:%s\n",temp.name);
            space
            printf("编号:%d\n",temp.x);
            space
            printf("成绩:%.2lf\n",temp.score);
        }
        fclose(fp);
        strcpy(s,name);
        strcat(s,"f");
        printf("\n\n");
        space
        printf("女性运动员信息:\n");
        fp=fopen(s,"rb");
        while(fread(&temp,sizeof(temp),1,fp)==1)
        {
            space
            printf("姓名:%s\n",temp.name);
            space
            printf("编号:%d\n",temp.x);
            space
            printf("成绩:%.2lf\n",temp.score);
        }
        fclose(fp);
        strcpy(s,name);
        strcat(s,"o");
        printf("\n\n");
        space
        printf("其他运动员信息:\n");
        fp=fopen(s,"rb");
        while(fread(&temp,sizeof(temp),1,fp)==1)
        {
            space
            printf("姓名:%s\n",temp.name);
            space
            printf("编号:%d\n",temp.x);
            space
            printf("成绩:%.2lf\n",temp.score);
            printf("\n\n");
        }
        fclose(fp);
    }
}

void Rank(char *s)
{
    FILE *fp;
    fp=fopen(s,"rb");
    athlete *head=(athlete *)malloc(sizeof(athlete));
    head->next=NULL;
    athlete t,*p;
    while(fread(&t,sizeof(athlete),1,fp)==1)
    {
        athlete *temp=(athlete *)malloc(sizeof(athlete));
        strcpy(temp->name,t.name);
        temp->score=t.score;
        temp->sex=t.sex;
        temp->x=t.x;
        temp->next=NULL;
        p=head->next;
        if(p==NULL)
        {
            head->next=temp;
        }
        else
        {
            while(p!=NULL)
            {
                if(p->score<=temp->score&&(p->next==NULL||p->next->score>=temp->score))
                {
                    temp->next=p->next;
                    p->next=temp;
                    break;
                }
                if(p->score>temp->score&&p->next==NULL)
                {
                    head->next=temp;
                    temp->next=p;
                }
                p=p->next;
            }
        }
    }
    put_kind(head);
    pause
}

void get_athlete(athlete *head,char *name)
{
    FILE *fp;
    athlete t;
    char *s=(char *)malloc(sizeof(name)+2);
    strcpy(s,name);
    strcat(s,"m");
    fp=fopen(s,"rb");
    if(fp==NULL)
        printf("fuck\n");
    while(fread(&t,sizeof(t),1,fp)==1)
    {
        athlete *temp=(athlete *)malloc(sizeof(athlete));
        strcpy(temp->name,t.name);
        temp->score=t.score;
        temp->sex=t.sex;
        temp->x=t.x;
        temp->next=NULL;
        athlete *p=head->next;
        if(p==NULL)
        {
            head->next=temp;
        }
        else
        {
            while(p!=NULL)
            {
                if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
                {
                    temp->next=p->next;
                    p->next=temp;
                    break;
                }
                if(p->x>temp->x&&p->next==NULL)
                {
                    head->next=temp;
                    temp->next=p;
                }
                p=p->next;
            }
        }
    }
    athlete *x=head->next;
//    while(x!=NULL)
//    {printf("%s\n",x->name);x=x->next;}
//    pause
    fclose(fp);
    strcpy(s,name);
    strcat(s,"f");
    fp=fopen(s,"rb");
    while(fread(&t,sizeof(t),1,fp)==1)
    {
        athlete *temp=(athlete *)malloc(sizeof(athlete));
        strcpy(temp->name,t.name);
        temp->score=t.score;
        temp->sex=t.sex;
        temp->x=t.x;
        temp->next=NULL;
        athlete *p=head->next;
        if(p==NULL)
        {
            head->next=temp;
        }
        else
        {
            while(p!=NULL)
            {
                if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
                {
                    temp->next=p->next;
                    p->next=temp;
                    break;
                }
                if(p->x>temp->x&&p->next==NULL)
                {
                    head->next=temp;
                    temp->next=p;
                }
                p=p->next;
            }
        }
    }
    fclose(fp);
    strcpy(s,name);
    strcat(s,"o");
    fp=fopen(s,"rb");
    while(fread(&t,sizeof(t),1,fp)==1)
    {
        athlete *temp=(athlete *)malloc(sizeof(athlete));
        strcpy(temp->name,t.name);
        temp->score=t.score;
        temp->sex=t.sex;
        temp->x=t.x;
        temp->next=NULL;
        athlete *p=head->next;
        if(p==NULL)
        {
            head->next=temp;
        }
        else
        {
            while(p!=NULL)
            {
                if(p->x<=temp->x&&(p->next==NULL||p->next->x>=temp->x))
                {
                    temp->next=p->next;
                    p->next=temp;
                    break;
                }
                if(p->x>temp->x&&p->next==NULL)
                {
                    head->next=temp;
                    temp->next=p;
                }
                p=p->next;
            }
        }
    }
    fclose(fp);
}

void get_data()
{
    char f[]="data";
    FILE *fp=fopen(f,"rb");
    if(fp==NULL)
        printf("new\n");
    kind tt;
    while(fread(&tt,sizeof(tt),1,fp)==1)
    {
        kind *p=(kind *)malloc(sizeof(kind));
        p->head=(athlete *)malloc(sizeof(athlete));
        p->head->next=NULL;
        p->next=NULL;
        strcpy(p->s,tt.s);
        printf("ok\n");
        get_athlete(p->head,p->s);
        KE->next=p;
        KE=KE->next;
    }
}

void put_athlete(athlete *head,char *name)                          //文件处理部分
{
    FILE *fp;
    int m=0,f=0,o=0;
    char *s=(char *)malloc(sizeof(name)+5);
    strcpy(s,name);
    strcat(s,"m");
    printf("%s\n",s);
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    athlete *p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='M')
        {
            m++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
    strcpy(s,name);
    strcat(s,"f");
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='F')
        {
            f++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
    strcpy(s,name);
    strcat(s,"o");
    fp=fopen(s,"wb");
    if(fp==NULL)
        printf("fuck\n");
    p=head->next;
    while(p!=NULL)
    {
        if(p->sex=='O')
        {
            o++;
            fwrite(p,sizeof(athlete),1,fp);
        }
        p=p->next;
    }
    fclose(fp);
}

void put_data()
{
    kind *p=K->next;
    FILE *fp=fopen("data","wb");
    if(fp==NULL)
        printf("fuck\n");
    if(p!=NULL)
    {
        fwrite(p,sizeof(kind),1,fp);
        put_athlete(p->head,p->s);
        p=p->next;
    }
}

int main()
{
    K=(kind *)malloc(sizeof(kind));
    K->next=NULL;
    KE=K;
    get_data();
    system("color 5F");
    while(1)
    {
        system("cls");
        enter;
        printf("ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ\n\n\n");
        space
        printf("请选择功能\n");
        space
        printf("1.创建新类别\n");
        space
        printf("2.对类别中进行操作\n");
        space
        printf("3.成绩录入\n");
        space
        printf("4.输出全部数据\n");
        space
        printf("5.运动员信息分类查看\n");
        space
        printf("6.成绩排名\n");
        space
        printf("0.退出\n");
        printf("\n\n\n");
        printf("ΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖΖ");
        space;
        COORD loc;
        loc.X=32;
        loc.Y=19;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
        int c;
        scanf("%d",&c);

        system("cls");
        enter
        switch(c)
        {
        case 1:
        {
            char s[40];
            space;
            printf("请输入要创建的比赛项目名称:");
            scanf("%s",s);
            creat_kind(s);
            space;
            printf("创建成功\n");
            pause;
        }
        break;
        case 2:
        {
            char s[40];
            space;
            printf("请输入要进行操作的比赛项目名称:\n");
            space;
            scanf("%s",s);
            kind *p=find_kind(s);
            if(p==K)
                break;
            athlete *pa=p->head;
            int x;
            space;
            printf("请选择:\n");
            space;
            printf("1.增加新运动员\n");
            space;
            printf("2.查找运动员\n");
            space;
            printf("3.修改运动员信息\n");
            space;
            printf("0.退出\n");
            space;
            scanf("%d",&x);
            switch(x)
            {
            case 1:
                space
                printf("请输入要录入的运动员数量:");
                int n;
                scanf("%d",&n);
                while(n--)
                    recorde(pa);
                space
                printf("创建完毕\n");
                pause
                break;
            case 2:
                space;
                printf("1.按姓名查找\n");
                space;
                printf("2.按号码查找\n");
                space;
                printf("0.退出\n");
                int z;
                space
                scanf("%d",&z);
                if(z==1)
                {
                    char ss[40];
                    scanf("%s",ss);
                    athlete *a=find_name(pa,ss);
                    if(a!=pa)
                        prints(a);
                }
                else if(z==2)
                {
                    int t;
                    scanf("%d",&t);
                    athlete *a=find_x(pa,t);
                    if(a!=pa)
                        prints(a);
                }
                else
                    break;
                break;
            case 3:
                change(pa);
            default :
                break;
            }
        }
        break;
        case 3:
        {
            space
            printf("请输入要录入成绩的运动项目:");
            char s[40];
            scanf("%s",s);
            kind *p=find_kind(s);
            if(p==K)
            {
                printf("没有此类项目,若需要创建,请按回车返回主界面后进行创建\n");
                getchar();
                break;
            }
            athlete *pa=p->head;
            set_score(pa);
        }
        break;
        case 4:
            all_put();
            break;
        case 5:
        {
            space
            printf("请输入要查看的运动项目:");
            char s[40];
            scanf("%s",s);
            kind *p=find_kind(s);
            if(p==K)
            {
                printf("没有此类项目,若需要创建,请按回车返回主界面后进行创建\n");
                getchar();
                break;
            }
            athlete *pa=p->head;
            kind_3(pa,s);
            pause
        }
        break;
        case 6:
            printf("请输入要查看的运动项目加上要查看的性别(例:basketballm为男篮)\n");
            char s[50];
            scanf("%s",s);
            Rank(s);
            break;
        default :
            put_data();
            exit(0);
        }
    }
}

我曾经向着那轮一起看过的月亮许愿 你要过的幸福。。。

                                                                                                              ZY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值