运动会分数统计

这是一个用于输入、管理和统计运动会分数的C++程序。它能记录多个学校和多个项目的分数,并支持录入、查看和排序功能。用户可以输入项目成绩,选择按学校编号或团体总分排序,还能查询特定项目的成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h> 
#include <malloc.h> 
#include <stdlib.h> 
#include <iostream> 
#include <string>
using namespace std;

int n,b,m,w,i,j; 
char school_name[20][30];
char sport_name[100][30];

struct node 
{ 
    int num; 
}; 

struct node *f[22]; 

void exit() 
{ 
    FILE *fp; 
    
	if((fp=fopen("score.txt","w"))==NULL) 
    { 
        cout<<"打开文件失败!"<<endl;
    } 
    
    fprintf(fp,"%d\t%d\t%d\t\n",n,m,w);
    
    for (int x = 0; x < n; x++) {
    	fprintf(fp,"%s\t",school_name[x]);
    }
    fprintf(fp,"\n");
    
    for (int y = 0; y < m + w; y++) {
    	fprintf(fp,"%s\t",sport_name[y]);
    }
    fprintf(fp,"\n");
    
    for(i = 0; i <= m+w; i++) {
		fprintf(fp,"%d\t",i); 
    }
    fprintf(fp,"\n");
    for(i = 1; i <= n; i++) 
    { 
        fprintf(fp,"%d\t",i); 
        for(b = 1; b <= m + w; b++) 
        { 
            fprintf(fp,"%d\t",f[i][b].num); 
        } 
        fprintf(fp,"\n"); 
    } 
    
    cout<<endl<<"\t比赛成绩已保存到当前路径下的“score.txt“文件中"<<endl; 
    fclose(fp); 
    //exit(1); 
} 

int loadFile()
{
	FILE *fl;
	int k; 
	int flag = 1;
    A:
	if((fl=fopen("score.txt","r"))==NULL) 
    { 
        cout<<endl<<"\t初次进入系统!"<<endl;
        flag = 0;
        return flag;
    } else {
		fscanf(fl,"%d%d%d",&n,&m,&w); 
		
		for (int x = 0; x < n; x++) {
    		fscanf(fl,"%s",&school_name[x]);
	    }
	    
	    for (int y = 0; y < m + w; y++) {
	    	fscanf(fl,"%s",&sport_name[y]);
	    }
		
		int i, j;
		for(i=0;i<=n;i++) 
 		{ 
	  		f[i]=(struct node *)malloc(sizeof(struct node)*(m + w + 3)); 
	    	for(j = 0; j <= m + w + 2; j++) {
	     		f[i][j].num = 0; 
	      	}
   		} 
   		
		for(i = 0; i <= m + w; i++) {
			fscanf(fl,"%d",&j); 
	    }
	    
	    
		for(i = 1; i <= n; i++) 
	    { 
	        fscanf(fl,"%d",&j); 
	        int sum  = 0;
	        for(b = 1; b <= m + w; b++) 
	        { 
	            fscanf(fl,"%d",&j); 
	            f[i][b].num = j;
				sum += j; 
	        }
	        f[i][0].num = sum;
	        int sum1 = 0;
	        for (int j = 1; j <= m; j++) {
        		sum1 += f[i][j].num ;
        	}
        	f[i][m + w + 1].num = sum1;
        	int sum2 = sum - sum1;
        	f[i][m + w + 2].num = sum2;
	    } 
  		
	    
	} 
    
	fclose(fl);
	return flag;
}

