《学生管理系统》课程设计报告

上传人:仙*** 文档编号:114070443 上传时间:2022-06-27 格式:DOC 页数:19 大小:416KB
收藏 版权申诉 举报 下载
《学生管理系统》课程设计报告_第1页
第1页 / 共19页
《学生管理系统》课程设计报告_第2页
第2页 / 共19页
《学生管理系统》课程设计报告_第3页
第3页 / 共19页
资源描述:

《《学生管理系统》课程设计报告》由会员分享,可在线阅读,更多相关《《学生管理系统》课程设计报告(19页珍藏版)》请在装配图网上搜索。

1、湖南工业大学 课程设计任务书 2012 —2013学年第 一学期 计算机与通信 学院(系、部) 软件工程 专业 姓名:夏笑声 班级 1202 课程名称: 《面向过程程序设计》 课程设计 设计题目: 《学生信息管理系统 》 完成期限:自 2012 年 12 月 26 日至 2012 年 12 月28日共

2、 三天 内 容 及 任 务 用C语言设计一个学生信息管理系统软件,要求实现以下功能: 1.建立文件功能 Ø 可以使用默认文件名,或制定文件名将记录存储到文件 Ø 文件保存成功要有提示 Ø 初次使用可以新建一个保存文件 2.录入学生信息功能 Ø 可以随时录入制定人数信息的功能 3.查询功能 Ø 可以通过输入学号查询制定学生信息功能 Ø 可以通过输入姓名查询制定学生信息功能 4.删除记录功能 可以通过学生的姓名或学号信息删除学生的信息 5.修改记录功能 可以通过学生的姓名或学号信息修改任意一项指定的信息 6.按总分排序功能 可以按照学生的总分

3、成绩排好序将所有学生的信息显示出来 7.退出 可以在程序运行时很方便地退出程序 进 度 安 排 起止日期 工作内容 第1天 程序基本设计思路 第2天 编辑核心代码和程序模块,修改程序,增加部分功能 第3天 再次修改,调试;完成设计文档和课程设计说明书答辩 指导教师(签字): 2012年12月28日 系教研室)主任(签字): 年 月 日 计算机与通信学院 《面过程程序设计》课程设计 题 目

4、 《 学生信息管理系统 》 学 号 专业及班级 软件工程1202 姓 名 夏笑声 日 期 2012/12/28 目录 一、 实验目的和要求...

5、.......................................................................................4 1、课程设计的目的……………………………………………………………4 2、课程设计的要求……………………………………………………………4 二、设计方案.................................................................................................... 4 1、总体设计......................

6、....................................................................................4 2、系统流程图……………………………………………………………......5 3、 程序说明书...................................................................................................4 三、总结与体会..........................................................

7、.................................... 17 四、 参考资料 ......................................................................................... 18 一、 实验目的和要求 1、课程设计目的: 1、使学生巩固和加强“C语言程序设计”课程的理论知识。 2、使学生掌握C语言程序设计的方法及编程技巧。 3、进一步理解和运用结构化程序设计的思想和方法。、 5、 初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又

8、接近工程的实际需要。 6、培养学生良好的程序设计风格。、 7、掌握书写程序设计开发文档的能力,使学生学会撰写课程设计报告。、 8、通过查阅手册和文献资料,。培养学生独立分析问题和解决问题的能力。、 9、培养学生的创新能力和创新思维。 2、基本要求: (1)要求利用结构化程序设计的方法及C语言的编程思想来完成系统设计。 (2)模块化程序设计:要求在设计过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。 (3)学生所选课题必须上机通过,并获得满意的结果。 (4)程序书写风格:锯齿型书写格式。 二、 设计方案 1、总体设计 该程序

9、共有6 大模块构成,程序的开头首先是一个欢迎界面,欢迎界面的下方有提示信息按回车键继续,这时按下回车键,界面跳转到程序的主界面,各功能菜单项。此程序一共有六大功能,全部通过定义函数来实现功能。主要有以下几项基本功能:1.信息录入功能2.信息查询功能3.删除记录功能4.修改记录功能5.按总分排序输出所有信息功能,6.退出程序功能。 3、程序说明书 此程序在实现功能时采用的方式是编写函数,通过编写的5个函数来实现该程序的五大基本功能。主要功能有信息录入、信息查询、删除记录、修改指定记录、输出所有学生信息,以及退出程序功能。首先将一系列头文件包含进来以及定义文件指针和定义了一个结

10、构数组用来存储学生的所有信息,源代码如下: #include #include #include #include struct node { char id[12]; char name[15]; char fale[4]; int score[3]; int all; int _size; }student[50]; struct node2 { char id[12]; char name[15]; char fale[4]; char score[4

11、][4]; char all[4]; }; FILE *fr; struct node *p=student; char _class[4][10]={"C语言","大机","高数","英语"}; int number; void luru(); void chaxun(); void shanchu(); void paixu(); void xiugai(); void main() 打开程序,首先可以看到的是一个精美的欢迎界面,该界面由如下代码实现: printf("\n\n\n\n\n\n\n\n\n\n\n\n"); printf("

12、 &$&$&$&&$&$&$&$&$&$&$&$&$&&$&$&$&$&$&$&$$&\n"); printf(" &$&$&$&$&&$$&&$&$&$&$&$&$&$&$&$&$&&$&$&$&$\n"); printf(" && ** ** &$\n"); printf(" &$ ** ** ** ** &$\n"); printf("

13、 &$ **欢迎使用学生管理系统** &$\n"); printf(" &$ &$\n"); printf(" &$ * * * 制作人:夏笑声 * * * * * * * * &$\n"); printf(" &&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$$&$&$&$&$&$\n"); printf(" &$&$&$&$&$&$$&$&$&$&$&$&$

14、&$&$&&$&$&$&$&$&$\n\n\n\n\n\n\n"); printf("\n\n\n\n\n按回车键继续..."); 欢迎界面如下图所示: 同时,在屏幕的左下方有按回车键继续的提示信息,这时按一下回车键,由欢迎界面跳转到程序的主功能菜单界面,菜单由switch语句实现,如下: printf("请选择功能:\n"); printf("信息录入请按1!\n"); printf("信息查询请按2!\n"); printf("删除记录请按3!\n"); printf("修改记录请按4!\n"); printf("按总分排序输出所有信息请按5!\

15、n"); printf("按0或其它任意键退出...\n"); 这时,我们在菜单的最上方可以看到一条警示信息,“注意:在第一次使用本软件之前,必须先建立一个存储文件”,这是因为此程序需要一个文件来将所有学生的各项信息存储在外存中,只有这样才能使已经记录的信息能够永久保存。这项功能我采用的是用“w+”的方式打开文件,之所以这样设计,是因为用“w+” 的方式打开文件使程序获得的一个额外功能,当按下“8”键的时候,可以将所有已经保存的记录全部清楚掉,即初始化记录功能,这样就做到了一举两得了。 接下来介绍的是程序的信息录入功能。在设计信息录入功能时,我也遇到了不少的问题,其中最大的

16、一个问题就是关于如何将要存储的程序写入文件,很显然,如果将输入的信息一股脑的写入文件的话,后果将是非常严重的,因为写入的信息始终是要读出来的,而如果随意地写进去的话,在读取信息的时候,读取信息的位置指针将无法定位,因为写入的时候没有按照一定的规律。对于这个问题,我采用的解决办法的将所有学生的信息采用一定的格式写入文件,学号统一采用11位数字的格式,姓名统一采用占6各字节的格式,性别采用两个字节也就是一个中文字符的格式,后面是各科分数,全部采用占3个字节的格式,这样采用一种统一的格式将学生的信息按照顺序一个接着一个写入文件。源代码如下: for(i=0;i<_n1;i++) {

17、 printf("请输入第%d位学生的学号,按0退出此次录入!:\n",i+1); scanf("%s",p[number].id); getchar(); //用于吃掉回车符 if(!(strcmp(p[number].id,_cheshi5))) //设置中途退出功能(如果中途不想继续输入的话) { fclose(fr); //此句用来控制当中途退出时能将已输入的信息及时存到外存中 break; }

18、 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)

19、 { printf("姓名长度不符合要求,请重新输入!\n"); goto loop2; } fprintf(fr,"%s",p[number].name); a1=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].fal

20、e)!=2) { printf("性别输入有误,请重新输入!\n"); goto loop7; } else fprintf(fr,"%2s",p[number].fale); p[number].all=0; //将总分初始化 for(j=0;j<4;j++) { printf("请输入第%d位学生的%s成绩:\n",i+1,_class[j]); scanf("%s",x[j]); fprintf(fr,"%-3s",x[j]); } _x1=atoi(x[1]); _x2=

21、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");

22、 } 在读取文件时位置指针移动的问题就解决啦。其次是,在信息存储的过程中,我还考虑到了使用者在使用时可能遇到的尽可能多的问题,如若输入的学号小于11位,便会有输入错误提醒,还有一个非常使用的是当使用着在进行信息录入的过程中,可以随时地退出该功能,在录入成功后会有录入成功的提示信息。并且,为了使程序在使用时不会显得过于呆板,我还在警示信息显示的同时加入了声音警示的功能,如学号输入错误不仅有文字提示而且有声音提示, printf("\a");这样使程序看起来显得更加人性化。 程序的第二个功能是信息查询功能。很显然,没有查询的功能,写得再好的录入功能也相当于白写。进入信息查询功能的菜单键

