当前位置:   article > 正文

简单的学生信息管理系统——C语言实现_c语言学生简单的信息管理系统

c语言学生简单的信息管理系统

目的:基于文件系统管理应用程序的数据

性质:设计性

要求:请构建一个学生信息管理系统,管理信息至少包括:

  • 学生基本信息(学号、姓名、年龄)
  • 课程基本信息(课程号、课程名称)
  • 选课基本信息(学号、课程号、成绩)
  • 授课基本信息(授课教师工号、课程号)
  • 教师基本信息(授课教师工号、授课教师姓名)

          至少完成下列操作。

  1. 系统第一次运行时,自动创建必要的文件,所有数据用文件存储(不允许用数据库);
  2. 系统能够添加新的管理信息,如增加一名新的学生信息;
  • 增加学生基本信息(学号、姓名、年龄)
  • 增加课程基本信息(课程号、课程名称)
  • 增加选课基本信息(学号、课程号、成绩)
  • 增加授课基本信息(授课教师工号、课程号)
  • 增加教师基本信息(授课教师工号、授课教师姓名)
  1. 系统能够显示各项管理信息,如显示所有学生的基本信息;
  • 显示学生基本信息(学号、姓名、年龄)
  • 显示课程基本信息(课程号、课程名称)
  • 显示选课基本信息(学号、课程号、成绩)
  • 显示授课基本信息(授课教师工号、课程号)
  • 显示教师基本信息(授课教师工号、授课教师姓名)
  1. 系统能够从各项管理信息中删除某个特定信息,如删除学号等于001的学生基本信息;
  • 删除学生基本信息(学号、姓名、年龄)
  • 删除课程基本信息(课程号、课程名称)
  • 删除选课基本信息(学号、课程号、成绩)
  • 删除授课基本信息(授课教师工号、课程号)
  • 删除教师基本信息(授课教师工号、授课教师姓名)
  1. 系统能够从各项管理信息中修改某个特定信息,如修改学号等于001的学生的年龄为21岁;
  • 修改学生基本信息(学号、姓名、年龄)
  • 修改课程基本信息(课程号、课程名称)
  • 修改选课基本信息(学号、课程号、成绩)
  • 修改授课基本信息(授课教师工号、课程号)
  • 修改教师基本信息(授课教师工号、授课教师姓名)
  1. 系统能够完成下列查询(下划线代表用户输入的条件)
  • 显示年龄不大于    岁的学生信息;
  • 显示        (课程名称)的课程号;
  • 显示        (课程名称)的平均成绩;
  • 显示讲授        (课程名称)的教师姓名;
  • 显示开设课程的总数;
  1. 系统能够完成数据一致性检查;
  • 学号一致性检查:选课基本信息中的学号是否出现在学生基本信息中(例如:选课基本信息中出现“001”的学号,但是该学号并不出现学生基本信息中,意味着不存在学号为“001”的学生,系统将提示错误)
  • 课程号一致性检查:选课基本信息中的课程号是否出现在课程基本信息中(例如:选课基本信息中出现“C001”的课程号,但是该课程号并不出现课程基本信息中,意味着不存在课程号为“C001”的课程,系统将提示错误)

概要设计思想:

系统整体的设计思路的通过函数的嵌套进行不同功能的切换,在不同的功能函数之中进行对不同需要的数据进行不同方式的读取与存写。主体的交互通过读入输入的值,通过switch进入到不同的模块,通过加入系统的一些功能增强可视化效果和使用体验,如清屏,字体颜色变换等。

本程序使用的是结构体数组进行数据的存储读写,其容量默认开len=100,这个可以通过在代码最前端进行修改。这样有好有坏,好处就是易于操作,代码清晰易懂,坏处是难以动态的改变容量,有可能造成空间的浪费或者溢出。

其中最典型的工作流程就是对于数据的读取:

①判断文件是否存在。

②对文件进行读取,放入预置的相应结构体数组中。其中在读取的时候利用while(!Feof)函数进行操作。

③每一次增删改查之后,都会重新写入相应的.txt文档进行数据的及时保存。

对于XML的设计,基于云端备份与恢复的思想进行设计。

