数据结构课程设计报告 运动会计分系统.docx
- 文档编号:16400373
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:21
- 大小:21.93KB
数据结构课程设计报告 运动会计分系统.docx
《数据结构课程设计报告 运动会计分系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告 运动会计分系统.docx(21页珍藏版)》请在冰点文库上搜索。
数据结构课程设计报告运动会计分系统
软件学院
课程设计报告书
月122010
年
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优化展望................................................10
参考文献......................................................15
成绩评定......................................................15
1设计时间2010-12-272设计目的
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各程序模块之间的层次(调用)关系
Main()
Input()Index()Output()TeamOutput()Teamsco()图4.3.1模块层次关系
4.3详细设计
主函数主要流程为:
1.输入学院个数n,并输入男子m和女子项目个数w;
2.调用input函数对m+n个项目分别选择名次类型并录入学院,姓名和成绩;
3.在程序后台调用index函数处理录入的数据;
4.在程序后台调用teamsco函数将成绩汇总,计算团体总分。
5.调用TeamOutput函数输出团体报表;
6.调用Output函数按学院查看报表;
7.调用MatchOutput函数按项目查看报表;
8.选择继续录入、返回按学院查看报表或按项目查看报表;
9.结束;
输入学院个数n,并输TeamOuTeamsco()入男子mInput()Index()
)
tput()
和女子项目个数w;Output()
MatchOu结束继续录入、tput()返回查看
函数调用图4.3.2图
开始
输入学院数n输入男子项目数m,
女子项目数w
输入男子项目数m
输出学院数n,比赛项目m+w个,男子项目m个,女子项目w个
输入已结束的项目编号c
和输入名次类型rank
Input(c)
Index()
Teamsco()
Teamoutput()
输入学院编号查询成绩列表c
输入项目编号查询成绩列表c
返回查看学院比赛如果继续输入,输入1.2,3结果输入返回查看项目结果输入结束
图4.3.3流程图
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
{
*/
判断名次类型5:
);/*名输入5取前3,名输入3取前:
选择名次类型牰湩晴尨
scanf(%d,&rank);
if(rank==3)
ma[a-1].num=3;
if(rank==5)
ma[a-1].num=5;
elseif(rank!
=3&&rank!
=5)
牰湩晴尨输入错误,请重新);
}while(rank!
=3&&rank!
=5);
printf(\
第%d项:
取前%d名,a,ma[a-1].num);
for(i=0;i { ma[a-1].list[i].position=i+1; do { printf(\ 输入第%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(\ 错误! 输入的编号应为1-%d之间! n);/*输出出错信息*/ } while(ma[a-1].list[i].scnum<1||ma[a-1].list[i].scnum>n); 牰湩晴尨请输入此项获奖运动员姓名: ); scanf(%s,&ma[a-1].list[i].name); 牰湩晴尨请输入该运动员得分); scanf(%d,&ma[a-1].list[i].score); 牰湩晴尨该运动员得分为: %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(\ 成绩报表学院编号: %d\n,a); 牰湩晴尨比赛项目编号名次姓名得分\n); for(i=0;i printf (m_x0010_d_x0010_sd\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); for(i=0;i printf(]_x0010_ddd\n,sc[i].scnum,sc[i].team,sc[i].mteam,sc[i].fteam); return; } voidMatchOutput(intt)/*输出比赛项目名次列表函数*/ { inti; printf(\ 项目名次列表项目编号: %d\n,t); printf(\ 比赛项目编号名次获奖者姓名获奖者所在学院编号得分\n); for(i=0;i printf(m_x0012_d_x0012_s_x0016_dd\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); 牰湩晴尨请根据提示进行操作); do { printf(\ 请输入参加运动会的学院个数: (1-20)); scanf(%d,&n); if(n<=0||n>20)/*输出出错信息*/ ! (1-20)\n);请重新输入! 输入的学院数目不正确printf(\n }while(n<=0||n>20); do { printf(\ 有多少个男子项目: (1-20)); scanf(%d,&m); if(m<0||m>20)/*输出出错信息*/ printf(\ 输入的男子项目数目不正确! 请重新输入! (1-30)\n); }while(m<0||m>20); do { printf(\ 有多少个女子项目: (1-20)); scanf(%d,&w); if(w<0||w>20)/*输出出错信息*/ printf(\ 输入的女子项目数目不正确! 请重新输入! (1-20)\n); }while(w<0||w>20); printf (\ 本次有%d个学院参加,共%d个比赛项目,男子项目%d个,女子项目%d个。 \n,n,m+w,m,w); SCANFDATA: /*比赛数据输入定位点*/ 牰湩晴尨请输入比赛结果资料\n); for(i=0;i ma[i].matnum=i+1;/*初始化项目编号*/ c=1;/*初始化a*/ do { ): m+w);完成(1-%d)('0'=请输入已结束的比赛项目编号printf(\ scanf(%d,&c); if((c>0)&&(c<=m+w)) Input(c);/*调用输入函数*/ elseif(c==0)break;/*输出出错信息*/ elseprintf(\ ! error: 输入的数应为1-%d之间的整数! \n,m+w); }while(c! =0); printf(\ 正在进行整理数据,请稍候......\n);/*稍候*/ Index();/*调用整理函数*/ Teamsco();/*调用团体成绩计算函数*/ TeamOutput();/*调用输出团体报表函数*/ SEESCHOOL: /*查看学院数据定位点*/ c=1;/*初始化c*/ while(c! =0) { printf(\ \n请输入学院编号查询成绩列表(1-%d)(0=完成): n); scanf(%d,&c); if(c==0)break; elseif((c>0)&&(c<=n)) Output(c);/*调用输出学院成绩列表函数*/ elseprintf(\ ! 错误! 输入的数应为1-%d之间的整数! \n,n);/*输出出错信息*/ } SEEMATCH: /*查看项目结果数据定位点*/ t=1; while(t! =0) { ): m+w); 完成(1-%d)(0=请输入需要查询排名的项目编号printf(\ \n scanf(%d,&t); if(t==0)break; elseif((t>0)&&(t<=m+w)) MatchOutput(t);/*调用输出项目排名列表函数*/ elseprintf(\ \n! 错误! 输入的数应为1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计报告 运动会计分系统 数据结构 课程设计 报告 运动 会计 分系统