数据结构课程设计.docx

上传人:b****8 文档编号:30391022 上传时间:2023-08-14 格式:DOCX 页数:23 大小:94.40KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共23页
数据结构课程设计.docx_第2页
第2页 / 共23页
数据结构课程设计.docx_第3页
第3页 / 共23页
数据结构课程设计.docx_第4页
第4页 / 共23页
数据结构课程设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

河南城建学院

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("  **********按项目编号查询取得名次的学校****

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1