📄 运动会分数统计源程序.cpp
字号:
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
typedef struct Item
{int serial;//项目编号
char name[10];//项目名称
int count;//该项目得分人数
}Item_Table;
typedef struct Student
{char name[10];
int sex;
int item;//参加的项目
int score;//成绩
int range;//名次
}Student;
typedef struct SchoolNode
{int serial;//学校编号
char name[10];
int count;//运动员人数
int boyscore;//男子团体总分
int girlscore;//女子团体总分
int totalscore;//团体总分
int integral;//积分
Student students[20];//参赛学生
struct SchoolNode *next;
}SchoolNode,*School;
int SchoolCount=0;//学校总数
int BoyItem=0;//男生项目总数
int GirlItem=0;//女生项目总数
int TotalItem=0; //项目总数
Item_Table item_T[41];//项目表
void CreatSchoolLink(School &head)
{//创建学校的链表
School p;
int i;
head=p=(School)malloc(sizeof(SchoolNode));
for(i=1;i<=SchoolCount;i++)
{ p=p->next=(School)malloc(sizeof(SchoolNode));
printf("请输入编号为%d的学校的名称:\n",i);
scanf("%s",p->name);
p->serial=i;
p->count=0;
p->boyscore=0;
p->girlscore=0;
p->totalscore=0;
p->integral=0;
}
p->next=NULL;//使指针指向空
head=head->next;//头指针后移
}
void AddStudentLink(School &head)
{//添加获奖学生
School L,p;
int School_ID; //学校编号
char StudentName[20]; //学生姓名
int sex;//性别
int Item_ID; //项目编号
int score; //成绩
int range; //名次
printf("请输入学生的姓名:\n");
scanf("%s",StudentName);
printf("请输入该学生所在学校的编号:\n");
scanf("%d",&School_ID);
printf("请输入该学生的性别(0--女,1--男):\n");
scanf("%d",&sex);
printf("请输入该学生参加的项目编号:\n");
scanf("%d",&Item_ID);
if(sex==0) GirlItem=Item_ID;
if(sex==1) BoyItem=Item_ID;
printf("请输入该学生该项目的得分:\n");
scanf("%d",&score);
printf("请输入该学生在该项目中的名次:\n");
scanf("%d",&range);
L=head;
while(L)
{ if(L->serial==School_ID)
{ p=L;
p->count=p->count+1; //运动员数+1
strcpy(p->students[p->count].name, StudentName); //学生姓名
p->students[p->count].item=Item_ID ;//得分项目
item_T[Item_ID].count=item_T[Item_ID].count+1; //该项目得分人数+1
p->students[p->count].range=range;//得分名次
p->students[p->count].score=score;//得分
p->students[p->count].sex=sex; //性别
break;
}
else L=L->next;
}
}
void ScoreTJ(School &head)
{//成绩统计
School p;
p=head; //保存链表头指针
int boyscore=0; //男子团体总分
int girlscore=0; //女子团体总分
int totalscore=0; //团体总分
int i;
int item_i=0;
int integral=0;//积分
while(p)
{ for(i=1;i<=p->count;i++)
{//计算分数
totalscore=totalscore+p->students[i].score; //计算总分
if(p->students[i].sex==0) girlscore=girlscore+p->students[i].score;////女子团体总分
else boyscore=boyscore+p->students[i].score;//男子团体总分
//计算积分
item_i=p->students[i].item;
if(item_T[item_i].count>=5)
{//取前5名
if(p->students[i].range==1)integral=integral+7;
else if(p->students[i].range==2)integral=integral+5;
else if(p->students[i].range==3)integral=integral+3;
else if(p->students[i].range==4)integral=integral+2;
else if(p->students[i].range==5)integral=integral+1;
}
if(item_T[item_i].count<5)
{//取前3名
if(p->students[i].range==1)integral=integral+5;
else if(p->students[i].range==2)integral=integral+3;
else if(p->students[i].range==3)integral=integral+2;
}
}//for
p->integral=integral; //计算积分
p->girlscore=girlscore;//保存 女子总分
p->boyscore=boyscore;//保存 男子总分
p->totalscore=totalscore;//保存总分
integral=0;
boyscore=0; //男子团体总分
girlscore=0; //女子团体总分
totalscore=0; //总分
p=p->next; //向后移动指针
}//while
}
void Find_Item_ID(School &head,int Item_ID){ //按项目编号查询取得前三或前五名的学校。
School h,p;
p=h=head; //保存链表头指针
int i;
printf("查询结果如下:\n");
while(h){
for(i=1;i<=h->count;i++)
{ if(h->students[i].item==Item_ID)
{ printf("学校:%s 姓名:%s 名次:%d\n",h->name,h->students[i].name,h->students[i].range);
printf("\n--------------------------------------\n");
}
}
h=h->next;
}
}
void Find_School_Item(School &head,int School_ID,int Item_ID){//按学校编号查询学校某个项目
School h,p;
int item_i=0;
int i;
p=h=head; //保存链表头指针
while(h){
if(h->serial==School_ID){p=h;break;}
h=h->next;
}
for(i=1;i<=p->count;i++)
{ if(p->students[i].item==Item_ID){
printf("查询结果如下:\n");
printf("姓名:%s\n",p->students[i].name);
item_i=p->students[i].item;
if(p->students[i].sex==0){
printf("性别:女\n");
item_i=item_i+20;
}
else {
printf("性别:男\n");
}
printf("项目编号:%d 项目名称%s 该项目得分%d 名次:%d\n",p->students[i].item,item_T[item_i].name,p->students[i].score,p->students[i].range);
printf("\n------------------------------------------------------------\n");
}
}
}
void OutPut_Link(School head)
{ //向屏幕输出数据
School h;
h=head;
int i;
int item_ID;
int item_count_i;
while(h)
{ //遍历学校
printf("学校编号:%d\n",h->serial);
printf("学校名称:%s\n",h->name);
printf("本次运动会积分%d\n",h->integral);
printf("男子团体总分:%d\n",h->boyscore);
printf("女子团体总分:%d\n",h->girlscore);
printf("总分:%d\n",h->totalscore);
printf("运动员数:%d\n",h->count);
printf("\n---------------------------------------\n");
for(i=1;i<=h->count;i++)
{//输出该校学生运动员情况
printf("运动员姓名:%s\n",h->students[i].name);
if(h->students[i].sex==0)printf("性别:女\n");
else printf("性别:男\n");
item_ID=h->students[i].item;
if(h->students[i].sex==0)item_ID=item_ID+20; //如果是女生则项目表向后移动20
printf("得分项目:%s\n",item_T[item_ID].name);
printf("得分:%d\n",h->students[i].score);
printf("得分名次:%d\n",h->students[i].range);
}
printf("\n--------------------------------------\n");
h=h->next; //指针向后移动
}
printf("\n--本次运动会的项目清单--\n");
printf("男生项目清单:\n");
for(item_count_i=1;item_count_i<=BoyItem;item_count_i++)
{
printf("编号:%d 名称:%s 参加人数:%d\n",item_T[item_count_i].serial,item_T[item_count_i].name,item_T[item_count_i].count);
}
printf("女生项目清单:\n");
for(item_count_i=1;item_count_i<=GirlItem;item_count_i++)
{
printf("编号:%d 名称:%s 参加人数:%d\n",item_T[item_count_i+20].serial,item_T[item_count_i+20].name,item_T[item_count_i+20].count);
}
printf("\n--------------------------------------\n");
}
void AddStudent(School &head)
{ //添加学生数据
int i=1;
while(i)
{ AddStudentLink(head); //添加学生数据
printf("\n是否继续添加学生数据?[No=0 Yes=1]\n");
scanf("%d",&i);
}
}
int menu() /*菜单函数*/
{int d;
printf("\n::::::数据结构---运动会分数统计::::::\n");
printf("\n:::::1--参数设置 2--添加学生:::::::\n");
printf("\n:::::3--统计 4--学校查询:::::::\n");
printf("\n:::::5--项目查询 按其他键退出::::::\n");
printf("\n:::::::::::::::::::::::::::::::::::::\n");
scanf("%d",&d);
return(d);
}
int main()
{School head;
int i,flag=1;
int a,b,c;
while(flag)
{switch(menu())
{case 1:{
printf("请输入参赛学校数(n>=2)\nn=");
scanf("%d",&SchoolCount);
printf("\n请输男生项目总数(0<n<=20)\nm=");
scanf("%d",&BoyItem);
printf("\n请输女生项目总数(0<n<=20)\nw=");
scanf("%d",&GirlItem);
TotalItem=BoyItem+GirlItem;
printf("\n请输入男生项目信息\n");
for(i=1;i<=BoyItem;i++)
{
item_T[i].serial=i; //项目编号
item_T[i].count=0;
printf("项目编号:%d\n",i);
printf("请输入项目名称:\n");
scanf("%s",item_T[i].name); //项目名称
}
printf("\n请输入女生项目信息\n");
for(i=1;i<=GirlItem;i++)
{
item_T[20+i].serial=i;
printf("项目编号:%d\n",i); //项目编号
printf("请输入项目名称:\n");
scanf("%s",item_T[20+i].name); //项目名称
}
CreatSchoolLink(head);
break;
}
case 2:AddStudent(head);break;
case 3:{ScoreTJ(head);
OutPut_Link(head);
break;
}
case 4:{ printf("\n请输入学校编号:");
scanf("%d",&a);
printf("\n请输入项目编号:");
scanf("%d",&b);
Find_School_Item(head,a,b);
break;
}
case 5:{ printf("\n请输入项目编号:");
scanf("%d",&c);
Find_Item_ID(head,c);
break;
}
default:flag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -