数据结构课程设计之运动会计分系统

题目
参加运动会,有n个学校,学校编号为1, 2, …, n,比赛分为m个男子项目和w个女子项目,项目编号为男子1, 2, …, n,女子m + 1, m + 2, ,…, m + w.不同的项目,取前五名或前三名积分与前五名的积分分为7,5, 3, 2, 1,前三名的积分分别5, 3, 2;在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<conio.h>
using namespace std;
int n; //n 个学校
int m; //m 个男子项目
int w; //w 个女子项目
struct pro //表示项目的结构体
{
	string name; //项目名称
	int snum[6];//前 5 名学校的编号
}p[21];
struct school //表示学校的结构体
{
	int num;
	string name; //学校名称
	int score; //学校总分
	int male; //男子总分
	int female; //女子总分
	int info;
}sch[21];
int integral1[5]={7,5,3,2,1};//前五名得分

// 输入学校数目 
void inputInfo()
{
	int i,j,y,x;
	printf("输入学校数目:");
	y=0;
	while(1) {
		scanf("%d",&n);
		if(n>=1&&n<=20)
			y=1;
		if(y)
			break;
		else
			printf("输入数据有误, 请重新输入:");
	}
	for(i=1;i<=n;i++) {
		printf("输入第 %d 个学校的名称:", i);
 		cin>>sch[i].name;
		sch[i].score=0;
		sch[i].female=0;
		sch[i].male=0;
		sch[i].info=0;
		sch[i].num=i;
	}
	printf("输入男子项目数和女子项目数:");
	y=0;
	while(1){
		scanf("%d%d",&m,&w);
		if(m <= 20 && m >= 1 && w <= 20 && w >= 1)
			y=1;
		if(y)
			break;
		else
			printf("输入数据有误, 请重新输入:");
	}
	for(i=1;i<=m+w;i++){
		printf("输入第 %d 个项目的名称:\n",i);
		cin>>p[i].name;
		printf("输入第 %d 个项目的前 5 名的学校编号:\n",i);
		for(j=1;j<=5;j++){
			y=0;
			while(1){
				scanf("%d",&x);
				if(x>=1&&x<=20)
					y=1;
				if(y)
					break;
				else
					printf("输入数据有误, 请重新输入:");
			}
			p[i].snum[j]=x;
			sch[x].score+=integral1[j-1];
			if(i<=m)
				sch[x].male+=integral1[j-1];
			else sch[x].female+=integral1[j-1];
		}
	}
}

// 按任意键返回主菜单
void order() {
	cout<<"请按任意键返回主菜单"<<endl;
	getch();
}

//输出函数
void print(int i) 
{
	cout<<sch[i].num<<setw(10)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9)
	<<sch[i].male<<setw(10)<<sch[i].female<<endl;
}

//按编号排序
void Numbering() 
{
	int i;
	printf("\n 按编号排列:\n");
	printf("编号 学校名称 总分 男子总分 女子总分\n");
	for(i=1;i<=n;i++)
	print(i);
	order();
}

//按学校总分排序
void totalScore() 
{
	int i,j,k,a;
	printf("\n 按学校总分排列:\n");
	printf("编号 学校名称 总分 男子总分 女子总分\n");
	for(i=1;i<=n;i++){
		sch[i].info =0;
	}
	for(k=1;k<=n;k++){
		for(i=1;i<=n;i++){
			if(sch[i].info ==0)
			break;
		}
		{
			a=i;
			for(j=1;j<=n;j++){
				if(sch[j].info ==0)	{
					if(sch[i].score<sch[j].score){
						a=j;
					} 
				}
			}
		} 
		print(a); 
		sch[a].info=1;
	}; 
 	order();
}

//按学校男总分排序
void malezf() 
{
	int k,i,j,a;
	printf("\n 按学校男子总分排列:\n");
	printf("编号 学校名称 总分 男子总分 女子总分\n");
	for(i=1;i<=n;i++){
		sch[i].info =0;
	}
	for(k=1;k<=n;k++){ 
		for(i=1;i<=n;i++){
			if(sch[i].info ==0)
			break;
		}
		{
			a=i;
			for(j=1;j<=n;j++){
				if(sch[j].info ==0){
					if(sch[i].male<sch[j].male){
						a=j;
					}
				}
			}
		}
		print(a);
		sch[a].info=1;cout<<"";
	}
	order();
}

//按学校女总分排序
void femalezf(){ 
	int i,j,a,k;
	printf("\n 按学校女子总分排列:\n");
	printf("编号 学校名称 总分 男子总分 女子总分\n");
	for(i=1;i<=n;i++){
		sch[i].info =0;
	}
	for(k=1;k<=n;k++){
		for(i=1;i<=n;i++){
			if(sch[i].info ==0) break;
		}
		{
			a=i;
			for(j=1;j<=n;j++){
				if(sch[j].info ==0){
					if(sch[i].female<sch[j].female){
						a=j;
					}
				}
			}
		}
		print(a);
		sch[a].info=1;
	}
	cout<<endl;
	order();
}

//查询学校信息
void schScore()
{
	int i,y,s;
	printf("输入需要查询的学校编号:");
	y=0;
	while(1) {
		scanf("%d",&s);
		if(s>=1&&s<=n)
			y=1;
		if(y)
			break;
		else
			printf("输入数据有误, 请重新输入:");
	}
	printf("该学校相关信息:\n");
	printf("编号 学校名称 总分 男子总分 女子总分\n");
	for(i=1;i<=n;i++){
		if(sch[i].num==s){
			print(i);
			break;
		}
	}
	cout<<endl;
	order();
}

//查询项目信息
void project() 
{
	int i,y,s;
	printf("输入需要查询的项目编号:");
	y=0;
	while(1){
		scanf("%d",&s);
		if(s>=1&&s<=n)y=1;
		if(y)
			break;
		else 
			printf("输入数据有误, 重新输入:");
	}
	cout<<p[s].name<<"前 5 名学校编号及名称为:"<<endl;
	printf("名次 编号 学校名称\n");
	for(i=1;i<=5;i++)
 	cout<<" "<<i<<" "<<p[s].snum[i]<<setw(12)<<sch[ p[s].snum[i] ].name<<endl;
	cout<<endl;
	order();
}

//菜单函数
void menu() 
{
	int num;
	while(1){
		printf("\n运动会计分系统\n");
		printf("1.学校编号排序输出结果\n");
		printf("2.学校总分排序输出结果\n");
		printf("3.学校男子总分排序输出结果\n");
		printf("4.学校女子总分排序输出结果\n");
		printf("5.查询某个学校成绩\n");
		printf("6.查询某个项目成绩\n");
		printf("7.结束\n\n");
		printf("\n 选择需要的操作(选择序号):\n");
		scanf("%d",&num);
		if(num==1) 
			Numbering();
		if(num==2) 
			totalScore();
		if(num==3) 
			malezf();
		if(num==4) 
			femalezf();
		if(num==5) 
			schScore();
		if(num==6) 
			project();
		if(num==7) 
			break;
	}
}

//主函数
int main() 
{
	inputInfo();
	menu();
	return 0;
}

文档在这里,需要的小伙伴可以拿去参考一下
(里面有两个选题,因为我们老师当初就是让我们做两个选题的)
😛😛😛😛😛
链接:https://pan.baidu.com/s/1m83uA6DoLkxoF_H9947uJA
提取码:hb18

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值