数据结构课设报告.docx
- 文档编号:23996275
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:58
- 大小:88.56KB
数据结构课设报告.docx
《数据结构课设报告.docx》由会员分享,可在线阅读,更多相关《数据结构课设报告.docx(58页珍藏版)》请在冰豆网上搜索。
数据结构课设报告
课程设计
课程名称:
数据结构
学院名称:
XXXX
学号:
XXXX
姓名:
XXX
指导教师:
XXX
一、程序设计说明
(一)运动会分数统计。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
3
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(二)一元多项式计算。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
12
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(三)订票系统。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
16
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(四)迷宫求解。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
23
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(五)文章编辑。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
26
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(六)猴子选大王。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
32
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(七)建立二叉树,先序遍历。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
33
1、需求分析
2、概要设计
3、详细设计
4、调试分析
(八)纸牌游戏。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
35
1、需求分析
2、概要设计
3、详细设计
4、调试分析
二、课设总结。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
36
一、程序设计说明
(一)运动会分数统计
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)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
2、概要设计:
本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表:
(1)项目数据表:
运动会开始前必须详细制定本次运动会所需的参赛项目为接下来报名、场地的准备提供依据。
本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。
这也有利于以后项目情况的查询。
typedefstruct
{
intitemnum;//项目编号
inttop;//取名次的数目
intrange[5];//名次
intmark[5];//分数
}itemnode;//定义项目结点的类型
(2)学校数据表:
本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。
其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。
typedefstruct
{
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}headnode;//定义头结点类型
(3)单项数据表:
本数据表是对各个学校的报名情况及成绩进行汇总,为了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。
typedefstruct/*单项成绩*/
{
intschoolnum;/*学校编号*/
intitemnum;/*项目编号*/
intxmch;/*项目成绩*/
}danx;
danxdx[Y];
这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整体。
3、详细设计:
#include
#include
#include
#include
#definen2//学校数目
#definem1//男子项目数目
#definew1//女子项目数目
#definenull0
typedefstruct
{
intitemnum;//项目编号
inttop;//取名次的数目
intrange[5];//名次
intmark[5];//分数
}itemnode;//定义项目结点的类型
typedefstruct
{
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}headnode;//定义头结点类型
headnodeh[n];//定义一个头结点数组
voidinputinformation()//输入信息,建立系统
{
inti,j,k,s;
for(i=0;i { h[i].score=0; h[i].mscore=0; h[i].wscore=0; }//初始化头结点 for(i=0;i { printf("*****theschoolnum: "); scanf("%d",&h[i].schoolnum);//输入头结点信息 for(j=0;j { printf("*****theitemnum: "); scanf("%d",&h[i].c[j].itemnum); printf("*****takethetop3or5: "); scanf("%d",&h[i].c[j].top); printf("*****obtainingseveralranges: "); scanf("%d",&k);//输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0,h[i].c[j].mark[s]=0;//初始化排名和分数 for(s=0;s { printf("*****ranges: "); scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息 if(h[i].c[j].top==3) switch(h[i].c[j].range[s]) { case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=5;break; case2: h[i].c[j].mark[s]=3;break; case3: h[i].c[j].mark[s]=2;break; } else switch(h[i].c[j].range[s]) { case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=7;break; case2: h[i].c[j].mark[s]=5;break; case3: h[i].c[j].mark[s]=3;break; case4: h[i].c[j].mark[s]=2;break; case5: h[i].c[j].mark[s]=1;break; } h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1) h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 } printf("\n"); } } } voidoutput()//输出函数 { intchoice,i,j,k; intremember[n]; intsign; do { printf("*******************1.Accordingtotheschoolnumoutput.*******************\n"); printf("*******************2.Accordingtotheschoolscoresoutput.*******************\n"); printf("*******************3.Accordingtothemalescoreoutput.*******************\n"); printf("*******************4.Accordingtothefemalescoresoutput.*******************\n"); printf("\n\n*******************Pleasechoosethenumber*************************\n\n: "); scanf("%d",&choice); switch(choice) { case1: for(i=0;i { printf("\n\n*****theschoolnum: %d\n",h[i].schoolnum); printf("*****theschooltotalscor: %d\n",h[i].score); printf("*****themalescore: %d\n",h[i].mscore); printf("*****thefemalscore: %d\n\n\n",h[i].wscore); }//按编号顺序输出 break; case2: for(i=0;i remember[i]=i; for(i=0;i { for(j=i+1;j if(h[remember[i]].score k=remember[i]; remember[i]=remember[j],remember[j]=k; }//用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;i { printf("\n\n*****theschoolnum: %d\n",h[remember[i]].schoolnum); printf("*****theschooltotalscore: %d\n",h[remember[i]].score); printf("*****themalescore: %d\n",h[remember[i]].mscore); printf("*****thefemalescore: %d\n\n\n",h[remember[i]].wscore); //按所记下标顺序输出 }//按学校总分输出 break; case3: for(i=0;i remember[i]=i; for(i=0;i { for(j=i+1;j if(h[remember[i]].mscore k=remember[i];remember[i]=remember[j];remember[j]=k; } for(i=0;i { printf("\n\n*****theschoolnum: %d\n",h[remember[i]].schoolnum); printf("*****theschoolscore: %d\n",h[remember[i]].score); printf("*****themalescore: %d\n",h[remember[i]].mscore); printf("*****thefemalescore: %d\n\n\n",h[remember[i]].wscore); }//按男团总分输出 break; case4: for(i=0;i remember[i]=i; for(i=0;i { for(j=i+1;j if(h[remember[i]].wscore k=remember[i]; remember[i]=remember[j];remember[j]=k; } for(i=0;i { printf("\n\n*****theschoolnum: %d\n",h[remember[i]].schoolnum); printf("*****theschoolscore: %d\n",h[remember[i]].score); printf("*****themalescore: %d\n",h[remember[i]].mscore); printf("*****thefemalescore: %d\n\n\n",h[remember[i]].wscore); } break;//按女团总分输出 } printf("pleasechoose2goon,0break\n"); scanf("%d",&sign); }while(sign==2);//循环执行输出语句 } voidinquiry()//查询函数 { intchoice; inti,j,k,s; printf("\n*****1: Accordingtotheschoolsearch\n"); printf("\n*****2: Accordingtotheitemnumsearch\n"); printf("\n\n*****pleasechoosethenumber: ");//提供两种查询方式 scanf("%d",&choice); switch(choice) { case1: do { printf("theschoolnum: "); scanf("%d",&i); if(i>n) printf("wrong! ! ! ! ! T_T\n\n\n"); else { printf("theitemnum: "); scanf("%d",&j); if(j>m+w||j==0) printf("wrong! ! ! ! ! T_T\n\n\n"); //学校编号超出范围,则输出警告 else { printf("takethetop%d,theschoolscoreis: \n",h[0].c[j-1].top); for(k=0;k<5;k++) if(h[i-1].c[j-1].range[k]! =0) printf("ranking: %d\n",h[i-1].c[j-1].range[k]); //输出要查询学校项目的成绩 } } printf("pleasechoose2goon,0break\n"); scanf("%d",&s); printf("\n\n\n"); }while(s==2);//循环执行输出语句 break; case2: do { printf("theitemnum: "); scanf("%d",&s); if(s>m+w||s==0) printf("wrong! ! ! ! ! T_T\n\n\n"); //项目编号超出范围则输出警告 else { printf("takethetop%d,theschoolis\n",h[0].c[s-1].top); for(i=0;i for(j=0;j<5;j++) if(h[i].c[s-1].range[j]! =0) printf("theschoolnum: %d,ranking: %d\n",h[i].schoolnum, h[i].c[s-1].range[j]); }//输出该项目取得名次学校的成绩 printf("\n\n\ngoon2,break0\n"); scanf("%d",&i); printf("\n\n\n"); }while(i==2); break; } } voidwritedata()//把数据存储在文件中 { FILE*report; inti; if((report=fopen("sportsdata.txt","w"))==null) { printf("cannotopenthefile\n"); exit (1); } for(i=0;i fwrite(&h[i],sizeof(headnode),1,report); fclose(report); }//按头结点块写入 voidreaddata()//读出文件中数据的函数 { FILE*report; inti,j,k,s; if((report=fopen("sportsdata.txt","r"))==null) { printf("filecannotbeopened\n"); exit (1); } for(i=0;i { printf("******theschoolnum: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); printf("******theschoolscore: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); printf("******themalescore: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); printf("******thefemalescore: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); printf("\n\n\n"); getch(); for(j=0;j { printf("******theitemnum: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); printf("******thenumberofranking: "); fread(&k,sizeof(int),1,report); printf("%d\n",k); for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k! =0) printf("******ranking: "), printf("%d\n",k); } for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k! =0)printf("******分数: "), printf("%d\n",k); } } printf("\n\n\n"); getch(); } fclose(report);//关闭文件 }//按照读一个数据就输出一个数据的方式显示数据内容 voidmain() { intchoice; printf("======================WELCOME======================\n");printf("\n\n*****************thescoresystem********************\n"); printf("\n\n********************1.inputinform*************************\n"); printf("********************2.outputinform*************************\n"); printf("********************3.searchinform*************************\n"); printf("********************4.readinform*************************\n"); printf("********************5.break*************************\n\n\n"); printf("================================================\n\n"); printf("********pleasechoosethefunctionnumber: \n\n"); scanf("%d",&choice); switch(choice) { case1: inputinformation();w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告