c语言歌手比赛系统

题目要求:

歌手比赛系统
对一次歌手比赛的成绩进行管理,输入每个选手的数据包括编号、姓名、10个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。
实现以下功能:
(1) 系统以菜单方式工作;
(2) 输入选手数据,评委打分;
(3) 成绩排序(按平均分);
(4) 数据查询;
(5) 写入数据文件;
(6) 退出系统。
备注:歌手数据包括以下信息:编号,姓名,平均得分。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

const int N = 10010;//结构体数组最大容量
const int LEN = 50;//名字最大长度 

typedef struct
{
	char name[LEN];//名字 
	int snumber;//编号 
	double avecore;//平均分 
}singerinf;

singerinf singers[N];//结构体数组,每一个元素都是一个singerinf类型 
int cnt = 0;//记录数组用到哪个位置


void menu()
{
	printf("====================================\n");
	printf("1.歌手信息录入\n");
	printf("2.排序并查看所有歌手信息\n");
	printf("3.歌手查询\n");
	printf("4.读取数据\n");
	printf("5.保存数据\n");
	printf("6.退出\n");
	printf("====================================\n");
}

void insingerinf()
{
	singerinf singer;
	printf("请输入名字\n");
	scanf("%s",singer.name);
	printf("请输入歌手编号\n");
	scanf("%d",&singer.snumber);
	printf("请输入十个评委的分数\n");
	double core = 0,sum = 0,k;
	for(k = 1;k <= 10; k ++)
	{
		printf("第%.0lf位评委的评分为:\n",k);
		scanf("%lf",&core);
		sum += core;			
	}
	singer.avecore = sum / 10.00;
	
	singers[cnt ++] = singer; 
	int idx1 = cnt - 1;
	printf("-------------------录入成功!-------------------\n");
	printf("歌手姓名:%s\n",singers[idx1].name);
	printf("歌手编号:%d\n",singers[idx1].snumber);
	printf("歌手均分:%.2lf\n",singers[idx1].avecore);
	//printf("cnt = %d\n",cnt);
	printf("------------------------------------------------\n");
}
void sortcheck(singerinf q[],int l,int r)//按平均分快速排序 
{
	if(l >= r) return;
	int i = l - 1, j = r + 1, x = q[(l + r) / 2].avecore;
	while(i < j)
	{
		do i ++; while(q[i].avecore < x);
		do j --; while(q[j].avecore > x);
		if( i < j) 
		{
			singerinf t = q[i];
			q[i]= q[j];
			q[j]= t;
		}
	}
	sortcheck(q,l,j);
	sortcheck(q,j +1 ,r);
}

void check()
{
	for(int i = 0;i < cnt;i ++)
	{
		printf("-------------------------------\n");
		printf("歌手姓名:%s\n",singers[i].name);
		printf("歌手编号:%d\n",singers[i].snumber);
		printf("歌手均分:%.2lf\n",singers[i].avecore);
		printf("-------------------------------\n");
	}
	printf("排序已完成!\n");
}

void inffind()
{
	printf("---------------------------------\n");
	printf("请输入查询姓名:");
	char fname[LEN];
	scanf("%s",fname);
	for(int i = 0;i < cnt ; i ++)
	{
		if(!strcmp(fname,singers[i].name))
		{
			printf("歌手姓名%s\n",singers[i].name);
			printf("歌手编号%d\n",singers[i].snumber);
			printf("歌手均分%.2lf\n",singers[i].avecore);
			break;
		}
	}
	printf("---------------------------------\n");
}

void savedata()
{
	FILE *fp = NULL;
	fp = fopen("data.txt","wb");
	//写入
	for(int i = 0;i < cnt ; i ++)
	{
		fwrite(&singers[i],sizeof(singerinf),1,fp);
	}
	
	fclose(fp);  
}

void readdata()
{
	FILE *fp = NULL;
	fp = fopen("data.txt","rb");
	
	//读出 
	int i = 0;
	while(!feof(fp))
	{
		fread(&singers[i],sizeof(singerinf),1,fp);
		//printf("name = %s\n",singers[i].name);
		//printf(" i = %d\n",i);
		i ++;
	}
	i --;
	
	cnt = i;
	
	fclose(fp);  	
	printf("读取成功!\n");
}

int main()
{
	menu();
	int op;
	while(1)
	{
		scanf("%d",&op);
		if(op == 1)
		{
			system("cls");
			insingerinf();
			menu();
		}
		else if(op == 2)
		{
			system("cls");
			sortcheck(singers,0,cnt - 1);
			check();
			menu();	
		}
		else if(op == 3)
		{
			system("cls");
			inffind();
			menu();
		}
		else if(op == 4)
		{
			system("cls");
			readdata();
			menu();
		}
		else if(op == 5)
		{
			system("cls");
			savedata();
			menu();
		}
		else if(op == 6)
		{
			break;
		}
		else printf("intput errpr!!\n");
	}
	
	return 0;	
} 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rds.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值