在《C语言学生信息管理系统演示和说明(数据结构版)》一节中,我们对学生信息管理系统进行了介绍和演示,这节就来分析一下它的源码。
学生信息管理系统源码下载地址:http://pan.baidu.com/s/1kUsIcuz 提取密码:fpd3
本地下载:
各位读者不妨先将源码下载下来浏览一遍,记住关键的几个函数,整理一下不了解的知识点,做到心中有数。
要想持久化地保存数据,必须要将数据写入磁盘中;本程序也不例外,我们会将学生信息最终都保存到文件中。在《C语言学生信息管理系统(文件版)源码下载、源码解析和设计思路》一节中我们看到,直接对文件数据进行增删改查操作不仅麻烦,而且低效,所以我们引入了数据结构中的单链表。
当对学生信息进行插入、删除、修改操作时,我们需要先更新单链表,再将单链表中的所有数据(包括未修改的数据)更新到文件。如此,对文件进行的就是整体操作,就简单很多,可以先将文件内容清除,再写入新的数据。
需要注意的是:只能将节点中的数据写入文件,不能将 next 节点的指针写入。例如:
typedef struct _NODE{
STU data;
struct _NODE *next;
}NODE;
只需要将成员 data 写入文件,而不能写入 next。
这是因为,next 是指针,指向内存中的某个位置,程序重新启动时,它的内存布局和上次肯定不同,next 的指向也会发生改变,所以每次启动程序时都必须读取文件中的数据新建单链表,存储 next 是没有意义的。总结:对单链表的增删改查是本程序的重点。
大家需要先学习一下该程序中涉及到的几个关键知识点,有了这些必备条件,我们才能更容易理解代码。
本程序的代码比较多,总共有670多行,需要分门别类、有规划地放到不同的源文件中,这就是所谓的模块化编程(也即多文件编程)。在模块化编程中,需要在 .c 文件中定义函数,在 .h 中声明函数、变量、自定义类型、结构体、宏等,请大家猛击《C语言模块化编程》一章了解详情。
程序运行时,会不停地显示主菜单和子菜单,而不是执行完一次操作就退出,这是如何实现的呢?请大家猛击《C语言循环菜单的设计,让程序一直运行》了解详情。
大家在阅读代码之前,需要对数据结构中的单链表有所了解,知道如何对节点信息进行增删改查。
程序由6个文件构成,其中包括3个头文件(.h)和3个源文件(.c)。
1) main.c 是主文件,包含了主函数 main() 以及两个打印菜单的函数 printMainMenu()、printSubMain()。
2) common.h 是程序的配置文件,每个文件都应该将它包含进去。配置文件中主要是宏定义,每一个宏都是一个配置选项,用户可以更改。例如:
3) tools.c 和 tools.h 主要提供了工具类函数。所谓工具类函数,也就是通用函数,它们不针对具体程序编写,可以用在当前程序中,也可以用在其他程序中,在移植的过程中一般不需要修改代码。
4) stu.c 和 stu.h 是主要的两个文件,包含了对学生信息进行增删改查的函数。