【C语言项目 | 基础项目| 学生信息管理系统】

开源地址:C语言学生信息管理系统

1. 简介

项目目的和背景

学生信息管理系统是一个基于C语言的简单项目,旨在帮助学校和教育机构管理学生的基本信息。

主要功能和特点

  • 添加、修改、删除和查询学生信息。
  • 将学生信息保存到文件中。
  • 从文件中加载学生信息。

2. 环境配置

所需软件和工具

  • C编译器,如GCC。
  • 文本编辑器或IDE,如Visual Studio Code或Qt。

安装和配置的步骤

  1. 安装GCC:根据你的操作系统,从官方网站下载并安装。
  2. 安装文本编辑器或IDE。

验证配置

编译并运行项目,确保没有错误。

3. 项目结构

文件和目录结构

  • main.c: 主程序入口。
  • student.hstudent.c: 学生信息管理功能。
  • fileops.hfileops.c: 文件操作功能。

每个模块的功能

  • main.c: 提供用户交互界面。
  • student.c: 实现学生信息的增删改查。
  • file_ops.c: 实现数据的保存和加载。

4. 核心概念

关键技术和概念

  • 结构体:用于存储学生信息。
  • 文件操作:用于数据的持久化。

技术选择理由

  • C语言提供了直接的文件操作和结构体功能,适合此类项目。

5. 步骤详解

1. 数据结构定义

student.h中,我们定义了一个结构体Student来存储学生的基本信息。这为我们提供了一个方便的方式来组织和管理学生数据。

2. 文件操作

保存数据到文件

fileops.c中,我们使用saveToFile函数将所有学生的数据保存到一个名为students.txt的文件中。我们使用标准的文件I/O函数,如fopenfprintf,来执行这些操作。

从文件加载数据

loadFromFile函数用于从students.txt文件中加载学生数据。我们使用fscanf函数来读取文件中的每一行,并将数据存储在全局的学生数组中。

3. 学生信息管理

添加学生

addStudent函数允许用户输入学生的基本信息,并将其添加到全局的学生数组中。

修改学生信息

modifyStudent函数首先要求用户输入要修改的学生的学号。然后,它搜索该学号的学生,并允许用户修改其信息。

删除学生

deleteStudent函数通过学号来删除特定的学生信息。它将数组中后面的学生向前移动,从而覆盖要删除的学生的位置。

查询学生

queryStudent函数允许用户输入学号,并显示与该学号匹配的学生的信息。

4. 用户交互

main.c中,我们提供了一个简单的文本菜单,允许用户选择要执行的操作,如添加、修改、删除或查询学生信息。用户可以根据屏幕上的提示输入相应的数字来选择操作。

5. 注意点

  • 我们使用了一个固定大小的数组来存储学生信息。在实际应用中,你可能需要考虑使用动态数据结构,如链表。
  • 为了简化,我们使用了文本文件来存储数据。在大型应用中,你可能需要使用数据库来存储和管理数据。

6. 项目界面

【C语言项目 | 基础项目| 学生信息管理系统】_第1张图片

7. 代码示例

此处只展示部分代码,具体代码可前往C语言学生信息管理系统 下载

fileops.c

#include 
#include 
#include "student.h"
#include "fileops.h"

#define FILENAME "./students.txt"
#define MAX_STUDENTS 100

Student students[MAX_STUDENTS];
int current_student_count = 0;

void saveToFile() {
    FILE *file = fopen(FILENAME, "w");
    if (!file) {
        printf("无法打开文件进行写入!\n");
        return;
    }

    for (int i = 0; i < current_student_count; i++) {
        fprintf(file, "%d,%s,%s,%d,%s,%s\n",
                students[i].id, students[i].name, students[i].gender,
                students[i].age, students[i].class, students[i].contact);
    }

    fclose(file);
    printf("数据已成功保存到 %s.\n", FILENAME);
}

void loadFromFile() {
    FILE *file = fopen(FILENAME, "r");
    if (!file) {
        printf("无法打开文件 %s 进行读取!\n", FILENAME);
        return;
    } else {
        printf("成功打开文件 %s.\n", FILENAME);
    }

    current_student_count = 0; // 重置学生数量
    char line[256]; // 假设每行最大256字符

    while (fgets(line, sizeof(line), file) != NULL) {
        int fieldsRead = sscanf(line, "%d,%49[^,],%9[^,],%d,%49[^,],%49[^\n]",
                                &students[current_student_count].id,
                                students[current_student_count].name,
                                students[current_student_count].gender,
                                &students[current_student_count].age,
                                students[current_student_count].class,
                                students[current_student_count].contact);

        if (fieldsRead == 6) { // 成功读取了6个字段
            current_student_count++;
        } else {
            printf("解析错误: %s\n", line);
        }

        if (current_student_count >= MAX_STUDENTS) {
            printf("警告: 达到最大学生数量限制!\n");
            break;
        }
    }

    fclose(file);
    printf("已从 %s 加载数据.\n", FILENAME);
}


