1/19湖南工业大学课程设计任务书2012—2013学年第一学期计算机与通信学院(系、部)软件工程专业姓名:夏笑声班级1202课程名称:《面向过程程序设计》课程设计设计题目:《学生信息管理系统》完成期限:自2012年12月26日至2012年12月28日共三天内容及任务用C语言设计一个学生信息管理系统软件,要求实现以下功能:1.建立文件功能可以使用默认文件名,或制定文件名将记录存储到文件文件保存成功要有提示初次使用可以新建一个保存文件2.录入学生信息功能可以随时录入制定人数信息的功能3.查询功能可以通过输入学号查询制定学生信息功能可以通过输入姓名查询制定学生信息功能4.删除记录功能可以通过学生的姓名或学号信息删除学生的信息5.修改记录功能可以通过学生的姓名或学号信息修改任意一项指定的信息6.按总分排序功能可以按照学生的总分成绩排好序将所有学生的信息显示出来7.退出可以在程序运行时很方便地退出程序进度安排起止日期工作内容第1天程序基本设计思路第2天编辑核心代码和程序模块,修改程序,增加部分功能第3天再次修改,调试;完成设计文档和课程设计说明书答辩指导教师(签字):2012年12月28日2/19系教研室)主任(签字):年月日计算机与通信学院《面过程程序设计》课程设计题目《学生信息管理系统》学号12408300239专业及班级软件工程1202姓名夏笑声日期2012/12/283/19目录一、实验目的和要求..........................................................................................41、课程设计的目的……………………………………………………………42、课程设计的要求……………………………………………………………4二、设计方案....................................................................................................41、总体设计..........................................................................................................42、系统流程图……………………………………………………………......53、程序说明书...................................................................................................4三、总结与体会..............................................................................................17四、参考资料.........................................................................................184/19一、实验目的和要求1、课程设计目的:1、使学生巩固和加强“C语言程序设计”课程的理论知识。2、使学生掌握C语言程序设计的方法及编程技巧。3、进一步理解和运用结构化程序设计的思想和方法。、5、初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程的实际需要。6、培养学生良好的程序设计风格。、7、掌握书写程序设计开发文档的能力,使学生学会撰写课程设计报告。、8、通过查阅手册和文献资料,。培养学生独立分析问题和解决问题的能力。、9、培养学生的创新能力和创新思维。2、基本要求:(1)要求利用结构化程序设计的方法及C语言的编程思想来完成系统设计。(2)模块化程序设计:要求在设计过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。(3)学生所选课题必须上机通过,并获得满意的结果。(4)程序书写风格:锯齿型书写格式。二、设计方案1、总体设计该程序共有6大模块构成,程序的开头首先是一个欢迎界面,欢迎界面的下方有提示信息按回车键继续,这时按下回车键,界面跳转到程序的主界面,各功能菜单项。此程序一共有六大功能,全部通过定义函数来实现功能。主要有以下几项基本功能:1.信息录入功能2.信息查询功能3.删除记录功能4.修改记录功能5.按总分排序输出所有信息功能,6.退出程序功能。5/193、程序说明书此程序在实现功能时采用的方式是编写函数,通过编写的5个函数来实现该程序的五大基本功能。主要功能有信息录入、信息查询、删除记录、修改指定记录、输出所有学生信息,以及退出程序功能。首先将一系列头文件包含进来以及定义文件指针和定义了一个结构数组用来存储学生的所有信息,源代码如下:#includestdio.h#includestdlib.h#includestring.h#includeprocess.hstructnode{charid[12];charname[15];charfale[4];intscore[3];intall;int_size;}student[50];structnode2{charid[12];charname[15];charfale[4];6/19charscore[4][4];charall[4];};FILE*fr;structnode*p=student;char_class[4][10]={C语言,大机,高数,英语};intnumber;voidluru();voidchaxun();voidshanchu();voidpaixu();voidxiugai();voidmain()打开程序,首先可以看到的是一个精美的欢迎界面,该界面由如下代码实现:printf(\n\n\n\n\n\n\n\n\n\n\n\n);printf(&$&$&$&&$&$&$&$&$&$&$&$&$&&$&$&$&$&$&$&$$&\n);printf(&$&$&$&$&&$$&&$&$&$&$&$&$&$&$&$&$&&$&$&$&$\n);printf(&&****&$\n);printf(&$********&$\n);printf(&$**欢迎使用学生管理系统**&$\n);printf(&$&$\n);printf(&$***制作人:夏笑声********&$\n);printf(&&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$$&$&$&$&$&$\n);printf(&$&$&$&$&$&$$&$&$&$&$&$&$&$&$&&$&$&$&$&$&$\n\n\n\n\n\n\n);printf(\n\n\n\n\n按回车键继续...);欢迎界面如下图所示:7/19同时,在屏幕的左下方有按回车键继续的提示信息,这时按一下回车键,由欢迎界面跳转到程序的主功能菜单界面,菜单由switch语句实现,如下:printf(请选择功能:\n);printf(信息录入请按1!\n);printf(信息查询请按2!\n);printf(删除记录请按3!\n);printf(修改记录请按4!\n);printf(按总分排序输出所有信息请按5!\n);printf(按0或其它任意键退出...\n);这时,我们在菜单的最上方可以看到一条警示信息,“注意:在第一次使用本软8/19件之前,必须先建立一个存储文件”,这是因为此程序需要一个文件来将所有学生的各项信息存储在外存中,只有这样才能使已经记录的信息能够永久保存。这项功能我采用的是用“w+”的方式打开文件,之所以这样设计,是因为用“w+”的方式打开文件使程序获得的一个额外功能,当按下“8”键的时候,可以将所有已经保存的记录全部清楚掉,即初始化记录功能,这样就做到了一举两得了。接下来介绍的是程序的信息录入功能。在设计信息录入功能时,我也遇到了不少的问题,其中最大的一个问题就是关于如何将要存储的程序写入文件,很显然,如果将输入的信息一股脑的写入文件的话,后果将是非常严重的,因为写入的信息始终是要读出来的,而如果随意地写进去的话,在读取信息的时候,读取信息的位置指针将无法定位,因为写入的时候没有按照一定的规律。对于这个问题,我采用的解决办法的将所有学生的信息采用一定的格式写入文件,学号统一采用11位数字的格式,姓名统一采用占6各字节的格式,性别采用两个字节也就是一个中文字符的格式,后面是各科分数,全部采用占3个字节的格式,这样采用一种统一的格式将学生的信息按照顺序一个接着一个写入文件。源代码如下:for(i=0;i_n1;i++){printf(请输入第%d位学生的学号,按0退出此次录入!:\n,i+1);scanf(%s,p[number].id);getchar();//用于吃掉回车符if(!(strcmp(p[number].id,_cheshi5)))//设置中途退出功能(如果中途不想继续输入的话){fclose(fr);//此句用来控制当中途退出时能将已输入的信息及时存到外存中break;}if(strlen(p[number].id)!=11){printf(输入的学号有误!学号为标准的11位数,请重新输入:\n);i--;continue;}else{fprintf(fr,%s,p[number].id);loop2:printf(请输入第%d位学生的姓名(仅支持中文):\n,i+1);gets(p[number].name);if(strlen(p[number].name)==0||strlen(p[number].name)6){printf(姓名长度不符合要求,请重新输入!\n);gotoloop2;}fprintf(fr,%s,p[number].name);9/19a1=strlen(p[number].name);a2=3-(a1/2);for(b2=1;b2=a2;b2++)fprintf(fr,);//在姓名不足三个字的后用空格补齐loop7:printf(请输入性别:\n);gets(p[number].fale);if(strlen(p[number].fale)!=2){printf(性别输入有误,请重新输入!\n);gotoloop7;}elsefprintf(fr,%2s,p[number].fale);p[number].all=0;//将总分初始化for(j=0;j4;j++){printf(请输入第%d位学生的%s成绩:\n,i+1,_class[j]);scanf(%s,x[j]);fprintf(fr,%-3s,x[j]);}_x1=atoi(x[1]);_x2=atoi(x[2]);_x3=atoi(x[3]);_x4=atoi(x[4]);_x5=_x1+_x2+_x3+_x4;fprintf(fr,%-3d,_x5);printf(第%d位学生的信息输入成功!\n,i+1);}}fclose(fr);printf(录入结束,按回车回主菜单!\n);getchar();getchar();system(cls);}else{printf(\a);printf(超出最大人数,请重新输入!\n);}在读取文件时位置指针移动的问题就解决啦。其次是,在信息存储的过程中,我还考虑到了使用者在使用时可能遇到的尽可能多的问题,如若输入的学号小于11位,便会有输入错误提醒,还有一个非常使用的是当使用着在进行信息录入的过程中,可以随时地退出该功能,在录入成功后会有录入成功的提示信息。并且,为了使程序在使用时不会显得过于呆板,我还在警示信息显示的同时加入了10/19声音警示的功能,如学号输入错误不仅有文字提示而且有声音提示,printf(\a);这样使程序看起来显得更加人性化。程序的第二个功能是信息查询功能。很显然,没有查询