在这一整个系统设计中,最为重要的是把我好C语言对于文件调用的方法,使用fopen()对文件进行操作,不同的尾缀可以理解为不同的权限,"w"、"a"、"r"。

部分代码如下:

页面设计:

  1. color(2);
  2. printf("\t\t\t ******************************************************\n\n");
  3. printf("\t\t\t * 信息管理系统 * \n\n");
  4. printf("\t\t\t ******************************************************\n\n");
  5. color(16);
  6. printf("\t\t\t*********************系统功能菜单*************************\n");
  7. printf("\t\t\t ---------------------- ----------------------\n");
  8. printf("\t\t\t ********************************************* \n");
  9. printf("\t\t\t * 0.系统帮助及说明 * * 1.查 询 信 息 * \n");
  10. printf("\t\t\t ********************************************* \n");
  11. printf("\t\t\t * 2.添 加 信 息 * * 3.修 改 信 息 * \n");
  12. printf("\t\t\t ********************************************* \n");
  13. printf("\t\t\t * 4.删 除 信 息 * * 5.进行XML操作 * \n");
  14. printf("\t\t\t ********************************************* \n");
  15. printf("\t\t\t * 6.刷新页面 * * 7.退 出 系 统 * \n");
  16. printf("\t\t\t *********************************************\n");
  17. printf("\t\t\t ---------------------- ----------------------\n");

颜色更改,使得视觉效果更好:

  1. void color(short x) //自定义函根据参数改变颜色
  2. {
  3. if(x>=0 && x<=15)//参数在0-15的范围颜色
  4. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色
  5. else//默认的颜色白色
  6. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
  7. }

信息管理系统设计文档

1.系统概述

信息管理系统能够对其中保存的学生基本信息、课程基本信息、选课基本信息、授课基本信息和教师基本信息进行管理,能够实现第一次运行时自动创建必要文件,数据用文件存储、添加新的管理信息并完成一致性检查、显示系统中的各项管理信息、删除系统中的特定管理信息、修改系统中的特定管理信息、完成有特殊要求的管理信息查询以及用XML文件完成数据交换等功能。

2.概要设计

系统整体的设计思路是通过函数的嵌套进行不同功能的切换,在不同的功能函数之中对不同需求的数据进行不同方式的读取与存写。主体的交互通过读入输入的值,通过switch进入到不同的模块,通过加入系统的一些功能增强可视化效果和使用体验,如清屏,字体颜色变换等。

本系统设计使用结构体数组进行数据的存储与读写,其容量默认为len=100,这个可以通过在代码最前端进行修改。这种方式有好处也有坏处,好处就是易于操作,代码清晰易懂,坏处是难以动态地改变容量,有可能造成空间的浪费或者溢出。

其中最典型的工作流程就是对于数据的读取:

①判断文件是否存在。

②对文件进行读取,放入预置的相应结构体数组中。其中在读取的时候利用while(!feof)函数进行操作。

③每一次增删改查之后,都会重新写入相应的.txt文档及时保存数据。

对于XML数据交换功能的设计,基于云端备份与恢复的思想进行设计。

  1. 详细设计

3.1添加信息功能

3.1.1功能概述

能够将学生、课程、选课、授课以及教师信息等各项管理信息添加到系统中,共分为以下几点:添加包括学号、姓名、年龄在内的学生基本信息;添加包括课程号、课程名称在内的课程基本信息;添加包括学号、课程号、成绩在内的选课基本信息;添加包括授课教师工号、课程号在内的授课基本信息;添加包括授课教师工号、授课教师姓名在内的教师基本信息。

在添加课程信息和选课信息时会进行一致性检查,即查找系统中是否存在输入的学号或课程号对应的学生或课程信息,若不存在则管理信息将无法添加。

3.1.2业务流程

 

3.1.3具体实现

FILE *fp;

fp=fopen("student.txt","a");

