轻语远歌 发表于 2024-9-20 17:07:51

用c语言设计一个学生成绩查询系统

用c语言设计一个学生成绩查询系统,提供1.录入数据功能(学号,姓名,一门成绩),2.查询成绩功能(输入学号和姓名,将成绩打印输出)

要求最多可以存储100个学生的成绩,数据需要写入文件,要求提供代码思路和详细代码实现解析

FishC 发表于 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;
    int score;
} Student;

Student 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 = s;
    save_data();
    printf("添加成功!\n");
}

void query_student() {
    int id;
    char name;
    printf("请输入学号: ");
    scanf("%d", &id);
    printf("请输入姓名: ");
    scanf("%s", name);
   
    for (int i = 0; i < student_count; i++) {
      if (students.id == id && strcmp(students.name, name) == 0) {
            printf("学号: %d, 姓名: %s, 成绩: %d\n", students.id, students.name, students.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;
       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. **主循环**:
   int main() {
       // 代码见上
   }

以上代码实现了一个简易的学生成绩查询系统,满足了录入和查询的功能要求。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 用c语言设计一个学生成绩查询系统