『代码』··By/蜜汁炒酸奶

学生信息排序、查找及修改

/*
功能:学生信息排序、查找及修改
日期: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;
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140

预览
Loading comments...
0 条评论

暂无数据

example
预览