开源地址:C语言学生信息管理系统
学生信息管理系统是一个基于C语言的简单项目,旨在帮助学校和教育机构管理学生的基本信息。
编译并运行项目,确保没有错误。
main.c
: 主程序入口。student.h
和 student.c
: 学生信息管理功能。fileops.h
和 fileops.c
: 文件操作功能。main.c
: 提供用户交互界面。student.c
: 实现学生信息的增删改查。file_ops.c
: 实现数据的保存和加载。在student.h
中,我们定义了一个结构体Student
来存储学生的基本信息。这为我们提供了一个方便的方式来组织和管理学生数据。
在fileops.c
中,我们使用saveToFile
函数将所有学生的数据保存到一个名为students.txt
的文件中。我们使用标准的文件I/O函数,如fopen
和fprintf
,来执行这些操作。
loadFromFile
函数用于从students.txt
文件中加载学生数据。我们使用fscanf
函数来读取文件中的每一行,并将数据存储在全局的学生数组中。
addStudent
函数允许用户输入学生的基本信息,并将其添加到全局的学生数组中。
modifyStudent
函数首先要求用户输入要修改的学生的学号。然后,它搜索该学号的学生,并允许用户修改其信息。
deleteStudent
函数通过学号来删除特定的学生信息。它将数组中后面的学生向前移动,从而覆盖要删除的学生的位置。
queryStudent
函数允许用户输入学号,并显示与该学号匹配的学生的信息。
在main.c
中,我们提供了一个简单的文本菜单,允许用户选择要执行的操作,如添加、修改、删除或查询学生信息。用户可以根据屏幕上的提示输入相应的数字来选择操作。
此处只展示部分代码,具体代码可前往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);
}
}