回 帖 发 新 帖 刷新版面

主题:[原创]运动会成绩统计

////////////head01.h///////////
#ifndef HEAD_FILE_01
#define HEAD_FILE_01
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct shuju  //数据育定义 
{
    int no;
    int type;
    int sex;
    char sport[5][20];
    char schoolname[5][20];
}itemnode;
typedef struct N  //项目结点定义
{
    shuju x;
    N *next;
}point,*ppt;

typedef struct R{             //运动员成绩接点
    char sportername[20];
    int position;
    int sex;
    int score;
    int itemnumber;
    R *next;
}result,*pr;

typedef struct S{       //学校接点
    int number;
    char name[20];    
    result *nextresult;
    S *next;
}school,*ps;
 
//////////////////////////////////////////////////////////////////

int begin();
void madedata(itemnode &a);
int returnscore(shuju node,int position); 
ppt madelist(int n,int f); 
int addschool(shuju data,int i);//重载创建学校连表
void output(ppt* head);// 
void output(ps* head);//重载输出学校
void outputstr(shuju a);


#endif

/***************function.cpp********************/
#include"head01.h" 
#define TEST printf("***********here is OK!***************\n");
          ////////////全局变量定义////////////////
ppt itemhead;  //项目
ps psch;   //学校


void madedata(itemnode &a)//
{
     int i;     
    
     printf("男子项目-1******女子项目-2\n");
     scanf("%d",&a.sex);
     printf("请输入该项目评选的名次:(5或3)\n"); 
     scanf("%d",&a.type);
     for(i=0;i<a.type;i++)
     {
         printf("请输入第%d名运动员姓名:\n",i+1);
         scanf("%s",&a.sport[i]);
        printf("请输入该运动员所在学校名称\n");
         scanf("%s",&a.schoolname[i]);
         addschool(a,i);
     }
};
////////////////////////////////////////
ppt madelist(int n,int f)//
{  
    int i;
    ppt p,head;    
    head=p=(ppt)malloc(sizeof(point));  
    for(i=1;i<=n;i++){
        printf("*********************************下面进行第%d项比赛*****************************\n",i);
        p->next=(ppt)malloc(sizeof(point));
        p=p->next;
        p->x.no=i;
        madedata(p->x);
    }
    p->next=NULL;
    return head;
};
////////////////////////////////////////////////////////////////
/////////////////////////////////////////
int addschool(itemnode data,int i)    //
{    
        static int number=1;
        ps p=psch; //指向学校的指针
        pr ppr;    //指向成绩的指针
        for(;p->next!=NULL;p=p->next){        
            if(strcmp(p->name,data.schoolname[i])==0){ ///学校已经登记
                    ppr=p->nextresult;
                    for(;ppr->next!=NULL;ppr=ppr->next);
                    ppr->next=(pr)malloc(sizeof(result));
                    ppr=ppr->next;
                    ppr->itemnumber=data.no;
                    ppr->position=i+1;
                    ppr->sex=data.sex;
                    strcpy(ppr->sportername,data.sport[i]);    
                    ppr->score=returnscore(data,i+1);                
                    ppr->next=NULL;
                    return 1;
        };    
        }
        if(strcmp(p->name,data.schoolname[i])==0){ 
                    ppr=p->nextresult;
                    for(;ppr->next!=NULL;ppr=ppr->next);
                    ppr->next=(pr)malloc(sizeof(result));
                    ppr=ppr->next;
                    ppr->sex=data.sex;
                    ppr->itemnumber=data.no;
                    ppr->position=i+1;
                    strcpy(ppr->sportername,data.sport[i]);    
                    ppr->score=returnscore(data,i+1);
                    ppr->next=NULL;
            return 1;
        };    
///////////////////////////////////////////////////////学校没有登记
            p->next=(ps)malloc(sizeof(school));    
            p=p->next;
            p->number=number;
            {   //将成绩加入到链表中
                ppr=(pr)malloc(sizeof(result));
                p->nextresult=ppr;
                strcpy(p->name,data.schoolname[i]);
                ppr->itemnumber=data.no;
                ppr->position=i+1;
                ppr->sex=data.sex;
                strcpy(ppr->sportername,data.sport[i]);    
                ppr->score=returnscore(data,i+1);
                ppr->next=NULL;
            }
            p->next=NULL;
            return 1;
};


