好的,可以按照以下步骤实现这个学生成绩查询系统。首先了解设计思路,然后再给出详细代码实现。
### 设计思路
1. **定义数据结构**:使用结构体(struct)来存储学生信息,包括学号、姓名和成绩。
2. **文件操作**:用文件来持久存储数据,程序启动时读取文件初始化内存中的数据,并在程序运行过程中更新文件。
3. **主要功能**:
- **录入数据**:输入学生信息并保存到文件和内存。
- **查询成绩**:根据学号和姓名查询成绩并打印显示。
### 代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define FILE_NAME "students.dat"
typedef struct {
int id;
char name[50];
int score;
} Student;
Student students[MAX_STUDENTS];
int student_count = 0;
void load_data() {
FILE *file = fopen(FILE_NAME, "rb");
if (file != NULL) {
fread(&student_count, sizeof(int), 1, file);
fread(students, sizeof(Student), student_count, file);
fclose(file);
}
}
void save_data() {
FILE *file = fopen(FILE_NAME, "wb");
fwrite(&student_count, sizeof(int), 1, file);
fwrite(students, sizeof(Student), student_count, file);
fclose(file);
}
void add_student() {
if (student_count >= MAX_STUDENTS) {
printf("学生数据已满,无法添加新学生。\n");
return;
}
Student s;
printf("请输入学号: ");
scanf("%d", &s.id);
printf("请输入姓名: ");
scanf("%s", s.name);
printf("请输入成绩: ");
scanf("%d", &s.score);
students[student_count++] = s;
save_data();
printf("添加成功!\n");
}
void query_student() {
int id;
char name[50];
printf("请输入学号: ");
scanf("%d", &id);
printf("请输入姓名: ");
scanf("%s", name);
for (int i = 0; i < student_count; i++) {
if (students[i].id == id && strcmp(students[i].name, name) == 0) {
printf("学号: %d, 姓名: %s, 成绩: %d\n", students[i].id, students[i].name, students[i].score);
return;
}
}
printf("未找到匹配的学生信息。\n");
}
int main() {
load_data();
while (1) {
printf("1. 录入数据\n");
printf("2. 查询成绩\n");
printf("3. 退出\n");
printf("请输入你的选择: ");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
query_student();
break;
case 3:
return 0;
default:
printf("无效选择,请重新输入。\n");
}
}
}
### 代码解析
1. **数据结构定义**:
typedef struct {
int id;
char name[50];
int score;
} Student;
2. **文件数据导入**:
void load_data() {
FILE *file = fopen(FILE_NAME, "rb");
if (file != NULL) {
fread(&student_count, sizeof(int), 1, file);
fread(students, sizeof(Student), student_count, file);
fclose(file);
}
}
3. **文件数据保存**:
void save_data() {
FILE *file = fopen(FILE_NAME, "wb");
fwrite(&student_count, sizeof(int), 1, file);
fwrite(students, sizeof(Student), student_count, file);
fclose(file);
}
4. **添加学生数据**:
void add_student() {
// 代码见上
}
5. **查询学生成绩**:
void query_student() {
// 代码见上
}
6. **主循环**:
以上代码实现了一个简易的学生成绩查询系统,满足了录入和查询的功能要求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |