C语言课设歌手比赛系统(大作业)

一、项目简介

对一次歌手比赛的成绩进行管理
输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。

二、任务概述

要求歌手比赛系统实现对学生基本信息(如编号、姓名、性别等)及十个评委的成绩的管理(增加、删除、修改或更新、查询、统计、保存到文件、从文件装载等操作)。

三、功能展示

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、思维导图

在这里插入图片描述

五、程序源码

#include<stdio.h>
#include<stdlib.h>
struct singer/*定义结构体*/ 
{

	int num;
	char name[10];
	float score[20];
	float aver;
	float sum;
	int ord;

}singer[100]; 


void singer_information(int b)
 /*输入选手信息*/ 
{
	int i;




	for(i=1;i<=b;i++)
	{
		printf("请输入选手编号:");
		scanf("%d",&singer[i].num);
		printf("请输入选手姓名:");
		scanf("%s",&singer[i].name);
	} 
}


int singer_score(int b)    
{
	int j,c;
	float a[50];
	for(j=1;j<=b;j++)
			{
				printf("\n请输入评委1对歌手%d的打分",j);
				scanf("%f",&singer[j].score[1]);
				printf("请输入评委2对歌手%d的打分",j);
				scanf("%f",&singer[j].score[2]);
				printf("请输入评委3对歌手%d的打分",j);
				scanf("%f",&singer[j].score[3]);
				printf("请输入评委4对歌手%d的打分",j);
				scanf("%f",&singer[j].score[4]);
				printf("请输入评委5对歌手%d的打分",j);
				scanf("%f",&singer[j].score[5]);
				printf("请输入评委6对歌手%d的打分",j);
				scanf("%f",&singer[j].score[6]);
				printf("请输入评委7对歌手%d的打分",j);
				scanf("%f",&singer[j].score[7]);
				printf("请输入评委8对歌手%d的打分",j);
				scanf("%f",&singer[j].score[8]);
				printf("请输入评委9对歌手%d的打分",j);
				scanf("%f",&singer[j].score[9]);
				printf("请输入评委10对歌手%d的打分",j);
				scanf("%f",&singer[j].score[10]);
				a[j]=singer[j].score[1]+singer[j].score[2]+singer[j].score[3]+singer[j].score[4]+singer[j].score[5]+singer[j].score[6]+singer[j].score[7]+singer[j].score[8]+singer[j].score[9]+singer[j].score[10];
				singer[j].sum=a[j];
			}
				
}


int singer_grade(int b)/* 歌手总成绩 */
{
	int a,c;
	float n[50],max,min;
	for(a=1;a<=b;a++)
	{
		max=singer[a].score[1];
		min=singer[a].score[1];
		for(c=1;c<=10;c++)
			{
				if(max<singer[a].score[c])   max=singer[a].score[c];
				if(min>singer[a].score[c])   min=singer[a].score[c];
			}
		n[a]=(singer[a].sum-max-min)/8.0;
		singer[a].aver=n[a];		
	}		
}



int order(int b)/*成绩排序*/ 
{
	int j,t,i;

		for(i=1;i<=b;i++)
				{
				for(j=1,t=1;j<=b;j++)
				{
				if(singer[i].aver<singer[j].aver)
				{
				t=t+1;
				}
				}
				singer[i].ord=t;
				}
				for(i=1;i<=b;i++)
				{
					for(j=1;j<=b;j++)
					{
						if(i==singer[j].ord)
							printf("%s是第%d     得分为%15.2f\n",singer[j].name,i,singer[j].aver);
					}
					printf("\n\n\n");
				}
			
}



int search(int c)/*数据查询*/ 
{
	printf("所查选手的数据:编号%d    姓名%s   平均成绩%f   总成绩%f\n",singer[c].num,singer[c].name,singer[c].aver,singer[c].score[c]);	
} 

 
 
 int addition(int i)/*数据追加*/
 {
	 printf("请输入选手编号及姓名:");
	scanf("%d,%s/n",&singer[i+1].num,&singer[i+1].name);
	
	printf("请输入评委1对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[1]);
	printf("请输入评委2对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[2]);
	printf("请输入评委3对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[3]);
	printf("请输入评委4对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[4]);
	printf("请输入评委5对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[5]);
	printf("请输入评委6对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[6]);
	printf("请输入评委7对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[7]);
	printf("请输入评委8对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[8]);
	printf("请输入评委9对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[9]);
	printf("请输入评委10对歌手%d的打分",i+1);
	scanf("%d",&singer[i+1].score[10]);
 }




main()
{
	int a,b,c,i,n=1;
	FILE *fp;
	fp = fopen("歌手.txt","wt+");
	
	 printf("     歌手比赛系统   \n");
	 printf("*********************\n");
     printf("* 1)输入选手数据   *\n"); 
     printf("* 2)评委打分       *\n");
     printf("* 3)成绩排序       *\n");
     printf("* 4)数据查询       *\n");
     printf("* 5)追加学生数据   *\n");
     printf("* 6)写入数据文件   *\n");      
     printf("* 7)退出系统       *\n");
     printf("*********************\n");
	while(n)
	{
	printf("你想进行的操作: ");
	scanf("%d",&a);
	printf("\n\n");
	switch(a)
	{
		case 1: 
				printf("你想进行的操作:输入选手数据\n "); 
				printf("请输入选手个数");
				scanf("%d",&b);
				singer_information(b);
				printf("----------------------\n");
			
		break;
		case 2: 
				printf("你想进行的操作:评委打分\n ");
				singer_score(b);
				printf("-----------------------\n");
				
		 break;
		case 3:  
				printf("你想进行的操作:成绩排序(按平均分)\n ");
				singer_grade(b);
				order(b);
				printf("-------------------------\n");
				
		  break;
		case 4:
				printf("你想进行的操作:数据查询\n ");
				 printf("请输入要查询选手编号:"); 
		 		scanf("%d",&c);
		 		printf("所查选手的数据:编号%d    姓名%s   平均成绩%f   总成绩%f\n",singer[c].num,singer[c].name,singer[c].aver,singer[c].sum);
	 			
				printf("--------------------------\n");
		  break;
		case 5:
				printf("你想进行的操作:追加学生数据\n ");  
			   addition(b);
			   	printf("---------------------------\n");
				
		  break;
		case 6: 
				printf("你想进行的操作:写入数据文件\n ");
				printf("将数据写入文件中:\n");
        		for (i = 0 ; i <=b ; i++)
        		{
            		fprintf(fp,"%d ",singer[i].num);
            		fprintf(fp,"%s ",singer[i].name);
            		fprintf(fp,"%d\n",singer[i].aver);
       			 }
		 break;
		case 7: exit(0);
		default :printf("输入错误请重新输入!\n");
	}
	}
}
  • 61
    点赞
  • 300
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kui954

感谢各位的支持o(* ̄3 ̄)o

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

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

打赏作者

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

抵扣说明:

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

余额充值