/*
功能:学生信息排序、查找及修改
日期:2013-06-24
*/
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
//结构体
typedef struct student
{
char name[20];
int score;
}STU;
//引用函数
void sort(STU *aStu,int n);
STU *find(STU *aStu,int n,char *aName);
int findAndEdit(STU *aStu,int n,char *aName,int aScors);
//主函数
int main(void)
{
STU Stu[5];
int i,x,Score;
char Name[20];
STU findName;
//输入信息
printf("请输入学生信息(5人)n姓名 成绩n");
for (i = 0;i<5;i++)
{
scanf("%s %d",&Stu[i].name,&Stu[i].score);
}
sort(Stu,5);
//查找信息
printf("输入要查找的人的姓名:");
scanf("%s",Name);
findName = *find(Stu,5,Name);
printf("%s %dn",findName.name,findName.score);
//查找并修改
printf("输入要修改的人的姓名及成绩:");
scanf("%s %d",&Name,&Score);
x = findAndEdit(Stu,5,Name,Score);
printf("n");
if (x==1)
{
printf("修改成功!n");
}
else
{
printf("修改失败!n");
}
//修改后的学生成绩
printf("修改后的学生信息为:n");
for (i = 0 ;i<5;i++)
{
printf("%s %dn",Stu[i].name,Stu[i].score );
}
system("pause");
return 0;
}
/************************************************************************
函数名:sort
功能:学生信息排序
参数:STU *aStu 数组的头指针
int n 数组的长度
返回值:空
************************************************************************/
void sort(STU *aStu,int n)
{
int i,j;
STU tmp;
for (i = 0; i < n;i++)
{
for (j = i;j<n;j++)
{
if (aStu[i].score < aStu[j].score)
{
tmp = aStu[i];
aStu[i] = aStu[j];
aStu[j] = tmp;
}
}
}
printf("n学生们的成绩由大到小依次为:n");
for (i = 0 ;i<n;i++)
{
printf("%s %dn",aStu[i].name,aStu[i].score );
}
}
/************************************************************************
函数名:*find
功能:按姓名查找信息
参数:STU *aStu 数组的头指针
int n 数组的长度
char *aName 要查找的学生姓名
返回值:所查学生信息
************************************************************************/
STU *find(STU *aStu,int n,char *aName)
{
int i;
for (i = 0; i < n;i++ )
{
if (strcmp(aName,aStu[i].name)==0)
{
return aStu+i;
}
}
if (i==n)
{
printf("没找到!n");
}
}
/************************************************************************
函数名: findAndEdit
功能:
参数:STU *aStu 数组的头指针
int n 数组的长度
char *aName 要查找的学生姓名
int aScors 该学生的成绩
返回值:
************************************************************************/
int findAndEdit(STU *aStu,int n,char *aName,int aScors)
{
int i;
for (i = 0; i < n;i++ )
{
if (strcmp(aName,aStu[i].name)==0 && aScors == aStu[i].score)
{
printf("请输入要修改的姓名及分数:");
scanf("%s %d",&aStu[i].name,&aStu[i].score);
return 1;
}
}
if (i==n)
{
return 0;
}
}