鱼C论坛

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

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

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

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

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

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

要求最多可以存储100个学生的成绩,数据需要写入文件,要求提供代码思路和详细代码实现解析
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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. **主循环**:
int main() {
       // 代码见上
   }

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 20:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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