student.c

#include 
#include 
#include "student.h"

extern Student students[]; // 从fileops.c引入
extern int current_student_count; // 从fileops.c引入
#define MAX_STUDENTS 100

void addStudent() {
    if (current_student_count >= MAX_STUDENTS) {
        printf("达到最大学生数量限制!\n");
        return;
    }

    printf("请输入学生信息:\n");

    printf("学号: ");
    scanf("%d", &students[current_student_count].id);
    getchar(); // 清除缓冲区

    printf("姓名: ");
    fgets(students[current_student_count].name, 50, stdin);
    students[current_student_count].name[strcspn(students[current_student_count].name, "\n")] = 0; // 去除换行符

    printf("性别: ");
    fgets(students[current_student_count].gender, 10, stdin);
    students[current_student_count].gender[strcspn(students[current_student_count].gender, "\n")] = 0;

    printf("年龄: ");
    scanf("%d", &students[current_student_count].age);
    getchar();

    printf("班级: ");
    fgets(students[current_student_count].class, 50, stdin);
    students[current_student_count].class[strcspn(students[current_student_count].class, "\n")] = 0;

    printf("联系方式: ");
    fgets(students[current_student_count].contact, 50, stdin);
    students[current_student_count].contact[strcspn(students[current_student_count].contact, "\n")] = 0;

    current_student_count++;
    printf("学生信息已添加成功!\n");
}

void modifyStudent() {
    int id;
    printf("请输入要修改的学生学号: ");
    scanf("%d", &id);
    getchar();

    for (int i = 0; i < current_student_count; i++) {
        if (students[i].id == id) {
            printf("找到学生,开始修改...\n");

            printf("姓名 (%s): ", students[i].name);
            fgets(students[i].name, 50, stdin);
            students[i].name[strcspn(students[i].name, "\n")] = 0;

            printf("性别 (%s): ", students[i].gender);
            fgets(students[i].gender, 10, stdin);
            students[i].gender[strcspn(students[i].gender, "\n")] = 0;

            printf("年龄 (%d): ", students[i].age);
            scanf("%d", &students[i].age);
            getchar();

            printf("班级 (%s): ", students[i].class);
            fgets(students[i].class, 50, stdin);
            students[i].class[strcspn(students[i].class, "\n")] = 0;

            printf("联系方式 (%s): ", students[i].contact);
            fgets(students[i].contact, 50, stdin);
            students[i].contact[strcspn(students[i].contact, "\n")] = 0;

            printf("学生信息已修改成功!\n");
            return;
        }
    }
    printf("未找到该学号的学生。\n");
}

void deleteStudent() {
    int id;
    printf("请输入要删除的学生学号: ");
    scanf("%d", &id);

    int index = -1;
    for (int i = 0; i < current_student_count; i++) {
        if (students[i].id == id) {
            index = i;
            break;
        }
    }

    if (index != -1) {
        for (int i = index; i < current_student_count - 1; i++) {
            students[i] = students[i + 1];
        }
        current_student_count--;
        printf("学生信息已删除!\n");
    } else {
        printf("未找到该学号的学生。\n");
    }
}

void queryStudent() {
    int id;
    printf("请输入要查询的学生学号: ");
    scanf("%d", &id);

    for (int i = 0; i < current_student_count; i++) {
        if (students[i].id == id) {
            printf("学号: %d\n", students[i].id);
            printf("姓名: %s\n", students[i].name);
            printf("性别: %s\n", students[i].gender);
            printf("年龄: %d\n", students[i].age);
            printf("班级: %s\n", students[i].class);
            printf("联系方式: %s\n", students[i].contact);
            return;
        }
    }
    printf("未找到该学号的学生。\n");
}

void displayAllStudents() {
    printf("当前所有学生信息:\n");
    for (int i = 0; i < current_student_count; i++) {
        printf("------\n");
        printf("学号: %d\n", students[i].id);
        printf("姓名: %s\n", students[i].name);
        printf("性别: %s\n", students[i].gender);
        printf("年龄: %d\n", students[i].age);
        printf("班级: %s\n", students[i].class);
        printf("联系方式: %s\n", students[i].contact);
    }
}

欢迎提供反馈和建议!

你可能感兴趣的:(C语言项目,c语言,开发语言)