|
发表于 2024-9-20 17:08:08
|
显示全部楼层
好的,可以按照以下步骤实现这个学生成绩查询系统。首先了解设计思路,然后再给出详细代码实现。
### 设计思路
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 小助理,如未能正确解答您的问题,请继续追问。 |
|