void input() 
{ 
    int ab,ac,ae,af,g=1,get[5]={0,0,0,0,0}; 
    printf("\n\t请输入项目代号:\t"); 
    
    while (true) {
    	if (scanf("\t%d",&ab) != 1) {
	    	cout<<"\n\t非法字符!重新输入:\t";
    	    fflush(stdin);
	    	continue;
	    }
	    if(ab > m + w || ab < 1) 
    	{ 
   			printf("\n\t此项目代号不存在,重新输入:\t"); 
   			fflush(stdin);
     	} else {
    		break;
     	} 	
    }
	
 	ae = 0; 
 	
  	for(i = 0; i <= n; i++) 
   	{ 
    	if(f[i][ab].num != 0) 
     	{ 
      		ae = 1; 
        	break; 
         } 
     } 

	if(ae == 1) 
 	{ 
	     printf("\n\t此项目成绩曾经已被录入过!\n"); 
	  	 return ;
 	}
 	
    while (true) {
    	printf("\t选择评分标准:(3.前三名,5.前五名):\t"); 
            
            //scanf("%d",&ac); 
			
			while (true) {
				if (scanf("%d",&ac) != 1) {
					cout<<"\n\t非法字符!重新输入:\t";
					fflush(stdin);
					continue;
				} else {
					break;
				} 	
			}
            
            if(ac==3) 
            { 
                printf("\n\t请依次输入获胜学校代号:\t"); 
                af=5; 
                for(i=0;i<3;i++) 
                { 
                   alq: //scanf("\t%d",&ae);
						while (true) {
							if (scanf("\t%d",&ae) != 1) {
								cout<<"\n\t非法字符!重新输入:\t";
								fflush(stdin);
								continue;
							} else {
								break;
							} 	
						}
						
                        if(ae > n || ae < 1) 
                        {
                            printf("%d\t学校代号不存在,重新输入第%d名的学校代号:\n",ae,g); 
                            goto alq; 
                        } 
                        for(b = 0;b < 5; b++) 
                        { 
                            if(ae == get[b]) 
                            { 
                                printf("\t同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!!!\n",g); 
                                goto alq; 
                            } 
                            else 
                                get[b] = ae; 
                        } 
                        f[ae][0].num = f[ae][0].num + af; 
                        f[ae][ab].num=af; 
                        if(ab <= m) 
                            f[ae][m+w+1].num = f[ae][m+w+1].num+af; 
                        else 
                            f[ae][m+w+2].num = f[ae][m+w+2].num+af; 
                        if(af>3) 
                            af = af-2; 
                        else 
                            af--; 
                        g++; 
                } 
                break;
            } 
            
            if(ac == 5) 
            { 
                printf("\t请依次输入获胜学校代号:\t"); 
                af = 7; 
                for(i=0;i<5;i++) 
                { 
                    alw: //scanf("\t%d",&ae); 
						while (true) {
							if (scanf("\t%d",&ae) != 1) {
								cout<<"\n\t非法字符!重新输入:\t";
								fflush(stdin);
								continue;
							} else {
								break;
							} 	
						}
                         if(ae>n||ae<1) 
                         { 
                             printf("\t%d学校代号不存在,重新输入第%d名的学校代号\n",ae,g); 
                             goto alw; 
                         }

                         for(b=0;b<5;b++) 
                         { 
                             if(ae==get[b]) 
                             { 
                                 printf("\t同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!!!\n",g); 
                                 goto alw; 
                             } 
                             else 
                                 get[b]=ae; 
                         } 
                         f[ae][0].num=f[ae][0].num+af; 
                         f[ae][ab].num=af; 
                         if(ab<=m) 
                             f[ae][m+w+1].num=f[ae][m+w+1].num+af; 
                         else 
                             f[ae][m+w+2].num=f[ae][m+w+2].num+af; 
                         if(af>3) 
                             af=af-2; 
                         else
                             af--; 
                         g++; 
                         
                } 
                break;
    		} 
    }
    printf("\n\t>>输入完成 !\n"); 
} 

void number_() 
{ 
    printf("\n项目代号"); 
    for(i=1;i<=m+w;i++) 
    { 
        if(i>9) 
            printf("%6d",i); 
        else 
            printf("%6d",i); 
    } 
    printf("\n学校代号\n");
    for(i=1;i<=n;i++) 
    { 
        printf("%d\t",i); 
        for(b=1;b<=m+w;b++) 
        { 
            if(f[i][b].num>9) 
                printf("%6d",f[i][b].num); 
            else 
                printf("%6d",f[i][b].num); 
        } 
        printf("\n"); 
    } 
    printf("\t表格中 (0~%d)是男子项目 (%d~%d)是女子项目!\n", m, w, m + w);
} 

