#include <stdio.h>
#include <stdlib.h>
//国家奖牌的定义
typedef struct
{
char country[20];//国家名称
int gold;//金牌数
int silver;//银牌数
int bronze;//铜牌数
int total;//奖牌总数
}RcdType;
//顺序表结点结构的定义
#define MAXSIZES 255
typedef struct
{
RcdType r[MAXSIZES + 1];//r[0]闲置,存放国家奖牌信息
int length;//顺序表长度
}SqList;
//读入国家奖牌信息
void input(SqList* L,int n);
RcdType searchCountry(L,countryName);
//显示国家奖牌信息
void show(SqList L);
//按国家金牌数排序
void goldSort(SqList* L);
//按奖牌总数排序
void totalSort(SqList* L);
int main()
{
SqList L;
RcdType temp;
int n,select;
char name[20];
printf("请输入国家的个数:\n");
scanf("%d",&n);
input(&L,n);
printf("\n");
show(L);
printf("请输入要查找的国家名称:\n");
scanf("%s",temp.country);
strcmp(name,temp.country);
printf("\n");
temp = searchCountry(L,temp.country);
if(!strcmp(temp.country,"")) printf("%s信息不存在,无法查找。\n\n",name);
else
{
printf("%s的奖牌信息:\n",temp.country);
printf("Gold:%d Silver:%d Bronze:%d\n\n",temp.gold,temp.silver,temp.bronze);
}
printf("请输入排序规则:1、根据金牌数排序\t2、根据奖牌总数排序\n");
scanf("%d",&select);
switch(select)
{
case 1:
goldSort(&L);
break;
case 2:
totalSort(&L);
break;
}
show(L);
return 0;
}
void input(SqList* L,int n)
{
int i;
strcmp((*L).r[0].country,"");//标记是否查找成功
for(i = 1;i <= n;i++)
{
printf("请输入第%d个国家的相关信息:国家名、金牌数、银牌数、铜牌数\n",i);
scanf("%s%d%d%d",(*L).r[i].country,&(*L).r[i].gold,&(*L).r[i].silver,&(*L).r[i].bronze);
(*L).r[i].total = (*L).r[i].gold + (*L).r[i].silver + (*L).r[i].bronze;
}
//更新顺序表长度
(*L).length = n;
}
void show(SqList L)
{
int i;
printf("Country\tGold\tSilver\tBronze\n");
for(i = 1;i <= L.length;i++)
{
printf("%s\t%d\t%d\t%d\n",L.r[i].country,L.r[i].gold,L.r[i].silver,L.r[i].bronze);
}
printf("\n\n");
}
RcdType searchCountry(SqList L,char countryName[])
{
int i;
for(i = 1;i <= L.length;i++)
{
if(!strcmp(L.r[i].country,countryName)) return L.r[i];
}
return L.r[0];//未找到该国家信息
}
void goldSort(SqList* L)
{
// 大==>小
int i,j;
RcdType temp;
for(i = 1;i < (*L).length;i++)
{
for(j = 1;j < (*L).length;j++)
{
//当前国家的金牌数小于下一个国家的金牌数,进行国家信息的交换。
if((*L).r[j].gold < (*L).r[j + 1].gold)
{
temp = (*L).r[j];
(*L).r[j] = (*L).r[j + 1];
(*L).r[j + 1] = temp;
}
}
}
}
void totalSort(SqList* L)
{
// 大==>小
int i,j,curTotal,nextTotal;
RcdType temp;
for(i = 1;i < (*L).length;i++)
{
for(j = 1;j < (*L).length;j++)
{
curTotal = 0;
nextTotal = 0;
curTotal += (*L).r[j].gold + (*L).r[j].silver + (*L).r[j].bronze;
nextTotal += (*L).r[j + 1].gold + (*L).r[j + 1].silver + (*L).r[j + 1].bronze;
if(curTotal < nextTotal)
{
temp = (*L).r[j];
(*L).r[j] = (*L).r[j + 1];
(*L).r[j + 1] = temp;
}
}
}
}