• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C语言课程设计_运动会管理系统

武飞扬头像
NBITer
帮助4

本次课程设计利用《C语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。

要求

1、对系统进行功能需求分析

2、设计合理的数据结构和系统框架

3、编程简练,程序功能齐全,能正确运行

4、说明书、流程图要清楚

5、课题完成后必须按要求提交课程设计报告

任务

设计一个运动会管理系统,用于管理比赛时体操、跳水、滑冰等赛事裁判员对赛事的评分。假设只有这3场比赛event,每场有5个裁判评分。

实现功能

1)能够提供一个程序界面对运动员的基本资料进行输入、删除、修改和查询等,基本资料应保存在文件中。

2)能够输入、修改、查询某项比赛event的比赛时间,3项比赛的资料保存在文件中。

3) 比赛项目分男子组和女子组,每个运动员的总分计算规则是:去掉最高分、去掉最低分求平均值。

4)  提供界面让工作人员输入每场比赛的所有运动员的每个裁判的分数,能查询某场比赛所有运动员的最后得分

5)评分的资料保存在score.txt中,包含的数据项有:所属的学校、运动员编号、得分1、得分2、得分3、得分4、得分5、总分、平均分。

概要设计

模块说明

程序中一共包括了三个大模块,分别是:运动员信息模块、比赛时间模块、裁判分数模块,每个模块根据不同要求分成3—5个小模块,分别是:输入模块、修改模块、查询模块、删除模块、退出系统模块。这几个模块中输入、查找和修改都是独立分开作为子函数的,另外的则是作为switch语句中的一部分,通过switch语句,把模块联系了起来,同时,为了实现多次使用这几个模块,就在switch语句外加了do-while循环。

以下是模块结构图:学新通

详细设计 

学新通