void sum_() 
{ 
    struct nod 
    { 
        int ke; 
        int num; 
    }; 

    struct nod *de; 
    de=(struct nod *)malloc(sizeof(struct nod)*n + 1); 
    printf("\n\t按学校编号排序输出\n\n"); 
    printf("\t学校代号\t总分\n\n"); 
    
	for(i = 1; i <= n; i++)
    { 
        de[i].ke = i; 
        de[i].num = f[i][0].num; 
    } 
    
    for(i = 1; i <= n - 1; i++)  
    { 
        for(b = i; b <= n; b++) 
        { 
            if(de[b].num > de[i].num) 
            { 
                int temp = de[b].ke; 
                de[b].ke = de[i].ke;
                de[i].ke = temp; 
                
                temp = de[b].num; 
                de[b].num = de[i].num; 
                de[i].num = temp; 
            } 
        } 
    }
    
    for(i=1;i<=n;i++) 
    { 
        printf("\t%d\t%d\n",de[i].ke,de[i].num); 
    }
} 

 void sport_boy() 
 { 
     struct nod 
     { 
         int ke; 
         int num; 
     }; 
     
     struct nod *de; 
     de=(struct nod *)malloc(sizeof(struct nod)*n+1); 
     printf("\n\t按男子团体总分排序输出\n\n"); 
     printf("\t学校代号\t男子团体总分\n\n"); 
     for(i = 1;i <= n; i++) 
     { 
         de[i].ke = i; 
         de[i].num = f[i][m+w+1].num; 
     } 
     for(i = 1; i <= n - 1;i++) 
     { 
         for(b = i; b <= n;b++) 
         {  
             if(de[b].num>de[i].num) 
             { 
                 int temp = de[b].ke; 
                 de[b].ke = de[i].ke; 
                 de[i].ke = temp; 
                 
                 temp = de[b].num; 
                 de[b].num = de[i].num; 
                 de[i].num = temp; 
             } 
         } 
     } 

     for(i = 1; i <= n; i++) 
     { 
         printf("%13d%12d\n",de[i].ke,de[i].num); 
     } 
 } 

void sport_girl() 
{ 

    struct nod 
    { 
        int ke; 
        int num; 
    }; 

    int ha; 
    struct nod *de; 
    de=(struct nod *)malloc(sizeof(struct nod)*n+1); 
    printf("\t按女子团体总分排序输出\n\n"); 
    printf("\t学校代号\t女子团体总分\n\n"); 
    for(i=1;i<=n;i++) 
    { 
        de[i].ke=i; 
        de[i].num=f[i][m+w+2].num; 
    } 

    for(i = 1; i <= n - 1; i++) 
    { 
        for(b = i; b <= n; b++) 
        { 
            if(de[b].num > de[i].num) 
            { 
                int temp = de[b].ke; 
                de[b].ke=de[i].ke; 
                de[i].ke=temp; 
                
                temp=de[b].num; 
                de[b].num=de[i].num; 
                de[i].num=temp; 
            } 
        } 
    } 

    for(i=1;i<=n;i++) 
    { 
        printf("%15d%13d\n",de[i].ke,de[i].num); 
    } 

} 

void school_num() 
{ 

    int school,sport; 
    cout<<endl<<"\t请输入您要查询的学校代号:\t"; 
	while (true) {
		//cin>>school;
		while (true) {
			if (scanf("\t%d",&school) != 1) {
				cout<<"\n\t非法字符!重新输入:\t";
				fflush(stdin);
				continue;
			} else {
				break;
			} 	
		}
		
	    if(school > n || school < 1) 
	    { 
	        cout<<"\t学校代号不存在,重新输入:\t"; 
	        continue ; 
	    } 
	    break;
	}
	
    cout<<endl;
    
    cout<<"\t请输入您要查询的项目代号:\t"; 

	while (true) {
		//cin>>sport; 
		while (true) {
			if (scanf("\t%d",&sport) != 1) {
				cout<<"\n\t非法字符!重新输入:\t";
				fflush(stdin);
				continue;
			} else {
				break;
			} 	
		}
	    if(sport > m + w || sport < 1) 
	    { 
	        cout<<"\t项目代号不存在,重新输入:\t";; 
	        continue ;  
	    } 
	    break;
	}
	
    printf("\n\n\t%d\t学校的\t%d\t项目成绩为\t%d\n",school,sport,f[school][sport].num); 
} 

