学生成绩管理系统课程设计说明书.doc_第1页
学生成绩管理系统课程设计说明书.doc_第2页
学生成绩管理系统课程设计说明书.doc_第3页
学生成绩管理系统课程设计说明书.doc_第4页
学生成绩管理系统课程设计说明书.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

综合程序 课程设计说明书课程设计名称: 综合程序课程设计 课程设计题目: 学生成绩管理系统 学 院 名 称: 信息工程学院 专业: 班级: 学号: 姓名: 评分: 教师: 20 15 年 3 月 1 日由每位学生填写、由任教教师保存待查 综合程序 课程设计任务书20 14 20 15学年 第 2 学期 第 1 周 2周 题目学生成绩管理系统内容及要求用c编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:一、功能要求:(1)信息维护:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息;(2)信息查询:查询时可实现按姓名查询、按学号查询;(3)成绩统计:a输入任意的一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段的学生情况;(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)。(使用多种方法排序者,加分)二、其它要求:(1)只能使用c或c+语言,源程序要有适当的注释,使程序容易阅读;(2)采用文本菜单界面; (3)学生可增加新功能模块。进度安排1、 图书馆、网上查资料:2天;2、 编写程序:3天;3、 运行调试改正程序:3天;4、 检查验收:2天。学生姓名:陈方燕指导时间 年 月 日- 年 月 日指导地点: 任务下达2015年 月 日任务完成2015 年 月 日考核方式1.评阅 2.答辩 3.实际操作 4.其它指导教师系(部)主任注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。摘要现代社会越来越趋向智能化,而计算机是实现智能化的重要工具。学会用计算机编程,熟练运用c语言是一项重要技能。学生成绩管理是每个教育单位不可缺少的,使用c语言编写的学生成绩管理系统不仅能快速的实现学生成绩的管理,并且更加方便,功能齐全。本次设计主要运用c语言来设计一个学生成绩管理系统,能实现学生成绩录入,并以文件形式保存,修改、增加、删除学生信息,还能按照学号或姓名对某一学生信息进行查找,除此之外,还有对学生成绩排序、学生成绩统计等多种功能。关键字:c语言、成绩管理、成绩查询目录摘要2第1章 设计要求 4第2章 系统组成及设计原理 52.1 系统组成52.2 设计原理5第3章 概要设计 63.1 系统层次图63.2 方案说明6第4章 详细设计 74.1 程序流程图74.2 模块详细设计7 4.2.1 界面设计 8 4.2.2 主函数设计 9 4.2.3 文件读写设计11 4.2.4 插入学生信息设计13 4.2.5 修改学生信息设计14 4.2.6 删除学生信息设计16 4.2.7 查询学生信息设计17 4.2.8 学生成绩排序查询设计19 4.2.9 统计学生成绩分数段信息设计21 4.2.10 统计挂科学生成绩设计 23第5章 结果调试及分析245.1 调试方法 245.2 调试中遇到的问题及解决方法 24第6章 结论25第7章 参考文献26附录 27第1章 设计要求 请用c编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:(一)功能要求:(1)信息维护:要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:要求:a输入任意的一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段的学生情况。(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)(二)其它要求:(1)只能使用c或c+语言,源程序要有适当的注释,使程序容易阅读(2)采用文本菜单界面(3)学生可增加新功能模块第二章 系统组成及设计原理2.1 系统组成该系统主要包括文件读写函数、增加信息函数、修改信息函数、删除信息函数、分别按学号、姓名查询函数、求总成绩函数、统计分数段函数、统计挂科学生函数九个模块,相互之间既相互独立又相互联系。2.2 设计原理本次设计主要运用c语言编写,按照设计要求,先确定菜单目录及所需函数。在文件函数部分,主要用到文件指针及文件的读写。文件的使用贯穿所有功能,因此在主函数中要对其进行调用。主函数主要实现对各个函数的调用,用do-while循环语句和switch()-case选择判断语句来调用相关函数功能模块,并对显示界面进行设计,是输出界面方便用户操作切美观,主要由printf语句实现。输出显示函数部分主要用printf语句实现输出内容的设定,并引用结构体显示所需部分信息。插入、修改、删除部分则是对文件中学生信息进行相关操作,插入学生信息用printf、scanf、及getchar语句对学生各项信息进行录入,并保存到文件。修改和删除除了上述语句外,还有if-else语句分情况判断所要操作学生是否存在,然后再进行修改或删除。查询模块要先获得学生的学号姓名,用searchnum(char nu)、searchname(char name)函数实现,用到searchname(char name)语句实现。排序模块主要用for循环及if-else语句实现对总成绩或单科成绩的比较,再调用相关显示函数输出。统计模块主要用for循环及if-else语句逐一比较每个学生成绩是否满足给定条件,若满足则输出。第三章 概要设计3.1 系统层次图按单科排序退出本系统挂科学生信息统计某科分数段按总分排序按姓名查询学生成绩修改学生信息添加学生信息删除学生信息按学号查询学生信息 开始 主界面 结束 图3.1 学生成绩管理系统结构层次图3.2方案说明本方案程序简介易懂,并且功能齐全,可以根据个人需要而增加功能。程序运行后,界面美观,操作方便。操作中添加、修改、删除的学生信息都保存在文件中,确保了数据的长久性及其安全性。第四章 详细设计4.1程序流程图程序流程图如图4.1:开始 case58764321091是否继续是否继续是否继续修改学生信息删除学生信息按学号查寻学生按总成绩排序按姓名查寻学生统计挂科学生信息按某一课目成绩排序统计某科某分数段成绩退出增加学生信息结束是否继续是否继续? 是 是 是 是 是 否 否 否 否 否图4.1 学生成绩管理系统流程图4.2 模块详细设计程序设计所用函数如下:1、 库函数 #include #include;2、主函数 void main();3、结构体 struct student;4、写文件函数 void writefile();5、读文件函数 void readfile()6、求总分函数 float and(struct student stu);7、获取学号函数 int searchnum(char nu);8、获取姓名函数 int searchname(char name);9、显示学生信息函数 void display();10、显示单个学生信息函数 void dsingle(int index);11、显示语文成绩信息函数 void dsingle1(int inde);12、显示数学成绩信息函数 void dsingle2(int ind);13、显示英语成绩信息函数 void dsingle3(int in);14、插入学生信息函数 void insert();15、修改学生信息函数 void modify();16、删除学生信息函数 void delete();17、按学号查询学生信息 void select1();18、按姓名查询学生信息 void select2();19、按语文成绩排序函数 void schinese();20、按数学成绩排序函数 void smath();21、按英语成绩排序函数 void senglish();22、按总成绩排序函数 void sall();23、按语文成绩统计 void chineses(int a,int b);24、按数学成绩统计 void maths(int a,int b);25、按英语成绩统计 void englishs(int a,int b);26、统计挂科学生函数 void lose();4.2.1 界面设计 如图4.2所示: 图4.2 主界面图在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1 ,即可增加学生记录)。4.2.2 主函数设计主函数主要运用do-while循环语句和switch()-case选择判断语句来调用相关函数功能模块。系统的运行是循环里进行的,只有在主界面并选择“退出”时,才会跳出循环,并退出程序。具体程序如下:void main() int choice; int m,n; readfile(); while(1) /*主菜单*/ printf(n *); printf(n 欢迎进入-n); printf( 学生成绩管理系统); printf(nn *n); printf(n *主菜单*n); printf(n 1、增加学生记录n); printf( 2、修改学生信息n); printf( 3、删除学生信息n); printf( 4、按学号查询学生信息n); printf( 5、按姓名查询学生信息n); printf( 6、按总成绩排序n); printf( 7、按某课程成绩排序n); printf( 8、统计某课程某分数段的情况n); printf( 9、统计挂科学生信息n); printf( 10、退出n); printf( *n); printf( 请选择(1-10):); scanf(%d,&choice); getchar(); switch(choice) case 1: insert(); break; case 2: modify(); break; case 3: delete(); break; case 4: select1(); break; case 5: select2(); break; case 6: sall(); display(); break; case 7: printf( 选择课程对应的代号:n 语文代号1,数学代号2,英语代号3, n 输入-); scanf(%d,&mark); switch(mark)case 1: schinese(); display(); break; case 2: smath(); display(); break; case 3: senglish(); display(); break; break; case 9:lose();break; case 8: printf( 选择课程对应的代号:n 语文代号1,数学代号2,英语代号3,n 输入-); scanf(%d,&mark); switch(mark)case 1:printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);chineses(m,n); break; case 2: printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);maths(m,n); break; case 3:printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);englishs(m,n); break;case 10: exit(0); break; writefile(); 4.2.3 文件读写设计 此模块运用c语言中文件读写相关知识,定义fp指针,从生成的文件中读写学生信息。若文件中尚未有学生信息存入,则输出文件为空;若未能按正确格式写入,则输出文件写入错误;若输入正确,则可以用于其他功能中对学生信息的调用。具体程序如下:/*将学生信息从文件读出*/void readfile() file *fp; int i; if (fp=fopen(studentinformal.txt,rb)=null) printf(文件为空!n); return; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;inum;i+) fread(&studentsi,sizeof(struct student),1,fp); fclose(fp); /*将学生信息写入文件*/void writefile() file *fp; int i; if (fp=fopen(studentinformal.txt,wb)=null) printf(文件为空!n); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf(文件写入错误!n); for (i=0;inum;i+) if (fwrite(&studentsi,sizeof(struct student),1,fp)!=1) printf(文件写入错误!n); fclose(fp); 4.2.4 插入学生信息设计插入学生信息用insert()函数实现,主要运用printf、scanf、getchar语句来实现对学生信息读插入,并有判断是否继续输入语句。功能界面如图4.3所示,选择菜单功能“1”即可实现学生信息的插入。 图4.3 插入学生信息 程序设计:/*插入学生信息*/void insert() while(1) printf( 请输入学号:); scanf(%s,&studentsnum.num); getchar(); printf( 请输入姓名:); scanf(%s,&studentsnum.name); getchar(); printf( 请输入语文成绩:); scanf(%f,&studentsnum.chinese); getchar(); printf( 请输入数学成绩:); scanf(%f,&studentsnum.math); getchar(); printf( 请输入英语成绩:); scanf(%f,&studentsnum.english); getchar(); studentsnum.add=and(studentsnum); num+; printf( 是否继续?(y/n); if (getchar()=n) break; 4.2.5 修改学生信息设计修改学生信息用modify()函数实现,调用searchnum(id)函数,过输入学号确定所要修改的学生信息,除了用到printf、scanf、getchar语句外,还用到if-else语句,判断所要修改的学生信息是否存在,若不存在,则输出“学生不存在”;若存在,即可对学生信息进行相应的修改。功能界面如图4.4,选择主菜单“2”功能即可。图4.4 修改学生信息程序设计:/*修改学生信息*/void modify() while(1) char nu20; int number; printf( 请输入要修改的学生的学号:); scanf(%s,&nu); getchar(); number=searchnum(nu); if (number=-1) printf( 学生不存在!n); else printf( 你要修改的学生信息为:n); dsingle(number); printf( -请输入新值-n); printf( 请输入学号:); scanf(%s,&studentsnumber.num); getchar(); printf( 请输入姓名:); scanf(%s,&studentsnumber.name); getchar(); printf( 请输入语文成绩:); scanf(%f,&studentsnumber.chinese); getchar(); printf( 请输入数学成绩:); scanf(%f,&studentsnumber.math); getchar(); printf( 请输入英语成绩:); scanf(%f,&studentsnumber.english); getchar(); studentsnumber.add=and(studentsnumber); printf(是否继续?(y/n); if (getchar()=n) break; 4.2.6 删除学生信息设计删除学生信息用delete()函数实现,并且调用searchnum(id)函数,过输入学号确定所要删除的学生信息,由if-else语句,判断所要删除的学生信息是否存在,若不存在,则输出“学生不存在”,若存在,即可对学生信息进行删除。功能界面如图4.5,选择主菜单“3”功能即可。图4.5 删除学生信息程序设计:/*删除学生信息*/void delete() int i; while(1) char id20; int index; printf( 请输入要删除的学生的学号:); scanf(%s,&id); getchar(); index=searchnum(id); if (index=-1) printf( 学生不存在!n); else printf( 你要删除的学生信息为:n); dsingle(index); printf( 是否真的要删除?(y/n); if (getchar()=y) for (i=index;inum-1;i+) studentsi=studentsi+1;/把后边的对象都向前移动 num-; getchar(); printf( 是否继续?(y/n); if (getchar()=n) break; 4.2.7 查询学生信息设计查询学生信息共有两种方法。方法一 按学号查询按学号查询用select1()函数,用到printf、scanf、getchar语句外,还用到if-else语句,输入所要查询学生的学号,在文件中读取,若该学生存在,则从文件中获取该学生信息,并显示到输出界面;若不存在,则输出“该学生不存在”。可选择菜单中的“4”选项实现,运行结果如图4.6所示。图 4.6 按学号查询程序设计:void select1() while(1) char id20; int index; printf( 请输入要查询的学生的学号:); scanf(%s,&id); getchar(); index=searchnum(id); if (index=-1) printf( 学生不存在!n); else printf( 你要查询的学生信息为:n); dsingle(index); printf( 是否继续?(y/n); if (getchar()=n) break; 方法二 按姓名查询 按姓名查询用select2()函数,与按学号查询所用语句基本相同,只是此时输入的是所查学生的姓名,从文件中获取的也是学生的姓名信息,其他与按学号查询相同。可选择菜单中的“5”选项实现,运行结果如图4.7所示。图4.7 按姓名查询程序设计:void select2() while(1) char name20; int index; printf( 请输入要查询的学生的姓名:); scanf(%s,&name); getchar(); index=searchname(name); if (index=-1) printf( 学生不存在!n); else printf( 你要查询的学生信息为:n); dsingle(index); printf( 是否继续?(y/n); if (getchar()=n) break; 4.2.8 学生成绩排序设计学生成绩排序总体分为两个方面:1、 按总成绩排序按总成绩排序用sall()函数,用 display()函数显示,用for双重循环,获取每个学生的总成绩,并比较大小。可选择菜单中的“6”选项实现,运行结果如图4.8所示。图 4.8 按总成绩排序程序设计:void sall() int i,j; struct student tmp; for (i=0;inum;i+) for (j=1;jnum-i;j+) if (studentsj-1.addstudentsj.add) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; 2、 按单科成绩排序 按单科成绩排序用 schinese() 、smath()和senglish()三个函数实现,用 display()函数显示,分别完成对语文、数学、英语成绩的排序。用for双重循环对选择的科目成绩进行从大到小排序。可选择菜单中的“7”选项,按提示输入,运行结果如图4.9、4.10、4.11所示。图4.9 按语文成绩排序图4.10 按数学成绩排序图4.11 按英语成绩排序程序设计(以按语文成绩排序为例):void schinese() int i,j; struct student tmp; for (i=0;inum;i+) for (j=1;jnum-i;j+) if (studentsj-1.chinesestudentsj.chinese) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; 4.2.9 统计学生成绩分数段信息设计 统计学生某科目分数段用到chineses()、maths()和englishs()函数,并分别用dsingle1()、dsingle2()和dsingle3()函数输出显示满足条件的学生信息。函数中用到for循环和if语句及函数调用,选择满足条件的学生信息,并输出显示。可选择菜单中的“8”选项,按提示输入,运行结果如图4.12、4.13、4.14所示。图 4.12 统计语文成绩分数段图 4.13 统计数学成绩分数段图4.14 统计英语成绩分数段程序设计(以按语文成绩统计为例):void chineses(int a,int b) int i; for (i=0;inum;i+) if (studentsi.chinese=a) dsingle1(i); 4.2.10统计挂科学生成绩设计统计挂科学生主要用到lose()函数,并调用dsingle()函数,使用for循环以及if语句实现对所需信息的获取及输出显示。可选择菜单中的“9”选项,运行结果如图4.15所示。图4.15 挂科学生成绩统计程序设计:void lose()int i;for(i=0;inum;i+)if(studentsi.chinese60|studentsi.math60|studentsi.english60)dsingle(i);第五章 结果调试及分析5.1调试方法 调试方法主要为运行调试,先编译程序,找到运行时出现的错误,找到程序中对应的出错地方,进行改正。5.1调试中遇到的问题及解决方法问题一:建立文件后,运行程序却显示文件不存在,检查程序并无错误。 解决方法:检查所建文件后发现电脑其他位置有与之同名的文件,对文件重命名后,可以打开。问题二:运行后,退出功能不能使用。 解决方法:检查程序后,发现有一个大括号位置不对,将其改正后运行正常。问题三:在按学号查找模块,运行后不能实现其功能。 解决方法:检查程序后,发现误将调用的函数名写错,因而输不出结果,改正后即可正常运行。问题四:按总成绩排序输出后,发现输出的界面表格列没对齐,并且有的数据不能正确输出,。 解决方法:输出不正确应在显示学生信息的函数中查找问题,发现在定义字符输出时多打了一个“%”,导致学生成绩不能显示,另外修改了每个字符输出之间的空格,运行后,能正确输出且界面美观。第六章 结论 通过本次课设可以让学生们学到很多。首先,课设考验的就是学生自主思考和创新能力,根据题目要求,要自己到图书馆和网上查资料设计程序。其次,提高了学生对软件设计的兴趣,不仅复习巩固了以前所学的知识,在编程的过程中更是学到了很多在课堂上学不到的新知识开阔了知识面,对c语言编程中出现的问题也能更快的找出解决方法。再次,通过本次课设才发现在编程方面有很多的不足之处,同学们应该在平时多学多练,增强自己在编程方面的能力。最后,本次设计实现了设计要求的同时,程序简单易懂,用户操作方便。但是程序较长,很多子程序类似,占用内存较大。总之,本次课设学到了很多,但仍有很多不足之处,应该不断的思考学习,才能不断的进步。 第7章 参考资料1、 谭浩强.c程序设计.北京:清华大学出版社,2005年.2、 谭浩强.c程序设计题解与上级指导.北京:清华大学出版社,2005年.3、李春葆、张植民、肖忠付.c语言设计题典.北京:清华大学出版社,2002年.4、黄维通. c语言程序设计习题解析与应用案例分析. 北京:清华大学出版社,2004.5、哈比森. c语言参考手册. 北京:机械工业出版社,2001.附录源程序代码:#include #include/*定义学生结构体*/struct student char num20; char name20; float chinese; float math; float english; float add;/*声明学生数组及学生数量*/struct student students1000;int num=0;int mark;/*将学生信息从文件读出*/void readfile() file *fp; int i; if (fp=fopen(studentinformal.txt,rb)=null) printf(文件为空!n); return; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;inum;i+) fread(&studentsi,sizeof(struct student),1,fp); fclose(fp); /*将学生信息写入文件*/void writefile() file *fp; int i; if (fp=fopen(studentinformal.txt,wb)=null) printf(文件为空!n); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf(文件写入错误!n); for (i=0;inum;i+) if (fwrite(&studentsi,sizeof(struct student),1,fp)!=1) printf(文件写入错误!n); fclose(fp); /*求总成绩*/float and(struct student stu) return (stu.chinese+stu.math+stu.english); /*通过学号返回数组下标*/int searchnum(char nu) int i; for (i=0;inum;i+) if (strcmp(students

温馨提示

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

评论

0/150

提交评论