23、是2数字键,进入该功能后会有提示输入要查询的学生的学号或姓名,在设计该查询功能时,我采用的是strcmp函数来比较字符串的方式,来将输入的要查询的字符与文件中当前有的各信息一一匹配,当找到相同的学号或姓名时,立即退出匹配的循环。源代码如下: for(i=0;i<50;i++) //将所有学生的学生跟已经录入的学号配对 { fscanf(fr,"%11s",_id); fscanf(fr,"%6s",_name); if((!strcmp(shuru,_id))||(!strcmp(shuru,_name))) { printf("学号

24、:%s\n",_id); printf("姓名:%s\n",_name); fscanf(fr,"%2s",_fale); printf("性别:%2s\n",_fale); for(j=0;j<4;j++) { fscanf(fr,"%3s",fen); printf("%s的成绩为:%s\n",_class[j],fen); } fscanf(fr,"%3s",_all); printf("总分:%3s\n",_all); zhuangtai=0; //标记说明已查找到记

25、录 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();

26、 system("cls"); } 查询的界面如下: 这样写有一个好处就是使查询所要提供的信息不仅仅局限于姓名或着是学号,这样就更方便使用者的需要。 若查到结果则在屏幕上显示已查到的结果: for(i=0;i<50;i++) //将所有学生的学生跟已经录入的学号配对 { fscanf(fr,"%11s",_id); fscanf(fr,"%6s",_name); if((!strcmp(shuru,_id))||(!strcmp(shuru,_name))) { printf("学号:%s\n",_id); pri

27、ntf("姓名:%s\n",_name); fscanf(fr,"%2s",_fale); printf("性别:%2s\n",_fale); for(j=0;j<4;j++) { fscanf(fr,"%3s",fen); printf("%s的成绩为:%s\n",_class[j],fen); } fscanf(fr,"%3s",_all); printf("总分:%3s\n",_all); zhuangtai=0; //标记说明已查找到记录 break; }

28、 else { fseek(fr,16,1); //将光标移到下一次要配对的前一个,以测定该信息是否为最后一条 cheshi=fgetc(fr); if(cheshi==EOF) break; } } 同样,在设计此功能时,我也考虑到了查询信息不存在的问题,当使用者输入的要查询的信息不存在时,会有文字和声音提示“未找到要查询的记录”,而且,在执行此功能的过程中,也设置了随时退出查询的功能。功能界面如下: 接下来介绍的是删除记录功能。同样,删除记录功能也是非常需要的,当某个学生的信息不再需要时,

29、如果继续保存,将使学生的信息管理变得越来越复杂,因此,删除多余的记录是非常有必要的。删除功能的界面如下: 在查找要删除记录的位置时,我采用的方式是先将所有信息先存入一个结构数组,源代码如下: for(i=0;i<50;i++) //先将所有信息读入一个结构数组 { _cheshi4=fgetc(fr); if(_cheshi4==EOF) break; else fseek(fr,-1,1); fscanf(fr,"%11s",student5[i].id); fscanf(fr,"%6s",student5[

30、i].name); fscanf(fr,"%2s",student5[i].fale); fscanf(fr,"%3s",&student5[i].score[0]); fscanf(fr,"%3s",&student5[i].score[1]); fscanf(fr,"%3s",&student5[i].score[2]); fscanf(fr,"%3s",&student5[i].score[3]); fscanf(fr,"%3s",&student5[i].all); } 至于查找要删除信息的位置跟信息查询功能查找的方式是一样的,即将所输入的学号

31、或姓名跟已存在的信息一一匹配,当找到要删除的记录时,立即退出匹配的循环。源代码如下: for(j2=0;j2

32、信息但又不想修改其他信息时就可以采用修改记录功能,此功能可以按照使用者的意图选择性的修改学生的某项指定的记录。这样就比将该学生的记录全部删除然后又重新存进去要方便多了。首先要输入要删除的学生的姓名或学号,以确定操作对象,代码如下: printf("请输入要修改信息的学生的姓名或学号!(按0取消修改)\n"); scanf("%s",_shuru2); if(strcmp(_cheshi8,_shuru2)) //设置退出修改功能 { fseek(fr,0,0); for(i=0;i<50;i++) { _c

33、heshi1=fgetc(fr); if(_cheshi1==EOF) { printf("\a"); printf("未找到要修改的记录!\n"); goto loop8; } fseek(fr,-1,1); fscanf(fr,"%11s",student4.id); fscanf(fr,"%6s",student4.name); if((!strcmp(_shuru2,student4.id))||(!strcmp(_shuru2,student4.name))) {

34、 fseek(fr,17,1); break; } else fseek(fr,17,1); } 在找到要修改的对象后,就要选择要修改的项目,使用者可以通过选择的方式选择所要修改的项,代码如下: printf("请选择要修改的项...\n"); printf("修改学号请按1\n"); printf("修改姓名请按2\n"); printf("修改性别请按3\n"); printf("修改分数请按4\n"); scanf("%s",_xiang); xiang=atoi(_xiang);