void sport_num() 
{ 

    int ge,sedy=0; 
    cout<<endl<<"\t请输入您要查询的项目代号:"; 
    all:
    	//cin>>ge;
		while (true) {
			if (scanf("\t%d",&ge) != 1) {
				cout<<"\n\t非法字符!重新输入:\t";
				fflush(stdin);
				continue;
			} else {
				break;
			} 	
		}
        if(ge > m + w || ge < 1) 
        { 
            printf("\t没有此项目代号,重新输入\n"); 
            goto all; 
        } 

        for(i = 1; i <= n; i++) 
        { 
            if(f[i][ge].num != 0) {
            	sedy = 1; 
            	break;
            }
        } 

        if(sedy == 0) 
        { 
            printf("\t此项目没有录入成绩\n");
            return; 
        }
        
        
        for(i = 1; i <= n; i++) 
        { 
            if(f[i][ge].num == 7) 
            { 
                printf("\t此项目取前5名获奖者\n"); 
                break; 
            } 
        } 

        if(i == n + 1) {
        	printf("\t此项目取前3名获奖者\n"); 
        }
        printf("\n\t获胜名单由成绩高到低依次为:\n\n"); 
        for(i = 7; i > 0; i--) 
        { 
            for(b = 1; b <= n; b++) 
            { 
                if(f[b][ge].num == i) {
                	printf("\t%d",b); 	
                }
            } 
        } 

} 


int choose() 
{ 
    int choose_; 
    cout<<endl<<"\t*********************************************************";
    cout<<endl<<"\t*\t1.输入成绩					*"; 
    cout<<endl<<"\t*\t2.按学校编号排序输出				*"; 
    cout<<endl<<"\t*\t3.按学校总分排序输出				*"; 
    cout<<endl<<"\t*\t4.按男团体总分排序输出				*"; 
    cout<<endl<<"\t*\t5.按女团体总分排序输出				*";
    cout<<endl<<"\t*\t6.按学校编号查询学校某个项目的成绩		*";  
    cout<<endl<<"\t*\t7.按项目编号查询取得前三或前五名的学校		*";  
    cout<<endl<<"\t*\t0.退出						*";  
    cout<<endl<<"\t*********************************************************"<<endl;
    cout<<endl<<"\t请选择:\t"; 
    //cin>>choose_;
	while (true) {
			if (scanf("\t%d",&choose_) != 1) {
				cout<<"\n\t非法字符!重新输入:\t";
				fflush(stdin);
				continue;
			} else {
				break;
			} 	
		}
    return (choose_ ); 
} 

