《学生管理系统》课程设计报告(共19页)

上传人:91274****mpsvz 文档编号:57937453 上传时间:2022-02-25 格式:DOC 页数:19 大小:417KB
返回 下载 相关 举报
《学生管理系统》课程设计报告(共19页)_第1页
第1页 / 共19页
《学生管理系统》课程设计报告(共19页)_第2页
第2页 / 共19页
《学生管理系统》课程设计报告(共19页)_第3页
第3页 / 共19页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上湖南工业大学课程设计任务书2012 2013学年第 一学期 计算机与通信 学院(系、部) 软件工程 专业 姓名:夏笑声 班级 1202 课程名称: 面向过程程序设计 课程设计 设计题目: 学生信息管理系统 完成期限:自 2012 年 12 月 26 日至 2012 年 12 月28日共 三天内容及任务 用C语言设计一个学生信息管理系统软件,要求实现以下功能:1.建立文件功能 可以使用默认文件名,或制定文件名将记录存储到文件 文件保存成功要有提示 初次使用可以新建一个保存文件2.录入学生信息功能 可以随时录入制定人数信息的功能3.查询功能 可以通过输入学号查询制定学生信息功能 可以通过输入姓名查询制定学生信息功能4.删除记录功能可以通过学生的姓名或学号信息删除学生的信息5修改记录功能可以通过学生的姓名或学号信息修改任意一项指定的信息6按总分排序功能可以按照学生的总分成绩排好序将所有学生的信息显示出来7.退出可以在程序运行时很方便地退出程序进度安排起止日期工作内容第1天程序基本设计思路第2天 编辑核心代码和程序模块,修改程序,增加部分功能第3天 再次修改,调试;完成设计文档和课程设计说明书答辩指导教师(签字): 2012年12月28日 系教研室)主任(签字): 年 月 日计算机与通信学院面过程程序设计课程设计题 目 学生信息管理系统 学 号 专业及班级 软件工程1202 姓 名 夏笑声 日 期 2012/12/28 目录1、 实验目的和要求.41、课程设计的目的42、课程设计的要求4二、设计方案. 41、总体设计.42、系统流程图.53、 程序说明书.4 三、总结与体会.17四、 参考资料 .18一、 实验目的和要求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.退出程序功能。3、程序说明书 此程序在实现功能时采用的方式是编写函数,通过编写的5个函数来实现该程序的五大基本功能。主要功能有信息录入、信息查询、删除记录、修改指定记录、输出所有学生信息,以及退出程序功能。首先将一系列头文件包含进来以及定义文件指针和定义了一个结构数组用来存储学生的所有信息,源代码如下:#include#include#include#includestruct nodechar id12;char name15;char fale4;int score3;int all;int _size;student50;struct node2char id12;char name15;char fale4;char score44;char all4;FILE *fr;struct node *p=student;char _class410=C语言,大机,高数,英语;int number;void luru();void chaxun();void shanchu();void paixu();void xiugai();void main() 打开程序,首先可以看到的是一个精美的欢迎界面,该界面由如下代码实现:printf(nnnnnnnnnnnn); printf( &$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&n);printf( &$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$n);printf( & * * &$n); printf( &$ * * * * &$n);printf( &$ *欢迎使用学生管理系统* &$n);printf( &$ &$n);printf( &$ * * * 制作人:夏笑声 * * * * * * * * &$n);printf( &$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$n);printf( &$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$nnnnnnn);printf(nnnnn按回车键继续.);欢迎界面如下图所示:同时,在屏幕的左下方有按回车键继续的提示信息,这时按一下回车键,由欢迎界面跳转到程序的主功能菜单界面,菜单由switch语句实现,如下:printf(请选择功能:n); printf(信息录入请按1!n); printf(信息查询请按2!n); printf(删除记录请按3!n); printf(修改记录请按4!n); printf(按总分排序输出所有信息请按5!n); printf(按0或其它任意键退出.n);这时,我们在菜单的最上方可以看到一条警示信息,“注意:在第一次使用本软件之前,必须先建立一个存储文件”,这是因为此程序需要一个文件来将所有学生的各项信息存储在外存中,只有这样才能使已经记录的信息能够永久保存。这项功能我采用的是用“w+”的方式打开文件,之所以这样设计,是因为用“w+” 的方式打开文件使程序获得的一个额外功能,当按下“8”键的时候,可以将所有已经保存的记录全部清楚掉,即初始化记录功能,这样就做到了一举两得了。 接下来介绍的是程序的信息录入功能。在设计信息录入功能时,我也遇到了不少的问题,其中最大的一个问题就是关于如何将要存储的程序写入文件,很显然,如果将输入的信息一股脑的写入文件的话,后果将是非常严重的,因为写入的信息始终是要读出来的,而如果随意地写进去的话,在读取信息的时候,读取信息的位置指针将无法定位,因为写入的时候没有按照一定的规律。对于这个问题,我采用的解决办法的将所有学生的信息采用一定的格式写入文件,学号统一采用11位数字的格式,姓名统一采用占6各字节的格式,性别采用两个字节也就是一个中文字符的格式,后面是各科分数,全部采用占3个字节的格式,这样采用一种统一的格式将学生的信息按照顺序一个接着一个写入文件。源代码如下:for(i=0;i6)printf(姓名长度不符合要求,请重新输入!n);goto loop2;fprintf(fr,%s,pnumber.name);a1=strlen(pnumber.name);a2=3-(a1/2);for(b2=1;b2=a2;b2+)fprintf(fr,); /在姓名不足三个字的后用空格补齐loop7:printf(请输入性别:n);gets(pnumber.fale);if(strlen(pnumber.fale)!=2)printf(性别输入有误,请重新输入!n);goto loop7;else fprintf(fr,%2s,pnumber.fale);pnumber.all=0; /将总分初始化for(j=0;j4;j+)printf(请输入第%d位学生的%s成绩:n,i+1,_classj);scanf(%s,xj);fprintf(fr,%-3s,xj);_x1=atoi(x1);_x2=atoi(x2);_x3=atoi(x3);_x4=atoi(x4);_x5=_x1+_x2+_x3+_x4;fprintf(fr,%-3d,_x5);printf(第%d位学生的信息输入成功!n,i+1);fclose(fr);printf(录入结束,按回车回主菜单!n);getchar();getchar();system(cls);elseprintf(a);printf(超出最大人数,请重新输入!n);在读取文件时位置指针移动的问题就解决啦。其次是,在信息存储的过程中,我还考虑到了使用者在使用时可能遇到的尽可能多的问题,如若输入的学号小于11位,便会有输入错误提醒,还有一个非常使用的是当使用着在进行信息录入的过程中,可以随时地退出该功能,在录入成功后会有录入成功的提示信息。并且,为了使程序在使用时不会显得过于呆板,我还在警示信息显示的同时加入了声音警示的功能,如学号输入错误不仅有文字提示而且有声音提示,printf(a);这样使程序看起来显得更加人性化。 程序的第二个功能是信息查询功能。很显然,没有查询的功能,写得再好的录入功能也相当于白写。进入信息查询功能的菜单键是2数字键,进入该功能后会有提示输入要查询的学生的学号或姓名,在设计该查询功能时,我采用的是strcmp函数来比较字符串的方式,来将输入的要查询的字符与文件中当前有的各信息一一匹配,当找到相同的学号或姓名时,立即退出匹配的循环。源代码如下:for(i=0;i50;i+) /将所有学生的学生跟已经录入的学号配对fscanf(fr,%11s,_id);fscanf(fr,%6s,_name);if(!strcmp(shuru,_id)|(!strcmp(shuru,_name)printf(学号:%sn,_id);printf(姓名:%sn,_name);fscanf(fr,%2s,_fale);printf(性别:%2sn,_fale);for(j=0;j4;j+)fscanf(fr,%3s,fen);printf(%s的成绩为:%sn,_classj,fen);fscanf(fr,%3s,_all);printf(总分:%3sn,_all);zhuangtai=0; /标记说明已查找到记录break;else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信息是否为最后一条cheshi=fgetc(fr);if(cheshi=EOF)break;if(zhuangtai)printf(a);printf(不存在该学号的学生!n);fclose(fr);printf(按回车键回主菜单.n);getchar();getchar();system(cls);查询的界面如下:这样写有一个好处就是使查询所要提供的信息不仅仅局限于姓名或着是学号,这样就更方便使用者的需要。若查到结果则在屏幕上显示已查到的结果:for(i=0;i50;i+) /将所有学生的学生跟已经录入的学号配对fscanf(fr,%11s,_id);fscanf(fr,%6s,_name);if(!strcmp(shuru,_id)|(!strcmp(shuru,_name)printf(学号:%sn,_id);printf(姓名:%sn,_name);fscanf(fr,%2s,_fale);printf(性别:%2sn,_fale);for(j=0;j4;j+)fscanf(fr,%3s,fen);printf(%s的成绩为:%sn,_classj,fen);fscanf(fr,%3s,_all);printf(总分:%3sn,_all);zhuangtai=0; /标记说明已查找到记录break;else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信息是否为最后一条cheshi=fgetc(fr);if(cheshi=EOF)break;同样,在设计此功能时,我也考虑到了查询信息不存在的问题,当使用者输入的要查询的信息不存在时,会有文字和声音提示“未找到要查询的记录”,而且,在执行此功能的过程中,也设置了随时退出查询的功能。功能界面如下: 接下来介绍的是删除记录功能。同样,删除记录功能也是非常需要的,当某个学生的信息不再需要时,如果继续保存,将使学生的信息管理变得越来越复杂,因此,删除多余的记录是非常有必要的。删除功能的界面如下:在查找要删除记录的位置时,我采用的方式是先将所有信息先存入一个结构数组,源代码如下:for(i=0;i50;i+) /先将所有信息读入一个结构数组_cheshi4=fgetc(fr);if(_cheshi4=EOF)break;elsefseek(fr,-1,1);fscanf(fr,%11s,student5i.id);fscanf(fr,%6s,student5i.name);fscanf(fr,%2s,student5i.fale);fscanf(fr,%3s,&student5i.score0);fscanf(fr,%3s,&student5i.score1);fscanf(fr,%3s,&student5i.score2);fscanf(fr,%3s,&student5i.score3);fscanf(fr,%3s,&student5i.all);至于查找要删除信息的位置跟信息查询功能查找的方式是一样的,即将所输入的学号或姓名跟已存在的信息一一匹配,当找到要删除的记录时,立即退出匹配的循环。源代码如下:for(j2=0;j2i;j2+)if(!strcmp(_shuru2,student5j2.id)|!strcmp(_shuru2,student5j2.name)_biaoji=j2;而且还增加了删除记录未找到的反应机制if(_biaoji=51)printf(a);printf(未找到要删除的记录!n);程序的第四大功能是修改记录功能。设计此功能的目的是考虑到当使用者只要修改某个学生的某一项信息但又不想修改其他信息时就可以采用修改记录功能,此功能可以按照使用者的意图选择性的修改学生的某项指定的记录。这样就比将该学生的记录全部删除然后又重新存进去要方便多了。首先要输入要删除的学生的姓名或学号,以确定操作对象,代码如下:printf(请输入要修改信息的学生的姓名或学号!(按0取消修改)n);scanf(%s,_shuru2);if(strcmp(_cheshi8,_shuru2) /设置退出修改功能fseek(fr,0,0);for(i=0;i6)printf(输入姓名长度不符合要求,请重新输入!n);goto loop3;strcpy(student4.name,_xin);break;case 3:loop4:printf(请输入要修改的性别.n);scanf(%s,_xin);if(strlen(_xin)!=2)printf(a);printf(性别输入有误,请重新输入!n);goto loop4;elsestrcpy(student4.fale,_xin);break;如果选择要修改的分数,又会提示让你选择要修改分数的科目:case 4:printf(请选择要修改的成绩:n);loop6:printf(C语言请按1n大机请按2n高数请按3n英语请按4.n);scanf(%s,_xuanzhe);xuanzhe=atoi(_xuanzhe);switch(xuanzhe)case 1: printf(请输入要修改的学号:n);scanf(%s,_xin);if(strlen(_xin)=11)strcpy(student4.id,_xin);elseprintf(a);printf(输入学号有误,学号为11位数,请重新输入!n);goto loop3;break;case 2:loop3:printf(请输入要修改的姓名(仅支持3个字以内中文):n);scanf(%s,_xin);if(strlen(_xin)=0|strlen(_xin)6)printf(输入姓名长度不符合要求,请重新输入!n);goto loop3;strcpy(student4.name,_xin);break; 接下来介绍的程序的第五大功能输出所有学生信息的功能。当然杂乱地输出所有信息可以说是好无意义的,因此,我在设计此功能时采用了一个冒泡排序,将所有学生的信息按照总分从大到小依次输出。具体是先将所有学生的信息先存储在一个结构数组中:for(_n2=0;_n250;_n2+)_cheshi4=fgetc(fr);if(_cheshi4=EOF)fseek(fr,-1,1);break;else ;fseek(fr,-1,1);fscanf(fr,%11s,student6_n2.id);fscanf(fr,%6s,student6_n2.name);fscanf(fr,%2s,student6_n2.fale);fscanf(fr,%3s,student6_n2.score0);fscanf(fr,%3s,student6_n2.score1);fscanf(fr,%3s,student6_n2.score2);fscanf(fr,%3s,student6_n2.score3);fscanf(fr,%3d,&_laji);qiu0=atoi(student6_n2.score0);qiu1=atoi(student6_n2.score1);qiu2=atoi(student6_n2.score2);qiu3=atoi(student6_n2.score3);student6_n2.all=qiu0+qiu1+qiu2+qiu3;然后用了一个冒泡排序:for(i=0;i_jilu+1;i+)for(j=0;j_jilu-1;j+)if(student6j.all)(student6j+1.all)student4=student6j;student6j=student6j+1;student6j+1=student4;按总分排好序之后就是输出信息了,输出信息的时候,我采用的是一个学生的所有信息在一行输出,这样可以使使用者在查看的时候显得更加清楚明了。最后就是退出功能。,退出功能在此程序中可以说无处不在,因为我在设计各项功能时都考虑到了退出的问题,在执行各个功能时,随时都可以退出到主菜单。但这里所说的退出功能是指退出程序功能,没有退出的功能,有了该功能将可以使程序在运行时可以很方便地退出。三总结与体会回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。谢谢给我指点迷津的老师。6月11日,我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。四、参考资料1、李长云C语言程序设计国防工业出版社、2、百度文库(寻找C语言课程设计的模版及某些实用功能函数)专心-专注-专业
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!