您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言学生信息管理系统(文件版)源码下载、源码解析和设计思路

时间:12-29来源:作者:点击数:

在《C语言学生信息管理系统演示和说明(文件版)》一节中,我们对学生信息管理系统进行了介绍和演示,这节就来分析一下它的源码。

学生信息管理系统源码下载地址:http://pan.baidu.com/s/1hqZRiDY    密码:ty9f

本地下载:

StuInfoFile.zip
de638e72f8846c4396e007bdbe57c8fa.zip (6.56 KB)

各位读者不妨先将源码下载下来浏览一遍,记住关键的几个函数,整理一下不了解的知识点,做到心中有数。

一. 整体设计思路

要想持久化地保存数据,必须要将数据写入磁盘中;本程序也不例外,我们会将学生信息最终都保存到文件中。当增加、删除、修改学生信息时,我们也应该对文件做出同样的操作。这就是本节的重点:

  • 如何检索文件;
  • 如何在文件中插入数据;
  • 如何删除文件中的部分数据;
  • 如何修改文件中的数据。

二. 关键知识点

大家需要先学习一下该程序中涉及到的几个关键知识点,有了这些必备条件,我们才能更容易理解代码。

1) 模块化编程

本程序的代码比较多,总共有700多行,需要分门别类、有规划地放到不同的源文件中,这就是所谓的模块化编程(也即多文件编程)。在模块化编程中,需要在 .c 文件中定义函数,在 .h 中声明函数、变量、自定义类型、结构体、宏等,请大家猛击《C语言模块化编程》一章了解详情。

2) 文件操作

我们的程序将学生信息保存到文件中,并根据学号进行排序,这样在查询和定位时就比较方便。那么,问题来了,如何在文件的中间插入、删除、修改数据呢?如何在文件中定位某个学生的信息呢?请大家阅读《C语言文件操作》一章学习。

常见的文件大都是顺序文件,也就是文件内容是依次存储在硬盘上的。顺序文件检索速度快,但是不利于数据的插入、删除和修改。例如,在文件中间插入数据时,理论上要将后面的数据整体后移,但是这会带来风险,很有可能覆盖后面的数据,导致其他文件出错,所以这种方式是绝对禁止的。

大家在阅读教程时尤其要注意对顺序文件的插入、删除、修改操作是如何实现的,这是程序得以实现的关键。

3) 循环菜单

程序运行时,会不停地显示主菜单和子菜单,而不是执行完一次操作就退出,这是如何实现的呢?请大家猛击《C语言循环菜单的设计,让程序一直运行》了解详情。

三. 程序的整体架构

程序由6个文件构成,其中包括3个头文件(.h)和3个源文件(.c)。

1) main.c 是主文件,包含了主函数 main() 以及两个打印菜单的函数 printMainMenu()、printSubMain()。

2) common.h 是程序的配置文件,每个文件都应该将它包含进去。配置文件中主要是宏定义,每一个宏都是一个配置选项,用户可以更改。例如:

  • FILENAME 宏定义了数据文件的路径,也就是将学生信息保存到何处,默认是当前目录下的 stu.data。如果你希望将文件放在其他目录下,完全可以改成诸如D:\\Demo\stu.dataC:\\data.stu的形式。
  • MAX_STU_AGE 宏定义了学生的最大年龄,如果用户输入的年龄大于该值,就会给出提示。

3) tools.c 和 tools.h 主要提供了工具类函数。所谓工具类函数,也就是通用函数,它们不针对具体程序编写,可以用在当前程序中,也可以用在其他程序中,在移植的过程中一般不需要修改代码。

4) stu.c 和 stu.h 是主要的两个文件,包含了对学生信息进行增删改查的函数。

四. 索引的建立

为了方便检索,我们将学生信息按照学号从小到大依次保存到文件中。但即便这样,直接检索文件数据也是非常低效的,所以我们将所有学生的学号保存到一个 int 数组中,这样:

1) 新增学生信息时,如果学号和数组中某个元素的值相等,就说明该学生存在,不能插入。

2) 新增、删除、修改、查询学生信息时,可以很容易地获取当前学号在数组中的下标,进而计算出该学生信息在文件中的位置。例如,学号10在数组中的下标为5,现在想删除该学生信息,那么将文件内部的位置指针调整到 5*sizeof(STU) 处就可以(STU是保存学生信息的结构体)。

这个数组和文件中学生信息的位置直接关联,我们不妨将它称为索引。需要注意的是,每次插入、删除学生信息时都要更新索引,这就是 updateIndex() 函数的作用。

总结起来,索引的作用是更高效地检索和定位学生信息。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门