数据结构 课程设计 运动会计分.docx
1. 问题描述纸质的运动会分数信息统计无法满足人们对信息处理的需求,包括信息查找,排名等各方面 信息处理人工处理很慢,严重影响运动会进程,“运动会分数统计系统”是为了帮助人们更 快更准确的处理信息。2. 需求分析(1)输入学校基本信息(2)输入项目基本信息(3)输入运动员比赛信息(4)统计运动员信息(5)对同一项目运动员排名(6)对各学校总分排名(7)按学校编号、学校总分、男女团体总分排序输出(8)可对某项目进行修改3. 主界面设计为了实现运动会分数统计系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序 一链接系统的各项子功能,方便用户使用本系统。主界面如下:n3忌学顼编男人项学学谊我士榆名 序裁莪 -.1.JX -出 I-IJ输 普目 分总项 在玄 学学询出 教查退4. 存储结构设计本系统主要采用数组结构体类型来表示存储在“运动会分数统计系统”中的信息。第一个结 构体为学校信息包括学校名、学校编号、学校参加比赛运动员获奖积分男子总积分、女子 总积分。第二个结构体为项目属性项目编号、项目名第三个结构体为运动员信息运动员排名、运动员编号、运动员姓名、参加项目编号、积分、 学校编号、学校名。5. 系统功能设计(1)输入残社学校数量、男子项目数、女子项目数(2)输入学校编号和学校名字(3)输入项目编号、项目名字(4)输入结束项目编号、选取项目获奖名次、输入获奖的运动员姓名所在学校运动员积分(5)按学校编号排序输出可以一次输出所有参赛学校信息(6)按学校总分排序输出可以按学校运动员总分排序输出(7)按学校男运动员总分排序输出(8)按学校女运动员总分排序输出(9)查询某个项目成绩可以通过项目编号查询运动员成绩(10)修改某项项目获奖名单可以对项目中的获奖运动员进行修改(11)显示运动会上统计的信息6. 模块设计本模块包含两个模块主程序模块和数据结构操作模块 主程序模块数据结构操作模块7.系统子程序功能设计(1) Ssum(school sa,athlete sbM) /统计学校分数(2) print(school c,int i)/学校相关信息输出(3) snorder(school c)/按学校编号排序(4) saorder(school c)/按学校总分排序(5) sforder(school c)/按学校女子总分排序(6) smorder(school c)/按学校男子总分排序(7) Snoquery(school sb,athlete saM)/按学校编码查询(8) Pnorder(athlete dM)/按项目编号查询排名(9) udefine(athlete aM,school b)/修改项目获奖运动员(10) menu(school b,athlete saM)/菜 单选项(11) main(int argc, char* argv)8.本系统10个子程序之间的主要调用关系图9. 数据类型定义typedef struct运动员属性int aranky/排名int No;编号char Name20;/姓 名int Pno; /参加项目编号int grade;/成int Sno; /学校编号char Sna20;/学 校名字 athlete;typedef struct/学 校属性int No; 学校编号char Name20;/学 校名字int Msum; 男运动员总分int Fsum; /女运动员总分int Fnum; 输出标记int Pnum; 项目种类 school;typedef struct/项目属性int No; 项目编号char Name20;/项目名 project;10. 系统子函数部分详细设计void Ssum(school sa,athlete sbM)/统计学校分数int i,j,k;for(i=0;i<n;i+)sai.Fsum=0;sai.Msum=0;/初始化总分。for(j=0;j<w+m;j+)/按运动员依次查找对应学校,并把成绩记录到指定学校for(k=0;k<jlj;k+)for(i=0;i<n;i+)if(!strcmp(sai.Name,sbjk.Sna)/查询所在学校if(sbjk.Pno>m)sai.Fsum+=sbjk.grade;else sai.Msum+=sbjk.grade;break;/继续下一个学生统计void snorder(school c)/按 学校编号排序printf("该学校相关信息:n");printfC编号学校名称总分男子总分女子总分n");int i,j;/for(i=0;i<n;i+)/ci.Fnum=0;/为0时未输出,为一时输出,输出标记for(i=1;i<=n;i+)for(j=0;j<n;j+)/从编号1开始,然后找到编号为1的学校输出,再循环输出编号为 2的学校if(cj.No=i)print(c,j);break;void saorder(school c)/按 学校总分排序printf("该学校相关信息:n");printfC编号学校名称总分男子总分女子总分/);int i,j,k,p;for(i=0;i<n;i+)ci.Fnum=1;/为0时未输出,为一时输出,输出标记for(i=0;i<n;)if(ci.Fnum)k=ci.Msum+ci.Fsum;p=i;for(j=0;j<n;j+)if(cj.Fnum)/如果标记为0到下一个循环,否则继续比较if(cj.Msum+cj.Fsum>k)/如果当前分数大于之前的K,则令k为此 值k=cj.Msum+cj.Fsum;p=j;/if/forprint(c,p);cp.Fnum=0;/ifelse i+;/for11.程序运行测试输入学校基本信息和项目基本信息3:'粪据靖吃课程设计ej i 13_3)De bu gsh ej13_3 .exe:请输R殳子项日数量加习H.号 2 7-2人入上-<入人人人人人、八 ,Tri nnu ttt-.-ttt-F.rr . -士QE1 2 3土垦月主用束 束零 零 为 为 12安3安1高1是卫篮3 _ - - - 1 12 2 3 3 4 4 '1122334455 息 号字 号字 号字号字息 号字 号字 号字 号字 号字 q*我KH_*n<hLb:v<L 二三=三一一三二_ 1或于1五五方策字$于项项顶项项-、-TQt 件球 祥4牛. 田4乒xa-<ia芯艮一艮且肓:足四 学校校名滨一 :TTI 学校校名:5 字校校名住一 学豉校名:T 一 学校校名,足二 学校校名:田三 学,15? = 学忌棱名安言安中:安尚:安大:安小安Mi安大输入各个项目运动员成绩信息&典蜀蔑SHA茄 1 项 皿 b j g'hejil<2.eKe "变校名,安小名在111息打a1±3 115 11 虬:姓所6姓用3姓所211备*尊i蠢麒篁Kwiiwr?-B-.n-T&ln phi m -|住.-.>*3群运53_运心靛雀至字号,*名员生宅员宅毛氏率宰号征存 f-ts 1 1力 2 W力 3 3力理 4力 5 5力?1 1力 2 2力3 3 力-|孕 Nn P _E1-.=!号一 !-一 W rnnxlujnpgrP- - kTjnEnp_T-导 号-Lijnim-P 人庄尤噜碍熠侑>虞襟碍运僵运命$ 可安叫用点叫我!町引?5.、炸以*5-我史引块以吐=5讶亩町队咯1':力一 uB-ps-f?-再JnpsrrH !>>运5言Dsn员.甬莒"吕八员.§员员.-非 可切福绩切功绩初硕绩切砌.m切药籍能费E莅拓击雀忘感E运喊腐运.成-tilr运运运成运运成运运成己一 学硬校名安小息名在韦仕 : 食用b姓所3批所胃 员员员.员员.员员 前初硕绩切初结功功籍萨-I - - - I - J-?宅宅员宅雀岚字噌吊瘫津亳 方用?姓所 吕n皆火=只员.ton- 前一项前结奇验却切M 运运运成运运成运运成- 者宅宅压花雀氏季老旻平玄r§i安大安小安中安中安中安大安小安中安小安大:出一 学咬校名:田¥校校名,与仕方用7姓所S员员员.员员.甬目.-员 _功_财前绩切切.m蔚一切绩一切 运运运成运运成运谦成运- 落之宅员£生尽至字号*平 -力 2 2 3 3的 4 BK说g一 -SM说侦一-一"欢梭一笛士迓齐一咨福祚.一 -q3苫运刀至方咨事吒咬声3M-亭司MX 黄拍策请请笫请请第请请第请请请第请请弟清清第请请请第诺请弟请请军请名在 , 35姓所3姓所2 员员员.员员.员昌.-尹 - 司前劫结E切切绩切一切结-朗 -目磁运运运成运运成运食成弟实一 至辛雀之吊冬*员名生岚宅生食雀字导耗畿仓t宅戋宅雀季号一赃翌 E-t5 1 1力 2 2力 3 3力丁 4 4 力S 5 力TT.W 3 1 1力云 N力3 3力?6 L L. 二-z.ll:J&-pgD-瓦;号!7- Ulnphin- - LBhl PS-P 一 khnpgT?- & 一 rrf m-NUJnplnp - IHhl P6-r?一 瓦6r号n-氏 一 n7 rTTT-J-VJnpfi-I? -息名一仕方所7姓所&姓用3姓甬2姓所1 nn员.员员,员员.员员US贝.朴 切切切绿_切一切绩一功旦F苛前绩验_切M影 格运运运成运运成运运成运运成1.3名在;5 学咬校名:WLL:5Z3学咬校名::出五 学砖校名: E 孕校校名:白莒1L息名在辜塌名:安中=安小:安大:安号勺:阂据结哇课程设计s膈j il3_3Dsbu gsh eji 13_3 .exe ”省咨名员名名员名考员-S名员名-±昌宅 一咬四校 .字 右在=ff抑校.学 空在5 1 1 J 2 2 -J -瓦自百-典3 s _J 香罟-耳 1送吗 l-e赛硝如肾 第青青第1 -.学5姓所3姓所W姓所1五咬;学浏校.-学: #在霞所T姓所 员员员.员员:=§ 一员员,员员: 动动动绩动动绩动动绩动动绩动动始 零.诺运运戒话运成运运或匹运成运运或:安M选择功能(1)按学校编号输出编男个IIJ输 期刀启 分总顼菜里说顶勺:阂据结哇课程设计曲目i H_3D比li gsh eji 13_3 .exe ”口 |回13编男个IIJ输 期刀启 分总顼出 出输 再m 排 i 学学词出 驾杳退出单 土输名 序排暴 1薨 编男个项 夜警修 13 5 7女子总分(2)按学校总分排序输出、G:国据结珞课程设计shtj il3_3D?bu gsh eji 13_3.exe ”出IIJ输胃颁勇旧分总项艾于扫/刀、R3127> 号< .71 18 4 作-M2 2 11 一待F野当霰校大吉弟 一 成<±蚤安安&寸号一选畜;应女个 IM 学学询出 有查很出输编男个珂 :MT旻 我窿IIS 13 5 7(3)按学校男生总分排序输出勺:僚推始将弟1设计ejil3_3Debu gsh ejil3_3 .exe出11端予主只 -w"£-r- 排分目 朝总顶 B 学学询出 苒查退±输名WSI萼校一 m亨:- 编里个项 学羊黄哀 吱瓒查修 SB 13 5 7分- 主 .E -?.r一汨M> /7 号怠 序子享号一 此咳编517 614 82 11周天小中女安安安出 3输 再m 排:hir 分总项 总玄个 学学词出 燹杳退土输名序拌成荻1编男个项苧畜我W警修 13 5 7(4)按学校女生总分排序输出1418IIJ输莎 期刀启 分总顼 EZ攵用丁 学学询出 扃查退出输编男个项 基 :亍子谊英 13 5 7菜单选项村输土八按学校定、分排序输匕(5)查询学校成绩出IIJ输萼目分总项己X关SM学学询出冥查退出1.1端蔑m 分总项 总V个 学学询出 餐杳退土榆名 序裁莪 I 编男人项 学学谊我 言粢三修13 5建眺g项目编号;足一名次1出单 上输名 斤拌成莪I 编男个顶 聿谊.哀 a13 5 7匿择您需要的操作洗择序号北狄薛彝的项目编号(6)查询某个项目成绩一项一选一菜出 11输 理旧 分总项 危女个 IK 学学询出 药查很巨项 编男个项 BXXIA.坂 至1i出输需学要羽叼要薯元五字菁卢洗择户号弟番鼻校的项游号名伽名孜5茉单选项(7)修改某个项目获奖名单您京要留操作宵圣序号,拓f害翌寒去是:安言剪吨黑 安T第诺品 安小笫畦是:安言出M输序慎 普日 分息顶、匚个学学询出 拎按查退出单 出输名8编男个项:字学零待希S修12 5 7选择您需要的操作选S序号”勺:阂据免吃课程设计拱腿jiH_3D北uglshejiimnexe”:安人笫2生是:安高第日名是:安曰第是:京小笫8在是:安高出 二输 输片绩 萼日 分总项 总女个 iM 学学询出 信查退出输输荻 巨 顼 编里个项 IXS 学学询哀 技芾查修 1 3 G 7您碧要墨皆作毯择序号”6壁峰&是 主小宣名是 安工第4名是 云高彖名是 安言出IIJ输胃颁勇目分总项应女个 IM 学学询出 有查很出输笑 序成荻 I 编男个珂 :MT旻 我窿II S 13 5 7您.需要7修改信息出 出轲 输序绪 序林厨俳八百分总顶总女<-出输名轴算奖扁男个项芸某某学学询改教苜修 13 5 7nx-E-cf青月 策L息1M啥项人臆 需要晶黄 艾入恭八 选请请出 出输 轴序绪分总顶总女个:安高=安小名什批所a姓所z员员员员-_切_函绩_切可m章修成运运成奎员名名员$傍一运J&L)运史0J.射AJ/名2 3S清重请请第3 -±1二出输名编先个项 学学百夜. 冥育修 13 5 7遂建您房奖铤费作选择序号海17166312'每分男子总分女子总分2A1B14荣羊选项完整代码:#include "stdafx.h"#include "string.h"#define N 10#define M 10typedef struct运动员属性int aranky/排名int No; 编号char Name20;/姓 名int Pno; /参加项目编号int grade;/成int Sno; /学校编号int sex;/运动员性别1男2女;char Sna20;/学 校名字 athlete;typedef struct/学 校属性int No; 学校编号char Name20;/学 校名字int Msum; 男运动员总分int Fsum; /女运动员总分int Mnum; /int Fnum; 输出标记int Pnum; 项目种类 school;typedef struct/项目属性int No; 项目编号char Name20;/项目名int stop;/项目到多少名次 project;athlete bNM; /全局变量 学生排名int m;/男子项目个数int n;/参赛学校个数int w;/参赛女子项目个数int jl20=0;组数表示取前几名,后面列数表示对应名次积分void Ssum(school sa,athlete sbM)/统计学校分数int i,j,k;for(i=0;i<n;i+)sai.Fsum=0;sai.Msum=0;/初始化总分。for(j=0;j<w+m;j+)/按运动员依次查找对应学校,并把成绩记录到指定学校for(k=0;k<jlj;k+)for(i=0;i<n;i+)if(!strcmp(sai.Name,sbjk.Sna)/查询所在学校if(sbjk.Pno>m)sai.Fsum+=sbjk.grade;else sai.Msum+=sbjk.grade;break;/继续下一个学生统计void print(school c,int i)/学 校相关信息输出printf("%-5d”,ci.No);printf("%-10s”,ci.Name);printf("%-5d”,ci.Fsum+ci.Msum);printf("%-10d”,ci.Msum);printf("%-10dn”,ci.Fsum);void snorder(school c)/按 学校编号排序printf("该学校相关信息:n");printfC编号学校名称总分男子总分女子总分/);int i,j;/for(i=0;i<n;i+)/ci.Fnum=0;/为0时未输出,为一时输出,输出标记for(i=1;i<=n;i+)for(j=0;j<n;j+)/从编号1开始,然后找到编号为1的学校输出,再循环输出编号为 2的学校if(cj.No=i)print(c,j);break;void saorder(school c)/按 学校总分排序printf("该学校相关信息:n");printfC编号学校名称总分男子总分女子总分/);int i,j,k,p;for(i=0;i<n;i+)ci.Fnum=1;/为0时未输出,为一时输出,输出标记for(i=0;i<n;)if(ci.Fnum)k=ci.Msum+ci.Fsum;p=i;for(j=0;j<n;j+)if(cj.Fnum)/如果标记为0到下一个循环,否则继续比较if(cj.Msum+cj.Fsum>k)/如果当前分数大于之前的K,则令k为此 k=cj.Msum+cj.Fsum;P=j;/if/forprint(c,p);cp.Fnum=0;/ifelse i+;/for/ / “/ *void sforder(school c)/按 学校女子总分排序printf("该学校相关信息:n");printf(-编号学校名称总分男子总分女子总分);int i,j,k,p;for(i=0;i<n;i+)ci.Fnum=1;/为0时未输出,为一时输出,输出标记for(i=0;i<n;)if(ci.Fnum)k=ci.Fsum;p=i;for(j=0;j<n;j+)if(cj.Fnum)/如果标记为0到下一个循环,否则继续比较 if(cj.Fsum>k)/如果当前分数大于之前的K,则令k为此值 k=cj.Fsum;p=j;/if/forprint(c,p);cp.Fnum=0;/ifelse i+;/for/ / “/ *void smorder(school c)/按 学校男子总分排序printf("该学校相关信息:n");printfC编号学校名称总分男子总分女子总分/);int i,j,k,p;for(i=0;i<n;i+)ci.Fnum=1;/为0时未输出,为一时输出,输出标记for(i=0;i<n;)if(ci.Fnum)k=ci.Msum;p=i;for(j=0;j<n;j+)if(cj.Fnum)/如果标记为0到下一个循环,否则继续比较 if(cj.Msum>k)/如果当前分数大于之前的K,则令k为此值 k=cj.Msum;p=j;/if/forprint(c,p);cp.Fnum=0;/if else i+;/for/ “ “ “ “ “ “ “ “ “ “ “ /* * *个*个*个*个*个* *void Snoquery(school sb,athlete saM)/按 学校编码查询 int i,k,x,j,y=0;char sn20;printf("请输入学校编码"); scanf("%d”,&k);printf("请输入要查询该学校的项目编号:”); scanf("%d”,&x);for(i=0;i<n;i+)if(sbi.No=k)/对应学校数组与输入编号吻合 strcpy(sn,sbi.Name);/将学校名复制到 sn for(i=0;i<N;i+)if(sai0.Pno=x)/查询对应项目组,然后找学校名与输入相同的运动员 for(j=0;j<M;j+)if(!strcmp(saij.Sna,sn)printf("姓名:%s 名次dn”,saij.Name,j+1);y=1; if(!y)printf("该学校在这个项目上没有获奖);void Pnorder(athlete dM)/按 项目编号查询排名 int k,i,j;printfC请输入项目编号:”); scanf("%d”,&k);for(i=0;i<w+m;i+)if(di0.Pno=k)for(j=0;j<jli;j+)/输出获奖学校printf("第d 名是:s”,j+1,dij.Sna);break;/*/*/-*void udefine(athlete aM,school b)int i,j,k;printf("请输入要修改名次的项目编号:”);scanf("%d”,&k);for(i=0;i<m+w;i+)if(ai0.Pno=k)printf("请输入该项目获奖人数:”); scanf("%d”,&jli);printf("输入获奖人信息:");for(j=0;j<jli;j+)/输入前N名学生信息aij.arank=j+1;printf("请输入第d名运动员姓名:”,j+1);fflush( stdin );scanf("%s”,&aij.Name);fflush( stdin );printf(-请输入第d名运动员所在学校校名:”,j+1);scanf("%s”,&aij.Sna);printf("第d名运动员成绩:”,j+1);scanf("%d”,&aij.grade);break;Ssum(b,a);/* * * * * * *“ “ 个个个个个个个*/*“ 个个个个个个个个个个void menu(school b,athlete saM)/菜 单选项 int q;doprintf("nn");printf("菜单选项nn");printf("1.按学校编号排序输出2.按学校总分排序输出n");printf("3.按学校男总分排序输出4.按学校女总分排序输出n");printf("5.查询某个学校成绩6.查询某个项目成绩n");printf("7.修改某项项目获奖名单8.退出n");printf("nn");printf("n选择您需要的操作(选择序号):, scanf("%d”,&q);switch(q)case 1:snorder(b);break;case 2:saorder(b);break;case 3:smorder(b);break;case 4:sforder(b);break;case 5:Snoquery(b,sa);break;case 6:Pnorder(sa);break;case 7:udefine(sa,b);break;case 8:break;default:printf("请按提示输入”);break;while(q!=8); int main(int argc, char* argv)int i=0,j,k;athlete aNM;school b20;project c30;printf(-请输入参赛学校数量n:请输入男子项目数量m:请输入女子项目数量w: n 1.n=");scanf("%d”,&n);printf(" 2.m=");scanf("%d”,&m);printf(" 3.w=");scanf("%d”,&w);printf("请输入学校信息,以编号为零结束n");doprintf("请输入学校编号d: ",i+1);scanf("%d”,&bi.No);printf("请输入学校名字%d: ",i+1);fflush( stdin );scanf("%s”,bi.Name);i+;while(i<n&&bi-1.No);i=0;printf("请输入项目信息,以编号为零结Mn");doprintf("请输入项目编号d: ",i+1);scanf("%d”,&ci.No);printf("请输入项目名字%d: ",i+1);fflush( stdin );scanf("%s”,ci.Name);i+;while(i<(w+m)&&ci-1.No);/*/每项结束后输入项目编号和运动员信息printf('以编号0结束n");for(i=0;i<m+w;i+)printf("输入结束项目编号");scanf("%d”,&ai0.Pno);if(!ai0.Pno)break;printf("选取项目名数”); scanf("%d”,&jli);for(j=1;j<jli;j+)aij.Pno=ai0.Pno;/相 同项目编号相同 printf("请输入前%d名运动员信息n",jli); for(j=0;j<jli;j+)/输入前N名学生信息aij.arank=j+1;printf(”请输入第d名运动员姓名:”,j+1);fflush( stdin );scanf("%s”,&aij.Name);fflush( stdin );printf(-请输入第d名运动员所在学校校名:”,j+1);scanf("%s”,&aij.Sna);printf(”第dW运动员成绩:”,j+1);scanf("%d”,&aij.grade);Ssum(b,a);/处理分数menu(b,a);printf("Hello World!n"); return 0;