lllyyy150893
lllyyy150893
采纳率0%
2021-06-11 16:20 浏览 12

歌手大赛系统文件录入和打开等问题

a在录入文件遇到了困难

b,在网上有找个,但并不能解决

#include<stdio.h>
#include<stdlib.h>
#define N 10
void s()
{
	printf("               校园歌手比赛管理系统\n"); 
	printf("--------------------------------------------------\n");
	printf("1、输入选手姓名\n2、评委评分\n3、计算平均分\n4、排名\n5、写入数据文件\n6、打开文件\n7、退出系统\n");//基本功能要求
	printf("--------------------------------------------------\n") ;	
}
struct singer
{
	int paiming;//排名 
	char name[20];//姓名 
}singer[20];
struct score//十个评委打分 
{
	int score[10];
	int n1;
	int n2;
	int n3;
	int n4;	
	int n5;	
	int n6;	
	int n7;	
	int n8;
	int n9;	
	int n10;
}score[10];
int main(){
	s();
	FILE *fp;
	char a;
	printf("选择将要进行的操作:");
	start:
	scanf("%c",&a);
	int x,i=1,y,z; 
	switch(a){
	case '1':
	system("cls");
	printf("输入选手的个数(10个以内)\n");	
	scanf("%d",&x);
	int sum[10];
	int max[10],min[10];
	float b[10];
	for(i=1;i<=x;i++)
	{
		sum[i]=0;
		max[i]=0;
		min[i]=100;
	} 
	printf("输入选手的姓名\n");
	for(i=1;i<=x;i++)
	{
	 	scanf("%s",&singer[i].name); 
	}
	//goto start;
	break;
	case '2':
	system("cls");
	for(y=1;y<=x;y++){ 
	printf("评委为十个选手打分(1~100)\n"); 
	printf("\n输入第一个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n1);
	printf("\n输入第二个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n2);
	printf("\n输入第三个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n3);
	printf("\n输入第四个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n4);
	printf("\n输入第五个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n5);
	printf("\n输入第六个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n6);
	printf("\n输入第七个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n7);
	printf("\n输入第八个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n8);
	printf("\n输入第九个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n9);
	printf("\n输入第十个评委对歌手%d的评分",y);
	scanf("%d",&score[y].n10);
	sum[y]=sum[y]+score[y].n1+score[y].n2+score[y].n3+score[y].n4+score[y].n5+score[y].n6+score[y].n7+score[y].n8+score[y].n9+score[y].n10;
}
	printf("%d\n",sum[y]);
	printf("\n\n");
	//goto start;
	break;
	case '3':{
	system("cls");
	int ave[10];
	for(y=1;y<=x;y++){//求出最高分 
		max[y]=(max[y]>score[y].n1)?max[y]:score[y].n1;
		max[y]=(max[y]>score[y].n2)?max[y]:score[y].n2;
		max[y]=(max[y]>score[y].n3)?max[y]:score[y].n3;
		max[y]=(max[y]>score[y].n4)?max[y]:score[y].n5;
		max[y]=(max[y]>score[y].n6)?max[y]:score[y].n6;
		max[y]=(max[y]>score[y].n7)?max[y]:score[y].n7;
		max[y]=(max[y]>score[y].n8)?max[y]:score[y].n8;
		max[y]=(max[y]>score[y].n9)?max[y]:score[y].n9;
		max[y]=(max[y]>score[y].n10)?max[y]:score[y].n10;
	}
	for(y=1;y<=x;y++){//求出最低分 
		min[y]=(min[y]<score[y].n1)?min[y]:score[y].n1;
		min[y]=(min[y]<score[y].n2)?min[y]:score[y].n2;
		min[y]=(min[y]<score[y].n3)?min[y]:score[y].n3;
		min[y]=(min[y]<score[y].n4)?min[y]:score[y].n4;
		min[y]=(min[y]<score[y].n5)?min[y]:score[y].n5;
		min[y]=(min[y]<score[y].n6)?min[y]:score[y].n6;
		min[y]=(min[y]<score[y].n7)?min[y]:score[y].n7;
		min[y]=(min[y]<score[y].n8)?min[y]:score[y].n8;
		min[y]=(min[y]<score[y].n9)?min[y]:score[y].n9;
		min[y]=(min[y]<score[y].n10)?min[y]:score[y].n10;
	}
	for(y=1;y<=x;y++){
		ave[y]=(sum[y]-max[y]-min[y])/8;//用总分减去十个评委中给出的最高分和最低分;然后除去八,即可求出平均分 
		printf("第%d位歌手的平均分是%5.2f\n",y,ave[y]);
	}
	printf("\n\n");
	//goto start;
	break;
	case '4':
	system("cls");
	for(i=1;i<=x;i++){
		for(y=1,z=1;y<=x;y++){
			if(ave[i]<ave[y])
			z=z+1;	
		}
		singer[i].paiming=z;
		 }
		 for(y=1;y<=x;y++){
		 	if(i==singer[y].paiming)
		 	printf("%s是第%d名,得分为%5.2f\n",singer[y].name,i,ave[y]);
		 }
		 printf("\n\n");
	//goto start; 	 
	break;
	case '5':
	system("cls");
	if((fp=fopen("C:\Users\ly\Desktop\c语言大作业.dat","wb"))==NULL)
	{
		printf("不能打开文件\n");
		}
	for(i==1;i<=x;i++)
	fwrite(&singer[i],sizeof(struct singer),1,fp);
	flcose(fp);
	printf("保存成功\n");
	//goto start;
	break;
	case '6':
	system("cls");
	printf("输入选手的个数(不能超过之前已保存信息的人数)/n");
	scanf("%d",&x);
	if((fp=fopen("C:\Users\ly\Desktop\c语言大作业.dat","rb"))==NULL)
	{
		printf("不能打开文件\n");
	}
	for(i=1;i<=x;i++)
	{
	fread(&singer[i],sizeof(struct singer),1,fp);
	printf("%s的排名为%d\n",singer[i].name,singer[i].paiming); 
}
	fclose(fp);
	//goto start;
	break;
	case '7':exit(0);
}
	return 0;
}

希望帮我斧正,或者别的提升也可以

使用的编译器是Dev-c++版本是

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • software7503 CSDN专家-赖老师(软件之家) 2021-06-11 16:22
    #include <stdio.h>
    
    /*
    	设计一个“卡拉OK大赛评分系统”
        本程序启动后,会提示“卡拉OK大赛正式开始”,然后请10位裁判分别打分,
    	最后去掉一个最高分和一个最低分,将其余分数的平均分作为选手的最后得分
    */ 
    void main(){
    	float a[10]; //保存10个评委的分数 
    	int i;
    	float max;//保存最高分
    	float min;//保存最低分
    	float avg=0;//保存10个评委的平均分
    	//显示界面
    	printf("\t\t\t*****************************************************\n");
    	printf("\t\t\t*                                                   *\n");
    	printf("\t\t\t*               卡拉OK大赛评分系统                  *\n");
    	printf("\t\t\t*                                                   *\n");
    	printf("\t\t\t*****************************************************\n");
    	 
    	//1.输入10个评委的分数
    	for(i=0;i<10;i++){
    		printf("\t\t\t请输入第%d个评委的打分:",i+1);
    		//获取从键盘输入的分数 
    		scanf("%f",&a[i]);
    	} 
    	//2.对max,min赋初值
    	max = a[0];
    	min = a[0]; 
    	avg = a[0];
    	//3.求最高分,最低分,总分
    	for(i=1;i<10;i++){
    		//求最高分
    		if(max<a[i]){
    			max = a[i];
    		} 
    		//求最低分
    		if(min>a[i]){
    			min = a[i];
    		} 
    		//求总分
    		avg += a[i]; 
    	} 
    	//求平均分 = (总分-最高分-最低分 )/8
    	avg = (avg - max - min)/8;
    	//4.输出结果
    	printf("去掉一个最高分%0.2f,去掉一个最低分%0.2f,最后得分是:%0.2f",max,min,avg); 
    	 
    } 
    
    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-06-15 17:41

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享

相关推荐