运动会分数统计系统实验报告
- 格式:doc
- 大小:667.00 KB
- 文档页数:19
实验报告一题目:运动会分数统计班级:通信工程姓名:张雪婷学号:20081121037 完成日期:2010-4-5一、需求分析要产生N个参加运动会的学校的成绩单,内容包括各校所取得的每项成绩的项目号,名次,姓名和得分;产生团体总分报表。
内容包括校号,男子团体总分,女子团体总分和团体总分。
二、概要设计1、结构体定义及模块struct athlete //运动员结构体{ };struct Seqlist //数组结构体{ Athlete elem[MAXSIZE];int last; };void build( Seqlist &list,int n){ 建立数组用来存放数据}void display(Seqlist L,int num,int n ){ 输出学校的成绩单及团体总分等信息}int main(){ 实现总体调用函数}2、本程序包括的模块有:1>创建一个线性数组来存放数据,输入学生的信息2>打印成绩单,输出学校的团体总分,男团,女团总分3>主控模块三、详细设计1、数据结构体的定义struct Athlete 运动员结构体。
定义了运动员中的属性{int school;int item; //项目编号int place; //名次int score;char name[22];char sex;};struct Seqlist 结构体数组{Athlete elem[MAXSIZE];int last;};2、函数调用之间的关系四、调试分析1、用线性数组来实现这个实验,首先应当对线性数组了解透彻,如何传参。
2、用结构体定义的时候要明确题目目标,如结构体都有那些属性3、在打印模块,for循环中要掌握好循环变量,分清运动员数和学校数。
4、收获:在完成本次实验中采用了线性数组存储信息,是我对这种存储方式有了更深的认识,也加深了掌握。
本次程序分为两大模块,使得程序清晰易懂,各模块具有良好的重要性,确实得到了良好的程序设计训练。
实验报告1实验名称:数据结构与软件设计实习题 目:运动会分数统计专业:生物信息学 班级:01 姓名: 学号:实验日期:2010.07.22一、 实验目的:掌握基本的输入输出方法,理解程序的分支结构,实现条件判断和循环程序的设计;掌握结构体的应用;二、 实验要求:生各学院的成绩单,包括各学院所取得的项目号、名次(成绩)、学生姓名(或学号)和得分;产生团体总分报表,包括学院号、男子团体总分、女子团体总分和团体总分。
二、 实验内容:参加运动会的的学院编号为1~n,比赛分成m 个男子项目和w 个女子项目,编号分别为1~m 和m+1~m+w ,所有项目都取前五名,得分顺序为7,5,3,2,1。
写一个统计程序产生各种成绩单和得分报表。
通过编程解决一些实际问题,并对程序进行测试,可设n=4,m=3,w=2进行测试,一般考虑n ≤20,m ≤30,w ≤20,姓名长度不超过20个字符,按名次顺序输入运动员姓名、学院名和成绩。
四、实验编程结果或过程:1. 数据定义(1)描述运动员的线性表typedef struct { int item[MAXSIZE]; //参赛项目号 char thletename[MAXSIZE][20];//姓名 char sex[MAXSIZE];//性别 int schoolnum[MAXSIZE];//所在学校编号 int num[MAXSIZE];//名次int last;}student; (2)描述学院的线性表typedef struct { int schoolnum[MAXSIZE];//学校编号 int Tgirl[MAXSIZE];//女生团体总分 int Tboy[MAXSIZE];//男生团体总分 int Tall[MAXSIZE];//学校总成绩 int last;2.初始化函数控制输入的函数算分的函数控制输出成绩的函数3. 运行测试结果,运行结果无误,如下图错误调试,能够正确处理错误,如下图调试分析1.用线性链表时应注意细节,指针的使用过程中很容易出错,从而达不到采用其起到的效果用线性链表时应注意细节,指针的使用过程中很容易出错,从而达不到采用其起到的效果。
‘实验报告题目:运动会分数统计班级:14电子商务平台建设班完成日期:2015.10.10 学号:20141103468 姓名:孙少辉学号:20141103421 姓名:杨德龙学号:20141103407 姓名:柴益新一:需求分析参加运动会的n个学校编号为1~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。
有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
【基本要求】产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。
结于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为公里数的项目取前三名,设计一组实例数据。
【项目约束】可以假设n≤20,m≤30,w≤20,姓名长度不超过20个字符。
每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。
二:概要设计采用结构体二维数组存储方式产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。
三:详细设计1:数据结构的定义元素类型、变量、指针类型(1)项目数据表:运动会开始前必须详细制定本次运动会所需的参赛项目为接下来报名、场地的准备提供依据。
本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。
这也有利于以后项目情况的查询。
3.1结构体3.2子函数3:函数调用关系四:调试分析在调试的过程中,我们发现了在查询成绩功能是只能按照各个学校的编号进行查询选手,学校的成绩信息,查询功能有待健壮完善。
五:用户使用说明(1)首先运行文件运动会统计分数系统(2) 输入信息:1.输入学校数量→2.输入各个学校名称→3.男子运动项目数量→4.女子运动项目数量。
#include <stdlib.h>#include"fstream.h"#include <iostream.h>class Record//最小的类,用来记录得奖者的信息{friend class Subject;friend class RankList;private:int school;int score;int mark;public:Record(int s=-1,int sc=0,int m=0):school(s),score(sc),mark(m){} int & ReturnSchool(){return school;}int & ReturnScore(){return score;}int & ReturnMark(){return mark;}};class Subject//它嵌套Record类,正好组成一个项目{friend class RankList;private:Record Rec[5];void SetRecord_3(int i);void SetRecord_5(int i);};class School//主要为了输出的方便{friend class RankList;int WholeScoreM,WholeScoreF,WholeScore;void output(){cout<<WholeScoreM<<"\t"<<WholeScoreF<<"\t"<<WholeScore<<endl; }School(){WholeScoreM=0;WholeScoreF=0;WholeScore=0;}};class RankList{//他嵌套Subject类,正好组成所有的项目private:Subject Subject[5];public:School school[5];void Innput();int SumScoreSchool(int number);//.按照学校代码查找学校总分int MSumScoreSchool(int number);//按照学校代码查找学校男子团体总分int FSumScoreSchool(int number);//按照学校代码查找学校女子团体总分void OutPut(void);//按学校代码输出所有的总分void SumOutPut(void);//输出所有学校总分排名void MSumOutPut(void);//输出学校男子总分排名void save_to_file();//存入文件void FSumOutPut(void);//输出学校女子总分排名void get(char * c);//从文件中读取数据void paixuWhole(void);void paixuWholeM(void);void paixuWholeF(void);void ItemSearch(int SchoolNumber,int ItemNumber);//按学校编号查询学校某个项目的情况void SchoolSearch(int ItemNumber);//可以按项目编号查询取得前三或前五名的学校};void RankList::get(char * c){char ch;fstream fin(c,ios::in|ios::out);if(!fin){cerr<<"open"<<c<<"error!"<<endl;exit(1);}for(int k=0;k<3;k++)for(int j=0;j<5;j++){fin>>Subject[k].Rec[j].ReturnSchool();fin>>Subject[k].Rec[j].ReturnScore();fin>>Subject[k].Rec[j].ReturnMark();//iofile.read((char *)&Subject[k].Rec[j],sizeof(Subject[k].Rec[j]));}for( k=3;k<5;k++)for(int j=0;j<3;j++){fin>>Subject[k].Rec[j].ReturnSchool();fin>>Subject[k].Rec[j].ReturnScore();fin>>Subject[k].Rec[j].ReturnMark();//iofile.read((char *)&Subject[k].Rec[j],sizeof(Subject[k].Rec[j]));}}void RankList::save_to_file(){ofstream outfile("123.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}for(int k=0;k<3;k++)for(int j=0;j<5;j++){outfile<<Subject[k].Rec[j].ReturnSchool()<<""<<Subject[k].Rec[j].ReturnScore()<<" "<<Subject[k].Rec[j].ReturnMark()<<endl; }for( k=3;k<5;k++)for(int j=0;j<3;j++){outfile<<Subject[k].Rec[j].ReturnSchool()<<""<<Subject[k].Rec[j].ReturnScore()<<" "<<Subject[k].Rec[j].ReturnMark()<<endl; }outfile.close();}void RankList::ItemSearch(int SchoolNumber,int ItemNumber){int temp=0;if(ItemNumber<3){for(int i=0;i<5;i++){if(Subject[ItemNumber].Rec[i].ReturnSchool()==SchoolNumber){cout<<"第"<<SchoolNumber<<"学校在男子项目"<<ItemNumber<<"取得"<<i+1<<"名"<<endl;temp++;}}}else{for(int i=0;i<3;i++){if(Subject[ItemNumber].Rec[i].ReturnSchool()==SchoolNumber){cout<<"第"<<SchoolNumber<<"学校在女子项目"<<ItemNumber<<"取得"<<i+1<<"名"<<endl;temp++;}}}if(temp==0)cout<<"第"<<SchoolNumber<<"学校在项目"<<ItemNumber<<"没有取得名次"<<endl; }void RankList::SchoolSearch(int ItemNumber){if(ItemNumber<3){for(int i=0;i<5;i++){cout<<"取得男子项目第"<<i+1<<"名的学校是"<<Subject[ItemNumber].Rec[i].ReturnSchool()<<endl;}}else{for(int i=0;i<3;i++){cout<<"取得女子项目第"<<i+1<<"名的学校是"<<Subject[ItemNumber].Rec[i].ReturnSchool()<<endl;}}}void Subject::SetRecord_3(int i){ //为取前三名的项目建立记录 int a,j;cout<<"请输入第"<<i+1<<"名的学校,成绩"<<endl;cout<<"学校:";cin>>a;bool Tag=true;while(Tag){if(a>5){cout<<"输入错误!只有5个学校!"<<endl;cout<<"学校:";cin>>a;}elseTag=false;}Rec[i].school=a;cout<<"成绩:";cin>>a;Rec[i].score=a;bool flag=true;if(i>0){while(flag){for(j=0;j<i;j++){if(Rec[i].score>Rec[j].score){cout<<"输入错误!重新输入!"<<endl;cin>>a;Rec[i].score=a;}elseflag=false;}}}switch(i){case 0:Rec[i].mark=5;break;case 1:Rec[i].mark=3;break;case 2:Rec[i].mark=2;break;}}void Subject::SetRecord_5(int i){ //为取前五名的项目建立记录 int a;cout<<"请输入第"<<i+1<<"名的学校,成绩"<<endl;cout<<"学校:";cin>>a;bool Tag=true;while(Tag){if(a>5){cout<<"输入错误!只有5个学校!"<<endl;cout<<"学校:";cin>>a;}elseTag=false;}Rec[i].school=a;cout<<"成绩:";cin>>a;Rec[i].score=a;bool flag=true;if(i>0){while(flag){for(int j=0;j<i;j++){if(Rec[i].score>Rec[j].score){cout<<"输入错误!重新输入!"<<endl;cout<<"成绩:";cin>>a;Rec[i].score=a;}elseflag=false;}}}switch(i){case 0:Rec[i].mark=7;break;case 1:Rec[i].mark=5;break;case 2:Rec[i].mark=3;break;case 3:Rec[i].mark=2;break;case 4:Rec[i].mark=1;break;}}void RankList::Innput(){int i,j;for(i=0;i<3;i++){cout<<"项目"<<i+1<<"(男子,取前五名)"<<endl; for(j=0;j<5;j++){Subject[i].SetRecord_5(j);}}for(i=3;i<5;i++){cout<<"项目"<<i+1<<"(女子,取前三名)"<<endl; for(j=0;j<3;j++){Subject[i].SetRecord_3(j);}}}int RankList::SumScoreSchool(int number)//查找学校总分{int gole=MSumScoreSchool(number)+FSumScoreSchool(number); school[number].WholeScore=gole;return gole;}int RankList::MSumScoreSchool(int number){int WholeScore=0,i,j;for(i=0;i<3;i++){for(j=0;j<5;j++)if(Subject[i].Rec[j].ReturnSchool()==number){WholeScore=WholeScore+Subject[i].Rec[j].ReturnMark(); }}school[number].WholeScoreM=WholeScore;return WholeScore;}int RankList::FSumScoreSchool(int number){int WholeScore=0,i,j;for(i=3;i<5;i++){for(j=0;j<5;j++)if(Subject[i].Rec[j].ReturnSchool()==number){WholeScore=WholeScore+Subject[i].Rec[j].ReturnMark(); }}school[number].WholeScoreF=WholeScore;return WholeScore;void RankList::paixuWhole(){int bound,j,t;School o;bound=4;while(bound!=0){t=0;for(j=0;j<=bound;j++)if(school[j].WholeScore<school[j+1].WholeScore) {o=school[j];school[j]=school[j+1];school[j+1]=o;t=j;}bound=t;}}void RankList::paixuWholeM(){int bound,j,t;School o;bound=4;while(bound!=0){t=0;for(j=0;j<=bound;j++)if(school[j].WholeScoreM<school[j+1].WholeScoreM) {o=school[j];school[j]=school[j+1];school[j+1]=o;t=j;}bound=t;}void RankList::paixuWholeF(){int bound,j,t;School o;bound=4;while(bound!=0){t=0;for(j=0;j<=bound;j++)if(school[j].WholeScoreF<school[j+1].WholeScoreF){o=school[j];school[j]=school[j+1];school[j+1]=o;t=j;}bound=t;}}void RankList::OutPut(void){for(int i=0;i<5;i++){SumScoreSchool(i);MSumScoreSchool(i);FSumScoreSchool(i);}cout<<"学校"<<" "<<"男团总分"<<" "<<"女团总分"<<" "<<"总分"<<endl; for(i=0;i<5;i++){cout<<i<<"\t";school[i].output();}}void RankList::SumOutPut(void){int i,k;for(i=0;i<5;i++){SumScoreSchool(i);MSumScoreSchool(i);FSumScoreSchool(i);}paixuWhole();cout<<"学校总分排名为(根据学校代码)"<<endl;cout<<"学校"<<" "<<"男团总分"<<" "<<"女团总分"<<" "<<"总分"<<endl; for(k=0;k<5;k++){cout<<k<<"\t";school[k].output();}}void RankList::MSumOutPut(void){int i,k;for(i=0;i<5;i++){SumScoreSchool(i);MSumScoreSchool(i);FSumScoreSchool(i);}paixuWholeM();cout<<"学校男子团体总分排名为(根据学校代码)"<<endl;for(k=0;k<5;k++){cout<<k<<"\t";school[k].output();}}void RankList::FSumOutPut(void){int i,k;for(i=0;i<5;i++){SumScoreSchool(i);MSumScoreSchool(i);FSumScoreSchool(i);}paixuWholeF();cout<<"学校女子团体总分排名为(根据学校代码)"<<endl;for(k=0;k<5;k++){cout<<k<<"\t";school[k].output();}}//运动会分数统计系统#include"iostream.h"#include"fstream.h"#include"stdlib.h"//#include"fstream"#include"fgc.h"int main(){cout<<"比赛共设5个项目,共有5个学校参加"<<endl;cout<<"前三为男子组项目,后两个为女子组项目"<<endl;cout<<"每组前三个个项目取前五名,其余取前三名"<<endl;cout<<"取前五名的项目,从第一名开始,积分依次为7分,5分,3分,2分,1分"<<endl;cout<<"取前三名的项目,从第一名开始,积分分别为5分,3分,2分"<<endl;cout<<" ************************************************** "<<endl;int t;RankList Rank;// 定义一个RankList对象bool flag1;//用来控制错误的再次输入char r[9]; //文件名cout<<"请选择你的输入模式:1,文件输入,2,键盘输入,请输入整数1或者2"<<endl; cin>>t;if(t==1||t==2) // 防止错误的输入flag1=true;while(flag1){switch(t){case 1:cout<<"请输入文件名"<<endl;Rank.get(r);flag1=false;break;case 2:Rank.Innput();Rank.save_to_file();flag1=false;break;default :cout<<"你的输入有误,请再次输入1或者2"<<endl;//纠错返回switch cin>>t;flag1=true;}}bool flag=true;//用来控制多次查询while(flag){int i;cout<<"请选择要进行的操作"<<endl;cout<<"1,按学校编号排序"<<endl;cout<<"2,按学校总分排序"<<endl;cout<<"3,男团体总分排序"<<endl;cout<<"4,女团体总分排序"<<endl;cout<<"5,按学校编号查询学校某个项目的情况"<<endl;cout<<"6,可以按项目编号查询取得前三或前五名的学校"<<endl;cout<<"0,退出"<<endl;cin>>i;char o;while(i<0||i>6)//防止错误的输入{cout<<"您的输入有误,请您在0~6之间选一个数输入"<<endl;cin>>i;}switch(i){Rank.OutPut();cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n')//防止错误的输入{cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;case 2:Rank.SumOutPut();cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n'){cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;Rank.MSumOutPut();cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n'){cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;case 4:Rank.FSumOutPut();cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n'){cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;int k,l;cout<<"请输入学校编号0~4"<<endl;cin>>k;while(k<0||k>4){cout<<"您的输入有错,请再次输入0~4之间的任意数"<<endl; cin>>k;}cout<<"请输入项目编号0~4"<<endl;cin>>l;while(l<0||l>4){cout<<"您的输入有错,请再次输入0~4之间的任意数"<<endl; cin>>l;}Rank.ItemSearch(k,l);cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n'){cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;case 6:cout<<"请输入项目编号"<<endl;int m;cin>>m;Rank.SchoolSearch(m);cout<<"是否继续(y/n)"<<endl;cin>>o;while(o!='y'&&o!='n'){cout<<"您的输入有误,请在y与n之间选择一个输入"<<endl; cin>>o;}switch(o){case 'y':system("cls");flag=true;break;case'n':flag=false;break;}break;case 0:flag=false;break;}}return 0;}。
《数据结构》实验报告实验内容:运动会竞赛成绩统计数据结构实验报告一.课题概述 (1)二.概要设计原理 (1)三.详细程序清单及注释说明 (2)四.运行与测试及结果 (7)五.本人编写函数 (11)六.心得体会 (13)七.参考文献 (13)一、课题概述1.实验目的:线性表应用类实验题目参考2.实验内容:运动会竞赛成绩统计【问题描述】东北大学第51届运动大会成功举行。
共有N个学院的男女代表队参赛。
大会共设M个男子项目和W个女子项目。
大会即将闭幕,准备公布成绩。
【实验要求】设计运动会竞赛成绩统计程序。
(1)采用顺序表或链表等数据结构。
(2)统计各代表队的男女总分和团体总分。
(3)公布各单项成绩的前六名和团体成绩的前三名。
(4)可以查询成绩。
二、概要设计原理本程序主要采用了链表的存储结构,实现了对数据的存储,访问等操作。
本程序实现了男子团体成绩、女子团体成绩、总成绩的输出。
以及对个单项和团体成绩的前六名的输出。
并实现了查找功能。
程序主要分为四个函数:1.Zongfen()这个函数主要实现计算各学院的男子总分、女子总分、以及团体总分的计算以及存储操作。
2.tuandui_paiming()此函数运用了排顺函数,实现了对团体总分的排序,以及前六名的输出。
3.danxiang_paiming()此函数运用了排序函数,实现了对单项成绩的排名,以及对各个单项前六名的输出。
4.chazhao()通过此函数,可以实现对各个学院的查找,并且显示出各个学院的单项成绩,以及男子团体成绩、女子团体成绩、总成绩的输出。
5.main()6.主函数,实现对所有函数的协调,并且执行了一些程序中相当关键的部分,对整个程序的执行以及正确的输出起到了很大的作用。
7.zhujiemain()主界面函数,实现函数运行时界面的输出,以及对接下来操作的选择,是整个程序的关键部分。
三、详细程序清单及注释说明#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuan{char name[10]; //学院名称int Mdata[5]; //5个男子项目成绩int Wdata[5]; //5个女子项目成绩int man; //男子项目总成绩int woman; //女子项目总成绩int total; //学院总成绩struct xueyuan *next;}xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname[5][20]; //5个男子项目名称char Wname[5][20]; //5个女子项目成绩char b[9][10];int a[9];char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"};int fenshu[9][10]={{7,8,5,6,2,5,8,7,4,5},{5,6,8,7,4,5,2,1,3,5},{8,6,5,4,2,3,5,4,7,4},{8,5,4,7,1,5,4,7,8,5},{7,5,4,6,5,8,6,9,5,6},{7,5,6,4,2,3,8,9,6,5},{7,5,4,2,6,9,8,5,6,1},{5,6,4,8,5,6,5,4,9,8},{8,5,4,2,6,8,9,6,5,8}};void shuju() //数据处理{int i,j;strcpy(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");strcpy(Wname[0],"女子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan));Lxueyuan p;L->next=NULL;for(i=0;i<9;i++){p=(Lxueyuan)malloc(sizeof(xueyuan));strcpy(p->name,xueyuan_name[i]);for(j=0;j<5;j++)p->Mdata[j]=fenshu[i][j];for(j=0;j<5;j++)p->Wdata[j]=fenshu[i][j+5];p->next=L->next;L->next=p;}}void zongfen() //计算总分以及输出{int i;Lxueyuan p;p=L->next;printf("----------------------各学院总分---------------------\n");printf("学院男子总成绩女子总成绩总成绩");for(i=0;i<9;i++){printf("\n%s\t\t",p->name);p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4];p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];printf("%d\t\t%d\t\t",p->man,p->woman);printf("%d",p->total);p=p->next;}}void paixu(int a[9],char b[9][10]){int i,j,k;char c[10];for(i=0;i<9;i++)for(j=0;j<9-i;j++){if(a[j]<=a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k;strcpy(c,b[j]);strcpy(b[j],b[j+1]);strcpy(b[j+1],c);}}}void tuandui_paiming() //公布团体排名{int i;printf("\n\n\n--------------------团体排名--------------------\n");printf(" 学院第一名第二名第三名第四名第五名第六名");Lxueyuan p;p=L->next;for(i=0;i<9;i++){a[i]=p->man;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n男子项目\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}p=L->next;for(i=0;i<9;i++){a[i]=p->woman;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n女子项目\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}p=L->next;for(i=0;i<9;i++){a[i]=p->total;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n总项目\t\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}printf("\n");zhujiemian();}void danxiang_paiming(){int i,j;printf("\n\n\n--------------------单项排名--------------------\n");printf(" 学院第一名第二名第三名第四名第五名第六名");Lxueyuan p;for(j=0;j<5;j++){p=L->next;for(i=0;i<9;i++){a[i]=p->Mdata[j];strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n%s\t",Mname[j]);for(i=0;i<6;i++){printf("%s\t",b[i]);}}for(j=0;j<5;j++){p=L->next;for(i=0;i<9;i++){a[i]=p->Wdata[j];strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n%s\t",Wname[j]);for(i=0;i<6;i++){printf("%s\t",b[i]);}}zhujiemian();}void chazhao() //查找函数{int i;char abc[20];printf("请输入您要查找的学院名称:");scanf("%s",abc);Lxueyuan p;p=L->next;while(p){if(strcmp(p->name,abc))break;}if(p==NULL)printf("您查找的学院不存在!!\n");else{for(i=0;i<5;i++)printf("%s:\t%d分\n",Mname[i],p->Mdata[i]);for(i=0;i<5;i++)printf("%s:\t%d分\n",Wname[i],p->Wdata[i]);printf("男子总成绩:\t%d分\n",p->man);printf("女子总成绩:\t%d分\n",p->woman);printf("总成绩:\t%d分\n",p->total);}zhujiemian();}void zhujiemian(){printf("----------------------------------------------------\n""---- 1.总成绩及团体排名----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}四.运行与测试及结果1.主界面2.各学院总分3.团体总分4.单项排名5.查找—信息---机械6.退出五.本人编写函数#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuan{char name[10]; //学院名称int Mdata[5]; //5个男子项目成绩int Wdata[5]; //5个女子项目成绩int man; //男子项目总成绩int woman; //女子项目总成绩int total; //学院总成绩struct xueyuan *next;}xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname[5][20]; //5个男子项目名称char Wname[5][20]; //5个女子项目成绩char b[9][10];int a[9];char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"};int fenshu[9][10]={{7,8,5,6,2,5,8,7,4,5},{5,6,8,7,4,5,2,1,3,5},{8,6,5,4,2,3,5,4,7,4},{8,5,4,7,1,5,4,7,8,5},{7,5,4,6,5,8,6,9,5,6},{7,5,6,4,2,3,8,9,6,5},{7,5,4,2,6,9,8,5,6,1},{5,6,4,8,5,6,5,4,9,8},{8,5,4,2,6,8,9,6,5,8}};void shuju() //数据处理{int i,j;strcpy(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");strcpy(Wname[0],"女子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan));Lxueyuan p;L->next=NULL;for(i=0;i<9;i++){p=(Lxueyuan)malloc(sizeof(xueyuan));strcpy(p->name,xueyuan_name[i]);for(j=0;j<5;j++)p->Mdata[j]=fenshu[i][j];for(j=0;j<5;j++)p->Wdata[j]=fenshu[i][j+5];p->next=L->next;L->next=p;}}void zongfen() //计算总分以及输出{int i;Lxueyuan p;p=L->next;printf("----------------------各学院总分---------------------\n");printf("学院男子总成绩女子总成绩总成绩");for(i=0;i<9;i++){printf("\n%s\t\t",p->name);p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4];p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];printf("%d\t\t%d\t\t",p->man,p->woman);printf("%d",p->total);p=p->next;}}void zhujiemian(){printf("----------------------------------------------------\n""---- 1.总成绩及团体排名----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}六.心得体会通过这次的程序设计,使自己对链表的操作有了更进一步的了解。
课题:运动会分数统计系统一、问题分析和任务定义1、任务描述:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1~m,女子m+1~m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。
(m<=20,n<=20)2、功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。
二、软件设计1、本系统的流程图如下:2、本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表:(1) 项目数据表:运动会开始前必须详细制定本次运动会所需的参赛项目为接下来报名、场地的准备提供依据。
本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。
这也有利于以后项目情况的查询。
typedef struct{int itemnum; //项目编号int top; //取名次的数目int range[5]; //名次int mark[5]; //分数}itemnode; //定义项目结点的类型 Y N NN Y Case1 Case3 N Y Y 开始---初始化输入 输入某项目各名次成绩 输入学校及男女项目范围 继续输查询各学校成绩 Case2 查询团体总分 成绩查询 输出查询学校成绩 继续 结束—退出继续(2)学校数据表:本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。
其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。
《数据结构》实验报告实验内容:运动会竞赛成绩统计数据结构实验报告一.课题概述 (1)二.概要设计原理 (1)三.详细程序清单及注释说明 (2)四.运行与测试及结果 (7)五.本人编写函数 (11)六.心得体会 (13)七.参考文献 (13)一、课题概述1.实验目的:线性表应用类实验题目参考2.实验内容:运动会竞赛成绩统计【问题描述】东北大学第51届运动大会成功举行。
共有N个学院的男女代表队参赛。
大会共设M个男子项目和W个女子项目。
大会即将闭幕,准备公布成绩。
【实验要求】设计运动会竞赛成绩统计程序。
(1)采用顺序表或链表等数据结构。
(2)统计各代表队的男女总分和团体总分。
(3)公布各单项成绩的前六名和团体成绩的前三名。
(4)可以查询成绩。
二、概要设计原理本程序主要采用了链表的存储结构,实现了对数据的存储,访问等操作。
本程序实现了男子团体成绩、女子团体成绩、总成绩的输出。
以及对个单项和团体成绩的前六名的输出。
并实现了查找功能。
程序主要分为四个函数:1.Zongfen()这个函数主要实现计算各学院的男子总分、女子总分、以及团体总分的计算以及存储操作。
2.tuandui_paiming()此函数运用了排顺函数,实现了对团体总分的排序,以及前六名的输出。
3.danxiang_paiming()此函数运用了排序函数,实现了对单项成绩的排名,以及对各个单项前六名的输出。
4.chazhao()通过此函数,可以实现对各个学院的查找,并且显示出各个学院的单项成绩,以及男子团体成绩、女子团体成绩、总成绩的输出。
5.main()6.主函数,实现对所有函数的协调,并且执行了一些程序中相当关键的部分,对整个程序的执行以及正确的输出起到了很大的作用。
7.zhujiemain()主界面函数,实现函数运行时界面的输出,以及对接下来操作的选择,是整个程序的关键部分。
三、详细程序清单及注释说明#include<>#include<>#include<>typedef struct xueyuan{char name[10]; 成绩及团体排名 ----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() 界面2.各学院总分3.团体总分4.单项排名5.查找—信息---机械6.退出五.本人编写函数#include<>#include<>#include<>typedef struct xueyuan{char name[10]; 成绩及团体排名 ----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}六.心得体会通过这次的程序设计,使自己对链表的操作有了更进一步的了解。
信息系统分析与设计运动会成绩管理系统组员:杜旭东:201181170106王 斌:201181170133 李泽俊:201181170121一.引言1.1、运动会成绩管理系统开发目的当前,运动会已经在全国普遍开展,许多学校每年都定期的举行不同规模的田径运动会。
但是,在运动会举行过程中一直存在着参赛人数多,项目设置复杂,时间安排紧凑等问题,而且这些问题能否解决直接关系着运动会的成功与否。
另一方面,人们对于比赛结果的实时性、准确性、安全性、可靠性的要求也越来越高,而这些要求是人工操作很难实现的。
同时竞赛组织者要尽量减少人为因素的干扰,减少赛场作弊行为的发生,还要为参赛的教练员和运动员及时准确地提供竞赛的相关信息,辅助进行竞赛的决策指导。
因此,计算机技术的融入就成为一种必然,而且逐渐成为运动会信息管理的核心所在。
1.2开发背景软件名称:运动会成绩管理系统方案设计人员:王斌杜旭东李泽俊我们小组根据当前学校运动会的开展组织情况,结合运动会的组织原则和相关规定,运用现代计算机技术,以全新的模式设计开发了适合学校运动会的运动会成绩管理系统。
1.3定义JDBC-ODBC桥接器:JDBC 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。
JDBC也是java 核心类库的一部分。
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
这些API利用SQL来完成其大部分任务。
ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
1.4参考资料【1】何绍荣学校田径运动会计算机成绩管理系统 [J].电子科技大学,2010.10. 【2】《信息系统开发方法》清华大学出版社姜旭平【3】周华清, 李为民, 张昌龙等. Java典型模块与项目实战大全[J]. 清华大学出版社,2012, 1.【4】耿祥义,张越平。
目录一.设计要求 (1)二.设计分析 (1)三.设计实现 (3)四.实验心得 (8)五.参考文献 (8)一.设计要求:任务:参加运动会有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).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;二.设计分析:本程序中学校的存储结构为数组.运动项目结构体:图1 运动项目结构体学校结构体:图2学校机构体主菜单结构:图3主菜单结构主要结构:typedef struct //项目结构{char xmm[100]; //项目名称char num[5]; //项目编号int score; //项目得分}xiangm;typedef struct school{int num; //学校编号char schoolname[20]; //学校名称int manscore; //男子得分int womenscore; //女子得分int sum; //总分xiangm man[MAX]; //男子项目int man_num; //男子项目个数int man_score; //男子团体总分xiangm women[MAX]; //女子项目int women_num; //女子项目个数int women_score; //女子团体总分}school;主要函数:void fun1_1() //对学校和项目进行初始化操作void fun1_lurum1(int flag)//录入男子取前3名的项目成绩void fun1_luruw1(int flag) //录入女子取前3名的项目成绩void fun1_lurum2(int flag) //录入男子取前5名的项目成绩void fun1_luruw2(int flag) //录入女子取前5名的项目成绩void fun1_sum() //计算学校总得分以及男子团体总分女子团体总分void fun1() //输入各个项目成绩,调用前面的函数void fun2() //按学校编号排序输出void fun3() //按学校总分排序并输出结果void fun4() //分别进行男子团体总分排序和女子团体排序并输出void fun5() //输入一个学校的编号查询该学校取得的成绩void fun6() //输入一个项目的编号查询该项目的得分学校情况void save() //将数据写到school.txt文件中void load() //从school.txt文件中读取数据三.设计实现:1.程序主界面:图4程序主界面2.输入功能:图5输入功能完成3.按学校编号排序输出:图6按学校编号排序输出4.按学校总分排序输出:图7按学校总分排序输出5.按男女团体总分排序输出:图8按男女团体总分排序输出6.按学校编号查询某个项目的情况:图9按学校编号查询某个项目的情况7.按项目编号查询取得名次的学校:图10按项目编号查询取得名次的学校8.存储数据:图11存储数据9.存储的数据:图12存储的数据10.读取数据:图13读取数据四.实验心得:课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际能力的具体训练和考察过程.写之前有第一感觉是用链表写.但是上次的课程设计写的就是链表,所以想尝试一下用数组写这个题目.写完之后两者对比起来处理这种题目还是用链表比较方便.用数组太花存储空间了,处理太多数据的话就不现实了.在文件读写的时候由于数据太多写入和读取都要一个一个处理.通过这次课程设计使我懂得了理论与实际相结合是很重要的,从而提高自己的实际动手编程能力和独立思考能力.而对于程序。
运动会分数统计系统的实现09计科(2)班E10914044杨素传一、设计要求1、问题描述参加运动会有n个学校,学校编码为1,2,…,n,比赛分成m个男子项目和w个女子项目。
项目编号为男子1,2,…,m,女子m+1,m+2,…,m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为7,5,3,2,1;前三名的积分分别5,3,2;哪些取前五名或前三名由学生自己设定(m<=20,n<=20)。
2、需求分析(1)可以输入各个项目的前三名或前五名成绩;(2)能统计各学校成绩;(3)可以按学校编号、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某项目情况,可以按项目编号查询取得前三名或前五名的学校。
二、概要设计1、主界面设计为了实现运动会分数统计系统,设计一个含有多个菜单项的主控菜单子程序以连接系统的各项子程序,方便用户使用本程序。
本系统主控菜单运行界面图1所示。
图1 运动会分数统计系统程序主菜单2、存储结构设计本程序采用链式存储类型(LNode)存储运动会分数统计系统的节点信息。
运动会分数统计系统的链表中的结点包括8个域:项目编号域(objnum)、项目类型(objtype)、运动员编号(athnum)、运动员姓名(athname[20])、学校编号(schnum)、校名(schname[30])、运动员分数(athscore)和指向下一个节点的指针欲(struct LNode *next)。
3、系统功能设计本系统设置了8个子功能菜单。
8个子功能的设计描述如下:(1)录入各项目的成绩。
由函数creatLink()实现。
当用户选择该功能时,系统会以用户输入的数据运动会分数统计链表。
(2)统计各学校分数。
由函数schoolScore()实现。
当用户选择该功能时,系统会统计各学校分数。
(3)按学校编号顺序输出。
由函数printfSchoolNumber()实现。
当用户选择该功能时,系统会按学校编号顺序输出数据。
(4)按学校总分顺序输出。
由函数printfSchoolScore()实现。
当用户选择该功能时,系统会按学校总分顺序输出数据。
(5)按男女团体总分顺序输出。
由函数printfManWomanScore()实现。
当用户选择该功能时,系统会按男女团体总分顺序输出数据。
(6)按学校编号查询学校某项目情况。
由函数printfSchoolObject()实现。
当用户选择该功能时,系统会按学校编号输出学校某项目情况。
(7)按项目编号查询取得前三名或前五名的学校。
由函数printfObjectSchool()实现。
当用户选择该功能时,系统会按项目编号查询取得前三名或前五名的学校情况。
(8)退出。
由exit(0)函数实现。
三、模块设计1、模块设计本程序包含两个模块:主程序模块和工作区选择模块。
其调用关系如图2所示。
图2 模块调用示意图2、系统子程序及功能设计本系统共设置个6子程序,各子程序的函数名及功能说明如下。
(1)LinkList creatLink() //创建链表(录入各项目的成绩)(2)int schoolScore(LinkList L) //统计各学校总分(3)void printfSchoolNumber() //按学校编号顺序输出(4)void printfSchoolScore() //按学校总分顺序输出(5)void printfManWomanScore(LinkList L //按男女团体总分排序输出(6)void printfSchoolObject(LinkList L) //按学校编号查询学校某项目情况(7)void printfObjectSchool(LinkList L) //按项目编号查询取得前三名或前五名的学校(8)int main() //主函数3、函数主要调用关系图本系统6个子系统之间的主要调用关系如图3所示,图中数字是各函数的编号。
图3 系统函数调用关系图四、详细设计1、数据类型定义(1)本系统采用链式结构存储运动会分数统计的结点。
节点定义如下:typedef struct LNode{// 链表节点数据结构int objnum;char objtype;int athnum;char athname[20];int schnum;char schname[30];int athscore;struct LNode *next;}LNode,*LinkList;(2)各学校情况数据结构的结构定义成结构体数组形式。
定义如下:struct School{int schoolnumber;char schoolname[30];int schoolscore;}school[30];2、系统主要子程序详细设计(1)创建链表(录入各项目的成绩)子程序设计LinkList creatLink(){LinkList L=(LinkList)malloc(LEN);LinkList p,q;int num,objnum,n;char objtype;L->next=NULL;p=L;printf("请输入男女项目总个数:");scanf("%d",&num);while(num--){printf("请输入项目编号:");scanf("%d",&objnum);printf("请输入项目类型:");getchar();objtype=getchar();printf("请输入3(代表取前三名)或5(代表取前五名):");scanf("%d",&n);printf("请按名次顺序输入运动员编号,姓名,学校编号,校名和成绩\n");while(n--){q=(LinkList)malloc(LEN);q->objnum=objnum;q->objtype=objtype;printf("请输入运动员编号:");scanf("%d",&q->athnum);printf("请输入运动员姓名:");getchar();scanf("%s",q->athname);printf("请输入学校编号:");scanf("%d",&q->schnum);printf("请输入校名:");getchar();scanf("%s",q->schname);printf("请输入成绩:");scanf("%d",&q->athscore);q->next=NULL;p->next=q;p=q;}}return(L);}(2)统计各学校总分子程序设计int schoolScore(LinkList L){LinkList p;int i;p=L->next;for(i=0;i<20;i++){school[i].schoolscore=0;school[i].schoolnumber=-1;}while(!p==NULL){for(i=0;i<20;i++){if(school[i].schoolnumber==-1){strcpy(school[i].schoolname,p->schname);school[i].schoolnumber=p->schnum;school[i].schoolscore=p->athscore;p=p->next;break;}else if(school[i].schoolnumber==p->schnum){school[i].schoolscore+=p->athscore;p=p->next;break;}}}return 0;}五、测试分析1、创建链表(录入各项目的成绩)在主菜单下,用户输入1并回车,然后输入数据结点的个数并回车,再输入数据,运行结果如图4所示。
图4 链表建立(录入各项目的成绩)2、统计各学校总分在主菜单下,用户输入2并回车,运行结果如图5所示。
图5 统计各学校总分3、按学校编号顺序输出在主菜单下,用户输入3并回车,运行结果如图6所示。
图6 按学校编号顺序输出的数据4、按学校总分顺序输出在主菜单下,用户输入4并回车,运行结果如图7所示。
图7 按学校总分顺序输出的数据5、按男女团体总分排序输出在主菜单下,用户输入5并回车,运行结果如图8所示。
图8 按男女团体总分排序输出的数据6、按学校编号查询学校某项目情况在主菜单下,用户输入6并回车,再输入学校编号回车,然后输入项目编号,运行结果如图9所示。
图9 按学校编号查询学校某项目情况6、按项目编号查询取得前三名或前五名的学校在主菜单下,用户输入7并回车,再输入项目编号回车,然后输入取名规则,运行结果如图10所示。
图10 按项目编号查询取得前三名或前五名的学校8、退出在主菜单下,用户输入0并回车,运行结果如图11所示。
图11 退出程序六、源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#define NULL 0#define LEN sizeof(LNode)typedef struct LNode{// 链表节点数据结构int objnum;char objtype;int athnum;char athname[20];int schnum;char schname[30];int athscore;struct LNode *next;}LNode,*LinkList;//学校情况数据结构struct School{int schoolnumber;char schoolname[30];int schoolscore;}school[30];//创建链表LinkList creatLink(){LinkList L=(LinkList)malloc(LEN);LinkList p,q;int num,objnum,n;char objtype;L->next=NULL;p=L;printf("请输入男女项目总个数:");scanf("%d",&num);while(num--){printf("请输入项目编号:");scanf("%d",&objnum);printf("请输入项目类型:");getchar();objtype=getchar();printf("请输入3(代表取前三名)或5(代表取前五名):");scanf("%d",&n);printf("请按名次顺序输入运动员编号,姓名,学校编号,校名和成绩\n");while(n--){q=(LinkList)malloc(LEN);q->objnum=objnum;q->objtype=objtype;printf("请输入运动员编号:");scanf("%d",&q->athnum);printf("请输入运动员姓名:");getchar();scanf("%s",q->athname);printf("请输入学校编号:");scanf("%d",&q->schnum);printf("请输入校名:");getchar();scanf("%s",q->schname);printf("请输入成绩:");scanf("%d",&q->athscore);q->next=NULL;p->next=q;p=q;}}return(L);}//统计各学校总分int schoolScore(LinkList L){LinkList p;int i;p=L->next;for(i=0;i<20;i++){school[i].schoolscore=0;school[i].schoolnumber=-1;}while(!p==NULL){for(i=0;i<20;i++){if(school[i].schoolnumber==-1){strcpy(school[i].schoolname,p->schname);school[i].schoolnumber=p->schnum;school[i].schoolscore=p->athscore;p=p->next;break;}else if(school[i].schoolnumber==p->schnum){school[i].schoolscore+=p->athscore;p=p->next;break;}}}return 0;}//按学校编号顺序输出void printfSchoolNumber(){int i,j,num,flag;printf(" 学校编号校名学校总分\n");for(i=0;;i++){if(school[i].schoolnumber==-1)break;num=school[0].schoolnumber;flag=0;for(j=1;;j++){if(school[j].schoolnumber==-1)break;if(school[j].schoolnumber<num){num=school[j].schoolnumber;flag=j;} }printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,sc hool[flag].schoolscore);school[flag].schoolnumber=35565;}}//按学校总分顺序输出void printfSchoolScore(){int i,j,sco,flag;printf(" 学校编号校名学校总分\n");for(i=0;;i++){if(school[i].schoolscore==0)break;sco=school[0].schoolscore;flag=0;for(j=1;;j++){if(school[j].schoolscore==0)break;if(school[j].schoolscore>sco){sco=school[j].schoolscore;flag=j;} }printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,sc hool[flag].schoolscore);school[flag].schoolscore=-1;}}//按男女团体总分排序输出void printfManWomanScore(LinkList L){LinkList p;int manscore=0,womanscore=0;p=L->next;while(!p==NULL){if(p->objtype=='m')manscore+=p->athscore;else womanscore+=p->athscore;p=p->next;}printf(" 团体总分\n");if(manscore>=womanscore){printf(" 男生%8d\n",manscore);printf(" 女生%8d\n",womanscore);}else {printf(" 女生%8d\n",womanscore);printf(" 男生%8d\n",manscore);}}//按学校编号查询学校某项目情况void printfSchoolObject(LinkList L){LinkList p;int scnum,obnum,sum=0;char scname[30];p=L->next;printf("请输入要查看的学校编号:");scanf("%d",&scnum);printf("请输入项目编号:");scanf("%d",&obnum);while(p!=NULL){if(p->schnum==scnum&&p->objnum==obnum){sum+=p->athscore;strcpy(scname,p->sc hname);}p=p->next;}printf(" 学校编号校名项目编号获得总分\n");printf("%8d%10s%12d%12d\n",scnum,scname,obnum,sum);}//按项目编号查询取得前三名或前五名的学校void printfObjectSchool(LinkList L){LinkList p;int obnum,n,i;p=L->next;printf("请输入要查看的项目编号:");scanf("%d",&obnum);printf("请输入3(前三名)或5(前五名):");scanf("%d",&n);for(i=20;i<30;i++){school[i].schoolscore=0;school[i].schoolnumber=-1;}while(p!=NULL){for(i=20;i<30;i++){if(school[i].schoolnumber==-1&&p->objnum==obnum){strcpy(school[i].schoolname,p->schname);school[i].schoolnumber=p->schnum;school[i].schoolscore=p->athscore;p=p->next;break;}else if(school[i].schoolnumber==p->schnum&&p->objnum==obnum){school[i].schoolscore+=p->athscore;p=p->next;break;}else{p=p->next;break;}}}printf(" 项目编号学校编号校名学校总分\n");/*i=20;while(n--){if(school[i].schoolscore!=0){printf("%8d%12d%10s%12d\n",obnum,school[i].schoolnumber,school[i].schoolnam e,school[i].schoolscore);i++;}else break;}*/p=L->next;while(p->objnum!=obnum)p=p->next;while(n--){printf("%8d%12d%10s%12d\n",obnum,p->schnum,p->schname,p->athscore);p=p->next;}}//主函数int main(){LinkList L;int menu;while(menu!=0){printf("***********************欢迎使用运动会分数统计系统***********************\n");printf(" 1.录入各项目的成绩\n");printf(" 2.统计各学校分数\n");printf(" 3.按学校编号顺序输出\n");printf(" 4.按学校总分顺序输出\n");printf(" 5.按男女团体总分顺序输出\n");printf(" 6.按学校编号查询学校某项目情况\n");printf(" 7.按项目编号查询取得前三名或前五名的学校\n");printf(" 0.退出系统\n");printf("***********************欢迎使用运动会分数统计系统***********************\n");printf("请选择功能0-7:");scanf("%d",&menu);switch(menu){case 1: L=creatLink();printf("各项目的成绩录入完毕!\n");break;case 2: schoolScore(L);printf("统计各学校成绩完毕!\n");break;case 3: printfSchoolNumber();break;case 4: schoolScore(L); printfSchoolScore();break;case 5: printfManWomanScore(L);break;case 6: printfSchoolObject(L);break;case 7: printfObjectSchool(L);break;case 0: printf("退出系统成功,欢迎使用!\n");exit(0);default :printf("功能选项错误,请重新输入!");}printf("\n");}return 0;}七、用户手册(1)本程序执行文件为“运动会分数统计系统演示.exe”。