使用顺序查找算法来实现按照姓名查询学生信息的功能。
时间: 2023-12-21 20:07:25 浏览: 66
好的,下面是使用顺序查找算法来实现按照姓名查询学生信息的具体代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大学生数
// 学生信息结构体
typedef struct {
int id; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
int birthYear; // 出生年份
char phone[20]; // 电话号码
int english; // 英语成绩
int math; // 数学成绩
int totalScore; // 总分
} Student;
// 从文件中读取学生信息到数组中,返回学生数
int readStudentsFromFile(Student students[], const char *filename) {
int count = 0;
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s.\n", filename);
return 0;
}
while (fscanf(fp, "%d %s %s %d %s %d %d %d",
&students[count].id, students[count].name, students[count].gender,
&students[count].birthYear, students[count].phone,
&students[count].english, &students[count].math, &students[count].totalScore) != EOF) {
count++;
}
fclose(fp);
return count;
}
// 将学生信息保存到文件中
void saveStudentsToFile(const Student students[], int count, const char *filename) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("Failed to open file %s.\n", filename);
return;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%d %s %s %d %s %d %d %d\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthYear, students[i].phone,
students[i].english, students[i].math, students[i].totalScore);
}
fclose(fp);
}
// 按照姓名查询学生信息
void searchByName(const Student students[], int count, const char *name) {
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("ID: %d\nName: %s\nGender: %s\nBirth Year: %d\nPhone: %s\nEnglish: %d\nMath: %d\nTotal Score: %d\n",
students[i].id, students[i].name, students[i].gender,
students[i].birthYear, students[i].phone,
students[i].english, students[i].math, students[i].totalScore);
found = 1;
}
}
if (!found) {
printf("No student found with name %s.\n", name);
}
}
int main() {
Student students[MAX_STUDENTS];
int count = readStudentsFromFile(students, "students.txt");
if (count == 0) {
printf("Failed to read students from file.\n");
return 0;
}
char name[20];
printf("Enter name to search: ");
scanf("%s", name);
searchByName(students, count, name);
return 0;
}
```
以上代码实现了从文件中读取学生信息、将学生信息保存到文件中和按照姓名查询学生信息的功能。在实际使用时,可以将不同的功能封装成函数,以提高代码的复用性和可维护性。同时,还需要注意输入检查、异常处理等细节问题,以提高系统的稳定性和易用性。