C/C++运动会计分系统

结构体:C 版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 运动员 结构体
    struct Athletes {
                    char name[15] ; // 姓名
                    char gender[8] ; // 性别
                    char item[13] ; // 项目名
                    double score ; // 得分
                    char reward[10] ; // 奖项
                    char college[14] ; // 学院
            };
    //定义全局 运动员 数组
    struct Athletes athletesList [100];
    //定义全局 运动员 数组栈指针
    int athletesCount = 0;
    
        //运动员 读入文件
    void readAthletes ();
    //运动员 写入文件
    void writeAthletes ();
    //运动员 添加记录
    void addAthletes ();
        //运动员 删除记录
    void delAthletes ();
    //运动员 根据下标删除
    int delAthletesByIndex (int index);
    //运动员 修改记录
    void modAthletes ();
    //运动员 查找记录
    void findAthletes (int all);
    //运动员 排序
    void sortAthletes ();
    //交换
    void exchangeAthletes (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readAthletes ();//读取运动员
                while(1){
                        int choice;
                                    menu ();
                scanf("%d",&choice);
        switch(choice){
                                        case 1 :
                            addAthletes ();//添加运动员
                break;
                                                    case 2 :
                            findAthletes (1);//查找运动员
                                delAthletes ();//删除运动员
                break;
                                                    case 3 :
                            findAthletes (1);//查找运动员
                                modAthletes ();//修改运动员
                break;
                                                    case 4 :
                            findAthletes (0);//查找运动员
                break;
                            case 5 :
                            sortAthletes ();//排序运动员
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//运动员 读入文件
void readAthletes (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Athletes.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%lf%s%s"
								 ,athletesList[i].name  ,athletesList[i].gender  ,athletesList[i].item  ,&athletesList[i].score  ,athletesList[i].reward  ,athletesList[i].college 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	athletesCount = i;
	fclose(fp);
}
	//运动员 写入文件
void writeAthletes (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Athletes.txt", "w+");
	for( i = 0;i< athletesCount ;i++){
		fprintf(fp,"%s %s %s %lf %s %s\n"
				 ,athletesList[i].name  ,athletesList[i].gender  ,athletesList[i].item  ,athletesList[i].score  ,athletesList[i].reward  ,athletesList[i].college );
	}
	fclose(fp);
}
	//运动员 添加记录
void addAthletes (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入姓名 :");    				char name[15]; 				            scanf("%s",name);
    									strcpy(athletesList [ athletesCount ] . name,name);
																											 				            printf("请输入性别 :");    				char gender[8]; 				            scanf("%s",gender);
    									strcpy(athletesList [ athletesCount ] . gender,gender);
																											 				            printf("请输入项目名 :");    				char item[13]; 				            scanf("%s",item);
    									strcpy(athletesList [ athletesCount ] . item,item);
																											 				            printf("请输入得分 :");    				double score; 				            scanf("%lf",&score);
    									athletesList [ athletesCount ] . score = score ;
																											 				            printf("请输入奖项 :");    				char reward[10]; 				            scanf("%s",reward);
    									strcpy(athletesList [ athletesCount ] . reward,reward);
																											 				            printf("请输入学院 :");    				char college[14]; 				            scanf("%s",college);
    									strcpy(athletesList [ athletesCount ] . college,college);
																								//athletesCount 是全局变量
		athletesCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeAthletes ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//运动员 删除
void delAthletes (){
	            printf("请输入您要删除的 运动员 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delAthletesByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeAthletes ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//运动员 根据下标删除
int delAthletesByIndex (int index){
	if(index >= athletesCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < athletesCount - 1 ; i++){
		//元素全部往前移一位。
		athletesList [i] = athletesList [i+1];
	}
	//最后令栈的长度减一
	athletesCount = athletesCount - 1;
	return 1;
}
	//运动员 修改
void modAthletes (){
	            printf("请输入您要修改的运动员 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < athletesCount ){
		//开始修改
					 									            printf("请输入姓名 :");    					char name[15];
					            scanf("%s",name);
    
																																 									            printf("请输入性别 :");    					char gender[8];
					            scanf("%s",gender);
    
																																 									            printf("请输入项目名 :");    					char item[13];
					            scanf("%s",item);
    
																																 									            printf("请输入得分 :");    					double score;
					            scanf("%lf",&score);
    
																																 									            printf("请输入奖项 :");    					char reward[10];
					            scanf("%s",reward);
    
																																 									            printf("请输入学院 :");    					char college[14];
					            scanf("%s",college);
    
																															//输入完毕,赋值
					 									strcpy(athletesList [ indexOfMod ] . name,name);
												 									strcpy(athletesList [ indexOfMod ] . gender,gender);
												 									strcpy(athletesList [ indexOfMod ] . item,item);
												 									athletesList [ indexOfMod ] . score = score ;
												 									strcpy(athletesList [ indexOfMod ] . reward,reward);
												 									strcpy(athletesList [ indexOfMod ] . college,college);
											            printf("修改成功!\n");    		writeAthletes ();
	}else{
		            printf("输入错误!\n");    	}

}
//运动员 查找 如果all=1:查询全部 否则按条件查询
void findAthletes (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-8s%-13s%-12s%-10s%-14s\n\n","序号" ,"姓名","性别","项目名","得分","奖项","学院" );
		if( athletesList ){
			//用于统计信息所用
			int count = 0,i;
																																	double scoreSum=0;
																								for (i = 0;i <  athletesCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(athletesList [i]. name,conCharArr) //根据姓名,模糊查询
																																						|| select == 2 && strstr(athletesList [i]. gender,conCharArr) //根据性别,模糊查询
																																						|| select == 3 && strstr(athletesList [i]. item,conCharArr) //根据项目名,模糊查询
																																																	|| select == 4 && strstr(athletesList [i]. reward,conCharArr) //根据奖项,模糊查询
																																						|| select == 5 && strstr(athletesList [i]. college,conCharArr) //根据学院,模糊查询
																						){
															printf("%-5d%-15s%-8s%-13s%-12lf%-10s%-14s \n\n",i
																			,athletesList [i] . name
													,athletesList [i] . gender
													,athletesList [i] . item
													,athletesList [i] . score
													,athletesList [i] . reward
													,athletesList [i] . college
											);
					//用于统计信息所用
																																																			scoreSum += athletesList [i].score;
																																						count++;
				}else{
					delAthletesByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																																									printf("【得分】总计:%lf 平均:%.2lf\n",scoreSum ,count!=0?scoreSum * 1.0 / count :0);
																													            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 姓名 筛选\n");    												            printf("2:按 性别 筛选\n");    												            printf("3:按 项目名 筛选\n");    																	            printf("4:按 奖项 筛选\n");    												            printf("5:按 学院 筛选\n");    							            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ||select==4 ||select==5 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readAthletes();//从新读取数据。
}
	//运动员 排序
void sortAthletes (){
	int select,i,j;
			            printf("1:按 姓名 排序\n");    			            printf("2:按 性别 排序\n");    			            printf("3:按 项目名 排序\n");    			            printf("4:按 得分 排序\n");    			            printf("5:按 奖项 排序\n");    			            printf("6:按 学院 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = athletesCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(athletesList [j]. name , athletesList [j+1]. name)>0
															|| select == 2 && strcmp(athletesList [j]. gender , athletesList [j+1]. gender)>0
															|| select == 3 && strcmp(athletesList [j]. item , athletesList [j+1]. item)>0
															|| select == 4 && athletesList [j]. score - athletesList [j+1]. score > 0
															|| select == 5 && strcmp(athletesList [j]. reward , athletesList [j+1]. reward)>0
															|| select == 6 && strcmp(athletesList [j]. college , athletesList [j+1]. college)>0
										){
				exchangeAthletes (j,j+1);
			}
		}
	}
	findAthletes (1);
	writeAthletes ();
}
//运动员 交换
void exchangeAthletes (int i,int j){
	struct Athletes athletes = athletesList [i];
	athletesList [i] = athletesList  [j];
	athletesList [j] = athletes ;
}

                void menu (){
        //菜单
                    printf("*------------------主菜单---------------------*\n");                                                    printf("*-------------1 :添加运动员\n");                                                        printf("*-------------2 :删除运动员\n");                                                        printf("*-------------3 :修改运动员\n");                                                        printf("*-------------4 :查找运动员\n");                                printf("*-------------5 :排序运动员\n");                                            printf("*-------------0:退出\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

结构体:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 运动员 结构体
    struct Athletes {
                    char name[15] ; // 姓名
                    char gender[8] ; // 性别
                    char item[13] ; // 项目名
                    double score ; // 得分
                    char reward[10] ; // 奖项
                    char college[14] ; // 学院
            };
    //定义全局 运动员 数组
    struct Athletes athletesList [100];
    //定义全局 运动员 数组栈指针
    int athletesCount = 0;
    
        //运动员 读入文件
    void readAthletes ();
    //运动员 写入文件
    void writeAthletes ();
    //运动员 添加记录
    void addAthletes ();
        //运动员 删除记录
    void delAthletes ();
    //运动员 根据下标删除
    int delAthletesByIndex (int index);
    //运动员 修改记录
    void modAthletes ();
    //运动员 查找记录
    void findAthletes (int all);
    //运动员 排序
    void sortAthletes ();
    //交换
    void exchangeAthletes (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readAthletes ();//读取运动员
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            addAthletes ();//添加运动员
                break;
                                                    case 2 :
                            findAthletes (1);//查找运动员
                                delAthletes ();//删除运动员
                break;
                                                    case 3 :
                            findAthletes (1);//查找运动员
                                modAthletes ();//修改运动员
                break;
                                                    case 4 :
                            findAthletes (0);//查找运动员
                break;
                            case 5 :
                            sortAthletes ();//排序运动员
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//运动员 读入文件
void readAthletes (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Athletes.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%lf%s%s"
								 ,athletesList[i].name  ,athletesList[i].gender  ,athletesList[i].item  ,&athletesList[i].score  ,athletesList[i].reward  ,athletesList[i].college 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	athletesCount = i;
	fclose(fp);
}
	//运动员 写入文件
void writeAthletes (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Athletes.txt", "w+");
	for( i = 0;i< athletesCount ;i++){
		fprintf(fp,"%s %s %s %lf %s %s\n"
				 ,athletesList[i].name  ,athletesList[i].gender  ,athletesList[i].item  ,athletesList[i].score  ,athletesList[i].reward  ,athletesList[i].college );
	}
	fclose(fp);
}
	//运动员 添加记录
void addAthletes (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入姓名 :";
    				char name[15]; 				            cin>>name;
    									strcpy(athletesList [ athletesCount ] . name,name);
																											 				            cout<<"请输入性别 :";
    				char gender[8]; 				            cin>>gender;
    									strcpy(athletesList [ athletesCount ] . gender,gender);
																											 				            cout<<"请输入项目名 :";
    				char item[13]; 				            cin>>item;
    									strcpy(athletesList [ athletesCount ] . item,item);
																											 				            cout<<"请输入得分 :";
    				double score; 				            cin>>score;
    									athletesList [ athletesCount ] . score = score ;
																											 				            cout<<"请输入奖项 :";
    				char reward[10]; 				            cin>>reward;
    									strcpy(athletesList [ athletesCount ] . reward,reward);
																											 				            cout<<"请输入学院 :";
    				char college[14]; 				            cin>>college;
    									strcpy(athletesList [ athletesCount ] . college,college);
																								//athletesCount 是全局变量
		athletesCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeAthletes ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//运动员 删除
void delAthletes (){
	            cout<<"请输入您要删除的 运动员 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delAthletesByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeAthletes ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//运动员 根据下标删除
int delAthletesByIndex (int index){
	if(index >= athletesCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < athletesCount - 1 ; i++){
		//元素全部往前移一位。
		athletesList [i] = athletesList [i+1];
	}
	//最后令栈的长度减一
	athletesCount = athletesCount - 1;
	return 1;
}
	//运动员 修改
void modAthletes (){
	            cout<<"请输入您要修改的运动员 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < athletesCount ){
		//开始修改
					 									            cout<<"请输入姓名 :";
    					char name[15];
					            cin>>name;
    
																																 									            cout<<"请输入性别 :";
    					char gender[8];
					            cin>>gender;
    
																																 									            cout<<"请输入项目名 :";
    					char item[13];
					            cin>>item;
    
																																 									            cout<<"请输入得分 :";
    					double score;
					            cin>>score;
    
																																 									            cout<<"请输入奖项 :";
    					char reward[10];
					            cin>>reward;
    
																																 									            cout<<"请输入学院 :";
    					char college[14];
					            cin>>college;
    
																															//输入完毕,赋值
					 									strcpy(athletesList [ indexOfMod ] . name,name);
												 									strcpy(athletesList [ indexOfMod ] . gender,gender);
												 									strcpy(athletesList [ indexOfMod ] . item,item);
												 									athletesList [ indexOfMod ] . score = score ;
												 									strcpy(athletesList [ indexOfMod ] . reward,reward);
												 									strcpy(athletesList [ indexOfMod ] . college,college);
											            cout<<"修改成功!\n";
    		writeAthletes ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//运动员 查找 如果all=1:查询全部 否则按条件查询
void findAthletes (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-8s%-13s%-12s%-10s%-14s\n\n","序号" ,"姓名","性别","项目名","得分","奖项","学院" );
		if( athletesList ){
			//用于统计信息所用
			int count = 0,i;
																																	double scoreSum=0;
																								for (i = 0;i <  athletesCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(athletesList [i]. name,conCharArr) //根据姓名,模糊查询
																																						|| select == 2 && strstr(athletesList [i]. gender,conCharArr) //根据性别,模糊查询
																																						|| select == 3 && strstr(athletesList [i]. item,conCharArr) //根据项目名,模糊查询
																																																	|| select == 4 && strstr(athletesList [i]. reward,conCharArr) //根据奖项,模糊查询
																																						|| select == 5 && strstr(athletesList [i]. college,conCharArr) //根据学院,模糊查询
																						){
															printf("%-5d%-15s%-8s%-13s%-12lf%-10s%-14s \n\n",i
																			,athletesList [i] . name
													,athletesList [i] . gender
													,athletesList [i] . item
													,athletesList [i] . score
													,athletesList [i] . reward
													,athletesList [i] . college
											);
					//用于统计信息所用
																																																			scoreSum += athletesList [i].score;
																																						count++;
				}else{
					delAthletesByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																																									cout<<"【得分】" << "总计:"<<scoreSum<<" "  <<"平均:"<<  (count!=0?scoreSum*1.0/count:0)<<"\n";
																													            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 姓名 筛选\n";
    												            cout<<"2:按 性别 筛选\n";
    												            cout<<"3:按 项目名 筛选\n";
    																	            cout<<"4:按 奖项 筛选\n";
    												            cout<<"5:按 学院 筛选\n";
    							            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ||select==4 ||select==5 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readAthletes();//从新读取数据。
}
	//运动员 排序
void sortAthletes (){
	int select,i,j;
			            cout<<"1:按 姓名 排序\n";
    			            cout<<"2:按 性别 排序\n";
    			            cout<<"3:按 项目名 排序\n";
    			            cout<<"4:按 得分 排序\n";
    			            cout<<"5:按 奖项 排序\n";
    			            cout<<"6:按 学院 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = athletesCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(athletesList [j]. name , athletesList [j+1]. name)>0
															|| select == 2 && strcmp(athletesList [j]. gender , athletesList [j+1]. gender)>0
															|| select == 3 && strcmp(athletesList [j]. item , athletesList [j+1]. item)>0
															|| select == 4 && athletesList [j]. score - athletesList [j+1]. score > 0
															|| select == 5 && strcmp(athletesList [j]. reward , athletesList [j+1]. reward)>0
															|| select == 6 && strcmp(athletesList [j]. college , athletesList [j+1]. college)>0
										){
				exchangeAthletes (j,j+1);
			}
		}
	}
	findAthletes (1);
	writeAthletes ();
}
//运动员 交换
void exchangeAthletes (int i,int j){
	struct Athletes athletes = athletesList [i];
	athletesList [i] = athletesList  [j];
	athletesList [j] = athletes ;
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加运动员\n";
                                                        cout<<"*-------------2 :删除运动员\n";
                                                        cout<<"*-------------3 :修改运动员\n";
                                                        cout<<"*-------------4 :查找运动员\n";
                                cout<<"*-------------5 :排序运动员\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

链表:C版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 运动员 链表
    struct Athletes {
                    char name[15] ; // 姓名
                    char gender[8] ; // 性别
                    char item[13] ; // 项目名
                    double score ; // 得分
                    char reward[10] ; // 奖项
                    char college[14] ; // 学院
                struct Athletes* next;//链式存储
    };
    struct  Athletes *athletesList;//定义全局 运动员 指针
    int athletesCount = 0;//运动员 个数记录
    
        //运动员 读入文件
    void readAthletes ();
    //运动员 写入文件
    void writeAthletes ();
    //运动员 添加记录
    void addAthletes ();
        void addOneAthletes (struct Athletes *athletes);
        //运动员 删除记录
    void delAthletes ();
    //运动员 根据下标删除
    int delAthletesByIndex (int index);
    //运动员 修改记录
    void modAthletes ();
    //运动员 查找记录
    void findAthletes (int all);
    //运动员 排序
    void sortAthletes ();
    //交换
    void exchangeAthletes (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readAthletes ();//读取运动员
                while(1){
                        int choice;
                                    menu ();
                scanf("%d",&choice);
        switch(choice){
                                        case 1 :
                            addAthletes ();//添加运动员
                break;
                                                    case 2 :
                            findAthletes (1);//查找运动员
                                delAthletes ();//删除运动员
                break;
                                                    case 3 :
                            findAthletes (1);//查找运动员
                                modAthletes ();//修改运动员
                break;
                                                    case 4 :
                            findAthletes (0);//查找运动员
                break;
                            case 5 :
                            sortAthletes ();//排序运动员
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
                        }
        return 0;
    }


		
    //运动员 读入文件
void readAthletes (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Athletes.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    athletesList = NULL;
    struct Athletes *tail = athletesList;
    while (1)//读取
    {
        //给节点分配空间
        struct Athletes *p=(struct Athletes*)malloc(sizeof(struct Athletes));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%lf%s%s"
             ,p->name  ,p->gender  ,p->item  ,&p->score  ,p->reward  ,p->college 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (athletesList  == NULL)
        {
            athletesList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    athletesCount = i;
    fclose(fp);
}
//运动员 写入文件
void writeAthletes (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Athletes.txt", "w+");
    //定义指针
    struct Athletes *p = athletesList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %lf %s %s\n"
             ,p->name  ,p->gender  ,p->item  ,p->score  ,p->reward  ,p->college );
        p=p->next;
    }
    fclose(fp);
}
//运动员 添加记录
void addAthletes (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Athletes *tempValue = (struct Athletes*)malloc(sizeof(struct Athletes)); //必须重新分配地址空间。
                                                                     printf("请输入姓名 :");                        char name[15];                                 scanf("%s",name);
                                                strcpy(tempValue->name,name);
                                                                                                                                                                                 printf("请输入性别 :");                        char gender[8];                                 scanf("%s",gender);
                                                strcpy(tempValue->gender,gender);
                                                                                                                                                                                 printf("请输入项目名 :");                        char item[13];                                 scanf("%s",item);
                                                strcpy(tempValue->item,item);
                                                                                                                                                                                 printf("请输入得分 :");                        double score;                                 scanf("%lf",&score);
                                                tempValue->score = score ;
                                                                                                                                                                                 printf("请输入奖项 :");                        char reward[10];                                 scanf("%s",reward);
                                                strcpy(tempValue->reward,reward);
                                                                                                                                                                                 printf("请输入学院 :");                        char college[14];                                 scanf("%s",college);
                                                strcpy(tempValue->college,college);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneAthletes (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeAthletes ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneAthletes (struct Athletes *temp){
    //采用头插法
    if(athletesList == NULL){
        athletesList = temp;
    }else{
        temp->next = athletesList;
        athletesList = temp;
    }
    athletesCount ++;
}
//运动员 删除
void delAthletes (){
                printf("请输入您要删除的 运动员 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delAthletesByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeAthletes ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//运动员 根据下标删除
int delAthletesByIndex (int index){
    if(index > athletesCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Athletes *p = (struct Athletes*)malloc(sizeof(struct Athletes));
    struct Athletes *q = athletesList;
    p->next = athletesList;
    if(index == 1){
        athletesList = athletesList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    athletesCount = athletesCount - 1;
    return 1;
}
//运动员 修改
void modAthletes (){
                printf("请输入您要修改的运动员 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= athletesCount ){
        //开始修改
        struct Athletes *temp = athletesList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     printf("请输入姓名 :");                        char name[15];
                                scanf("%s",name);
    
                                                                                                                                                                                 printf("请输入性别 :");                        char gender[8];
                                scanf("%s",gender);
    
                                                                                                                                                                                 printf("请输入项目名 :");                        char item[13];
                                scanf("%s",item);
    
                                                                                                                                                                                 printf("请输入得分 :");                        double score;
                                scanf("%lf",&score);
    
                                                                                                                                                                                 printf("请输入奖项 :");                        char reward[10];
                                scanf("%s",reward);
    
                                                                                                                                                                                 printf("请输入学院 :");                        char college[14];
                                scanf("%s",college);
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                 strcpy(temp-> gender,gender);
                                                                                 strcpy(temp-> item,item);
                                                                                 temp-> score = score ;
                                                                                 strcpy(temp-> reward,reward);
                                                                                 strcpy(temp-> college,college);
                                                        printf("修改成功!\n");            writeAthletes ();
    }else{
                    printf("输入错误!\n");        }
}
//运动员 查找 如果all=1:查询全部 否则按条件查询
void findAthletes (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-8s%-13s%-12s%-10s%-14s\n\n","序号" ,"姓名","性别","项目名","得分","奖项","学院" );
        int i=1,count = 0;
        if( athletesList ){
            //用于统计信息所用
                                                                                                                                    double scoreSum=0;
                                                                                                struct Athletes *t = athletesList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->name,conCharArr) //根据姓名,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                                                                                                        || select == 3 && strstr(t->item,conCharArr) //根据项目名,模糊查询
                                                                                                                                                                                                    || select == 4 && strstr(t->reward,conCharArr) //根据奖项,模糊查询
                                                                                                                                                        || select == 5 && strstr(t->college,conCharArr) //根据学院,模糊查询
                                                                                        ){
                                                            printf("%-5d%-15s%-8s%-13s%-12lf%-10s%-14s \n\n",i
                                                                    ,t->name
                                                ,t->gender
                                                ,t->item
                                                ,t->score
                                                ,t->reward
                                                ,t->college
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                            scoreSum += t->score;
                                                                                                                                                        count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delAthletesByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                                                                                        printf("【得分】总计:%lf 平均:%.2lf\n",scoreSum ,count!=0?scoreSum * 1.0 / count :0);
                                                                                                                                printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 姓名 筛选\n");                                                                printf("2:按 性别 筛选\n");                                                                printf("3:按 项目名 筛选\n");                                                                                    printf("4:按 奖项 筛选\n");                                                                printf("5:按 学院 筛选\n");                                            printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ||select==5 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readAthletes();//从新读取数据。
}
//运动员 排序
void sortAthletes (){
    int select,i,j;
                        printf("1:按 姓名 排序\n");                            printf("2:按 性别 排序\n");                            printf("3:按 项目名 排序\n");                            printf("4:按 得分 排序\n");                            printf("5:按 奖项 排序\n");                            printf("6:按 学院 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Athletes *list[100];
    for(i = 0;i< athletesCount;i++){
        list[i] = athletesList;
        athletesList = athletesList ->next;
    }
    for( i = athletesCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 2 && strcmp(list[j]->gender , list[j+1]->gender)>0
                                                                || select == 3 && strcmp(list[j]->item , list[j+1]->item)>0
                                                                || select == 4 && list[j]->score - list[j+1]->score > 0
                                                                || select == 5 && strcmp(list[j]->reward , list[j+1]->reward)>0
                                                                || select == 6 && strcmp(list[j]->college , list[j+1]->college)>0
                                            ){
                struct Athletes *temp = (struct Athletes*)malloc(sizeof(struct Athletes));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< athletesCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ athletesCount -1 ]->next = NULL;
    athletesList = list[0];
    findAthletes (1);
    writeAthletes ();
}

                void menu (){
        //菜单
                    printf("*------------------主菜单---------------------*\n");                                                    printf("*-------------1 :添加运动员\n");                                                        printf("*-------------2 :删除运动员\n");                                                        printf("*-------------3 :修改运动员\n");                                                        printf("*-------------4 :查找运动员\n");                                printf("*-------------5 :排序运动员\n");                                            printf("*-------------0:退出\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

链表:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 运动员 链表
    struct Athletes {
                    char name[15] ; // 姓名
                    char gender[8] ; // 性别
                    char item[13] ; // 项目名
                    double score ; // 得分
                    char reward[10] ; // 奖项
                    char college[14] ; // 学院
                struct Athletes* next;//链式存储
    };
    struct  Athletes *athletesList;//定义全局 运动员 指针
    int athletesCount = 0;//运动员 个数记录
    
        //运动员 读入文件
    void readAthletes ();
    //运动员 写入文件
    void writeAthletes ();
    //运动员 添加记录
    void addAthletes ();
        void addOneAthletes (struct Athletes *athletes);
        //运动员 删除记录
    void delAthletes ();
    //运动员 根据下标删除
    int delAthletesByIndex (int index);
    //运动员 修改记录
    void modAthletes ();
    //运动员 查找记录
    void findAthletes (int all);
    //运动员 排序
    void sortAthletes ();
    //交换
    void exchangeAthletes (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readAthletes ();//读取运动员
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            addAthletes ();//添加运动员
                break;
                                                    case 2 :
                            findAthletes (1);//查找运动员
                                delAthletes ();//删除运动员
                break;
                                                    case 3 :
                            findAthletes (1);//查找运动员
                                modAthletes ();//修改运动员
                break;
                                                    case 4 :
                            findAthletes (0);//查找运动员
                break;
                            case 5 :
                            sortAthletes ();//排序运动员
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
    //运动员 读入文件
void readAthletes (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Athletes.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    athletesList = NULL;
    struct Athletes *tail = athletesList;
    while (1)//读取
    {
        //给节点分配空间
        struct Athletes *p=(struct Athletes*)malloc(sizeof(struct Athletes));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%lf%s%s"
             ,p->name  ,p->gender  ,p->item  ,&p->score  ,p->reward  ,p->college 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (athletesList  == NULL)
        {
            athletesList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    athletesCount = i;
    fclose(fp);
}
//运动员 写入文件
void writeAthletes (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Athletes.txt", "w+");
    //定义指针
    struct Athletes *p = athletesList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %lf %s %s\n"
             ,p->name  ,p->gender  ,p->item  ,p->score  ,p->reward  ,p->college );
        p=p->next;
    }
    fclose(fp);
}
//运动员 添加记录
void addAthletes (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Athletes *tempValue = (struct Athletes*)malloc(sizeof(struct Athletes)); //必须重新分配地址空间。
                                                                     cout<<"请输入姓名 :";
                        char name[15];                                 cin>>name;
                                                strcpy(tempValue->name,name);
                                                                                                                                                                                 cout<<"请输入性别 :";
                        char gender[8];                                 cin>>gender;
                                                strcpy(tempValue->gender,gender);
                                                                                                                                                                                 cout<<"请输入项目名 :";
                        char item[13];                                 cin>>item;
                                                strcpy(tempValue->item,item);
                                                                                                                                                                                 cout<<"请输入得分 :";
                        double score;                                 cin>>score;
                                                tempValue->score = score ;
                                                                                                                                                                                 cout<<"请输入奖项 :";
                        char reward[10];                                 cin>>reward;
                                                strcpy(tempValue->reward,reward);
                                                                                                                                                                                 cout<<"请输入学院 :";
                        char college[14];                                 cin>>college;
                                                strcpy(tempValue->college,college);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneAthletes (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeAthletes ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneAthletes (struct Athletes *temp){
    //采用头插法
    if(athletesList == NULL){
        athletesList = temp;
    }else{
        temp->next = athletesList;
        athletesList = temp;
    }
    athletesCount ++;
}
//运动员 删除
void delAthletes (){
                cout<<"请输入您要删除的 运动员 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delAthletesByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeAthletes ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//运动员 根据下标删除
int delAthletesByIndex (int index){
    if(index > athletesCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Athletes *p = (struct Athletes*)malloc(sizeof(struct Athletes));
    struct Athletes *q = athletesList;
    p->next = athletesList;
    if(index == 1){
        athletesList = athletesList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    athletesCount = athletesCount - 1;
    return 1;
}
//运动员 修改
void modAthletes (){
                cout<<"请输入您要修改的运动员 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= athletesCount ){
        //开始修改
        struct Athletes *temp = athletesList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     cout<<"请输入姓名 :";
                        char name[15];
                                cin>>name;
    
                                                                                                                                                                                 cout<<"请输入性别 :";
                        char gender[8];
                                cin>>gender;
    
                                                                                                                                                                                 cout<<"请输入项目名 :";
                        char item[13];
                                cin>>item;
    
                                                                                                                                                                                 cout<<"请输入得分 :";
                        double score;
                                cin>>score;
    
                                                                                                                                                                                 cout<<"请输入奖项 :";
                        char reward[10];
                                cin>>reward;
    
                                                                                                                                                                                 cout<<"请输入学院 :";
                        char college[14];
                                cin>>college;
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                 strcpy(temp-> gender,gender);
                                                                                 strcpy(temp-> item,item);
                                                                                 temp-> score = score ;
                                                                                 strcpy(temp-> reward,reward);
                                                                                 strcpy(temp-> college,college);
                                                        cout<<"修改成功!\n";
            writeAthletes ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//运动员 查找 如果all=1:查询全部 否则按条件查询
void findAthletes (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-8s%-13s%-12s%-10s%-14s\n\n","序号" ,"姓名","性别","项目名","得分","奖项","学院" );
        int i=1,count = 0;
        if( athletesList ){
            //用于统计信息所用
                                                                                                                                    double scoreSum=0;
                                                                                                struct Athletes *t = athletesList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->name,conCharArr) //根据姓名,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                                                                                                        || select == 3 && strstr(t->item,conCharArr) //根据项目名,模糊查询
                                                                                                                                                                                                    || select == 4 && strstr(t->reward,conCharArr) //根据奖项,模糊查询
                                                                                                                                                        || select == 5 && strstr(t->college,conCharArr) //根据学院,模糊查询
                                                                                        ){
                                                            printf("%-5d%-15s%-8s%-13s%-12lf%-10s%-14s \n\n",i
                                                                    ,t->name
                                                ,t->gender
                                                ,t->item
                                                ,t->score
                                                ,t->reward
                                                ,t->college
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                            scoreSum += t->score;
                                                                                                                                                        count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delAthletesByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                                                                                        cout<<"【得分】" << "总计:"<<scoreSum<<" "  <<"平均:"<<  (count!=0?scoreSum*1.0/count:0)<<"\n";
                                                                                                                                cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 姓名 筛选\n";
                                                                cout<<"2:按 性别 筛选\n";
                                                                cout<<"3:按 项目名 筛选\n";
                                                                                    cout<<"4:按 奖项 筛选\n";
                                                                cout<<"5:按 学院 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ||select==5 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readAthletes();//从新读取数据。
}
//运动员 排序
void sortAthletes (){
    int select,i,j;
                        cout<<"1:按 姓名 排序\n";
                            cout<<"2:按 性别 排序\n";
                            cout<<"3:按 项目名 排序\n";
                            cout<<"4:按 得分 排序\n";
                            cout<<"5:按 奖项 排序\n";
                            cout<<"6:按 学院 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Athletes *list[100];
    for(i = 0;i< athletesCount;i++){
        list[i] = athletesList;
        athletesList = athletesList ->next;
    }
    for( i = athletesCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 2 && strcmp(list[j]->gender , list[j+1]->gender)>0
                                                                || select == 3 && strcmp(list[j]->item , list[j+1]->item)>0
                                                                || select == 4 && list[j]->score - list[j+1]->score > 0
                                                                || select == 5 && strcmp(list[j]->reward , list[j+1]->reward)>0
                                                                || select == 6 && strcmp(list[j]->college , list[j+1]->college)>0
                                            ){
                struct Athletes *temp = (struct Athletes*)malloc(sizeof(struct Athletes));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< athletesCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ athletesCount -1 ]->next = NULL;
    athletesList = list[0];
    findAthletes (1);
    writeAthletes ();
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加运动员\n";
                                                        cout<<"*-------------2 :删除运动员\n";
                                                        cout<<"*-------------3 :修改运动员\n";
                                                        cout<<"*-------------4 :查找运动员\n";
                                cout<<"*-------------5 :排序运动员\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

C++面向对象

#include <iostream>
            #include  <vector>
            #include <fstream>
            #include <string.h>
            using namespace std; 
    

int compare(int a,int b);
int compare(const char *a,const char *b);


class Athletes  //定义 运动员 类
{
public:
    static vector< Athletes*> dataList;
            char name[15] ; // 姓名
            char gender[8] ; // 性别
            char item[13] ; // 项目名
            double score ; // 得分
            char reward[10] ; // 奖项
            char college[14] ; // 学院
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        };
vector< Athletes*> Athletes::dataList;//必须类外初始化,用于存储运动员

//定义菜单
void menu();

    // 主函数
    int main(){
            //读取数据
                        Athletes::read ();//读取运动员
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            Athletes::add ();//添加运动员
                break;
                                                    case 2 :
                            Athletes::find (1);//查找运动员
                                Athletes::del ();//删除运动员
                break;
                                                    case 3 :
                            Athletes::find (1);//查找运动员
                                Athletes::mod ();//修改运动员
                break;
                                                    case 4 :
                            Athletes::find (0);//查找运动员
                break;
                            case 5 :
                            Athletes::sort ();//排序运动员
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//读取文件内的运动员
void Athletes::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Athletes.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建运动员对象
        Athletes *t = new Athletes;
        //读取数据到p
        if(fscanf(fp, "%s%s%s%lf%s%s"
             ,t->name  ,t->gender  ,t->item  ,&t->score  ,t->reward  ,t->college 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//运动员 写入文件
void Athletes::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Athletes.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Athletes *t = dataList.at(i);
        fprintf(fp,"%s %s %s %lf %s %s\n"
             ,t->name  ,t->gender  ,t->item  ,t->score  ,t->reward  ,t->college );
    }
    fclose(fp);
}
//运动员 添加记录
void Athletes::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Athletes *tempValue = new Athletes (); //必须重新分配地址空间。
                                                         cout<<"请输入姓名 :";
                    char name[15];                     cin>>name ;
                                            strcpy(tempValue->name,name);
                                                                                                                                                 cout<<"请输入性别 :";
                    char gender[8];                     cin>>gender ;
                                            strcpy(tempValue->gender,gender);
                                                                                                                                                 cout<<"请输入项目名 :";
                    char item[13];                     cin>>item ;
                                            strcpy(tempValue->item,item);
                                                                                                                                                 cout<<"请输入得分 :";
                    double score;                     cin>>score ;
                                            tempValue->score = score ;
                                                                                                                                                 cout<<"请输入奖项 :";
                    char reward[10];                     cin>>reward ;
                                            strcpy(tempValue->reward,reward);
                                                                                                                                                 cout<<"请输入学院 :";
                    char college[14];                     cin>>college ;
                                            strcpy(tempValue->college,college);
                                                                                                        //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//运动员 删除
void Athletes::del() {
    cout<<"请输入您要删除的 运动员 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//运动员 修改
void Athletes::mod() {
    cout<<"请输入您要修改的运动员 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Athletes *temp = dataList.at(indexOfMod);
                                                         cout<<"请输入姓名 :";
                    char name[15];
                    cin>> name ;
                                                                                                                                                                     cout<<"请输入性别 :";
                    char gender[8];
                    cin>> gender ;
                                                                                                                                                                     cout<<"请输入项目名 :";
                    char item[13];
                    cin>> item ;
                                                                                                                                                                     cout<<"请输入得分 :";
                    double score;
                    cin>> score ;
                                                                                                                                                                     cout<<"请输入奖项 :";
                    char reward[10];
                    cin>> reward ;
                                                                                                                                                                     cout<<"请输入学院 :";
                    char college[14];
                    cin>> college ;
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                 strcpy(temp-> gender,gender);
                                                                                 strcpy(temp-> item,item);
                                                                                 temp-> score = score ;
                                                                                 strcpy(temp-> reward,reward);
                                                                                 strcpy(temp-> college,college);
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//运动员 查找 如果all=1:查询全部 否则按条件查询
void Athletes :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Athletes*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-8s%-13s%-12s%-10s%-14s\n\n","序号" ,"姓名","性别","项目名","得分","奖项","学院" );
        int count = 0;
        //用于统计信息所用
                                                                                                double scoreSum=0;
                                                                    for(int i = 0;i < dataList2.size();i++){
            Athletes* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->name,conCharArr) //根据姓名,模糊查询
                                                                                                                                || select == 2 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                                                                                || select == 3 && strstr(t->item,conCharArr) //根据项目名,模糊查询
                                                                                                                                                                    || select == 4 && strstr(t->reward,conCharArr) //根据奖项,模糊查询
                                                                                                                                || select == 5 && strstr(t->college,conCharArr) //根据学院,模糊查询
                                                                        ){
                                            printf("%-5d%-15s%-8s%-13s%-12lf%-10s%-14s \n\n",i
                                                        ,t->name
                                        ,t->gender
                                        ,t->item
                                        ,t->score
                                        ,t->reward
                                        ,t->college
                                    );
                //用于统计信息所用
                                                                                                                                                                        scoreSum += t->score;
                                                                                                                            count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                                                        cout<<"【得分】" << "总计:"<<scoreSum<<" "  <<"平均:"<<  (count!=0?scoreSum*1.0/count:0)<<"\n";
                                                                    cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 姓名 筛选\n";
                                                                cout<<"2:按 性别 筛选\n";
                                                                cout<<"3:按 项目名 筛选\n";
                                                                                    cout<<"4:按 奖项 筛选\n";
                                                                cout<<"5:按 学院 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ||select==5 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//运动员 排序
void Athletes::sort(){
    int select,i,j;
            cout<<"1:按 姓名 排序\n";
            cout<<"2:按 性别 排序\n";
            cout<<"3:按 项目名 排序\n";
            cout<<"4:按 得分 排序\n";
            cout<<"5:按 奖项 排序\n";
            cout<<"6:按 学院 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->name , dataList[j+1]->name )>0
                                || select == 2 && compare(dataList[j]->gender , dataList[j+1]->gender )>0
                                || select == 3 && compare(dataList[j]->item , dataList[j+1]->item )>0
                                || select == 4 && compare(dataList[j]->score , dataList[j+1]->score )>0
                                || select == 5 && compare(dataList[j]->reward , dataList[j+1]->reward )>0
                                || select == 6 && compare(dataList[j]->college , dataList[j+1]->college )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加运动员\n";
                                                        cout<<"*-------------2 :删除运动员\n";
                                                        cout<<"*-------------3 :修改运动员\n";
                                                        cout<<"*-------------4 :查找运动员\n";
                                cout<<"*-------------5 :排序运动员\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
    
//对比函数
int compare(int a,int b){
	return a-b;
}
int compare(const char *a,const char *b){
	return strcmp(a,b);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值