35、switch(xiang) { case 1: { printf("请输入要修改的学号:\n"); scanf("%s",_xin); if(strlen(_xin)==11) strcpy(student4.id,_xin); else { printf("\a"); printf("输入学号有误,学号为11位数,请重新输入!\n"); goto loop3; } } break; case 2: { loop3: printf(

36、"请输入要修改的姓名(仅支持3个字以内中文):\n"); scanf("%s",_xin); if(strlen(_xin)==0||strlen(_xin)>6) { printf("输入姓名长度不符合要求,请重新输入!\n"); goto loop3; } strcpy(student4.name,_xin); } break; case 3: loop4: printf("请输入要修改的性别...\n"); scanf("%s",_xin); if(strlen(_xin)

37、!=2) { printf("\a"); printf("性别输入有误,请重新输入!\n"); goto loop4; } else strcpy(student4.fale,_xin); break; 如果选择要修改的分数,又会提示让你选择要修改分数的科目: case 4: printf("请选择要修改的成绩:\n"); loop6: printf("C语言请按1\n大机请按2\n高数请按3\n英语请按4...\n"); scanf("%s",_xuanzhe); xuanzhe=ato

38、i(_xuanzhe); switch(xuanzhe) { case 1: { printf("请输入要修改的学号:\n"); scanf("%s",_xin); if(strlen(_xin)==11) strcpy(student4.id,_xin); else { printf("\a"); printf("输入学号有误,学号为11位数,请重新输入!\n"); goto loop3; } } break; case 2: { lo

39、op3: printf("请输入要修改的姓名(仅支持3个字以内中文):\n"); scanf("%s",_xin); if(strlen(_xin)==0||strlen(_xin)>6) { printf("输入姓名长度不符合要求,请重新输入!\n"); goto loop3; } strcpy(student4.name,_xin); } break; 接下来介绍的程序的第五大功能——输出所有学生信息的功能。当然杂乱地输出所有信息可以说是好无意义的,因此,我在设计此功能时采用了一个冒泡

40、排序,将所有学生的信息按照总分从大到小依次输出。具体是先将所有学生的信息先存储在一个结构数组中: for(_n2=0;_n2<50;_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[

41、_n2].fale); fscanf(fr,"%3s",student6[_n2].score[0]); fscanf(fr,"%3s",student6[_n2].score[1]); fscanf(fr,"%3s",student6[_n2].score[2]); fscanf(fr,"%3s",student6[_n2].score[3]); fscanf(fr,"%3d",&_laji); qiu[0]=atoi(student6[_n2].score[0]); qiu[1]=atoi(student6[_n2].score[1]); q

42、iu[2]=atoi(student6[_n2].score[2]); qiu[3]=atoi(student6[_n2].score[3]); student6[_n2].all=qiu[0]+qiu[1]+qiu[2]+qiu[3]; } 然后用了一个冒泡排序: for(i=0;i<_jilu+1;i++) for(j=0;j<_jilu-1;j++) { if((student6[j].all)<(student6[j+1].all)) { student4=student6[j]; student6[j]=stude

43、nt6[j+1]; student6[j+1]=student4; } } 按总分排好序之后就是输出信息了,输出信息的时候,我采用的是一个学生的所有信息在一行输出,这样可以使使用者在查看的时候显得更加清楚明了。 最后就是退出功能。,退出功能在此程序中可以说无处不在,因为我在设计各项功能时都考虑到了退出的问题,在执行各个功能时,随时都可以退出到主菜单。但这里所说的退出功能是指退出程序功能,没有退出的功能,有了该功能将可以使程序在运行时可以很方便地退出。 三.总结与体会 回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整

44、整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了

45、,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退

46、堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。谢谢给我指点迷津的老师。6月11日,我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。 四、参考资料 1、李长云.《C语言程序设计》国防工业出版社、 2、百度文库(寻找C语言课程设计的模版及某些实用功能函数)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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