体育打分系统 c++.docx
《体育打分系统 c++.docx》由会员分享,可在线阅读,更多相关《体育打分系统 c++.docx(12页珍藏版)》请在冰豆网上搜索。
体育打分系统c++
体育打分系统
一·课题内容和要求
1.要求:
(1)系统可针对不同的竞技项目;
(2)可查询各裁判员打分的明细;
(3)能给出运动员的排名、打分情况等;
(4)运动员的基本信息保存于数据库中;
(5)裁判可直接选取某选手,对其打分;
(6)可查询打分规则;
(7)用VC++实现系统,要求界面简洁美观。
2.内容:
输出每个裁判给运动员打的分数,并且对成绩进行排序,最终通过运动员名字,运动员编号查询运动员的分数。
二.需求分析
1.structLinkNode*CreatLinklist(char*fname)这段代码用单链表进行排序,此处用单链表进行边建立边排序,首先定义四个指针p,u,v,h,用p指针来申请一个空间节点,v指针作为遍历点,h指针式头指针,u指针用来交换。
2.intGetRecord(FILE*fpt,structAthleteScore*sturecord)将指定文件的信息写到单链表节点中,上述单链表用来排序运动员的成绩,通过两个for循环来讲所有裁判员的分数输入进来。
3.voidInsertRecord()//这个函数的目的是实现裁判打分,我们可以新建一个成绩单并且可以写入,然后分别输入运动员的姓名和运动员的编号,通过for循环来实现输入裁判给的分数。
4.voidListathleteinfo(char*fname)此函数用来实现显示所有运动员的成绩,首先打开一个文件的名字,然后通过该函数实现这个功能。
5.intmain()这个是个主函数,分别输出裁判打分,按运动员名字查询分数.按运动员编号查询分数.显示所有运动员成绩.排名显示所有运动员成绩.退出系统.几个功能。
6.voidOutputLinklist(structLinkNode*h)此函数是顺序显示链表各个功能。
7.voidPutRecord(FILE*fpt,structAthleteScore*sturecord)此函数实现指定文件写入一个记录,此函数将二进制转化成我们能够看的见得文件形式。
8.intSearchbyCode(char*fname,char*key)//此函数是实现按运动员编号查询分数9.intSearchbyName(char*fname,char*key)//此函数是实现按运动员名字查询分数.
10.voidShowAthleteRecord(structAthleteScore*rpt)此函数是显示一个运动员的记录。
三.概要设计
这个程序通过定义函数structLinkNode*CreatLinklist(char*fname),intGetRecord(FILE*fpt,structAthleteScore*sturecord),voidInsertRecord()//1.裁判打分.,voidListathleteinfo(char*fname),intmain(),voidOutputLinklist(structLinkNode*h),voidShowAthleteRecord(structAthleteScore*rpt),intSearchbyName(char*fname,char*key)按运动员名字查询分数.,intSearchbyCode(char*fname,char*key)等函数来定义和运行整个体育竞赛打分系统。
通过这些函数的调用我们可以实现运动员总分的排序功能。
1.总排序程序流程图
2.所有成绩流程图
3.总分排序流程图
4.裁判打分流程图
5.运动员姓名查询流程图
四.详细设计
首先定义一个节点用来实现下面的链表排序。
structAthleteScore
{
charname[NAMELEN+1];/*姓名*/
charcode[CODELEN+1];/*学号*/
intscore[JUDEGNUM];/*各裁判给的成绩*/
inttotal;/*总成级*/
};
显示所有运动员成绩,通过while循环语句来嵌套显示一个运动员记录函数。
来实现输入并显示所有运动员的成绩。
voidListathleteinfo(char*fname)
{
FILE*fp;
structAthleteScores;
system("cls");
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can'topenfile%s.\n",fname);
return;
}
while(GetRecord(fp,&s)!
=0)
{
ShowAthleteRecord(&s);
}
fclose(fp);
return;
}
链表按总分排序,通过p,u,v,h四个指针用单链表实现边建立边排序的方法,通过p指针申请一个空间节点,v指针是一个遍历点,通过单链表指针的比较来实现链表按总分排序。
structLinkNode*CreatLinklist(char*fname)
{
FILE*fp;
//structAthleteScores;
structLinkNode*p,*u,*v,*h;
//inti;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can'topenfile%s.\n",fname);
returnNULL;
}
h=NULL;
p=(structLinkNode*)malloc(sizeof(structLinkNode));//shenqingyigekongjianjiedian
while(GetRecord(fp,(structAthleteScore*)p)!
=0)
{
v=h;
while(v&&p->total<=v->total)
{
u=v;
v=v->next;
}
if(v==h)
h=p;
else
u->next=p;
p->next=v;
p=(structLinkNode*)malloc(sizeof(structLinkNode));
}
free(p);
fclose(fp);
returnh;
}
一下是主函数部分,通过switch,case,语句来实现主函数的功能,主要是读入一个文件,通过case语句以及上述函数的调用实现裁判打分,运动员成绩总分的排序。
intmain()
{
//inti,j,n;
charc;
charbuf[BUFFSIZE];//定义一个缓存
while
(1)
{
system("cls");
printf("\n--------------Inputacommand-----------\n");
printf("|1:
裁判打分.|\n");
printf("|2:
按运动员名字查询分数.|\n");
printf("|3:
按运动员编号查询分数.|\n");
printf("|4:
显示所有运动员成绩.|\n");
printf("|5:
排名显示所有运动员成绩.|\n");
printf("|6:
退出系统.|\n");
printf("输入命令:
\n");
scanf("%c",&c);/*输入选择命令*/
switch(c)
{
case'1':
InsertRecord();
getch();
break;
case'2':
/*按运动员的姓名寻找记录*/
printf("运动员名称:
\n");
scanf("%s",buf);
SearchbyName(filename,buf);
getch();
break;
case'3':
/*按运动员的号码寻找记录*/
printf("运动员编号:
\n");
scanf("%s",buf);
SearchbyCode(filename,buf);
getch();
break;
case'4':
/*列出所有运动员记录*/
Listathleteinfo(filename);
getch();
break;
case'5':
/*按总分从高到低排列显示*/
if((head=CreatLinklist(filename))!
=NULL)
OutputLinklist(head);
getch();
break;
case'6':
return1;
default:
break;
}
}
return1;
}
5、测试数据及其结果分析
6、调试过程中的问题
在代码设计的初期,试图建立一个MFC界面,但是在建立的时候对于C++类的掌握不够熟悉,不能够正确使用,导致没有在规定的时间完成。
同时对单链表的掌握也不够熟练,尤其用单链表进行排序的时候,不能够正确理解单链表是如何边建立边排序的问题。
7、参考文献和查阅的资料
《面向对象程序设计及C++》朱立华俞琼朱建编著人民邮电出版社
《C语言程序设计》朱立华王立柱编著人民邮电出版社
《数据结构与算法分析》MarkAllenWeiss(美)人民邮电出版社
8、程序设计总结
做了两周的课程设计,有很多的心得体会,更多的是同学之间的合作精神,这道课程设计花了我们一到两周的时间,几人合作,老师的帮忙才完成。
在设计过程中,我付出了很多,也懂得了只有付出才有回报。
在这次设计中,我遇到了很多困难,但我没有向困难低头,通过查询资料,虚心向同学、老师请教,才一一得到了解决。
我发现平时学的太少了,在今后我首先要把老师在课堂讲的弄懂,弄透,在此基础上利用课余时间多看课外书籍,拓宽知识面。
在设计过程中,合作精神必不可少。
单凭一个人的力量是不能完成的,毕竟一个人学的很有限。
每个人掌握的不同。
我相信:
态度决定一切,只有努力才有收获。
很感谢这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。
人生的道路是曲折的,但正是因为曲折人生才光彩夺目,在人生的路上,总遇到重重困难,但正是因为困难我们才变的更坚强。
今后的路还很长,面对困难,让我们用行动去俘虏它吧!