




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生选修课管理系统设计 CHANGSHA UNIVERSITY OF SCIENCE & TECHNOLOGY 课程设计(论文)题目: 学生选修课管理系统设计 学生姓名:江元学 号:201153100121班 级: 信息与计算科学11-01班所在院部: 数学与计算科学学院指导教师:龚红仿 2013 年 1 月学生选修课管理系统设计学生姓名:江元学 号:201153100121班 级:信计11-01班指导教师:龚红仿 完成日期: 2013年1月11日学生选修课管理系统设计摘要C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次学生选修课系统管理设计时间虽然仅有一个星期,但确实使我受益非浅。通过学生选修课系统管理设计我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对Microsoft Visual C+ 6.0的使用技巧。C语言是在国内外广泛使用的一种计算机语言 。语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。关键词:学生选修课系统管理;C语言课程设计;计算机技术;模块化程序设计;信息录入;浏览信息;选课;查询STUDENTS ELECTIVE COURSES MANAGEMENT SYSTEM DESIGNABSTRACTC language curriculum design and modern computer technology in the practical application of the combination, we are at this stage of learning theory course on their own side of the ability of a good test, from the beginning of the algorithm to run after the beautiful graphical interface and exciting available procedures, is a very good learning and training process. We consolidate the original theory of knowledge, cultivate our flexible application and integration of the knowledge learned and skills of analysis, ability to solve practical problem. So that we realize that their knowledge and ability in practical application and play. Can not only stimulate consciousness of innovation, also can develop creative ability, communication skills training. The student elective system management design time although only a week, but it does make me benefit. Students elective system management design my rich experience in computer operation, more deep understanding of the C language, familiar with the environment, more increased to Microsoft Visual C+ 6 using skills.The C language is widely used at home and abroad a computer language. Language feature-rich, expressive capability is strong, flexible and convenient use, not only has the advantages of high-level language, but also has many of the characteristics of low-level language, suitable for the preparation of system software. At the same time, I think C language should be the operation of combining theory and curriculum, constantly writing to think, the two are inseparable. Us in the preparation of a larger process should divide it into several small procedures, it would be much easier.Key words: students elective system management; C language curriculum design; computer technology; modular design; information; information query; selection;目录1、需求分析12.1概要设计12.1模块设计及图示12.2主函数流程设计23 详细设计33.1程序中的数据类型33.2函数运行过程详解34、设计和调试分析134.1 调试中遇到的问题134.2 算法复杂度分析154.3 经验和体会155、用户使用说明166、测试数据和测试结果16参考文献221 需求分析假定有N门课程,每门课程有课程编号,课程名称,课程性质,总学分,授课学时,实验上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。要求设计一选修课程系统,使之能提供以下功能:(1)课程信息录入功能(课程信息用文件保存)-输入;(2)课程信息浏览功能-输出;(3)查询功能:(多种查询方式:一种、任意两种组合、三种都能满足)-算法;(1)按学分查询(2)按课程性质查询;(3)按课程名称查询;要求:(1)用C语言实现系统,源程序要有适当的注释,使程序容易阅读;(2)函数功能要划分好(结构化程序设计);(3)至少采用文本菜单界面(如果能采用图形菜单界面更好);(4)可以增加新功能模块2 概要设计本程序功能模块根据程序设计的需求,综4.0合程序的实用性、智能化得考虑,将程序划分为6个模块分别编写:2.1 五个模块分别为:(1)浏览课程信息模块(2)查询课程信息模块(3)进入系统进行选课模块(4)选课情况统计模块(5)录入选课信息模块将备选课程信息录入录入选课信息已选信息学生选课并记录按学分查询按课程性质查询按课程名称查询查询课程信息进入选课输出选课情况选课情况统计学生选修课程管理系统输出文件全部信息浏览课程信息2.2 主函数的流程设计:学生选课系统执行主流程如图所示,先执行主函数开始主函数是否继续进行相应的操作结束输入【05】中所要操作的项目对应的数字中显示菜单函数,通过循环和按键操作来执行相应的操作。按键的有效键值为05之间的任意数值,其他按键为无效输入。各个按键的执行功能为:“1”:浏览已录入的选修课课程信息调用函数,browser();“2”:通过不同的方式查找记录,调用函数search();“3”:进入系统进行选课,调用函数xuan_ke();“4”:查看课程已选情况,调用函数xuanke_information();“5”:录入选修课信息,调用函数input();“0”:退出系统;3 详细设计3.1 程序中定义的数据类型3.1、1 定义与课程有关的结构体struct course int num; /*课程编号*/char name20; /*课程名称*/ char kind10; /*课程性质*/int taltime,ttime,etime,mark,term; /*课程时间,学分,开课信息等*/;3.1.2 定义与学生有关的结构体struct studentint snum;/*学生学号*/int cnum;/*所选课程编号*/char cname20;/*所选课程名称*/;3.2 每个函数的过程详解3.2.1 void f1();函数原型:void f1();函数源程序:void f1()/*常用函数2*/printf(n课程编号 课程名称 课程性质 授课学时 实验或上机学时 总学时 学分 开课学期:n);函数功能及实现:此函数仅包含输出语句,在课程信息输出之前调用此函数,打印出表头信息3.2.2 void menu();函数原型:void menu()函数源程序:void menu()/*主菜单*/ Printf(“nnn”); printf( 欢迎使用学生选课系统! n); printf( * n); printf( * 1-浏览选课信息 2-查询选课信息 * n); printf( * 3-进入选课操作 4-选课情况统计 * n); printf( * 5-录入选课信息 0-退出选课系统 * n); printf( * n); printf( 请选择输入选项编号(请先选择5进行课程信息录入): );函数功能及实现:此函数为输出菜单,进入系统后提示可根据供选择的项目进行后续操作。3.2.3 void browser();函数原型:void browser();函数源程序:/*浏览选课信息*/void browser() FILE *fp;/*定义指向文件的指针*/ struct course c;/*定义课程结构体变量c*/ if(fp=fopen(course.txt,r)=NULL) printf(nCannot open course!n); f1(); for(;!feof(fp);) /*直到文件结束*/fscanf(fp,%d %s %s %d %d %d %d %dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); /*将课程信息写入文件*/printf(%5d%12s%9s%9d%12d%12d%8d%9dn,c.num,,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*格式化输出*/ fclose(fp);/*关闭文件*/menu(); 函数功能及实现:此函数先定义指向文件的指针*fp,课程结构体变量c,通过if语句判断文件是否存在,在调用函数f1(),输出表头信息,通过for循环并使用fscanf函数将文件中的课程信息读出并通过printf打印到屏幕上,再通过fclose函数关闭文件。3.2.4 void search();函数原型:void search();函数源程序:/*查询选课信息*/void search()FILE *fp; /*定义文件指针变量*/struct course c;/*定义学生结构体变量c*/int score;char kind10;char name20;int b;/*输入需要的查询课程信息的方式*/printf(n 1.按学分查询nn);printf(n 2.按课程性质查询nn);printf(n 3.按课程名称查询nn);printf( 请选择查询方式,输入选项数字:);开始打开文件查看学生选课信息判断查询方法 结束2输入按课程性质查按学分查1按名称查询scanf(%d,&b);for(;b3;)printf( 输入错误,请重新输入!);scanf(%d,&b);/*按学分查询*/if(b=1) printf(n 请输入您要查询的学分: ); scanf(%d,&score); if(fp=fopen(course.txt,r)=NULL)printf(nCannot open course!n); f1(); for(;!feof(fp);) fscanf(fp,%d%s%s%d%d%d%d%dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); if(c.mark=score)printf(%5d%12s%9s%9d%12d%13d%8d%9dn,c.num,,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*按课程细致查询*/else if(b=2)printf(n 请输入您要查询的课程性质: ); scanf(%s,&kind); if(fp=fopen(course.txt,r)=NULL)printf(nCannot open course!n);f1(); for(;!feof(fp);) fscanf(fp,%d%s%s%d%d%d%d%dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(strcmp(c.kind,kind)=0)printf(%5d%12s%9s%9d%9d%11d%11d%11dn,c.num,,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*按课程名称查询*/else if(b=3)printf(n 请输入课程名称:);scanf(%s,&name);if(fp=fopen(course.txt,r)=NULL) printf(nCannot open course!n);f1(); for(;!feof(fp);) fscanf(fp,%d%s%s%d%d%d%d%dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(strcmp(,name)=0) printf(%5d%12s%9s%9d%9d%11d%11d%11dn,c.num,,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);elseprintf(输入错误!);exit(1);fclose(fp);menu();/*调用menu函数*/函数功能及实现:先定义学生结构体变量s,打印相关可供选择的选项,通过scanf函数读取输入字符,打印表头,再使用if语句进行相关选择。如果数“1”,则是按学分查询课程,符合第一个if语句,输入想要查询的学分,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如选择“2”,符合第二个if语句,则按照课程性质查询,输入课程性质,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如输入“3”,符合第二个if语句,则按照课程名称查询,输入要课程名称,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;查询完成后通过fclose 函数关闭文件,打印主菜单,返回主函数。3.2.5 void xuan_ke();函数原型:void xuan_ke()函数源程序:/*进入选课操作*/void xuan_ke() struct student s;/*定义学生结构体变量s*/struct course c;/*定义课程结构体变量c*/FILE *fp;/*定义文件指针变量*/printf(n 请输入您的学号及您要选择的课程编号(用空格分开):);scanf(%d%d,&s.snum,&um);if(fp=fopen(course.txt,r)=NULL)/*打开选课记录文件course.txt*/printf(nCannot open course!n);for(;!feof(fp);)fscanf(fp,%d %s %s %d %d %d %d %dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(um=c.num)break;fclose(fp);/*关闭选课记录文件course.txt*/if(fp=fopen(student.txt,a+)=NULL)printf(nCannot open student!n); /*将学生选课信息输入student.txt文件*/fprintf(fp,%d %d %sn,s.snum,um,);fclose(fp);printf(n 恭喜您选课成功!n);menu();函数功能及实现:进入此函数可进行自由选课,首先定义了学生结构体变量s,和课程结构体变量c。选课学生输入自己的学号和要选的课程,通过for循环打开文件并找到所要选择的课程,通过break跳出循环,关闭课程文件“course.txt”并将学生选课信息存入文件“student.txt”中,关闭文件。打印菜单信息,返回主函数。3.2.6 void xuanke_information();函数原型:void information();函数源程序:/*选课情况统计*/void xuanke_information()int total=0;/*人数统计变量*/FILE *fp;struct student s;if(fp=fopen(student.txt,r)=NULL)/*打开选课记录文件student.txt*/printf(nCannot open student!n);printf(n 学号 课程编号 课程名称n);for(;!feof(fp);)fscanf(fp,%d%d%sn,&s.snum,&um,&ame);total+;printf(%22d%17d%18sn,s.snum,um,ame);printf(n 选课学生总人数为:%d 人,total);fclose(fp); menu();函数功能及实现:此函数为查看选修课被选择的情况。定义了变量total为了统计选课人数,通过if语句判断是否存在文件“student.txt”,通过for循环打印出所有已选课学生的学号、选课课程编号和所选课程的名称,通过计数变量total输出已选课的人数信息。然后打印菜单,返回主函数。3.2.7 void input()函数原型:void input();函数源程序:/*录入选修课课程信息*/void input()FILE *fp;struct course c;int count;int i;if(fp=fopen(course.txt,a+)=NULL)/*建立文件course.txt*/printf(cannot open filen);printf(n (录入选课信息)请输入课程门数: );scanf(%d,&count);printf(n (各项目间用空格分开)nn);f1();for(i=0;i5|n0&n5|n0;)printf(n 输入错误!请重新输入! );scanf(%d,&n);system(cls);/*调用系统命令cls,清除屏幕*/ if(n=0) exit(0);/*退出选课系统*/函数功能及实现:函数先打印出主菜单,用户可通过输入项目编号进行后续操作,输入数字为05之间的任意数字,代表进入不同的模块,通过for循环可有效避免错误选择。如果输入15通过while循环和switch调用相关函数,实现相关功能,调用完后,通过break跳出循环,并选择后续操作。为了界面的更加简洁,调用DOS命令,清屏。如果输入0则执行exit(0)退出程序。4 设计和调试分析4.1调试中遇到的问题(1)在用scanf函数给普通变量输入数据时,在变量名前漏写地址运算符&。 如:scanf(dd, x, y); (2)在scanf函数调用语句中,企图规定输入实型数据的小数位。 如执行以下语句:scanf(6.2f, &a);(3)输入数据时的数据形式与要求不符。用scanf函数输入数据时,必须注意要与scanf语句中的对应形式匹配。如:scanf(d,d,&x, &y); 若按以下形式输入数据: 2 4是不合法。数据2和4之间应当有逗号。(4)输入、输出时的数据类型与所用格式说明符不匹配。例如有以下说明语句: int x=1; char y=a;则运行时执行语句 printf(x=c, y=dn, x, y);将给出与原意不符的结果:(在TURBO C 2.0 下运行)(5)混淆=和=。在C语言中,=赋值运算符,=是关系运算符。(6)在不该出现分号的地方加了分号。例如:if(xy); printf(x is larger than y. n);(7)对于复合语句,忘记加花括号。例如: i=1; a=0; while (i=10)a+=i; i+;printf(a=dn,a);(8)误把数组说明时所定义的元素个数作为最大下标值使用。C语言规定,引用数组元素时下标从0开始,即下标值的下限为0,而下标的上限值是数组定义时元素个数减1。(9)在switch语句的各分支中未使用break语句。例如: switch(n) case 1:browser(); case 2:search(); case 3:xuan_ke(); case 4:xuanke_information(); case 5:input(); 4.2 算法的时间复杂度分析时间复杂度分析设有n们选修课则算法的时间复杂度依次为:browser()的时间复杂度为:T1=O(n);search()的时间复杂度为:T2=O(3*(2+n))xuan_ke()的时间复杂度为:T3=O(2+2*n)xuanke_information()的时间复杂度为T4=O(1+2*n)input()的时间复杂度为:T5=O(1+2*n)所以时间复杂度为T=O(n)4.3 经验和体会(1)通过这次的课程设计,使我了解了一个简单的学生选课系统的设计过程,并且基本掌握了Microsoft Visual C+的基本用法,掌握C语言程序设计课程的基本知识及其应用情况,加深对该课程的理解,在这次设计过程中使我对编程和程序的开发建立了浓厚的兴趣。(2)在设计过程中遇到了很多的问题,但是最后通过自己的努力或者在网上寻找最后都得到了解决,虽然这次的设计是一个很小的程序但是设计这样的程序真的不简单呀,虽然这次的设计时间很短,并且程序也不是很大,但是还是遇到了许多问题,但是我相信在以后的学习中我会更加的努力,并且努力的改正现在的程序,使之程序的功能更加的完善。(3)通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。经过设计和开发,我对于数据的一致性的问题也通过程序进行了有效的解决。从而是我对c语言这门课程有了更好的了解。5 用户使用说明(1)根据正确的提示安装软件。(2)Intel486以上系列、AMD K6 以上系列等PC台式机和便携式电脑都可运行。 (3) 打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。操作如下:点击开始菜单,进入菜单选择。输入:将所需的信息输入。输出:学生信息、课程查询输入:根据不同的需要选择,当信息输入显示出错误时,进入浏览信息,找出错误。当错误不能改正,则退出浏览信息。进入查询信息:则屏幕会出现三个对话框按学分,课程性质和课程名称查找,查处相应的所选课程信息(是否选满)。当查询不能显示需要时进入修改程序,把所输入的信息 进行修改,使之正确能够正常运行或进入删除信息中,重新输入自己所要的信息。当信息输入正确,进入你所需要的菜单程序中:课程信息:显示课程编号、课程名称、课程性质、授课学时、实验或上机学时、总学时、学分 开课学期。学生信息:显示出学生的学号。6 测试数据和测试结果(1)进入系统界面(2)录入选修课课程信息: 根据提示输入课程信息,先输入课程门数,再输入相关课程信息,每个输入项用空格隔开,如图输入5门课程后的结果:(3)浏览课程信息: 在输入课程信息后方可进行课程信息浏览,如图是输入“1”进行课程信息浏览后得到的结果:(4)按“2” 进行课程信息查询(1)按学分查询 首先输入“1”按学分查询,再根据提示输入要查询的学分,如图为所有为1学分课程的相关信息:(2)按课程性质查询 选择“2”为按课程性质查询,输入“自然科学”并按“Enter”,得到所有性质为“自然科学”的课程,如图为得到的结果:(3)按课程名称查询 输入“3”进行按课程名称查询,输入“大学语文”按“Enter”得到如图的结果:(5) 按“3”进入选课系统进行选课 选课时输入学号和所要选择的课程编号,并用空格隔开,如图是学号为“201153101”的学生选择编号为“1”(即大学语文课程)得到的结果:(5)统计选课情况 输入“4”可以统计选课情况,如图是统计结果:6、按“0”退出选课系统参考文献1 美H M Deitel,P J Deitel著,薛万鹏等译. C语言程序设计教程.北京:机械工业出版社,2000.072 谭浩强. C程序设计(第二版).北京:清华大学出版社,1999.123 美Kenneth A.Reek著,徐波译.C和指针.北京;人民邮电出版社2008.4附录 源程序清单#include /*标准输入输出函数库*/#include/*标准函数库*/#include /*字符串函数库*/ /*定义与课程有关的结构体*/struct course int num; /*课程编号*/char name20; /*课程名称*/ char kind10; /*课程性质*/int taltime,ttime,etime,mark,term; /*课程时间,学分,开课信息等*/;/*定义与学生有关的结构体*/struct studentint snum;/*学生学号*/int cnum;/*所选课程编号*/char cname20;/*所选课程名称*/;/*函数原型*/void f1();void menu();void browser();void search();void xuan_ke();void xuanke_information();void input();/*常用函数1*/void f1()printf(n课程编号 课程名称 课程性质 授课学时 实验或上机学时 总学时 学分 开课学期:n);/*主菜单*/void menu() printf(nnn);printf( 欢迎使用学生选课系统! n);printf( * n); printf( * 1-浏览选课信息 2-查询选课信息 * n);printf( * 3-进入选课操作 4-选课情况统计 * n);printf( * 5-录入选课信息 0-退出选课系统 * n); printf( * n);printf( 请选择输入选项编号(请先选择5进行课程信息录入): );/*主函数*/void main()int n;menu();scanf(%d,&n);/*防止错误,提示重新输入*/for(;n5|n0&n5|n0;)printf(n 输入错误!请重新输入! );scanf(%d,&n);system(cls);/*调用系统命令cls,清除屏幕*/ if(n=0) exit(0);/*退出选课系统*/*浏览选课信息*/void browser()FILE *fp;/*定义指向文件的指针*/struct course c;/*定义课程结构体变量c*/if(fp=fopen(course.txt,r)=NULL)printf(nCannot open course!n);f1();for(;!feof(fp);) /*直到文件结束*/fscanf(fp,%d %s %s %d %d %d %d %dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); /*将课程信息写入文件*/printf(%5d%12s%9s%9d%12d%12d%8d%9dn,c.num,,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*格式化输出*/fclose(fp);/*关闭文件*/ menu();/*查询选课信息*/void search()FILE *fp; /*定义文件指针变量*/struct course c;/*定义学生结构体变量c*/int score;char kind10;char name20;int b;/*输入需要的查询课程信息的方式*/printf(n 1.按学分查询nn);printf(n 2.按课程性质查询nn);printf(n 3.按课程名称查询nn);printf( 请选择查询方式,输入选项数字:);scanf(%d,&b);for(;b3;)printf( 输入错误,请重新输入!);scanf(%d,&b);/*按学分查询*/if(b=1) printf(n 请输入您要查询的学分: ); scanf(%d,&score); if(fp=fopen(course.txt,r)=NULL)printf(nCannot open course!n);f1(); for(;!feof(fp);) fscanf(fp,%d%s%s%d%d%d%d%dn,&c.num,&,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term); if(c.mark=score)printf(%5d%12s%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ZARA快时尚供应链2025年快速响应系统构建与应用报告
- 2025年护理十大核心试题及答案
- 2025年中国科学技术大学附属第一医院工作人员招聘考试试题及答案
- 人防工程方案交底(3篇)
- 李清照的如梦令赏析
- 桥面拆除工程方案(3篇)
- 2025年创客中心项目申请报告
- 推拿治疗学复习含答案详解【综合卷】
- 李伯耿高分子课件
- 沪科版9年级下册期末测试卷附答案详解(培优B卷)
- CNAS-CC02:2013 产品、过程和服务认证机构要求
- 人事行政部每月工作总结
- 现代科技在雕塑工艺中的应用研究
- 《工业自动化控制系统基础》课件
- 概率论与数理统计电子教案
- 绿电制氢氨项目实施计划与进度安排
- 2025年中国造影剂行业市场发展监测及投资战略规划研究报告
- 2025年湖南省高职单招《语文》高频必练考试题库400题(含答案)
- 风电场运行管理课件(改)
- 八年级地理实验室使用计划
- 公司信息安全知识培训模版课件
评论
0/150
提交评论