////////////////////////////////////////////////////////////////////////
int returnscore(shuju node,int position)
{

    if(node.type==5)
        switch(position)
    {
        case 1:return 7;
        case 2:return 5;
        case 3:return 3;
        case 4:return 2;
        case 5:return 1;
    }
    else if(node.type==3)
        switch(position)
    {
        case 1:return 5;
        case 2:return 3;
        case 3:return 2;
    }
    return 0;
};
////////////////////////////////////
void outputstr(shuju a){
        printf("比赛项目:%d\n",a.no);
        if(a.sex==1)printf(" 男子 ");
        else printf(" 女子 ");
        printf("本项目评选前%d名\n",a.type);
        for(int i=0;i<a.type;i++)
            printf("第%d名获得者是来自%s大学的%s\n\n",i+1,a.schoolname[i],a.sport[i]);

};
//////////////////////////////////////////// 
int output(ppt p)
{  
    if(p->next==NULL)
    {printf("没有进行任何比赛!!\n");return 0;}
    printf("\n");
    for(;p->next!=NULL;){
        p=p->next;
        outputstr(p->x);
        }
    printf("\n\n");
    return 1;
};
////////////////////////////////////////////////
void output(ps head)
{
    int score,boy,girl;
    printf("下面是各学校的成绩:\n");
    ps p;
    pr s;
    p=head;
    p=p->next;
    for(;p!=NULL;p=p->next)
    {
        score=0;
        boy=0;
        girl=0;
        printf("%s大学  成绩如下\n",p->name);
        s=p->nextresult;
        for(;s!=NULL;s=s->next){
            if(s->sex==1)
                boy=boy+(s->score);
            else if(s->sex==2)
                girl=girl+s->score;
            printf("%s同学参加了第%d项比赛,获得第%d名,得分%d!\n",s->sportername,s->itemnumber,s->position,s->score);
        }
        score=boy+girl;
        printf("该大学的男子团体总分是:%d\n女子总分是:%d\n总分是:%d\n\n",boy,girl,score);
    }
};
int begin()
{
    int itemn;//**项目数量 **     
    psch=(ps)malloc(sizeof(school));
    psch->next=NULL;
    printf("请输入比赛项目数量:\n");
    scanf("%d",&itemn);
    itemhead=madelist(itemn,1);//创建比赛项目表
    output(itemhead);
    output(psch);
    return 1;
};
///////////////////////////////////////////////////////////// 
//
void main()
{
    begin();

}
//虽然很丑,自己动手,高手多多,大家指点,发表看法~~~谢谢
//代码写的不规范,还望海涵
//QQ271743617

回复列表 (共2个回复)

沙发

可以帮我做个题吗?

板凳

slist.dat中存放学生成绩记录,记录之间的逻辑结构是单链表,记录包含学生姓名和成绩两个域。开始时slist.dat为空,通过逐条插入学生记录,建立有序的学生成绩记录,并存放在slist.dat中。
/* 单链表建立、插入、删除、查找、字符串比较、排序等操作。学会对文件操作和单链表一起使用。*/
主函数中至少有如下操作(对学生成绩记录的操作)
1.    插入一条记录(保证插入后按照成绩递减,这也是建立学生成绩有序链表)
2.    删除一条记录(删除姓名为**的学生成绩记录)
3. 显示所有记录           
4.查找一条记录(查找姓名为**的学生记录)
5. 修改一条记录(修改姓名为**的学生成绩)
6.推出


谢谢你了!! 我们的课程设计.但我不会做

我来回复

您尚未登录,请登录后再回复。点此登录或注册