【存档】大一C语言实训
学生信息管理系统实训指导
一、程序功能
在学校中,经常会因为各种各样的活动用到学生的信息。本程序便是为了更方便的查询和管理学生信息。其基本功能模块如下图:

主界面如下图所示:

二、程序设计目的
1.重点掌握数组的应用
2.重点掌握结构体的应用
3.重点掌握文件读写功能
4.重点掌握自定义函数等知识
三、设计思路
程序设计一般由两部分组成:数据结构+算法,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。
1.数据结构
数组是程序中最常用的结构数据类型,用来描述由固定数目的同一类型的元素组成的数据结构。使用静态数组需要预先估计空间的大小,所以先预定义一个常数N,表示学生人数上限(即最多录入几个学生的信息)。
#define N 2000
//定义学生信息结构体
typedef struct student {
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
char Class[20];//班级
char home1[10];//家庭住址【省】
char home2[10];//家庭住址【市】
char phone[11];//电话号码
} St;
St S[N];//定义全局变量存放学生信息
int L = 0; //定义全局变量存放已录入学生人数
1) 该数组最多可以保存2000个学生的信息,该2000个学生的信息存放到数组S中,录入学生的总数存放到变量L中。
2) 本程序需要information.txt和number.txt两个文件。information.txt文件保存学生的信息(即数组S中的数据保存到information.txt文件中),number.txt文件保存录入学生的个数(即变量L中的数据保存到number.txt文件中)。
3)数组S和变量L为全局变量,可供所有的模块使用,所以所设计的函数都不带参数。
2.函数设计
1、Menu函数
函数原型:void Menu();
功能:显示菜单。
2、IntputS函数
函数原型:void IntputS ();
功能:录入学生信息。
3、ShowS函数
函数原型:void ShowS();
功能:显示学生信息。
4、SearchS函数
函数原型:void SearchS();
功能:查找某一学生信息。
5、ScreenS函数
函数原型:void ScreenS();
功能:分类筛选学生信息。
6、SortS函数
函数原型:void SortS();
功能:按年龄排列学生信息。
7、SearchS函数
函数原型:void SearchS();
功能:查找某一学生信息。
8、AddS函数
函数原型:void AddS();
功能:增加某一学生信息。
9、DeleteS函数
函数原型:void DeleteS();
功能:删除某一学生信息。
10、ChangeS函数
函数原型:void ChangeS();
功能:修改某一学生信息。
11、FileToMemoryL函数
函数原型:void FileToMemoryL();
功能:将文件L里的信息写入到内存中。
12、FileToMemoryS函数
函数原型:void FileToMemoryS();
功能:将文件S里的信息写入到内存中。
13、MemoryToFileL函数
函数原型:void MemoryToFileL();
功能:将L里的信息写入到文件中。
14、MemoryToFileS函数
函数原型:void MemoryToFileS();
功能:将S里的信息写入到文件中。
3、流程图
(1)主函数流程图:

(2)函数详细说明:
1、Menu函数:输出菜单,无其他操作。
2、FileToMemoryL函数:将 d:\\information.txt 文件录入到数组S中。
3、FileToMemoryS函数:将 d:\\number.txt 文件录入到变量L中。
4、IntputS函数:用户输入一个值,(假设这个值是5,意思就是用户要录入5个学生的信息),然后引导用户去依次输入学生的信息,将用户输入的信息录入到数组S中。需要注意的是,不一定是从S[0]开始录入,应当是S[L],并且L的值应当随着人数的增加而增加。
5、ShowS函数:输出数组S中的信息即可。需要注意的是,一直输出到S[L-1],而不是将S全部输出。
6、SearchS函数:让用户选择性输入姓名或者学号,然后利用strcmp函数和for语句遍历数组S并进行对比找出这名学生,并输出其信息,如果不存在此学生,那么输出“不存在此学生”。
7、ScreenS函数:根据提示,引导用户去选择按照“省”、“市”、“性别”、“年龄”进行筛选分类。当用户选择后,使用strcmp函数和for语句遍历数组S去寻找对应的信息,并且输出。
8、SortS函数:让用户选择是降序还是升序,然后使用冒泡排序进行排序并且输出。
9、AddS函数: 相当于IntputS函数的简化版,直接提示用户依次输入需要增加的学生的信息,然后将用户输入的信息录入到S[L]中。并且在录入完毕后应在函数末尾加上一条语句:L++;。
10、DeleteS函数:让用户选择性输入姓名或者学号,然后通过strcmp函数和for语句遍历数组S去寻找这名学生,如果学生存在,那么将此学生信息删除,如果不存在,那么输出“不存在此学生”。函数的末尾加上一条语句:L--;。(具体删除方法可能不止一种,我的建议是将此学生的数据与后一名学生的数据进行更换,重复操作,直到此学生的数据进入S[L-1])
11、ChangeS函数:让用户选择性输入姓名或者学号,然后通过strcmp函数和for语句遍历数组S去寻找这名学生,如果学生存在,那么引导用户去进行信息的修改,如果学生不存在,输出“不存在此学生”。
12、MemoryToFileL函数:将L中的数据写入到 d:\\number.txt 文件中。
13、MemoryToFileS函数:将数组S中的数据写入到d:\\information.txt文件中。