数据结构课程设计报告古丽.docx
- 文档编号:8306729
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:26
- 大小:250.73KB
数据结构课程设计报告古丽.docx
《数据结构课程设计报告古丽.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告古丽.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告古丽
目录
一,前言…………………………………………………………1
二、题目2
三、时间2
四、地点2
五、程序要求2
六、数据结构设计3
1.概述3
2.关键算法4
3.查询操作8
七、详细代码9
八、测试结果21
1.主菜单窗口21
3.统计各学校总分22
4.按学校编号排序输出23
5.按学校总分排序输出23
6.按男团体总分排序输出24
7.按女团体总分排序输出24
8.按学校编号查询学校某个项目情况25
9.按项目编号查询取得名次的学校25
九、测试非法数据25
前言
21世纪是个信息化的时代,现代计算机技术的发展,为各行各业的发展创造了一个全新
的时代背景——人们的生活、工作等已经越来越离不开计算机科学的应用,体育作为个人、家
庭、社会的一个主要实践领域,大大小小的运动会也在各院校开展,自从计算机涉及运动领域
后,人们对运动会的管理也从人工向自动化转变。
运用数据结构的知识解决运动会分数统计的
问题,编写一个程序来完成运动会分数统计。
本程序设计中,主要解决在运动会上,将各个比
赛项目所有获得名次的同学的成绩输入,成绩查询,成绩修改,成绩删除,以及成绩输出,并
将相关数据进行保存;用户界面均采用中文表述和提示,能够让用户用鼠标,键盘操作。
1、进一步掌握数据结构能拥有各些功能。
2、进一步理解利用数据结构程序。
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法。
工程概括
本次课程设计的题目是,《运动会分数统计》的设计与实现。
运用的是C语言进行的程序编写,
使用的是c++运行平台。
本次的课程设计的总体思路是,定义了一个结构体,使用结构体来存储学
生的信息,来组织每个学生的信息单元。
最后利用指针、链表来实现学生信息及成绩的数据结构设
计。
整个系统有一个清晰美观界面来调用各个功能,分别实现的功能如下:
1).可以输入各个学校、各项目、以及各项目前三名的数据信息;
2).能统计各学校总分、男子项目和女子项目总分;
3).可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出;
4).可以按学校编号(或学校名称)查询学校某个项目的情况;可以按项目编号查询取得前三
的学校。
正文
一、题目:
运动会分数统计系统
二、时间:
2012.12.03~12.16
三、地点:
逸夫楼408
四、程序要求:
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项
目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前前三名积分;前三名的积分
分别为:
5、3、2。
(m、w<=20,n<=10)
功能要求:
1).可以输入各个学校、各项目、以及各项目前三名的数据信息;
2).能统计各学校总分、男子项目和女子项目总分;
3).可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出;
4).可以按学校编号(或学校名称)查询学校某个项目的情况;可以按项目编号查询取得前三的学校。
规定:
输入数据形式和范围:
10以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:
有中文提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计。
请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明。
数据结构设计
本程序中学校的存储结构为链表,
其中
school类为:
classschool:
publicathlete/*学校*/
{
……
public:
intcount;/*学校获奖数*/
intserial;/*学校编号*/
intmenscore;/*男选手总分*/
intwomenscore;/*女选手总分*/
inttotalscore;/*总分*/
athleteath[MaxSize];/*获奖运动员信息数组,包括分数,名次,项目*/
school*prev;//前指针
school*next;//后指针
};
其中部分主要的函数:
添加操作add(school*&head)
查询操作checkFunc(school*head,int&n)
文件保存save(school*head)
总分快速排序tquicksort(vector
总分基数排序tbaseSort(vector
关键算法
{……
添加项目号
for(i=1;i<=n;i++)
{输入第i名运动员的学校编号temp
……
while(first!
=head)//遍历链表,直到找到编号为serial的学校所在结点,或first指向表头head
{if(first->serial==要添加的编号)
{
(first->ath[first->count]).item=要添加的项目号;
(first->ath[first->count]).range=i(名次)
First指向的学校的项目加一;
更新总分
break;}
first=first->next;
……}
查询操作:
while(first!
=head)
{……
if(输入的项目编号==学校第i位运动员的项目)
{
把第i位运动员的项目,学校编号、名次、得分信息压入向量;
}……
}
first=first->next;
……
输出向量中的内容
1.所有学校总分统计表
2.学校成绩查询
3.项目情况查询
4.返回主菜单
1.按学校编号统计
2.按学校名次统计
3.按男团总分统计
4.按女团总分统计
5.返回查询菜单
6.返回主菜单
//按学校编号顺序输出所有参赛学校运动会成绩
voidserialSort(vector
{
for(inti=0;i { cout<<*v[i]; } } 详细代码: #include #include #include #include //#include #defineMAX50 //#defineNULL0 typedefstructnode1{ intschool;/*学校编号*/ intrecord;/*项目成绩*/ structnode1*next;/*链域*/ }Schools; typedefstruct{ intitem;/*项目编号*/ Schools*firstschool;/*链域指向链表中第一个结点*/ }ITEM; typedefstruct{ intz;/*项目总数*/ ITEMa[MAX]; }ALLitems; typedefstructnode2{ intitem;/*该学校获奖的项目*/ intrecord;/*项目成绩*/ structnode2*next;/*链域*/ }Items; typedefstruct{ intschool;/*学校编号*/ intscore;/*学校总分*/ intboys;/*男团体总分*/ intgirls;/*女团体总分*/ Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/ }SCHNode; typedefstruct{ intn;/*学校总数*/ SCHNodeb[MAX]; }ALLNode; ALLitems*g1; ALLNode*g2; voidfunct1(ALLitems*g1,ALLNode*g2) {Schools*p1; Items*p2; inti,j,k,m,w,h,x; p1=(Schools*)malloc(sizeof(Schools)); p2=(Items*)malloc(sizeof(Items)); if(! p1||! p2) exit (1); \n\n"); printf("\n******输入各个项目信息******\n\n"); printf("输入男子项目总数m: "); scanf("%d",&m); if(m<0||m>20) {printf("输入有误,m是20以内的整数,请重新输入: "); scanf("%d",&m); } printf("输入女子项目总数w: "); scanf("%d",&w); if(w<0||w>20) {printf("输入有误,w是20以内的整数,请重新输入: "); scanf("%d",&w); } printf("输入参加运动会的学校总数n: "); scanf("%d",&g2->n); if(g2->n<0||g2->n>20) {printf("输入有误,n是20以内的整数,请重新输入: "); scanf("%d",&g2->n); } g1->z=m+w; printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z); printf("\n\n****记录运动会成绩****"); printf("\n\n(输入0标志结束)\n"); for(k=1;k<=g1->z;k++) {g1->a[k].item=k; g1->a[k].firstschool=NULL; } for(k=1;k<=g2->n;k++) {g2->b[k].school=k; g2->b[k].firstitem=0; g2->b[k].score=0; g2->b[k].boys=0; g2->b[k].girls=0; } g2->b[0].score=0; g2->b[0].boys=0; g2->b[0].girls=0; while(i! =0) {printf("\n项目: "); scanf("%d",&i); if(i! =0) {printf("1.前三名2.前五名\n"); printf("请选择: "); scanf("%d",&j); if(j! =1&&j! =2) {printf("输入有误,请重新选择: "); scanf("%d",&j); } if(j==1) {h=3; do{printf("第%d名: 学校(学校编号为数字)",h); scanf("%d",&x); p1=(Schools*)malloc(sizeof(Schools)); p1->school=x; p2=(Items*)malloc(sizeof(Items)); p2->item=i; if(h==3)p2->record=p1->record=2; if(h==2)p2->record=p1->record=3; if(h==1)p2->record=p1->record=5; p1->next=g1->a[i].firstschool; g1->a[i].firstschool=p1; p2->next=g2->b[x].firstitem; g2->b[x].firstitem=p2; g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/ if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/ elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/ h--; }while(x! =0&&h! =0); } if(j==2) {h=5; do{printf("第%d名: 学校(学校编号为数字)",h); scanf("%d",&x); p1=(Schools*)malloc(sizeof(Schools)); p1->school=x; p2=(Items*)malloc(sizeof(Items)); p2->item=i; if(h==5)p2->record=p1->record=1; if(h==4)p2->record=p1->record=2; if(h==3)p2->record=p1->record=3; if(h==2)p2->record=p1->record=5; if(h==1)p2->record=p1->record=7; p1->next=g1->a[i].firstschool; g1->a[i].firstschool=p1; p2->next=g2->b[x].firstitem; g2->b[x].firstitem=p2; g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/ if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/ elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/ h--; }while(x! =0&&h! =0); } } } } voidsave() {FILE*fp1,*fp2; fp1=(FILE*)malloc(sizeof(FILE)); fp2=(FILE*)malloc(sizeof(FILE)); if((fp1=fopen("sports1","wb"))==NULL) {printf("cannotopenfile.\n"); return; } if(fwrite(g1,sizeof(ALLitems),1,fp1)! =1) printf("filewriteerror.\n"); fclose(fp1); if((fp2=fopen("sports2","wb"))==NULL) {printf("cannotopenfile.\n"); return; } if(fwrite(g2,sizeof(ALLNode),1,fp2)! =1) printf("filewriteerror.\n"); fclose(fp2); } voidfunct2(ALLNode*g2)/*输出各学校总分*/ {intk; printf("\n\n******输出各学校总分******\n"); printf("学校编号\t总分\n"); for(k=1;k<=g2->n;k++) printf("%d\t\t\t%d\n",k,g2->b[k].score); printf("\n"); system("pause"); printf("按任意键返回主菜单......"); getchar(); } voidfunct3(ALLNode*g2)/*按学校编号排序输出*/ { intk; Items*p2; p2=(Items*)malloc(sizeof(Items)); printf("\n\n******按学校编号排序输出******\n"); printf("学校编号\t\t\t获奖情况\n"); scanf("%d",&k); for(k=1;k<=g2->n;k++) {printf("\t\t\t\t\t\t%d\t",k); p2=g2->b[k].firstitem; while(p2! =NULL) {printf("项目%d: 得%d分",p2->item,p2->record); p2=p2->next; } printf("\n"); } printf("\n"); system("pause"); printf("按任意键返回主菜单......"); getchar(); } voidfunct4(ALLNode*g2)/*按学校总分排序输出*/ {inti,j,k; Items*p2; printf("\n\n******按学校总分排序输出******\n"); printf("学校编号\t\t总分\n"); scanf("%d",&k); //printf("输入要查询的项目编号: "); for(i=2;i<=g2->n;i++) { printf("%d\t",k); p2=g2->b[k].firstitem; while(p2! =NULL) {printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score); p2=p2->next; } printf("\n"); g2->b[0].score=g2->b[i].score; g2->b[0].boys=g2->b[i].boys; g2->b[0].girls=g2->b[i].girls; g2->b[0].school=g2->b[i].school; j=i-1; while(g2->b[0].score {g2->b[j+1].score=g2->b[j].score; g2->b[j+1].boys=g2->b[j].boys; g2->b[j+1].girls=g2->b[j].girls; g2->b[j+1].school=g2->b[j].school; j--; } g2->b[j+1].score=g2->b[0].score; g2->b[j+1].boys=g2->b[0].boys; g2->b[j+1].girls=g2->b[0].girls; g2->b[j+1].school=g2->b[0].school; } for(k=1;k<=g2->n;k++) printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score); system("pause"); printf("按任意键返回主菜单......"); getchar(); } voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/ {inti,j,k; Items*p2; p2=(Items*)malloc(sizeof(Items)); printf("\n\n******按男团体总分排序输出******\n"); printf("学校编号\t\t男团体总分\n"); scanf("%d",&k); //printf("输入要查询的学校编号: "); for(i=2;i<=g2->n;i++) { printf("%d\t",k); p2=g2->b[k].firstitem; while(p2! =NULL) {printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].boys); p2=p2->next; } printf("\n"); g2->b[0].score=g2->b[i].score; g2->b[0].boys=g2->b[i].boys; g2->b[0].girls=g2->b[i].girls; g2->b[0].school=g2->b[i].school; j=i-1; while(g2->b[0].boys {g2->b[j+1].score=g2->b[j].score; g2->b[j+1].boys=g2->b[j].boys; g2->b[j+1].girls=g2->b[j].girls; g2->b[j+1].school=g2->b[j].school; j--; } g2->b[j+1].score=g2->b[0].score; g2->b[j+1].boys=g2->b[0].boys; g2->b[j+1].girls=g2->b[0].girls; g2->b[j+1].school=g2->b[0].school; } for(k=1;k<=g2->n;k++) printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].boys); system("pause");//暂停等待 printf("按任意键返回主菜单......"); getchar(); } voidfunct6(ALLNode*g2)/*按女团体总分排序输出*/ {inti,j,k; Items*p2; p2=(Items*)malloc(sizeof(Items)); printf("\n\n******按女团体总分排序输出******\n"); printf("学校编号\t\t女团体总分\n"); scanf("%d",&k); //printf("输入要查询的项目编号: "); for(i=2;i<=g2->n;i++) { printf("%d\t",k); p2=g2->b[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告