结构体: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);
}