int main() 
{ 
		cout<<endl<<"\t*  *  *  *  *  *  *   运动会分数统计  *  *  *  *  *  *  *"<<endl; 
       cout<<endl;
       int flag = loadFile(); 
       if (n != 0) {
       		cout<<"\t上次统计结果为:"<<endl;
  			cout<<"\t共有"<<n<<"个学校:"<<endl;
       		for (int x = 0; x < n; x++) {
		       	printf("\t%d\t%s\n",x + 1, &school_name[x]);
		       }
     		cout<<"\t共有"<<m<<"个男子组项目:"<<endl;;
       		for (int y = 0; y < m; y++) {
		       	printf("\t%d\t%s\n",y + 1, &sport_name[y]);
		       }
		    cout<<"\t共有"<<w<<"个女子组项目:"<<endl;
       		for (int z = 0; z < w; z++) {
		       	printf("\t%d\t%s\n",z + 1, &sport_name[z + m]);
		       }
       }
       
  	   if (flag == 0) {
  	   		cout<<"\t输入参赛学校个数(5 - 20):\t"; 
       		//cin>>n;
       		while (true) {
				if (scanf("\t%d",&n) != 1) {
					cout<<"\n\t非法字符!重新输入:\t";
					fflush(stdin);
					continue;
				} else {
					break;
				} 	
			}
	       while(n < 5 || n > 20) 
	       { 
	           if(n <= 5) 
	           { 
	               cout<<endl<<"\t参赛学校个数不能小于5个!!!"<<endl; 
	               cout<<"\t输入参赛学校个数(5 - 20):\t"; 
	    		   //cin>>n; 
				   while (true) {
						if (scanf("\t%d",&n) != 1) {
							cout<<"\n\t非法字符!重新输入:\t";
							fflush(stdin);
							continue;
						} else {
							break;
						} 	
					}
	           } else { 
	               cout<<endl<<"\t参赛学校个数不能大于20!!!!"<<endl; 
	               cout<<"\t输入参赛学校个数(5 - 20):\t"; 
	               //cin>>n;
				   while (true) {
						if (scanf("\t%d",&n) != 1) {
							cout<<"\n\t非法字符!重新输入:\t";
							fflush(stdin);
							continue;
						} else {
							break;
						} 	
					}
	           } 
			} 
			
       		for (int x = 0; x < n; x++) {
       			cout<<"学校"<<(x + 1)<<":\t";
	    	   	scanf("%s",&school_name[x]);
	        }
	      
	       while (true) {
	       		while (true) {
		       		cout<<"\t输入参赛男子组个数:\t";
		       		//cin>>m;
					while (true) {
						if (scanf("\t%d",&m) != 1) {
							cout<<"\n\t非法字符!重新输入:\t";
							fflush(stdin);
							continue;
						} else {
							break;
						} 	
					}
		       		if (m >= 0) {
				       	break;	
		    		}
					cout<<"error!!!"<<endl;
				}
	       
	       		while (true) {
	       			cout<<"\t输入参赛女子组个数:\t";
	       			//cin>>w;
					while (true) {
						if (scanf("\t%d",&w) != 1) {
							cout<<"\n\t非法字符!重新输入:\t";
							fflush(stdin);
							continue;
						} else {
							break;
						} 	
					}
	       			if (w >= 0) {
			      	 	break;	
		      	 	}
				    cout<<"error!!!"<<endl;
	       		}
	       		if (!(m == 0 && w == 0)) {
	   				break;	
	       		}
	       		cout<<"\t参赛男女组数不可同时为 0 !\n"<<endl;
	       }
  	   		
		   
  		   for (int y = 0; y < m; y++) {
  		   		cout<<"男子项目"<<(y + 1)<<":\t";
   		  		scanf("%s",&sport_name[y]);
   		   }
   		   cout<<endl; 
   		   for (int z = 0; z < w; z++) {
  		   		cout<<"女子项目"<<(z + 1)<<":\t";
   		  		scanf("%s",&sport_name[z + m]);
   		   }
   		   
	       for(i=0;i<=n;i++) 
	       { 
	           f[i]=(struct node *)malloc(sizeof(struct node)*(m + w + 3)); 
	           for(j = 0; j<=m + w + 2; j++) {
	               f[i][j].num=0; 
	           }
	       } 
   	   } 
		
       bool _flag = true;
       int choose_; 
       while (_flag) {
     	 	choose_ = choose();
     	 	switch (choose_) {
     	 		case 1:	{	input(); break;}
 	     		case 2:	{	number_(); break;}
 	     		case 3:	{	sum_(); break;}
 	     		case 4:	{	sport_boy(); break;}
 	     		case 5:	{	sport_girl(); break;}
 	     		case 6:	{	school_num(); break;}
 	     		case 7:	{	sport_num(); break;}
 	     		case 0:	{
				  
				  	system("cls");	
				  	exit(); 
				  	_flag = false;
				  	break;
					  }
 	     		default :
 	     			cout<<"\t重新选择!!!"<<endl;
 	     			break; 
	 	     }
       }
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值