C语言结构体链表实现学生信息管理系统
使用C语言中的结构体结合动态链表技术,可以高效地管理学生的基础信息与课程成绩。本系统实现了数据的动态录入、按学号/姓名等多维度的查询与修改、删除记录以及文件自动保存功能,适用于初学者理解内存管理与基本算法逻辑。
一、系统设计思路
为了将学生的基本信息与各科成绩解耦管理,系统将整体划分为“学生档案管理”与“学生成绩管理”两个独立但关联的子模块。在数据结构上,利用链表的动态特性来应对人员数量的变动,每个节点代表一条完整的学生记录,并通过指针链接。
二、核心数据结构定义
在头文件 student.h 中,定义了用于承载信息的结构体与枚举类型。这种设计确保了同一学生在两个子系统中的 ID 能够对应,同时规范了输入格式。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
// 定义日期结构体
struct Date {
int year;
int month;
int day;
};
// 生源地枚举(0-7 代表不同地区)
enum Depart {sdjinan,sdqingdao,sdyantai,sdweifang,sdheze,sddezhou,sdbinzhou,sdweihai};
// 学生档案结构体,包含基础信息和指向下一个节点的指针
struct Stu_record {
int id; // 学号
char name[20]; // 姓名
char sex[10]; // 性别
struct Date birth; // 出生日期
int clas; // 班级
enum Depart syd; // 生源地
struct Stu_record *next;
};
// 学生成绩结构体
struct Stu_score {
int id;
char name[20];
int clas;
double course1; // 课程1成绩
double course2; // 课程2成绩
double course3; // 课程3成绩
double avg; // 平均分
struct Stu_score *next;
};
三、关键功能实现说明
第1步:初始化主菜单系统
在主循环 main.c 中,首先输出欢迎界面,并提供进入档案或成绩系统的入口。该层设计使用了无限 while 循环配合 switch-case 语句维持控制台程序的持续运行。
第2步:录入与维护学生档案
进入档案管理后,最核心的操作是数据的录入与存储。
- 录入流程: 调用
readin_record()函数。程序提示输入总人数,随后通过循环逐个分配内存创建新节点,并将输入的信息(如学号、生日等)填入结构体。 - 排序入库: 在插入链表时(
insert` 函数),为了保证后续查找的高效性,新节点会被自动放置在学号比它大的前一个节点之前,从而实现链表按学号升序排列。 - 文件保存: 每次录入完成后,使用
FILE*指针以二进制追加模式打开Tdata_new.txt,将内存中所有节点的数据序列化写入磁盘。
第3步:多维度信息查询
系统内置了多种检索机制以满足不同的搜索需求:
- 精确匹配:
id_inquiry_record()与name_inquiry_record()遍历链表,比对目标节点的 ID 或字符串(strcmp),找到则打印信息。 - 范围组合:
clasSyd_inquiry_record()支持同时筛选班级与生源地,当满足两个条件时输出结果。
第4步:数据处理与分析
除了基础的 CRUD(增删改查),系统还提供统计学计算。
- 生源地统计: 遍历档案链表,使用数组下标对应枚举值计数,计算出各地区的百分比分布。
- 学业分析: 在成绩模块中,根据三门课的成绩计算平均值并自动存储;提供按课程分析最低分、最高分及不及格人数的报表。
四、代码框架参考
以下是驱动整个控制台应用的核心入口与菜单分发逻辑示例。由于涉及大量重复的键盘输入验证(scanf 回圈处理)与文件 IO 操作,代码较为冗长,建议在实际开发中提取公共的 IO 模块。
int main() {
while(1) {
int n;
menu1(); // 显示主菜单
printf("请输入您的选择:\n");
scanf("%d",&n);
switch (n) {
case 1: menu2_record(); break; // 进入档案管理
case 2: menu2_score(); break; // 进入成绩管理
case 0: return 0; // 退出系统
default: printf("无效选项,请重试。\n");
}
system("pause");
system("cls");
}
return 0;
}
以上就是C语言结构体链表和指针实现学生管理系统 的详细内容,更多关于C语言基础编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