if(fp==NULL){

fp=fopen("student.txt","w");fclose(fp);

fp=fopen("student.txt","a");

 “a”表示使用文件方式为“追加”,即在文件尾添加数据,文件必须存在,否则出错。如果文件是空的,则使用“w”创建一个新文件供数据输入。

添加信息模块最为关键的功能就是一致性检验。在代码中的sn、ke用来计数,分别记录录入学生信息和课程信息的个数,为下一步的一致性检验作铺垫。

while(!feof(fp))为检验是否到了文件的尾部,若是文本文件的尾部,则结束循环,继续下一步操作,若否,则继续循环;代码中的sum也是计数的作用,它是用来记录输入有误导致信息添加失败的次数,n-sum即用总的输入次数减去输入错误的次数,得到信息添加成功的次数,并打印出来。

for(j=0;j<sn;j++){

if(stu[j].number==cho[i].stunumber)

    break;

}

  if(j!=sn){}

else{

   printf("没有学号为:%lld 的学生信息!\n信息添加失败!!\n",cho[i].stunumber);

   sum++;

continue;

}

sn表示录入学生信息的数量,用if语句来判断输入的学号是否存在于系统内的学生信息中,若存在则跳出循环,而不存在时再执行一步j++,然后结束循环,此时j的值与sn相等,执行else语句,sum++,即信息添加失败次数加一。添加授课信息和选课信息时,一致性检验思想和实现形式都是这样的。

3.2查询信息功能

3.2.1功能概述

能够从系统中查询特定管理信息,分为查询学生信息、查询课程信息、查询选课信息、查询授课信息、查询教师信息、特殊查询模式、退出查询模式七个部分。

3.2.2业务流程

 

3.2.3具体实现

关键算法是对已有文档的读取与输出

对课程文档的读取

      fscanf(fp,"%lld %s",&cou[0].number,cou[0].name);

对于读取内容的输出

      while(!feof(fp)){

          printf("\t\t课程号:%lld 课程名称:%s\n",cou[0].number,cou[0].name);

          fscanf(fp,"%lld %s",&cou[0].number,cou[0].name);

          }

3.3特殊查询信息功能

3.3.1功能概述

特殊查询包括以下6个功能:

1、按年龄筛选学生信息   2、查询课程号信息

3、查询课程平均成绩信息 4、查询课程教师信息

5、查询课程总数信息     6、退出特殊查询模式

3.3.2业务流程

 

3.3.3具体实现

1、按年龄筛选学生信息

通过fp=fopen("student.txt","r")只读文件,通过while(!feof(fp))确定光标是否到文件尾部,如果没有到文件尾部则继续执行循环,循环内嵌入j,退出循环后,j即为满足条件的学生数。

2、查询课程号信息

通过 if(strcmp(name,cou[i].name)==0)比较文件内的课程名与输入的课程名是否相同,如果相同则输出该课程的课程号,否则输出系统中没有该课程的信息。

3、查询课程平均成绩信息

输入课程名称,通过 if(strcmp(name,cou[i].name)==0)比较文件内的课程名与输入的课程名是否相同,如果相同则将课程号输出给number,查询number号的课程输出成绩并通过printf("课程 %s 共 %d 人,平均成绩为 %.3lf\n",name,j,(sum*1.0)/(j*1.0))打印平均成绩。

4、查询课程教师信息

与3功能过程相同,先通过课程名查询课程号,再利用课程号查询相应教师工号,if(number==tea[i].number){printf("讲授 %s 课程的老师姓名为:%s\n",name,tea[i].name);通过教师工号查询教师姓名。

5、查询课程总数信息

如果系统中没有文件则直接输出无课程信息,如果则通过fscanf(fp,"%lld %s",&cou[i].number,cou[i].name),累加课程数。

3.4数据交换功能

3.4.1 功能概述

本学生管理系统设计了XML的文件生成模块与导入模块,模拟数据的移植和备份过程。能够将系统中的数据备份为XML文档,或将符合格式要求的XML文档中的数据导入系统中。

3.4.2 业务流程

 

3.4.3 具体实现

在数据进行移植之前必须对两台服务器之间的数据储存进行统一,也就是遵循相同的XML的DTD文档格式,不然在进行数据移植的过程中会出现问题。

利用C语言对文件可以进行读写的功能来实现XML文档的备份和导入操作。关键点在于XML文件的格式,头行为“<?XML version=\"1.0\"\tencoding=\"GB2312\"?>\n<root>”,在进行读写时,要注意使用scanf读取字符串在遇到空格时会自动截断,所以头文件需要使用三段scanf进行读取,然后依次遵照XML的格式进行信息的写入,关键点就在于严格遵照预先指定的DTD文档格式,在格式相应的地方嵌入相应的数据信息。

在进行导入移植数据时,通过读取字符串,并且读入相应位置的信息,进行数据的导入。根据事先规定的DTD文档格式,可以把相应位置的信息提取出来,字符串值则使用stcpy进行复制读入信息,在读取long long类型时,使用循环叠加语句“k=k*10+a[i]-’0’”即可完成读取。

3.5修改信息功能

3.5.1功能概述

能够修改系统中的某项特定管理信息,共分为以下几点:

修改学生信息中学生的姓名、年龄;修改课程信息中课程的名称;删除选课信息中的成绩;修改授课信息中的教师工号;修改教师信息中教师的姓名。

3.5.2业务流程

 

3.5.3具体实现

先通过switch语句完成功能选择,fopen打开对应需要修改信息的文件,同时将fp值定为“w”,读入内存中完成只写任务。如果scanf的值为6,满足if(n==6), 暂停程序执行并且清屏,进入case函数,输入1至5,分别对应不同的功能模块,case1,打开文件且为只读模式,如果文件为空,则输出“系统中无学生信息”,若文件不为空输入相应信息,其中while(!feof(fp))是C语言标准库函数函数,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,随后输入信息并完成修改。后续的程序类似,通过修改对象的ID号为判断对象,在内存中循环遍历查找到对象,再对该对象进行信息的修改,并替换原信息。

3.6删除信息功能

3.6.1功能概述

能够删除系统中的某项特定管理信息,共分为以下几点:

删除包括学号、姓名、年龄在内的学生基本信息;删除包括课程号、课程名称在内的课程基本信息;删除包括学号、课程号、成绩在内的选课基本信息;删除包括授课教师工号、课程号在内的授课基本信息;删除包括授课教师工号、授课教师姓名在内的教师基本信息。

3.6.2业务流程

 

3.6.3具体实现

//feof()是文件结束检测函数,如果没有结束,返回值是0,结束了是1; 由于feof(fp)返回0才是未结束,所以通常写成while(!feof(fp)),这样使得没有结束时进行循环;

 

首先先用fscanf()将数据按格式输入到文件流中,然后利用循环嵌套判断,把和输入学号相同以外的数据流用fprintf()输出到文件流中,完成删除操作。

4.系统测试

4.1 测试环境

Windows 10

Dev-C++ 5.11

4.2 测试步骤

4.2.1初次运行程序,显示初始菜单界面

输入1,系统显示查询信息功能界面,依次输入1至5查询系统中已有信息,均显示系统中无管理信息

 

4.2.2测试系统添加信息功能

输入2,系统显示添加信息界面,开始添加信息

  1. 输入1,添加5名学生信息

101 赖 22

102 王 20

103 刘 21

104 迟 20

105 何 21

  1. 输入2,添加5门课程信息

201 数据管理

202 计算机网络

203 高等数学

204 大学英语

205 大学语文

  1. 输入5,添加5名教师信息

501 周周

502 武武

503 郑郑

504 李李

505 刘刘

  1. 输入4,添加5项授课信息

201 501

202 502

203 503

204 504

205 505

  1. 输入3,添加10项选课信息

101 201 92

101 202 90

102 203 85

102 204 93

103 205 84

103 201 87

104 202 86

104 203 89

105 204 83

105 205 84

(6)以上数据全部添加成功后,进行一致性检查测试

①输入3添加2项选课信息

106 201 90 系统显示没有学号为106的学生,添加失败!

104 207 85 系统显示没有课程号为207的课程,添加失败!

 

②输入4添加2项授课信息

207 502 系统显示没有课程号为207的课程,添加失败!

203 508 系统显示没有教师工号为508的教师,添加失败!

 

(7)输入6退出添加信息模式,返回初始菜单界面

4.2.3测试系统显示信息功能

输入1,系统显示查询信息功能界面,开始查询信息

  1. 依次输入1至5,显示刚刚添加到系统中的学生、课程、选课、授课和教师信息;

  1. 输入6,进入特殊查询信息模式

①输入1,显示年龄不大于21岁的学生信息(共4名)

②输入2,显示数据管理课程的课程号(201)

③输入3,显示数据管理课程的平均成绩(89.500)

④输入4,显示讲授数据管理课程的教师信息(周周)

⑤输入5,显示开设课程总数(共5门)

(3)输入6退出特殊查询模式,再输入7退出查询模式,返回初始菜单界面

4.2.4测试系统数据交换功能

输入5,系统显示XML数据交换功能界面,开始数据交换

  1. 输入1备份XML信息,查看文件夹中生成的XML文件,同时删除文件夹中所有储存管理信息的txt文档

(2)输入2导入XML信息,进入查询信息模式,查询系统中现有管理信息,检查信息是否成功导入

4.2.5测试系统修改信息功能

输入3,系统显示修改信息功能界面,开始修改信息

(1)输入1修改学生信息,将学号为101的学生年龄修改为21

(2)输入3修改选课信息,将学号为105的学生的205号课程成绩改为85

(3)输入5修改教师信息,将教师工号为505的教师姓名改为陈陈

(4)输入6退出修改信息模式,返回初始菜单界面,进入查询信息模式,查询系统中现有管理信息,检查信息是否成功修改

4.2.6测试系统删除信息功能

输入4,系统显示删除信息功能界面,开始删除信息

(1)输入1删除学生信息,删除学号为105的学生信息(同时其选课信息也被一并删除)

(2)输入2删除课程信息,删除课程号为204的课程信息(同时包含204的选课信息和授课信息也被一并删除)

(3)输入5删除教师信息,删除教师工号为505的教师信息(同时其授课信息也被一并删除)

(4)输入6退出删除信息模式,返回初始菜单界面,进入查询信息模式,查询系统中现有管理信息,检查信息是否成功删除。

最终系统中的信息如下图所示:

4.3 测试结果

4.3.1系统初次运行时,自动创建必要文件(存储学生、课程、教师、授课、选课信息),系统中没有任何管理信息;

4.3.2系统能够添加新的管理信息(学生、课程、教师、授课、选课信息)。在添加选课信息和授课信息时,会进行一致性检查,即若输入的学号或课程号不存在于系统中,系统将报错,该管理信息将无法添加;

4.3.3系统能够显示各项管理信息。查询功能下系统可以显示添加的所有管理信息。查询模块中,还可以进行特殊查询,如显示年龄不大于某一数值的学生信息、显示某一门课程的课程号和平均成绩等;

4.3.4系统能够实现数据交换功能。系统可以将其中的管理信息备份为独立的XML文件,也可以将具有规定格式的XML文件中的信息导入到系统中。

4.3.5系统能够从各项管理信息中修改某个特定信息,如更改学生的年龄、姓名等;

4.3.6系统能够从各项管理信息中删除某个特定信息。删除操作也具有一致性,如删除学生信息时,该学生对应的选课信息也会一并删除;删除教师信息时,对应的授课信息也会一并删除;删除课程信息时,对应的授课信息和选课信息也会一并删除。

5.结束语(心得体会)

本次实践作业构建了一个学生信息管理系统,其中管理的信息包括了学生基本信息、课程基本信息、选课基本信息、授课基本信息和教师基本信息。能够实现包括系统第一次运行时,自动创建必要的文件,所有数据用文件存储;添加新的管理信息;显示各项管理信息;从各项管理信息中删除某个特定信息;从各项管理信息中修改某个特定信息;完成具有特殊要求的信息查询;用XML文档完成数据交换;完成数据一致性检查等功能。

第一章为系统概述,主要阐述了本系统的基本情况;第二章为概要设计,主要说明了系统设计思想,系统框架,重要数据结构,典型操作的工作流程等等;第三章为具体实现设计,分别按照不同功能以此展开详细说明;第四章为系统测试,根据功能的不同按照操作步骤逐个实现系统七项功能;最后一章为结束语,对整个系统及报告进行总结并阐述心得体会。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/607996
推荐阅读
相关标签
  

闽ICP备14008679号