鱼C论坛

 找回密码
 立即注册
查看: 1054|回复: 1

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

[复制链接]
发表于 2024-9-20 17:07:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

要求最多可以存储100个学生的成绩,数据需要写入文件,要求提供代码思路和详细代码实现解析
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-9-20 17:08:08 | 显示全部楼层
好的,可以按照以下步骤实现这个学生成绩查询系统。首先了解设计思路,然后再给出详细代码实现。

### 设计思路
1. **定义数据结构**:使用结构体(struct)来存储学生信息,包括学号、姓名和成绩。
2. **文件操作**:用文件来持久存储数据,程序启动时读取文件初始化内存中的数据,并在程序运行过程中更新文件。
3. **主要功能**:
   - **录入数据**:输入学生信息并保存到文件和内存。
   - **查询成绩**:根据学号和姓名查询成绩并打印显示。

### 代码实现

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define MAX_STUDENTS 100
  5. #define FILE_NAME "students.dat"

  6. typedef struct {
  7.     int id;
  8.     char name[50];
  9.     int score;
  10. } Student;

  11. Student students[MAX_STUDENTS];
  12. int student_count = 0;

  13. void load_data() {
  14.     FILE *file = fopen(FILE_NAME, "rb");
  15.     if (file != NULL) {
  16.         fread(&student_count, sizeof(int), 1, file);
  17.         fread(students, sizeof(Student), student_count, file);
  18.         fclose(file);
  19.     }
  20. }

  21. void save_data() {
  22.     FILE *file = fopen(FILE_NAME, "wb");
  23.     fwrite(&student_count, sizeof(int), 1, file);
  24.     fwrite(students, sizeof(Student), student_count, file);
  25.     fclose(file);
  26. }

  27. void add_student() {
  28.     if (student_count >= MAX_STUDENTS) {
  29.         printf("学生数据已满,无法添加新学生。\n");
  30.         return;
  31.     }
  32.     Student s;
  33.     printf("请输入学号: ");
  34.     scanf("%d", &s.id);
  35.     printf("请输入姓名: ");
  36.     scanf("%s", s.name);
  37.     printf("请输入成绩: ");
  38.     scanf("%d", &s.score);
  39.    
  40.     students[student_count++] = s;
  41.     save_data();
  42.     printf("添加成功!\n");
  43. }

  44. void query_student() {
  45.     int id;
  46.     char name[50];
  47.     printf("请输入学号: ");
  48.     scanf("%d", &id);
  49.     printf("请输入姓名: ");
  50.     scanf("%s", name);
  51.    
  52.     for (int i = 0; i < student_count; i++) {
  53.         if (students[i].id == id && strcmp(students[i].name, name) == 0) {
  54.             printf("学号: %d, 姓名: %s, 成绩: %d\n", students[i].id, students[i].name, students[i].score);
  55.             return;
  56.         }
  57.     }
  58.     printf("未找到匹配的学生信息。\n");
  59. }

  60. int main() {
  61.     load_data();
  62.    
  63.     while (1) {
  64.         printf("1. 录入数据\n");
  65.         printf("2. 查询成绩\n");
  66.         printf("3. 退出\n");
  67.         printf("请输入你的选择: ");
  68.         int choice;
  69.         scanf("%d", &choice);
  70.         
  71.         switch (choice) {
  72.             case 1:
  73.                 add_student();
  74.                 break;
  75.             case 2:
  76.                 query_student();
  77.                 break;
  78.             case 3:
  79.                 return 0;
  80.             default:
  81.                 printf("无效选择,请重新输入。\n");
  82.         }
  83.     }
  84. }
复制代码


### 代码解析
1. **数据结构定义**:
  
  1. typedef struct {
  2.        int id;
  3.        char name[50];
  4.        int score;
  5.    } Student;
复制代码


2. **文件数据导入**:
  
  1. void load_data() {
  2.        FILE *file = fopen(FILE_NAME, "rb");
  3.        if (file != NULL) {
  4.            fread(&student_count, sizeof(int), 1, file);
  5.            fread(students, sizeof(Student), student_count, file);
  6.            fclose(file);
  7.        }
  8.    }
复制代码


3. **文件数据保存**:
  
  1. void save_data() {
  2.        FILE *file = fopen(FILE_NAME, "wb");
  3.        fwrite(&student_count, sizeof(int), 1, file);
  4.        fwrite(students, sizeof(Student), student_count, file);
  5.        fclose(file);
  6.    }
复制代码


4. **添加学生数据**:
  
  1. void add_student() {
  2.        // 代码见上
  3.    }
复制代码


5. **查询学生成绩**:
  
  1. void query_student() {
  2.        // 代码见上
  3.    }
复制代码


6. **主循环**:
  
  1. int main() {
  2.        // 代码见上
  3.    }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表