源程序代码

  1.  
    #include <stdio.h>
  2.  
    #include <stdlib.h>
  3.  
    #include <malloc.h> /*用于动态分布空间*/
  4.  
    #include <string.h>
  5.  
    typedef struct Athlete /*定义运动员管理信息的结构体。typedef用来指定新的类型名来代替已有的类型名*/
  6.  
    {
  7.  
    char name[10];
  8.  
    int sex;
  9.  
    char school[10];
  10.  
    int number;
  11.  
    char class1[10];
  12.  
    }athtype;
  13.  
    typedef struct Athlete1 /*定义比赛时间管理的结构体*/
  14.  
    {
  15.  
    char name[10];
  16.  
    int event;
  17.  
    int score[5];
  18.  
    int sex;
  19.  
    int tp;
  20.  
    float aver;
  21.  
    }score;
  22.  
    typedef struct Athletenode /*使用链表录入运动员数据athtype data*/
  23.  
    {
  24.  
    athtype data;
  25.  
    struct Athletenode *next;
  26.  
    }Listnode;
  27.  
    typedef struct Event /*定义裁判分数管理的结构体*/
  28.  
    {
  29.  
    char name[10];
  30.  
    char time[20];
  31.  
    int number;
  32.  
    }event;
  33.  
     
  34.  
    void Print() /*输入运动员的信息*/
  35.  
    {
  36.  
    FILE *fp1;
  37.  
    int i,n;
  38.  
    if((fp1=fopen("d:\\校运动会管理系统\\information.txt","ab "))==NULL) /*ab为了读写打开一个二进制文件*/
  39.  
    {
  40.  
    printf("不能建立!");
  41.  
    exit(0);
  42.  
    }
  43.  
    athtype ah,ah1;
  44.  
    fseek(fp1,0,2); /*fseek用于二进制打开的文件,移除文件读写指针的位置,fp1为一打开的文件指针,偏移量为0,2将文件名指向末尾*/
  45.  
    n=ftell(fp1)/sizeof(athtype);/*ftell返回文件fp1的当前位置,并赋值给n*/
  46.  
    rewind(fp1); /*功能是将文件内部的指针重新指向一个流的开头*/
  47.  
    printf("输入运动员信息:");
  48.  
    scanf("%s %d %s %d %s",ah.name,&ah.sex,ah.school,&ah.number,ah.class1);
  49.  
    for(i=0;i<n;i )
  50.  
    {
  51.  
    fread(&ah1,sizeof(athtype),1,fp1);
  52.  
    if(ah1.number==ah.number) break;
  53.  
    }
  54.  
    if(i<n)
  55.  
    printf("编号存在!");
  56.  
    else
  57.  
    {
  58.  
    fseek(fp1,0,2);
  59.  
    fwrite(&ah,sizeof(athtype),1,fp1); /*指向稳健写入一个数据块*/
  60.  
    }
  61.  
    fclose(fp1);
  62.  
    printf("输入完毕!\n");
  63.  
    }
  64.  
     
  65.  
    void Delete() /*删除运动员信息*/
  66.  
    {
  67.  
    FILE *fp1;
  68.  
    Listnode *head,*r,*s,*p,*p1;
  69.  
    int i,n,d;
  70.  
    if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
  71.  
    {
  72.  
    printf("不能建立!");
  73.  
    exit(1);
  74.  
    }
  75.  
    athtype ah;
  76.  
    fseek(fp1,0,2);
  77.  
    n=ftell(fp1)/sizeof(athtype);
  78.  
    rewind(fp1);
  79.  
    head=(Listnode *)malloc(sizeof(Listnode)); /*(Listnode *)为强制转换符,sizeof(Listnode)为获取L的占据的空间的大小*/
  80.  
    r=head;
  81.  
    for(i=0;i<n;i )
  82.  
    {
  83.  
    fread(&ah,sizeof(athtype),1,fp1);
  84.  
    s=(Listnode *)malloc(sizeof(Listnode));
  85.  
    s->data=ah;
  86.  
    r->next=s;
  87.  
    r=s;
  88.  
    }
  89.  
    r->next=NULL;
  90.  
    fclose(fp1);
  91.  
    printf("输入删除运动员编号:");
  92.  
    scanf("%d",&d);
  93.  
    p=head;
  94.  
    p1=head->next;
  95.  
    while(p1!=NULL)
  96.  
    {
  97.  
    if(p1->data.number==d) break;
  98.  
    p=p1;
  99.  
    p1=p1->next;
  100.  
    }
  101.  
    if(p1!=NULL)
  102.  
    {
  103.  
    p->next=p1->next;
  104.  
    free(p1);
  105.  
    fp1=fopen("d:\\校运动会管理系统\\information.txt","wb");/*为了输出数据,打开一个二进制文件*/
  106.  
    p=head->next;
  107.  
    while(p!=NULL)
  108.  
    {
  109.  
    fwrite(&(p->data),sizeof(athtype),1,fp1);
  110.  
    p=p->next;
  111.  
    }
  112.  
    fclose(fp1);
  113.  
    printf("删除完成!\n");
  114.  
    }
  115.  
    else printf("未找到!\n");
  116.  
    }
  117.  
    void Modification() /*修改运动员的信息*/
  118.  
    {
  119.  
    FILE *fp1;
  120.  
    int i,n,d;
  121.  
    if((fp1=fopen("d:\\校运动会管理信息\\information.txt","rb "))==NULL)
  122.  
    {
  123.  
    printf("不能建立!");
  124.  
    exit(2);
  125.  
    }
  126.  
    athtype ah,ah1;
  127.  
    fseek(fp1,0,2);
  128.  
    n=ftell(fp1)/sizeof(athtype);
  129.  
    rewind(fp1);
  130.  
    printf("输入修改运动员编号:");
  131.  
    scanf("%d",&d);
  132.  
    for(i=0;i<n;i )
  133.  
    {
  134.  
    fread(&ah1,sizeof(athtype),1,fp1);
  135.  
    if(ah1.number==d) break;
  136.  
    }
  137.  
    if(i<n)
  138.  
    {
  139.  
    printf("输入新信息(姓名 性别(0是男,1是女)学校 班级)\n");
  140.  
    scanf("%s %d %s %s",ah.name,&ah.sex,ah.school,ah.class1);
  141.  
    ah.number=ah1.number;
  142.  
    fseek(fp1,-1*(long)sizeof(athtype),1);
  143.  
    fwrite(&ah,sizeof(athtype),1,fp1);
  144.  
    printf("修改成功!\n");
  145.  
    }
  146.  
    else
  147.  
    printf("未找到!\n");
  148.  
    fclose(fp1);
  149.  
    }
  150.  
     
  151.  
    void Inquire() /*查询运动员的信息*/
  152.  
    {
  153.  
    FILE *fp1;
  154.  
    int i,d,n;
  155.  
    athtype ah1;
  156.  
    if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL) /*为了输入数据,打开一个二进制文件*/
  157.  
    {
  158.  
    printf("不能建立!");
  159.  
    exit(3);
  160.  
    }
  161.  
    fseek(fp1,0,2);
  162.  
    n=ftell(fp1)/sizeof(athtype);
  163.  
    rewind(fp1);
  164.  
    printf("输入运动员编号:");
  165.  
    scanf("%d",&d);
  166.  
    for(i=0;i<n;i )
  167.  
    {
  168.  
    fread(&ah1,sizeof(athtype),1,fp1);
  169.  
    if(ah1.number==d) break;
  170.  
    }
  171.  
    if(i<n)
  172.  
    {
  173.  
    printf("姓名 性别(0是男,1是女)学校 编号 班级\n");
  174.  
    printf("=============================================================\n");
  175.  
    printf("%s %d %s %d %s\n",ah1.name,ah1.sex,ah1.school,ah1.number,ah1.class1);
  176.  
    }
  177.  
    else
  178.  
    printf("未找到!\n");
  179.  
    fclose(fp1);
  180.  
    }
  181.  
    void Information() /*进入运动员信息界面的选择*/
  182.  
    {
  183.  
    int a;
  184.  
    do
  185.  
    {
  186.  
    printf("请选择 1-输入,2-删除,3-修改,4-查询,0-退出:");
  187.  
    scanf("%d",&a);
  188.  
    switch(a)
  189.  
    {
  190.  
    case 1:Print();break;
  191.  
    case 2:Delete();break;
  192.  
    case 3:Modification();break;
  193.  
    case 4:Inquire();break;
  194.  
    }
  195.  
    }while(a!=0);
  196.  
    system("cls"); /*清屏*/
  197.  
    }
  198.  
     
  199.  
    void Print1() /*输入比赛时间*/
  200.  
    {
  201.  
    FILE *fp2;
  202.  
    event en;
  203.  
    if((fp2=fopen("d:\\校运动会管理系统\\time.txt","ab "))==NULL) /*为了读写打开一个二进制文件*/
  204.  
    {
  205.  
    printf("不能建立!");
  206.  
    exit(4);
  207.  
    }
  208.  
    printf("请输入比赛编号,名称和时间:(1.体操 2.跳水 3.滑冰 )");
  209.  
    scanf("%d%s%s",&en.number,en.name,en.time);
  210.  
    fwrite(&en,sizeof(event),1,fp2);
  211.  
    printf("输入完毕!\n");
  212.  
    fclose(fp2);
  213.  
    }
  214.  
    void Modification1() /*修改比赛时间*/
  215.  
    {
  216.  
    FILE *fp2;
  217.  
    event en,en1;
  218.  
    int a,n,i;
  219.  
    if((fp2=fopen("d:\\校运动会管理系统\\time.txt","rb "))==NULL) /*为了读和写,打开一个二进制文件*/
  220.  
    {
  221.  
    printf("不能建立!");
  222.  
    exit(5);
  223.  
    }
  224.  
    printf("请输入需要修改比赛编号(1.体操 2.跳水 3.滑冰 )");
  225.  
    scanf("%d",&a);
  226.  
    fseek(fp2,0,2);
  227.  
    n=ftell(fp2)/sizeof(event);
  228.  
    rewind(fp2);
  229.  
    for(i=0;i<n;i )
  230.  
    {
  231.  
    fread(&en,sizeof(event),1,fp2);
  232.  
    if(en.number==a) break;
  233.  
    }
  234.  
    if(i<n)
  235.  
    {
  236.  
    printf("输入新的比赛时间:\n");
  237.  
    scanf("%s",en1.time);
  238.  
    strcpy(en1.name,en.name);
  239.  
    en1.number=en.number;
  240.  
    fseek(fp2,-1*(long)sizeof(event),1);
  241.  
    fwrite(&en1,sizeof(event),1,fp2);
  242.  
    printf("修改成功!\n");
  243.  
    }
  244.  
    else
  245.  
    printf("未找到!\n");
  246.  
    fclose(fp2);
  247.  
    }
  248.  
     
  249.  
    void Inquire1() /*查询比赛时间*/
  250.  
    {
  251.  
    FILE *fp2;
  252.  
    event en;
  253.  
    if((fp2=fopen("d:\\校运动会管理系统\\time.txt","rb"))==NULL)
  254.  
    {
  255.  
    printf("不能建立!");
  256.  
    exit(6);
  257.  
    }
  258.  
    printf("* * * * * * 时间表 * * * * * *\n");
  259.  
    while(fread(&en,sizeof(event),1,fp2)>0)
  260.  
    {
  261.  
    printf("%s %s",en.name,en.time);
  262.  
    printf("\n");
  263.  
    }
  264.  
    }
  265.  
     
  266.  
    void Time() /*进入比赛时间界面的选择*/
  267.  
    {
  268.  
    int a;
  269.  
    do
  270.  
    {
  271.  
    printf("请选择 1-输入,2-修改,3-查询,0-退出:");
  272.  
    scanf("%d",&a);
  273.  
    switch(a)
  274.  
    {
  275.  
    case 1:Print1();break;
  276.  
    case 2:Modification1();break;
  277.  
    case 3:Inquire1();break;
  278.  
    }
  279.  
    }while(a!=0);
  280.  
    system("cls");
  281.  
    }
  282.  
    void Print2() /*裁判信息管理*/
  283.  
    {
  284.  
    score athe;
  285.  
    int i,j,cnt=0;
  286.  
    athtype athe1;
  287.  
    int tmp;
  288.  
    FILE *fp1,*fp2,*fp3;
  289.  
    if((fp2=fopen("d:\\校运动会管理系统\\score.txt","ab"))==NULL) /*向二进制文件尾添加数据*/
  290.  
    {
  291.  
    printf("不能建立!");
  292.  
    exit(7);
  293.  
    }
  294.  
    if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
  295.  
    {
  296.  
    printf("不能建立!");
  297.  
    exit(8);
  298.  
    }
  299.  
    if((fp3=fopen("d:\\校运动会管理系统\\score.txt","a"))==NULL) /*向文本文件尾添加数据*/
  300.  
    {
  301.  
    printf("不能建立!");
  302.  
    exit(9);
  303.  
    }
  304.  
    printf("请输入比赛名称:(1.体操 2.跳水 3.滑冰 )");
  305.  
    scanf("%d",&athe.event);
  306.  
    fprintf(fp3,"%d ",athe.event);
  307.  
    fputs("(1.体操 2.跳水 3.滑冰 )\n",fp3);
  308.  
    fputs(" 运动员编号 学校名称 裁判得分 总分 平均分\n",fp3);
  309.  
    while(fread(&athe1,sizeof(athtype),1,fp1)>0)
  310.  
    {
  311.  
    strcpy(athe.name,athe1.name);
  312.  
    athe.sex=athe1.sex;
  313.  
    fprintf(fp3," %d ",athe1.number);
  314.  
    fprintf(fp3," %s ",athe1.school);
  315.  
    printf("运动员%s\n",athe.name);
  316.  
    printf("请依次输入五个裁判评分:");
  317.  
    for(i=0;i<5;i ) /*冒泡法进行排序*/
  318.  
    {
  319.  
    scanf("%d",&athe.score[i]);
  320.  
    fprintf(fp3," %d ",athe.score[i]);
  321.  
    }
  322.  
    for(i=0;i<4;i )
  323.  
    for(j=3;j>=i;j--)
  324.  
    if(athe.score[j 1]<athe.score[j])
  325.  
    {
  326.  
    tmp=athe.score[j];
  327.  
    athe.score[j]=athe.score[j 1];
  328.  
    athe.score[j 1]=tmp;
  329.  
    }
  330.  
    athe.tp=athe.score[1] athe.score[2] athe.score[3]; /*总分去掉score【0】和score【4】*/
  331.  
    fprintf(fp3," %d ",athe.tp);
  332.  
    athe.aver=(float)(athe.tp/3); /*强制改变数据类型*/
  333.  
    fprintf(fp3," %f \n",athe.aver);
  334.  
    fwrite(&athe,sizeof(score),1,fp2);
  335.  
    }
  336.  
    printf("输入完毕!");
  337.  
    fclose(fp1);
  338.  
    fclose(fp2);
  339.  
    fclose(fp3);
  340.  
    }
  341.  
    void Inquire2() /*查询比赛成绩*/
  342.  
    {
  343.  
    FILE *fp1,*fp2;
  344.  
    score athe,athe1;
  345.  
    int i,n,j,a;
  346.  
    int event;
  347.  
    if((fp1=fopen("d:\\校运动会管理系统\\score.txt","rb"))==NULL)
  348.  
    {
  349.  
    printf("不能建立!");
  350.  
    exit(10);
  351.  
    }
  352.  
    if((fp2=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
  353.  
    {
  354.  
    printf("不能建立!");
  355.  
    exit(11);
  356.  
    }
  357.  
    fseek(fp2,0,2);
  358.  
    a=ftell(fp2)/sizeof(athtype);
  359.  
     
  360.  
    printf("请输入需要查询的比赛(1.体操 2.跳水 3.滑冰 )");
  361.  
    scanf("%d",&event);
  362.  
    fseek(fp1,0,2);
  363.  
    n=ftell(fp1)/sizeof(score);
  364.  
    rewind(fp1);
  365.  
    for(i=0;i<n;i )
  366.  
    {
  367.  
    fread(&athe1,sizeof(score),1,fp1);
  368.  
    if(athe1.event==event) break;
  369.  
    }
  370.  
    if(i<n)
  371.  
    {
  372.  
    fseek(fp1,-(long)sizeof(score),1);
  373.  
    for(j=0;j<a;j )
  374.  
    {
  375.  
    fread(&athe,sizeof(score),1,fp1);
  376.  
    printf("%s :",athe.name);
  377.  
    for(i=0;i<5;i )
  378.  
    printf(" %d ",athe.score[i]);
  379.  
    printf("\n");
  380.  
    }
  381.  
    }
  382.  
    else printf("没有该比赛信息!\n");
  383.  
    fclose(fp1);
  384.  
    }
  385.  
     
  386.  
    void Score() /*进入分数界面后的操作*/
  387.  
    {
  388.  
    int a;
  389.  
    do
  390.  
    {
  391.  
    printf("请选择 1-输入,2-查询,0-退出");
  392.  
    scanf("%d",&a);
  393.  
    switch(a)
  394.  
    {
  395.  
    case 1:Print2();break;
  396.  
    case 2:Inquire2();break;
  397.  
    }
  398.  
    }while(a!=0);
  399.  
    system("cls");
  400.  
    }
  401.  
     
  402.  
    void main() /*主界面的操作*/
  403.  
    {
  404.  
    int cho;
  405.  
    do
  406.  
    {
  407.  
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **\n");
  408.  
    printf("* *\n");
  409.  
    printf("* 欢迎使用运动会管理系统 *\n");
  410.  
    printf("* 1-运动员信息 *\n");
  411.  
    printf("* 2-比赛时间 *\n");
  412.  
    printf("* 3-裁判分数 *\n");
  413.  
    printf("* 0-退出 *\n");
  414.  
    printf("* *\n");
  415.  
    printf("* *\n");
  416.  
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **\n");
  417.  
    scanf("%d",&cho);
  418.  
    switch(cho)
  419.  
    {
  420.  
    case 1:system("cls");Information();break;
  421.  
    case 2:system("cls");Time();break;
  422.  
    case 3:system("cls");Score();break;
  423.  
    }
  424.  
    }while(cho!=0);
  425.  
    }
学新通

设计心得

 第一次输真么多的代码,发现自己还有很多的不足,同时也学会了许多新的老师不曾讲过的只是,这次课程设计,是对自己经历的充实,也是对自己的一次巨大的挑战。这次课设,也让我明白在今后的学习和生活当中,合作的重要性,以及对基础知识的把握,让暗暗下定决心在下学期的学习当中更加努力和认真,这一年对c语言的学习,让我从一无所知转换到另一个层次,也让我对计算机语言有了一定的认识,也激发了我对计算机知识学习的好奇心,相信在未来的计算机语言的学习中,我能在C的基础上,学习的更加灵动。

附件:源码下载

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaegha
系列文章
更多 icon
同类精品
更多 icon
继续加载