数据结构课程设计报告 运动会计分系统.docx
- 文档编号:8946316
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:19
- 大小:98.05KB
数据结构课程设计报告 运动会计分系统.docx
《数据结构课程设计报告 运动会计分系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告 运动会计分系统.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告运动会计分系统
软件学院
课程设计报告书
2010年12月
目录
1设计时间3
2设计目的3
3设计任务3
4设计内容3
4.1需求分析3
4.2总体设计4
4.3详细设计6
4.4测试与分析9
4.4.1测试8
4.4.2分析8
4.5附录9
5总结与展望14
5.1设计总结14
5.2优化展望14
参考文献15
成绩评定15
1设计时间2010-12-27
2设计目的
1.通过设计、编码、调试等各环节的训练,深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。
2.综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,逐步掌握软件开发的基本思想、方法和实现步骤,提高实际应用水平。
3.初步树立正确的程序设计思想,培养分析问题、解决问题的能力,提高查询资料和撰写书面文件的能力。
3设计任务
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
设计程序达到以下要求:
(1)产生各院系的成绩单,内容包括各院系取得的每项成绩的项目号、名次(成绩)、姓名和得分;
(2)产生团体总分报表,内容包括院系编号、男子团体总分和团体总分。
4设计内容
4.1需求分析
本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。
应具备一定的实用性。
4.1.1功能实现
(1)记录功能。
能记录一次运动会的所有项目信息,如其编号,名称,是男子项目还是女子项目,是取前三名还是前五名,以及取得名次的学校编号;能记录参加本次运动会的学校个数,以及学校的编号。
并能添加,修改,删除其中的信息。
(2)查询功能。
能根据项目编号查询在该项目上获得名次的学校编号,并按名次先后顺序输出;能根据学校编号和项目编号查询该学校在该项目上获得的名次以及得分情况。
(3)统计功能。
能统计各个学校的总分,男子团体总分,女子团体总分。
4.1.2相关规定:
输入数据形式和范围:
20以内的整数,也可以输入学校的名称,运动项目的名称
4.1.3输出形式:
有中文提示,各学校分数为整形。
4.1.4界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
4.2总体设计
4.2.1定义程序所用到的抽象变量及结构体
intn,m,w;
structResult/*定义项目比赛结果名次列表元素结构体*/
{
intscnum;/*学院编号*/
charname[20];/*姓名*/
intposition;/*名次*/
intscore;/*得分*/
};
structMatch/*定义运动项目结构体*/
{
intmatnum;/*项目编号*/
intnum;/*项目名次个数*/
structResultlist[5];/*名次列表数组*/
};
structSchoolList/*定义学院成绩单元素*/
{
intmatnum;/*项目编号*/
intposition;/*名次*/
charname[20];/*姓名*/
intscore;/*得分*/
};
structSchool/*定义学院结构体*/
{
intscnum;/*学院校号*/
structSchoolListlist[50];/*成绩单列表数组*/
intteam;/*团体总分*/
intmteam;/*男子团体总分*/
intfteam;/*女子团体总分*/
intnum;/*累加数*/
};
structMatchma[50];/*定义运动项目结构数组*/
structSchoolsc[20];
inta,b;/*项目编号,项目名次个数*/
4.2.2定义程序所用函数
voidInput(intc)/*输入比赛数据函数*/
voidIndex(void)/*整理比赛数据函数*/
voidTeamsco(void)/*团体成绩计算函数*/
voidOutput(inta)/*输出学院成绩列表函数*/
voidTeamOutput(void)/*输出团体报表函数*/
voidMatchOutput(intt)/*输出比赛项目名次列表函数*/
4.2.3各程序模块之间的层次(调用)关系
4.3详细设计
主函数主要流程为:
1.输入学院个数n,并输入男子m和女子项目个数w;
2.调用input函数对m+n个项目分别选择名次类型并录入学院,姓名和成绩;
3.在程序后台调用index函数处理录入的数据;
4.在程序后台调用teamsco函数将成绩汇总,计算团体总分。
5.调用TeamOutput函数输出团体报表;
6.调用Output函数按学院查看报表;
7.调用MatchOutput函数按项目查看报表;
8.选择继续录入、返回按学院查看报表或按项目查看报表;
9.结束;
)
4.4测试与分析
4.4.1测试
1.输入参加比赛的学院个数8,男子项目数2,女子项目数2。
2.输入已结束的项目编号1,并选择前5名。
(输出:
项目1取前5名)。
3.输入学院编号、姓名、得分。
输入另一已结束项目编号2(输出:
项目2取前3名)。
4.输入另一已结束项目编号3,并选择前5名。
(输出:
项目3取前5名)。
5.输入另一已结束项目编号4(输出:
项目4取前3名)。
6.输入0,系统输出报表。
7.输入学院编号查询成绩列表(输入3)。
系统产生报表。
8.输入需要查询排名的项目编号(输入2)。
系统产生报表。
9.输入0完成
10.输入0结束
4.4.2分析
该程序运行时需要逐步按照提示输入和判断,做出与系统相悖的输入或选择将返回重新与机器互动。
程序运行时比较慢,可能是因为有些函数的时间复杂度较高。
1.input函数只有一次循环,且循环次数由选择的名次类型来定。
时间复杂度O(n).
2.index函数是将运动员得分按学院和性别汇总。
最多用到3次循环嵌套。
时间复杂度O(n3)。
程序运行较慢的原因可能在于此。
3.teamsco函数用于计算团体总分。
时间复杂度O(n2)。
4.Output函数用于输出报表,循环一次,时间复杂度O(n)。
5.TeamOutput和MatchOutput函数分别用于输出团体报表和项目报表。
时间复杂度均为O(n)。
4.5附录
源程序
#include
#include
#include
intn,m,w;/*定义代表学院、男子项目、女子项目数量的变量*/
structResult/*定义项目比赛结果名次列表元素结构体*/
{
intscnum;/*学院编号*/
charname[20];/*姓名*/
intposition;/*名次*/
intscore;/*得分*/
};
structMatch/*定义运动项目结构体*/
{
intmatnum;/*项目编号*/
intnum;/*项目名次个数*/
structResultlist[5];/*名次列表数组*/
};
structSchoolList/*定义学院成绩单元素*/
{
intmatnum;/*项目编号*/
intposition;/*名次*/
charname[20];/*姓名*/
intscore;/*得分*/
};
structSchool/*定义学院结构体*/
{
intscnum;/*学院校号*/
structSchoolListlist[50];/*成绩单列表数组*/
intteam;/*团体总分*/
intmteam;/*男子团体总分*/
intfteam;/*女子团体总分*/
intnum;/*累加数*/
};
structMatchma[50];/*定义运动项目结构数组*/
structSchoolsc[20];
inta,b;/*项目编号,项目名次个数*/
voidInput(intc)/*输入比赛数据函数*/
{
inti,a,rank;
a=c;
do
{
printf("选择名次类型:
取前3名输入3,取前5名输入5:
");/*判断名次类型*/
scanf("%d",&rank);
if(rank==3)
ma[a-1].num=3;
if(rank==5)
ma[a-1].num=5;
elseif(rank!
=3&&rank!
=5)
printf("输入错误,请重新");
}while(rank!
=3&&rank!
=5);
printf("\n第%d项:
取前%d名",a,ma[a-1].num);
for(i=0;i { ma[a-1].list[i].position=i+1; do { printf("\n输入第%d名所在学院编号(1-%d): ",i+1,n); scanf("%d",&ma[a-1].list[i].scnum); if(ma[a-1].list[i].scnum<1||ma[a-1].list[i].scnum>n) printf("\n错误! 输入的编号应为1-%d之间! ",n);/*输出出错信息*/ } while(ma[a-1].list[i].scnum<1||ma[a-1].list[i].scnum>n); printf("请输入此项获奖运动员姓名: "); scanf("%s",&ma[a-1].list[i].name); printf("请输入该运动员得分"); scanf("%d",&ma[a-1].list[i].score); printf("该运动员得分为: %d",ma[a-1].list[i].score); } return; } voidIndex(void)/*整理比赛数据函数*/ { inti,j,k,t; for(i=0;i { sc[i].scnum=i+1;/*初始化学院编号*/ sc[i].num=0;/*初始化累加数*/ } for(i=0;i for(j=0;j for(k=0;k if(ma[i].list[j].scnum==sc[k].scnum)/*scnum学院编号*/ { sc[k].list[sc[k].num].matnum=ma[i].matnum;/*matnum项目编号*/ sc[k].list[sc[k].num].position=ma[i].list[j].position; for(t=0;t<20;t++)/*学院编号*/ sc[k].list[sc[k].num].name[t]=ma[i].list[j].name[t]; sc[k].list[sc[k].num].score=ma[i].list[j].score; sc[k].num++; } return; } voidTeamsco(void)/*团体成绩计算函数*/ { inti,j; for(i=0;i { sc[i].team=0; sc[i].mteam=0; sc[i].fteam=0; }/*初始化*/ for(i=0;i for(j=0;j { sc[i].team=sc[i].team+sc[i].list[j].score;/*团体总分成绩计算*/ if(sc[i].list[j].matnum<=m) sc[i].mteam=sc[i].mteam+sc[i].list[j].score;/*男子团体成绩计算*/ elsesc[i].fteam=sc[i].fteam+sc[i].list[j].score;/*女子团体成绩计算*/ } return; } voidOutput(inta)/*输出学院成绩列表函数*/ { inti; printf("\n成绩报表学院编号: %d\n",a); printf("比赛项目编号名次姓名得分\n"); for(i=0;i printf ("%6d%10d%10s%15d\n",sc[a-1].list[i].matnum,sc[a-1].list[i].position, sc[a-1].list[i].name,sc[a-1].list[i].score); return; } voidTeamOutput(void)/*输出团体报表函数*/ { inti; printf("\n团体成绩报表\n"); printf("学院编号团体总分男子团体总分女子团体总分\n"); for(i=0;i printf("%5d%10d%11d%13d\n",sc[i].scnum,sc[i].team,sc[i].mteam,sc[i].fteam); return; } voidMatchOutput(intt)/*输出比赛项目名次列表函数*/ { inti; printf("\n项目名次列表项目编号: %d\n",t); printf("\n比赛项目编号名次获奖者姓名获奖者所在学院编号得分\n"); for(i=0;i printf("%6d%12d%12s%16d%14d\n",ma[t-1].matnum,ma[t-1].list[i].position, ma[t-1].list[i].name,ma[t-1].list[i].scnum,ma[t-1].list[i].score); return; } voidmain(void) { inti,c,t,k;/*c为项目编号*/ printf("\n\n********************运动会分数统计系统********************\n"); printf("请根据提示进行操作"); do { printf("\n请输入参加运动会的学院个数: (1-20)"); scanf("%d",&n); if(n<=0||n>20)/*输出出错信息*/ printf("\n输入的学院数目不正确! 请重新输入! (1-20)\n"); }while(n<=0||n>20); do { printf("\n有多少个男子项目: (1-20)"); scanf("%d",&m); if(m<0||m>20)/*输出出错信息*/ printf("\n输入的男子项目数目不正确! 请重新输入! (1-30)\n"); }while(m<0||m>20); do { printf("\n有多少个女子项目: (1-20)"); scanf("%d",&w); if(w<0||w>20)/*输出出错信息*/ printf("\n输入的女子项目数目不正确! 请重新输入! (1-20)\n"); }while(w<0||w>20); printf ("\n本次有%d个学院参加,共%d个比赛项目,男子项目%d个,女子项目%d个。 \n",n,m+w,m,w); SCANFDATA: /*比赛数据输入定位点*/ printf("请输入比赛结果资料\n"); for(i=0;i ma[i].matnum=i+1;/*初始化项目编号*/ c=1;/*初始化a*/ do { printf("\n请输入已结束的比赛项目编号(1-%d)('0'=完成): ",m+w); scanf("%d",&c); if((c>0)&&(c<=m+w)) Input(c);/*调用输入函数*/ elseif(c==0)break;/*输出出错信息*/ elseprintf("\n! error: 输入的数应为1-%d之间的整数! \n",m+w); }while(c! =0); printf("\n正在进行整理数据,请稍候......\n");/*稍候*/ Index();/*调用整理函数*/ Teamsco();/*调用团体成绩计算函数*/ TeamOutput();/*调用输出团体报表函数*/ SEESCHOOL: /*查看学院数据定位点*/ c=1;/*初始化c*/ while(c! =0) { printf("\n\n请输入学院编号查询成绩列表(1-%d)(0=完成): ",n); scanf("%d",&c); if(c==0)break; elseif((c>0)&&(c<=n)) Output(c);/*调用输出学院成绩列表函数*/ elseprintf("\n! 错误! 输入的数应为1-%d之间的整数! \n",n);/*输出出错信息*/ } SEEMATCH: /*查看项目结果数据定位点*/ t=1; while(t! =0) { printf("\n\n请输入需要查询排名的项目编号(1-%d)(0=完成): ",m+w); scanf("%d",&t); if(t==0)break; elseif((t>0)&&(t<=m+w)) MatchOutput(t);/*调用输出项目排名列表函数*/ elseprintf("\n\n! 错误! 输入的数应为1-%d之间的整数! \n",m+w); /*输出错误信息*/ } do { printf ("继续输入数据输入1,返回查看学院比赛结果输入2,返回查看项目比赛结果输入3.\n"); printf("退出请按0."); scanf("%d",&k); if(k==0)break;/*跳出程序*/ elseif(k==1)gotoSCANFDATA;/*回到输入数据点继续进行输入数据*/ elseif(k==2)gotoSEESCHOOL;/*回到查看学院比赛结果点*/ elseif(k==3)gotoSEEMATCH;/*回到查看项目比赛结果点*/ else printf("\n\n! 错误! 输入的数应为对应操作的整数! \n");/*输出出错信息*/ }while(k! =0&&k! =1&&k! =2&&k! =3); system("cls");/*清屏函数*/ printf("\n程序运行完毕! 谢谢! 按任意键退出! \n"); getchar(); exit (1);/*退出程序*/ return; } 5总结与展望 5.1设计总结 本程序主要用结构体和数组储存数据,通过循环套用和选择结构实现运动会各项目各学院成绩的处理并输出。 在设计程序过程中逐渐体验到数据结构对程序实现的巨大作用,可以说数据结构使C程序更加灵活多变,功能更强大。 调试程序时无数次的失败也曾让我垂头丧气,但我咬牙坚持了下来。 当一个问题解决时,例如解决了在选择名次类 型和最后输出报表时发生冲突,我也体验到了独立完成任务并解决问题的乐趣。 本次课程设计给了我发挥能力的平台,也使我的编程能力和调试能力得到了提高。 5.2优化展望 该程序在人机互动时输入量较大,且提示太多,界面不够干净利落。 可尝试将得分在程序中依次赋给各名次,免去录入成绩的过程,同时也减少了错误的发生。 另外最好产生一个txt文件将报表保存,以增强该系统的实用性。 参考文献 [1]谭浩强·c程序设计(第三版)·清华大学出版社,2005年7月第3版: 216~221 [2]严蔚敏,吴伟民·数据结构(c语言版)·清华大学出版社,2010年3月: 458~508 [3]王娣,安剑,孙秀梅·c语言程序开发·人民邮电出版社,2010年1月: 1~4000 成绩评定 成绩教师签字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计报告 运动会计分系统 数据结构 课程设计 报告 运动 会计 分系统
![提示](https://static.bdocx.com/images/bang_tan.gif)