数据结构课程设计.docx
- 文档编号:30391022
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:23
- 大小:94.40KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
河南城建学院
HenanUniversityofUrbanConstruction
《数据结构程序设计》
课程设计报告
学 号:
084412130
姓 名:
李鲁杨
专 业:
软件工程
题 目:
运动会分数统计
指导老师:
魏新红 孟庆见
计算机科学与工程系
2013年12月
一、设计目的
1.问题描述
参加运动会有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)能统计各学校总分;
3)可以按学校编号、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;
5)可以按项目编号查询取得前三或前五名的学校。
二.设计意义
数据结构课程设计是在学完数据结构课程之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
学生通过数据结构课程设计在下述各方面得到锻炼:
1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2、提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3、培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
二.设计内容
第一部分
进入程序首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次),然后再输入第二个学校编号2,再输入成绩;当输入其他的学校编号和成绩会提示错误输入,重新输入。
第二部分
1.输入:
1统计各学校总分并输出;
2.输入:
2按学校编号排序输出;
3.输入:
3按学校总分排序输出;
4.输入:
4按男团体总分排序输出;
5.输入:
5按女团体总分排序输出;
6.输入:
6按学校编号查询学校某个项目情况;
7.输入:
7按项目编号查询取得名次的学校;
8.输入:
0退出系统
9.输入其他数据会提示错误输入,重新输入。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述。
1结构体
运动项目{
项目编号;
名次;
};
学校{
学校编号;
项目;
团体总分;
男团体总分;
女团体总分;
}
2主程序(main)
包括登陆欢迎程序,分数录入程序,查询程序,退出程序
四.详细设计
1.功能函数的调用关系图
2.各功能函数的数据流程图
3.重设计及编码。
数据类型定义
(1)运动项目的定义:
structmatch
{
intmatchnum;
intrank[3];
}mat[bm+gm];
(2)学校的定义:
structschool
{
intschoolnum;
structmatchmat[bm+gm];
inttotal;
intboytotal;
intgirltotal;
}sch[N];
五.测试数据及运行结果
1.正常测试数据(3组)及运行结果
输入:
请输入学校编号:
1
项目编号 1 2 3 4 5 6 7
第<1>名:
1 1 1 1 1 1 1
第<2>名:
0 0 0 0 0 0 0
第<3>名:
1 1 1 1 1 1 1
请输入学校编号:
2
项目编号 1 2 3 4 5 6 7
第<1>名:
0 0 0 0 0 0 0
第<2>名:
1 1 1 1 1 1 1
第<3>名:
0 0 0 0 0 0 0
2.非正常测试数据(2组)及运行结果
输入数据不合法,程序的健壮性使他课一自动报错.
六.调试情况,设计技巧及体会
1.对自己的设计进行评价,指出合理和不足之处,和改进方案
算法的设计思想:
本程序主要是使用顺序表来实现操作。
一个运动会包括运动项目和参加运动会的学校。
因此构造顺序表match,school。
为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。
为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。
每个操作前都有操作指南,易于使用。
2.对设计及调试过程的心得体会
1、由于刚开始程序比较简单,虽能运行,但处理错误的能力很低,后来经过反复的添加修改,使程序能处理了错误,提高了健壮性。
2、开始编时由于不太规范,编译出错后由于程序长,很难找到错误,后来规范了格式,错误容易找到了,以后编程要规范。
3、算法的时空分析
线性表使用的是顺序结构,各种算法的时间复杂度相对比较合理
4、本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。
通过调试,运行,基本上达到了要求,但还存在一些缺点。
如:
不够人性化等。
七.参考文献
(1)《C程序设计》(第三版)谭浩强著清华大学出版社
(2)《数据结构》(C语言版)作者:
严蔚敏,吴伟民 出版社:
清华大学出版社
(3)《数据结构题集》(C语言版)作者:
严蔚敏,吴伟民出版社:
清华大学出版社
八.附录:
源代码
#include
#include
#include
#defineN2 //学校个数
#definebm4 //男团体个数
#definegm3 //女团体个数
voidxuanze();
voidxunhuan();
structmatch //项目
{
intmatchnum;
intrank[3];
}mat[bm+gm];
structschool //学校
{
intschoolnum;
structmatchmat[bm+gm];
inttotal;
intboytotal;
intgirltotal;
}sch[N];
voidhuanyingni() /*开始界面,欢迎使用*/
{
printf("\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n");
printf("\t*** ***\n");
printf("\t*** 欢迎使用运动会分数统计系统 ***\n");
printf("\t*** ***\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n\n");
}
voidinput() //输入成绩
{
inti,j,k;
for(i=0;i { sch[i].total=0; sch[i].boytotal=0; sch[i].girltotal=0; for(k=0;k { sch[i].mat[k].rank[0]=0; sch[i].mat[k].rank[1]=0; sch[i].mat[k].rank[2]=0; sch[i].mat[k].matchnum=k+1; } } printf("\t\t\t***************************\n"); printf("\t\t\t*********输入成绩**********\n"); printf("\t\t\t***************************\n\n"); printf("***输入说明***\n"); printf("\t1.学校编号为1--%d;\n\t 项目编号为1--%d\n\t (1-%d为男子项目,%d-%d为女子项目).\n",N,bm+gm,bm,bm+1,bm+gm); printf("\t2.成绩只能是'0'或'1'\n\t ('0'表示没获得该项目的该名次,'1'表示获得了该项目的该名次.)\n",N); printf("\t3.请以'Tab'键切换下一次输入\n\n\n"); printf("***输入数据***\n"); for(i=0;i { printf("***请输入学校编号: "); loop3: scanf("%d",&sch[i].schoolnum);//获取一个学校编号 if(sch[i].schoolnum<0||sch[i].schoolnum>N) { printf("输入错误(只能是1-%d)请重新输入: ",N); gotoloop3; } printf("项目编号 "); for(k=0;k printf("%d ",sch[i].mat[k].matchnum); printf("\n"); for(j=0;j<3;j++)//输入每一个学校每一个项目是否在前三名获得成绩,需要添加一个前五名的情况 { loop: printf("第(%d)名: \t",j+1); for(k=0;k scanf(" %d",&sch[i].mat[k].rank[j]); for(k=0;k if(sch[i].mat[k].rank[j]! =0&&sch[i].mat[k].rank[j]! =1) { printf("输入错误,请重新输入,成绩只能是'0'或'1'\n"); gotoloop; } } } } voidtotaljisuan() //总分计算,学校总分,以及男女团体的总分计算fflush(stdin); { inti,k,b; for(i=0;i for(k=0,b=0;k { b=sch[i].mat[k].rank[0]*5+sch[i].mat[k].rank[1]*3+sch[i].mat[k].rank[2]*2; sch[i].total=sch[i].total+b; if(k sch[i].boytotal=sch[i].boytotal+b; if(k>=bm) sch[i].girltotal=sch[i].girltotal+b; } } voidmulu(){ printf("\n\n **系统目录**\n"); //目录 printf("\t\t**************************************\n"); printf("\t\t* 1.统计各学校总分 *\t\n"); printf("\t\t* 2.按学校编号排序输出 *\t\n"); printf("\t\t* 3.按学校总分排序输出 *\t\n"); printf("\t\t* 4.按男团体总分排序输出 *\t\n"); printf("\t\t* 5.按女团体总分排序输出 *\t\n"); printf("\t\t* 6.按学校编号查询学校某个项目情况*\t\n"); printf("\t\t* 7.按项目编号查询取得名次的学校 *\t\n"); printf("\t\t* 0.退出 *\t\n"); printf("\t\t**************************************\n"); } voidfunct0() //退出系统 { printf("\n\t\t*******************************\n"); printf("\t\t******* 谢谢使用! *******\n"); printf("\t\t*******************************\n"); exit(0); } voidfunct1() //统计各学校总分 { inti,q; printf(" **********统计各学校总分**********\n"); printf(" **学校编号**\t\t\t\t**总分**\n"); for(i=0;i printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total); printf("\n\n"); printf("########## 0: 退出;1: 返回目录。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==0) funct0(); if(q==1) xunhuan(); else { printf("输入错误(只能是0或1),请重新输入: "); gotoloop2; } } voidfunct2() //按学校编号排序(冒泡排序) { structschoolsch1; inti,j,q; for(j=0;j for(i=0;i if(sch[i].schoolnum>sch[i+1].schoolnum) { sch1=sch[i]; sch[i]=sch[i+1]; sch[i+1]=sch1; } printf(" **********按学校编号排序**********\n"); printf("**学校编号**\t\t\t**总分**\n"); for(i=0;i printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total); printf("\n");printf("\n"); printf("########## 0: 退出;1: 返回目录。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==0)funct0(); if(q==1)xunhuan(); else{ printf("输入错误(只能是0或1),请重新输入: "); gotoloop2; } } voidfunct3() //按学校总分排序 { structschoolsch1; inti,j,q; for(j=0;j for(i=0;i if(sch[i].total { sch1=sch[i]; sch[i]=sch[i+1]; sch[i+1]=sch1; } printf(" **********按学校总分排序**********\n"); printf(" **学校编号**\t\t\t\t**总分**\n"); for(i=0;i printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total); printf("\n");printf("\n"); printf("########## 0: 退出;1: 返回目录。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==0)funct0(); if(q==1)xunhuan(); else{ printf("输入错误(只能是0或1),请重新输入: "); gotoloop2; } } voidfunct4() //按男团体总分排序 { structschoolsch1; inti,j,q; for(j=0;j for(i=0;i if(sch[i].boytotal { sch1=sch[i]; sch[i]=sch[i+1]; sch[i+1]=sch1; } printf(" **********按男团体总分排序**********\n"); printf(" **学校编号**\t\t**总分**\n"); for(i=0;i printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].boytotal); printf("\n");printf("\n"); printf("########## 0: 退出;1: 返回目录。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==0)funct0(); if(q==1)xunhuan(); else{ printf("输入错误(只能是0或1),请重新输入: "); gotoloop2; } } voidfunct5() //按女团体总分排序 { structschoolsch1; inti,j,q; for(j=0;j for(i=0;i if(sch[i].girltotal { sch1=sch[i]; sch[i]=sch[i+1]; sch[i+1]=sch1; } printf(" **********按女团体总分排序**********\n"); printf(" **学校编号**\t\t**总分**\n"); for(i=0;i printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].girltotal); printf("\n");printf("\n"); printf("########## 0: 退出;1: 返回目录。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==0)funct0(); if(q==1)xunhuan(); else{ printf("输入错误(只能是0或1),请重新输入: "); gotoloop2; } } voidfunct6() //按学校编号查询学校某个项目情况 { inti,n,m,q; printf(" **********按学校编号查询学校某个项目情况**********\n"); loop1: printf("*******请输入所要查询的学校编号: "); scanf("%d",&n); if(n! =1&&n! =2) { printf("! ! ! ! ! 输入错误,学校编号只能是'0'或'1',请重新输入! \n"); gotoloop1; } printf("*******请输入所要查询的项目编号: "); scanf("%d",&m); for(i=0;i if(n==sch[i].schoolnum) { printf("学校编号: %d\t项目编号%d\n",n,m); if(sch[i].mat[m].rank[0]==1) printf("第一名(获得) \t"); if(sch[i].mat[m].rank[1]==1) printf("第二名(获得) \t"); if(sch[i].mat[m].rank[2]==1) printf("第三名(获得) \t"); if(sch[i].mat[m].rank[0]==0&&sch[i].mat[m].rank[1]==0&&sch[i].mat[m].rank[1]==0) printf("本校该项目未进入前三名"); } printf("\n");printf("\n"); printf("########## 0: 退出;1: 返回目录;2: 返回上一级。 \n"); printf("****请选择: "); loop2: scanf("%d",&q); if(q==1)xunhuan(); if(q==0)funct0(); if(q==2)gotoloop1; else{ printf("输入错误(只能是0或1或2),请重新输入: "); gotoloop2; } } voidfunct7() //按项目编号查询取得名次的学校 { inti,t,q; printf(" **********按项目编号查询取得名次的学校****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)