C语言程序设计运动会成绩统计系统.docx
《C语言程序设计运动会成绩统计系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计运动会成绩统计系统.docx(23页珍藏版)》请在冰豆网上搜索。
C语言程序设计运动会成绩统计系统
程序设计工程训练
报告
运动会分数统计系统
C语言程序设计工程训练
信息科学与技术学院
课程名称姓名院(系)专业班级学号指导教师
教务处制
1需求分析.1
2系统总框图和功能模块说明2
2.1系统总框图2
2.2功能模块说明2
3系统设计.3
3.1主要结构体3
3.2主要功能函数3
3.3关键函数的流程图4
4系统调试.4
5总结.7
6源程序清单.7
1需求分析
1问题描述
运动会分数统计
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1〜m女子m+仁m+w不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些项目取前五名或前三名由使用者设定。
(m<=20,n<=20)
2.基本要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分;
3)可以按学校编号、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;
5)可以按项目编号查询取得前三或前五名的学校。
3.测试数据
1)首先进入成绩录入界面,先输入参赛学校数,再输入男子组数和女子组数;
2)然后进入总目录;
3)输入:
1输入成绩;
4)输入:
2统计各校总分;
5)输入:
3统计各校项目得分;
6)输入:
4按学校总分排序输出;
7)输入:
5按男团体总分排序输出;
8)输入:
6按女团体总分排序输出;
9)输入:
7按学校编号查询学校某个项目的成绩;
10)输入:
8按项目编号查询取得前三名或前五名的学校;
11)输入:
0退出;
2系统总框图和功能模块说明
2.1系统总框图
2.2功能模块说明
1)
输入:
1输入成绩;
输入某一项目的成绩
2)
输入:
2
统计各校总分;
•…统计各校所有项目总分之和
3)
输入:
3
统计各校项目得分;••…
•…输出各校各项目得分
4)
输入:
4
按学校总分排序输出;…
……按照总分从大到小排序
5)
输入:
5
按男团体总分排序输出;
••…仅按照男子团体总分从大到小排序
6)输入:
6按女团体总分排序输出;••…仅按照女子团体总分从大到小排序
7)输入:
7按学校编号查询学校某个项目的成绩;•…输入学校编号及项目编号可查询该校的该项
目成绩
8)输入:
8按项目编号查询取得前三名或前五名的学校;•…输入项目编号可查询该项目获得名次
的学校
9)输入:
0退出;退出系统
3系统设计
3.1主要结构体
菜单号choo
学校:
num
项目:
ab
男团、de
女团、ke
3.2主要功能函数
voidexit0()
voidinput()
voideach()
voidbiaohao()
voidzongfen()
voidnanzong()
voidnvzong()
voidxuexiao()
voidxiangmu()
voidmain()
3.3关键函数的流程图
voidzongfen()voidnanzong()voidnvzong()
4系统调试
<1>开始界面,分别输入3、7、3.
^ol-rlF_4
In牙
9r
分牛得岀'ItK±ls
3
ii少男女示几儿4有耳
屁;编
输入1后显示
请场入反冃代尸:
1
请呻昭第一、第二第三和名棍恢旅辅人菽牲半校仪帛1
£
5
输心总
応名
I
JC
M
分个匸IT4iT-t?
1*rT^t井Z-.TU旦号引夢匐:
i!
w^人苗螯奎项±31™™:
:
:
二三二二1234S6789
-H
-M
的五
绩的
f
的近
输入2后显示
冃前理』分-■5出Frrl
千帛rn.-一l:
h面问
lTn.--I:
b询闻
,匸环卫蓉宜
总
E'.'-耳巧也吗董爲需
LJ-
-.H
■»
出出蕃常冃逼汙J7逞取KH1m—r「订进宀—f-学总広需嚅ZJTgoss奉黑“一刖Irjrrrt-n-IA丄M上鸟卫,尸-T%—■¥I-rIM.J.r■>;;T■1-
一-*
二-
三
12345£7"9
WM
学驾号:
团严
顶或廿个二得巒#前讦目“世电-■T学取茅曇只#1£、-比」r—I*"紅~L.-rIEI
入甘学杲玄壬..n出
输入5后显示
请选择*5
学校代号啰子团休总成绩
1:
5
2:
3
3:
2
校
学绩的的古nn^s1.个一一
俗出岀某前的岀
总询的
^KK^S'囹号号成各套团1S入学男窓子I
zz
1S34567B9
输入6后显示
;青选择I6
校
学绩的finELU恥
富学校
的五
1
女子团体总成绩
0
0
酉
1得岀岀某前的出SSW分畠專学取总询的香一分总思号号
成各套团团校目入男
学校代号
1
2
*
123456789
输入7后显示
!
1
1顶目成绩为5
1
分
得出出某】的出输分^14*学取总^^^-询分刍特畐号号我各各吱団用瑁吕
输入8后显示
0
I:
1+J
选
*1
1
.・亦
£3顶前的取校
古疋吕*匚「盡A碍
咬咬
冲$子
校
学
的五
i分个三得岀岀某前
学取总^询的舍查咬校八卫口蕙号号咸各喬团界目入^^学男蓝于
兰**二解**二一M**二呉共*二二乂**兰HWM*二一兰**M-M--M-*二=
1234SG7009
输入9》》》》退出
5总结
本次课程设计检验了我的实践能力,感觉自己还有许多东西要学习,并不仅限于课本上的知识,实践才是真理,在学习中实践,实践中去学习。
学习的路很长。
再有要多问,几个人共同讨论会有意想不到的效果
6源程序清单
#include
#include
inta,b,c,d,i,j;
structnode
{
intnum;
};
structnode*f[22];
voidexitO()
{
FILE*fp;
intk;
alp:
if((fp=fopen("e:
\\sore.txt","w"))==NULL)
{
printf("createrror\n");
printf("1*****tryagain\n");
printf("2*****tuichu\n");
printf(”3*****returnmenu\n");//回到主菜单//
alj:
scanf("%d",&k);if(k==1)gotoalp;
elseif(k==2)exit(0);
elseif(k==3)return;
else
{
printf("输入错误,请重新输入:
");gotoalj;
}
}printf(fp,"\n\n");
fprintf(fp,"*运动会分数统计表*\n\n\n");
printf(fp,"*项目代号*");
for(i=1;i<=c+d;i++)
printf(fp,"%5d",i);
printf(fp,"");
printf(fp,"\n*学校代号*");for(i=1;i<=a;i++)
{
printf(fp,"%10d",i);for(b=1;b<=c+d;b++)
{
printf(fp,"%5d",f[i][b].num);
}
printf(fp,"\n");
}
printf(fp,"\n\n");
printf(fp,"the%dschoolnumbers\n\n",a);/*注:
本次运动会有%d个学校参赛*/
printf(fp,"1~%d组是男子组,%d~%d组是女子组\n",c,c+1,c+d);/*其中1~%d组是男子组,%d~%d组是女子组*/printf("\n*比赛成绩已保存到当前路径下的sore.txt文件中*\n\n");/*比赛成绩已保存到当前路径下的"sore.txt"文件中*/fclose(fp);
exit
(1);
}
/*主菜单*/intchoose()
{
intchoo;
printf("\n\n1******
printf("2
******
printf("3*
*****
printf("4*
*****
输入成绩\n");统计各学校的总分\n");统计各学校各项目的得分\n");按学校总分排序输出\n");
printf("5******按男团体总分排序输出\n");
printf("6******按女团体总分排序输出\n");
printf("7******按学校编号查询学校某个项目的成绩\n");
printf("8******按项目编号查询取得前三或前五名的学校\n");
printf("9******退出\n\n");
printf("请选择:
");scanf("%d",&choo);
return(choo-1);
}/*输入信息*/voidinput()
{
intab,ac,ae,af,g=1,get[5]={0,0,0,0,0};printf("\n请输入项目代号:
");
ale:
scanf("%d",&ab);if(ab>c+d||ab<1)
{
printf("\n此项目代号不存在,重新输入:
\n");gotoale;
}
ae=0;for(i=0;i<=a;i++)
{
if(f[i][ab].num!
=0)
{
ae=1;
break;
}
}if(ae==1)
{
此项目成绩曾经已被录入过,
//
//
al2:
printf("\n此项目成绩已被录入过,是否要重新录入:
\n");//是否要重新录入(您输入的项目代号可能有误,强烈建议您查证后再录入)printf(”1++++是\n");〃(若重新录入,以前的该项目成绩将被删除)
printf(”2++++否\n”);//不要,待查证后再录入//
scanf("%d",&af);
if(af==2)
{
printf("已取消录入!
\n");
return;
}
elseif(af==1)
{
for(i=1;i<=a;i++)
{
if(f[i][ab].num!
=0)
{f[i][0].num=f[i][0].num-f[i][ab].num;
if(ab<=c)
f[i][c+d+1].num=f[i][c+d+1].num-f[i][ab].num;
else
f[i][c+d+2].num=f[i][c+d+2].num-f[i][ab].num;
}
f[i][ab].num=0;
}
}
else
gotoal2;
}
al:
printf("\n此项目是以前几名为胜出者:
\n");//选择得分标准//
printf("3以前三名\n");
printf("5以前五名\n");
scanf("%d",&ac);
if(ac==3)
{
printf("请按照第一、第二、第三的名次依次输入获胜学校代号:
");af=5;
for(i=0;i<3;i++)
{
alq:
scanf("%d",&ae);
if(ae>a||ae<1)
{
printf(”%d学校代号不存在,重新输入第%d名的学校代号:
",ae,g);
gotoalq;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
",g);
printf("同一个学校不能在同一项目中有两个名次,请重新输入第%d£的学校代号:
gotoalq;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
elseif(ac==5)
{
printf("请按照第一、第二、第三、第四、第五的名次依次输入获胜学校代号:
");af=7;
for(i=0;i<5;i++)
{
alw:
scanf("%d",&ae);
if(ae>a||ae<1)
{
printf(”%d学校代号不存在,重新输入第%d名的学校代号:
",ae,g);
gotoalw;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
",g);
printf("同一个学校不能在同一项目中有两个名次,请重新输入第%d£的学校代号:
gotoalw;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
else
gotoal;
printf("输入完成!
\n");
}
/*学校成绩*/voideach(){printf("\n学校代号:
团体总成绩\n");for(i=1;i<=a;i++)
{
printf("%d:
%d\n",i,f[i][0].num);
}
}
/*各项目成绩*/voidbiaohao()
{
printf("\n项目代号:
");for(i=1;i<=c+d;i++)
{if(i>9)printf("%d",i);
elseprintf("%5d",i);
}
printf("\n学校代号:
\n");for(i=1;i<=a;i++)
{printf("%7d",i);
for(b=1;b<=c+d;b++){
if(f[i][b].num>9)printf("%6d",f[i][b].num);
else
printf("%7d",f[i][b].num);
}printf("\n");
}
}
/*按学校总分排序输出*/voidzongfen()
{structnod
{
intke;
intnum;
};
intha;
structnod*de;
de=(structnod*)malloc(sizeof(structnod)*a+1);printf("\n学校代号:
团体总成绩\n");for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][0].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%d:
%d\n",de[i].ke,de[i].num);
}
}
/*按男子团队总分排序*/
voidnanzong()
{
structnod
{
intke;
intnum;
};
intha;
structnod*de;
de=(structnod*)malloc(sizeof(structnod)*a+1);printf("\n学校代号:
男子团体总成绩\n");for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][c+d+1].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%d:
%d\n",de[i].ke,de[i].num);
}
}
/*按女子团队总分排序*/
voidnvzong()
{
structnod
{
intke;
intnum;
};
intha;
structnod*de;
de=(structnod*)malloc(sizeof(structnod)*a+1);printf("\n学校代号:
女子团体总成绩\n");for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][c+d+2].num;
}
for(i=1;i<=a;i++)
{for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%d:
%d\n",de[i].ke,de[i].num);
}
}
/*按学校编号查询学校某个项目的成绩*/
voidxuexiao()
{
intdr,dt;
printf("\n要查询的学校代号:
");
aly:
scanf("%d",&dr);
if(dr>a||dr<1)
{
printf("学校代号不存在,重新输入:
");
gotoaly;
}
printf("要查询的项目代号:
");
alo:
scanf("%d",&dt);if(dt>c+d||dt<1)
{
printf("项目代号不存在,重新输入:
");
gotoalo;
}
printf("第%d所学校的第%d项目成绩为%d\n",dr,dt,f[dr][dt].num);
}
/*按项目编号查询取得前三或前五名的学校*/
voidxiangmu()
{
intge,sedy=0;
printf("\n要查询的项目代号:
");all:
scanf("%d",&ge);
if(ge>c+d||ge<1)
{
printf("没有此项目代号,重新输入:
\n");
gotoall;
}
for(i=1;i<=a;i++)
{
if(f[i][ge].num==2)
sedy=1;
}
if(sedy==0)
{
printf("此项目没有录入成绩\n");
return;
}
for(i=1;i<=a;i++)
{
if(f[i][ge].num==7)
{
printf("此项目取前5名学校成绩高到低依次为:
\n");break;
}
}
if(i==a+1)
printf("此项目取前3名学校成绩高到低依次为:
\n");for(i=7;i>0;i--)
{for(b=1;b<=a;b++)
{
if(f[b][ge].num==i)
printf("%d号学校\n",b);
}
}
}
void(*g[])()={input,each,biaohao,zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0};
/*主函数*/
voidmain()
{
intchoos;printf("\n\n***运动会分数统计***\n\n\n");printf("共有多少个学校参赛:
");
scanf("%d",&a);
while(a<=0||a>20)
{
if(a<=0)
{
printf("\n参赛学校个数不能是负数或零\n\n");printf("共有多少个学校参赛:
");scanf("%d",&a);
}
if(a>20)
{
printf("\n参赛学校个数不能大于20\n\n");
printf("共有多少个学校参赛:
");scanf("%d",&a);
}
}
printf("有几个男子组:
");
scanf("%d",&c);
printf("有几个女子组:
");
scanf("%d",&d);
for(i=0;i<=a;i++)
{
f[i]=(structnode*)malloc(sizeof(structnode)*(c+d+3));for(j=0;j<=c+d+2;j++)
f[i][j].num=0;
}
choos=choose();
while
(1)
{
while(choos<0||choos>8)
choos=choose();
(*g[choos])();
printf("\n");
choos=choose();
}
}
程序设计工程训练成绩评定标准表
明细项目
评分等级(含系数)
评分分值
实际得分
考勤
A
(1)
B(0.8)
C(0.5)
D(0.0)
r10
工程项目规范
A
(1)
B(0.8)
C(0.5)
D(0.2)
10
工程训练报告
A
(1)
B(0.8)
C(0.5)
D(0.2)
30
设计作品质量
A
(1)
B(0.8)
C(0.5)
D(0.2)
45
材料收集情况
A
(1)
B(0.8)
C(0.5)
D(0.2)
5
综合评分
优
良
中
合格
不合格
90-100
80-89
70-79
60-69
0-59
该生成绩为:
,指导老师(签名):