c语言成绩管理系统实训报告.doc_第1页
c语言成绩管理系统实训报告.doc_第2页
c语言成绩管理系统实训报告.doc_第3页
c语言成绩管理系统实训报告.doc_第4页
c语言成绩管理系统实训报告.doc_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

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

文档简介

实训报告题 目: 学生成绩管理系统院 系: 信息科技学院专 业: 通信工程姓 名: XX 学 号: 0951100424 指导教师: 刘欣 日 期: 2010年9月17日 桂林电子科技大学信息科技学院目 录一、问题定义 1二、系统设计 11、总体设计 12、详细设计 2(1)数据结构设计 2(2)主控流程 2(3)录入记录模块 5(4)查询记录模块 7(5)统计记录模块 9(6)删除记录模块 11 (7)修改记录模块 13 (8)插入记录模块 15三、测试与调试 17 1、概述 17 2、测试 17四、归纳与总结 18 1、开发经验 18 2、实训中遇到的问题及解决方法 18 3、设计中尚存的不足之处 18 4、感想和心得体会 18 5、参考资料 18附录 19学生成绩管理系统本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、数组等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用数组存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。一、问题定义创建一个学生成绩管理系统。假设系统中每个学生记录只包括学号、姓名、四个科目的成绩、平均分、名次排序等信息。程序的运行效果如下图所示,选择任意菜单后,实现相应功能。二、程序设计1、总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。(1)本学生成绩管理系统大量的使用了数组结构,由七大模块组成,用以实现预想的功能。这七大模块分别是:成绩录入、成绩查询、成绩统计、删除资料、修改资料、退出系统(如图2.1所示)。(2)输入模块:通过键盘将学生的成绩信息输入系统,学生记录由学生的基本信息和成绩信息字段构成。(3)查询模块:通过输入有关条件寻找并显示于该条件相匹配的学生信息。(4)统计模块:对学生的成绩进行统计,并按照一定条件进行排序。(5)删除模块:删除不需要的学生资料。(6)修改模块:对学生的成绩信息进行修改。(7)插入模块:对已有信息插入新的学生资料。(8)退出模块:在进行完系统操作后退出系统。1主菜单成绩录入成绩查询成绩统计删除资料修改资料插入学生退出系统图2.12、详细设计 (1)数据结构设计 结构体struct student用以储存学生的基本资料和成绩信息,在本程序中,只收集学生的四个科目的成绩和平均分。以下是结构体程序:struct student int num; /*学号*/char name20; /*姓名*/char sex10; /*性别*/float score5; /*分数*/float ave; /*平均分*/stu100;运用该结构体程序,即可将从键盘中输入的学生基本信息和各科成绩信息储存在学生成绩管理系统中,以便进行后面的相关操作。(2)主调函数main()函数的执行流程在主调函数main函数中,主要是显示主菜单的见面以及通过输入相应的数字选择相应的函数执行。其中的switch选择结构语句是进入相应被调函数的关键,通过它可以选择执行需要执行的程序。 在主调函数main()函数中, void LR()、void CX()、void TJ()、void SC()、void XG()、void CR()是用户自定义的无参函数,用来编写所需的程序;中间部分的printf语句是用来输出主菜单的;下面的switch语句是用来选择所需函数。 以下是主调函数main()的流程:2在1-7中判断a的值输出主菜单输入a进入void LR()=常量1进入voidCX()=常量2输出语句=常量7输出语句判断aa不等于7结束设置int型变量a设置无参函数开始default3以下是主调函数main()的程序: int main(void) void LR(); /*录入*/ void CX(); /*查询*/ void TJ(); /*统计*/void SC(); /*删除*/void XG(); /*修改*/ void CR(); /*插入*/ int a; doprintf( ttt学生成绩管理系统n); printf(*n); printf(tt1.成绩录入tt2.成绩查询n); printf(tt3.成绩统计tt4.删除资料n); printf(tt5.修改资料tt6.插入学生n); printf(tt7.退出系统n); printf(*n); printf(输入1-7选择。请选择:); scanf(%d,&a); switch(a) case 0: case 1:LR();break; case 2:CX();break; case 3:TJ();break; case 4:SC();break; case 5:XG();break; case 6:CR();break; case 7:printf(谢谢使用!);break; default:printf(输入错误!); while(a!=7); return 0; 4(3)录入模块的执行流程 输入模块的主要功能就是将从键盘上输入的信息记录到系统中,在这个模块中主用使用for循环结构语句,可以进行多人次输入。以下是录入模块void LR()函数的执行流程:开始设置float变量s设置int变量i,j,k,l,n,e,v输出提示输入语句输入所需信息对输入数据进行整理输出结果输入n对n进行判断n等于0结束5以下是录入模块void LR()函数的程序: void LR() float s; int i,j,k,l,n,e,v; /*printf(请输入密码:);loo3:scanf(%d,&e); if(e!=5678) printf(密码错误,请重新输入:n);goto loo3; if(e=5678) printf(密码输入正确,正在进入,请稍等n);goto looz;*/looz:if(m=1) printf(成绩已录入,数字键返回); scanf(%d,&v); goto loop;doprintf(请输入统计人数:); scanf(%d,&o); for(i=0;io;i+) printf(请输入第%d名学生的信息n,i+1); printf(学号:n); scanf(%d,&stui.num); printf(姓名:n); scanf(%s,&); printf(性别:n); scanf(%s,stui.sex); printf(分数:n); for(j=0;j4;j+) printf(第%d科,j+1); scanf(%f,&stui.scorej); s=0; for(k=0;k4;k+) s+=stui.scorek; stui.ave=s/4; printf(输入的资料为:n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(l=0;lo;l+) printf(%dt%st%st%ft%ft%ft%ft%fn,stul.num,,stul.sex, stul.score0,stul.score1,stul.score2,stul.score3,stul.ave); printf(重新输入请按0,其他数字键返回:); scanf(%d,&n); while(n=0); m=1;loop:;6(4)查询模块的执行流程查询模块的主要功能就是对已经输入系统的的信息按照一定条件查找并显示出来。在这个模块中大量使用了for循环结构语句来实现其功能,使用字符串比较函数strcmp按输入条件对已输入的信息进行查找匹配。以下是查询模块void CX()函数的执行流程:开始设置int变量:q,b,k,i,l,j,t设置char变量: p10输出提示输入语句输入q判断q按学号查询按姓名查询q等于1q等于2输出提示输入语句并输入数据对输入数据进行处理输出提示输入语句并输入数据对输入数据进行处理q等于3判断jj等于0输出结果判断i输出结果结束i大于等于07以下是查询模块void CX()函数的程序:void CX() int q,b,k,i,l,j=0,t; char p10; if(m=0) printf(没有记录,返回主菜单!n);goto lood;looq:printf(t1.按学号查询t2.按姓名查询t3.返回主菜单n); scanf(%d,&q); if(q=3) goto lood; if(q=1) printf(请输入学号:); scanf(%d,&b); for(k=0;ko;k+) if(b=stuk.num) j=1; printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,,stuk.sex, stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave); goto looq; if(j=0) printf(查无此人,返回菜单n);goto looq; if(q=2) printf(请输入姓名:); scanf(%s,p); for(i=0;i=o) printf(查无此人,返回菜单n);goto looq; printf(继续请按1,其他键退出:); scanf(%d,&t); if(t=1) goto looq;lood:;8(5)统计模块的执行流程统计模块的主要功能就是对已经输入系统的的信息按照一定条件排序并显示出来。在这个模块中,使用“冒泡”算法进行成绩间的排序,可以按平均分进行从高到低的排序,也可以按单科成绩从高到低进行排序。以下是统计模块void TJ()函数的执行流程:开始设置int变量 i,j,k,a100,t设置 float变量 n30,q输出各学生信息输出按平均分排序的结果输出提示输入的语句输入排序条件i判断i排序结果1=常量1=常量2排序结果2排序结果3=常量3=常量4排序结果4结束 default9以下是统计模块void TJ()函数的程序:void TJ() int i,j,k,a100,t; float n30,q; if(m=0) printf(没有记录,返回主菜单!n);goto looi; printf(各学生成绩:n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(i=0;io;i+) printf(%dt%st%st%ft%ft%ft%ft%fn,stui.num,,stui.sex, stui.score0,stui.score1,stui.score2,stui.score3,stui.ave); for(j=0;jo;j+) aj=j;nj=stuj.ave; for(k=0;ko-1;k+) for(j=0;jo-1-k;j+) if(njnj+1) t=aj;aj=aj+1;aj+1=t;q=nj;nj=nj+1;nj+1=q; printf(按平均分排序n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(i=0;io;i+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuai.num,,stuai.sex, stuai.score0,stuai.score1,stuai.score2,stuai.score3,stuai.ave);loon:printf(1.按第一科排序t2.按第二科排序t3.按第三科排序t4.按第四科排序n请输入:); scanf(%d,&i); switch(i) case 1:k=0;break; case 2:k=1;break; case 3:k=2;break; case 4:k=3;break; default:printf(输入错误,请重新输入n);goto loon; for(j=0;jo;j+) nj=stuj.scorek;aj=j; for(i=0;io-1;i+) for(j=0;jo-1-i;j+) if(njnj+1) t=aj;aj=aj+1;aj+1=t;nj=nj+1;nj+1=q; printf(按第%d科排序结果:n,k+1); printf(学号t姓名t性别t科目n); for(i=0;io;i+) printf(%dt%st%st%fn,stuai.num,,stuai.sex,stuai.scorek); printf(继续请按1,返回主菜单请按0:); scanf(%d,&j); if(j=1) goto loon;looi:; 10(6)删除模块的执行流程删除模块的主要功能就是已经输入系统的的信息按照一定条件删除。在这个模块的执行中,系统会按照用户的要求将所需资料找出并删除,将后续资料补上。以下是删除模块void SC()函数的执行流程:开始设置int变量 k,j,t,n,w输出信息输出提示信息输入条件对信息进行处理判断ww等于-1输出结果结束 11以下是删除模块void SC()函数的程序:void SC() int k,j,t,n,w=-1; if(m=0) printf(请先输入成绩!n); goto loop; printf(各学生成绩:n); printf(学号t姓名t性别 t第一科t第二科t第三科t第四科t平均分n);for(k=0;ko;k+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,,stuk.sex,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave);chucuo:printf (你要删除的学号:); scanf(%d,&j); for(t=0;to;t+) if (stut.num=j)w=t; if(w!=-1) o=o-1; for (k=w;ko;k+) stuk.num=stuk+1.num; strcpy(,stuk+1.name); strcpy(stuk.sex,stuk+1.sex); stuk.score0=stuk+1.score0; stuk.score1=stuk+1.score1; stuk.score2=stuk+1.score2; stuk.score3=stuk+1.score3; stuk.ave=stuk+1.ave;if (w=-1) printf(输入学号有误,请从新输入:);goto chucuo; printf(删除后各学生成绩:n); printf(学号t姓名t性别 t第一科t第二科t第三科t第四科t平均分n);for(k=0;ko;k+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,,stuk.sex,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave);printf(重复删除请按 0,其他数字键确认); scanf(%d,&n); if(n=0) SC(); loop:;12(7)修改模块的执行流程修改模块的主要功能就是将已存入系统的信息按条件找出并建议修改,再将修改后的信息处存入系统中。在程序执行中,系统将根据用户输入的条件找到对应的信息并进行修改、保存。以下是修改模块void XG()函数的执行流程:开始设置int变量 k,j,t,n,w设置 float变量 x输出信息输出提示信息输入条件判断ww等于-1按提示输入修改信息对输入信息进行处理输出结果结束13以下是修改模块void XG()函数的程序:void XG() int k,j,t,n,w=-1; float x; if(m=0) printf(请先输入成绩!n); goto loop; printf(各学生成绩:n); printf(学号t姓名t性别 t第一科t第二科t第三科t第四科t平均分n);for(k=0;ko;k+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,,stuk.sex,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave);chucuo:printf (你要修改的学号:); scanf(%d,&j); for(t=0;to;t+) if (stut.num=j)w=t; if(w!=-1) printf(请输入你要修改的信息:); printf(n修改的学号:n); scanf(%d,&stuw.num); printf(n修改的姓名:n); scanf(%s,&); printf (n修改的性别:n); scanf (%s,&stuw.sex); printf(n修改的分数:n); for(j=0;j4;j+) printf(第%d科,j+1); scanf(%f,&stuw.scorej); x=0; for(t=0;t4;t+) x=x+stuw.scoret; stuw.ave=x/4;if (w=-1) printf(输入学号有误,请从新输入:);goto chucuo; printf(修改后各学生成绩:n); printf(学号t姓名t性别 t第一科t第二科t第三科t第四科t平均分n);for(k=0;ko;k+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,, stuk.sex,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave);printf(重复修改请按 0,其他数字键确认); scanf(%d,&n); if(n=0) XG(); loop:;14(8)插入模块的执行流程插入模块的主要功能是在已有的信息中插入一条或几条新的信息。以下是插入模块void CR()函数的执行流程:、开始设置int变量 i,k,j,t,n,设置float变量 x输出提示信息输入信息对输入信息进行处理输出结果结束15以下是插入模块void CR()函数的程序:void CR()int i,k,j,t,n,w=-1; float x; if(m=0) printf(请先输入成绩!n); goto loop; printf(插入的学号:); scanf(%d,&stuo.num); printf(n插入的姓名:n); scanf(%s,&); printf (n插入的性别:n); scanf (%s,&stuo.sex); printf(n插入的分数:n); for(j=0;j4;j+) printf(第%d科,j+1); scanf(%f,&stuo.scorej); o=o+1; for(i=0;io;i+) x=0; for(t=0;t4;t+) x=x+stui.scoret; stui.ave=x/4; printf(各学生成绩:n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(k=0;ko;k+) printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,, stuk.sex,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave); printf(重复插入请按 0,其他数字键确认); scanf(%d,&n); if(n=0) CR();loop:;16 三、测试与调试1、概述一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“”等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试调试再测试再调试。能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示:测试用例测试数据预期结果。好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况,。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。测试程序时,用监视窗口可以随时查看变量或表达式的值,有时还可以将部分程序代码用注释符暂时括起来,缩短程序,以便压缩出错代码的范围。2、测试(1)在主菜单中选择1 当用户输入1并按回车后,系统应该进入输入程序中。并能在其中输入所需数据。在结束输入后,可以显示已输入的信息,并返回主菜单中。 (2)在主菜单中选择2 当用户输入2并按回车后,系统应该进入查询程序中。能在其中按学号或姓名进行查询,显示查询出的结果。在查询结束后返回主菜单。 (3)在主菜单中选择3 当用户输入3并按回车后,系统应该进入统计程序中。能在其中按平均分和各单科成绩进行从高到低的排序,显示排序出的结果。在统计结束后返回主菜单。(4)在主菜单中选择4 当用户输入4并按回车后,系统应该进入删除程序中。能在其中删除符合输入条件的学生资料,显示删除后剩下的结果。在删除结束后返回主菜单。(5)在主菜单中选择4 当用户输入5并按回车后,系统应该进入修改程序中。能在其中修改符合输入条件的学生资料,显示修改后的结果。在修改结束后返回主菜单。(6)在主菜单中选择6 当用户输入6并按回车后,系统应该进入插入程序中。能在其中插入新的学生资料,显示插入后的结果。在插入结束后返回主菜单。(7)在主菜单中选择4 当用户输入7并按回车后,系统应该显示“谢谢使用”,并退出系统。17 四、归纳总结1、开发经验 通过这次的实训,了解到了要开发设计一个简单的管理系统,首先要考虑好要如何实现系统的功能;其次确定用什么算法实现各个功能;第三写出组成这个系统的语句;第四测试和调试已经写好的程序。2、实训中遇到的问题及解决方法在这次的实训中,主要遇到的问题是编译环境的不同对程序也不同。本来我的程序本来是在WIN-TC里编译的,在VC+中不需要getch语句,而在WIN-TC中则需要,因此一直都处在编译失败,转入VC+中删除getch即可。还有的问题就是容易缺少“”或“;”,经过仔细查找后可以解决该问题。3、设计中尚存的不足之处关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,有些地方甚至有点乱;其次,有些地方好像功能有点重复了;最后,就是该程序界面不够美观大方。4、感想和心得体会 通过这一次的C语言程序设计实训,熟悉了在C语言中各语句的功能,掌握了设计一个简单管理系统的基本知识。学会通过查阅资料、借鉴他人成功实例,获取自己所需的知识。5、参考资料1 C语言程序设计 唐新来、李春贵版 科学出版社2 二级教程C语言程序设计(2010年版) 高等教育出版社18附录:以下是这次学生成绩管理系统的程序:#include stdio.h #include stdlib.h #include string.h struct student int num;/*学号*/ char name20;/*姓名*/ char sex10;/*性别*/ float score5;/*分数*/ float ave;/*平均分*/stu100;int o,m=0;int main(void) void LR();/*录入*/ void CX();/*查询*/ void TJ();/*统计*/ void SC();/*删除*/ void XG();/*修改*/ void CR();/*插入*/ int a; doprintf( ttt学生成绩管理系统n); printf(*n); printf(tt1.成绩录入tt2.成绩查询n); printf(tt3.成绩统计tt4.删除资料n); printf(tt5.修改资料tt6.插入学生n); printf(tt7.退出系统n); printf(*n); printf(输入1-7选择。请选择:); scanf(%d,&a); switch(a) case 0: case 1:LR();break; case 2:CX();break; case 3:TJ();break; case 4:SC();break; case 5:XG();break; case 6:CR();break; case 7:printf(谢谢使用!);break;19 default:printf(输入错误!); while(a!=7); return 0;void LR() float s; int i,j,k,l,n,e,v; /*printf(请输入密码:);loo3:scanf(%d,&e); if(e!=5678) printf(密码错误,请重新输入:n);goto loo3; if(e=5678) printf(密码输入正确,正在进入,请稍等n);goto looz;*/looz:if(m=1) printf(成绩已录入,数字键返回); scanf(%d,&v); goto loop;doprintf(请输入统计人数:); scanf(%d,&o); for(i=0;io;i+) printf(请输入第%d名学生的信息n,i+1); printf(学号:n); scanf(%d,&stui.num); printf(姓名:n); scanf(%s,&); printf(性别:n); scanf(%s,stui.sex); printf(分数:n); for(j=0;j4;j+) printf(第%d科,j+1); scanf(%f,&stui.scorej); s=0; for(k=0;k4;k+) s+=stui.scorek; stui.ave=s/4; printf(输入的资料为:n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(l=0;lo;l+) printf(%dt%st%st%ft%ft%ft%ft%fn,stul.num,,stul.sex, stul.score0,stul.score1,stul.score2,stul.score3,stul.ave);20 printf(重新输入请按0,其他数字键返回:); scanf(%d,&n); while(n=0); m=1;loop:;void CX() int q,b,k,i,l,j=0,t; char p10; if(m=0) printf(没有记录,返回主菜单!n);goto lood;looq:printf(t1.按学号查询t2.按姓名查询t3.返回主菜单n); scanf(%d,&q); if(q=3) goto lood; if(q=1) printf(请输入学号:); scanf(%d,&b); for(k=0;ko;k+) if(b=stuk.num) j=1; printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); printf(%dt%st%st%ft%ft%ft%ft%fn,stuk.num,,stuk.sex, stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.ave); goto looq; if(j=0) printf(查无此人,返回菜单n);goto looq; if(q=2) printf(请输入姓名:); scanf(%s,p); for(i=0;i=o) printf(查无此人,返回菜单n);goto looq; printf(继续请按1,其他键退出:); scanf(%d,&t); if(t=1) goto looq;lood:; 21void TJ() int i,j,k,a100,t; float n30,q; if(m=0) printf(没有记录,返回主菜单!n);goto looi; printf(各学生成绩:n); printf(学号t姓名t性别t第一科t第二科t第三科t第四科t平均分n); for(i=0;io;i+) printf(%dt%st%st%ft%ft%ft%ft%fn,stui.num,,stui.sex, stui.score0,stui.score1,stui.score2,s

温馨提示

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

评论

0/150

提交评论