c语言程序设计报告学生成绩管理系统_第1页
c语言程序设计报告学生成绩管理系统_第2页
c语言程序设计报告学生成绩管理系统_第3页
c语言程序设计报告学生成绩管理系统_第4页
c语言程序设计报告学生成绩管理系统_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

年4月19日c语言程序设计报告学生成绩管理系统文档仅供参考课程设计报告书学生成绩管理系统单位:分院班级:学号:姓名:指导老师:完成日期:内容摘要摘要:本次课程设计的课题是学生成绩管理系统,本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能,对设计思路、功能模块、流程图、功能模块、中心算法进行了详细的说明,并画出流程框图。本文提供了完整的源程序代码,并展示了系统使用和运行效果。最后给出了在小学期高级语言程序设计过程中的总结,其中包含本程序独特设计,作者的设计收获、设计中遇到的困难和问题,以及作者对设计题目及功能的改进意见,查阅的参考文献等方面的内容。 索引关键字关键词:源程序代码,学生成绩管理,流程框图内容目录题目要求4内容要求4设计要求4设计思想5功能模块及流程图5数据结构7中心算法代码说明7系统实现8程序代码8系统使用21运行效果说明21总结24致谢词25参考文献25.正文1题目要求1.1内容要求要求能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。1.输入记录。对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储能够采用结构体数组或者链表,可是最终应该存储在文件中。2.维护记录。能够实现添加、删除、修改学生记录,可是一定要将最终数据存储到文件中。3.查询记录。根据班级、学号、科目等查询学生的成绩。如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。4.统计记录。完成对各门功课最高分和不及格人数的统计。1.2设计要求①各级菜单及功能间必须建立必要的联系,要定义参照完整性规则。②使用二进制文件方式存储数据。③要求有菜单界面,结果显示时应达到界面友好。④将完成的全部内容连编成一个.exe文件。。2设计思想 1.在设计时考虑以下几个方面:操作简单。因为使用者多为非计算机专业人员,因此该系统要求设计的界面美观,操作方便。要充分考软件界面友好和操作方便,便愈使用人员快速上手。易于维护。一个软件的好坏,关键在于产品的可靠,稳定,便于维护。2.开发语言的选择针对世界上流行的大量软件和开发工具,经过认真分析其优缺点,结合当前的软硬件开发环境,选用微软WINDOWS平台下的VisualC++作为软件开发工具。选用工具有几下几方面优点:C语言简洁、紧凑、使用方便、灵活。有32个关键字。C语言程序比其它许多高级语言简练,源程序短,因此输入程序时工作量小。运算符丰富。数据类型丰富,具有现代语言的各种数据结构。C语言是完全模块化和结构化的语言。用函数作为程序的模块单位,便于实现程序的模块化。语法限制不太严格,程序设计自由度大。生成目标代码质量高,程序执行效率高。用C语言编写的程序可移植性好。综上所述,VisualC++能够满足学生成绩管理的要求,因此用来开发学生成绩管理系统是非常合适的。3功能模块及流程图学生成绩管理系统对学校加强学生基本情况及学生成绩管理有着重要的作用。为了能使该系统具有更为广泛的功能:应该将该系统细分为学生操作系统、教师操作系统、教务处操作系统,以满足不同身份的人的需求。总体来说,该系统应分为输入模块、维护模块、查询模块以及统计模块。由于本软件为学校中多个身份的人的定制开发的。我们经过重复论证,最终确定了学生成绩管理系统的设计方案,主要流程图如下所示:系统主菜单系统主菜单学生操作教师操作教务处操作查询功能录入功能删除功能修改功能查询功能查询功能统计功能统计功能按班级按学号按科目按班级按学号按科目按班级按学号按科目数学英语计算机数学英语计算机数学英语计算机经过系统主菜单,能够使学校中不同身份的人选择不同的操作系统,从而合理的使用不同的功能。4数据结构结构体:程序设计中用到的结构体类型:学生信息结构体类型:structstudent{ intnum; charnam[20]; charclas[20]; floatmath; floatenglish; floatcomputer;}stu[SIZE];5中心算法代码说明说明1.voidsave(){ FILE*fp; intj; if((fp=fopen("stu_list","wb"))==NULL) { printf("cannotopenfile\n"); return; } for(j=0;j<SIZE;j++) if(fwrite(&stu[j],sizeof(structstudent),1,fp)!=1) printf("filewriteerror\n"); fclose(fp);}以上代码将数据存入文件中,操作起来避免了直接对内存进行操作,可对文件进行操作。2.for(i=0;i<SIZE;i++) for(j=0;j<SIZE-i;j++) { if(stu[i].math>stu[i+1].math) { t=stu[i].math; stu[i].math=stu[i+1].math; stu[i+1].math=t; } }for(j=0,i=0;i<SIZE;i++) { if(stu[i].math<60) j=j+1; }统计函数中使用起泡法排序再统计的方法6.系统实现6.1程序代码代码如下:#include<stdio.h>#include<string.h>#defineSIZE34structstudent{ intnum; charnam[20]; charclas[20]; floatmath; floatenglish; floatcomputer;}stu[SIZE];voidsave()/*将数据储存于文件*/{ FILE*fp; intj; if((fp=fopen("stu_list","wb"))==NULL) { printf("cannotopenfile\n"); return; } for(j=0;j<SIZE;j++) if(fwrite(&stu[j],sizeof(structstudent),1,fp)!=1) printf("filewriteerror\n"); fclose(fp);}search(intn)/*查询学号函数*/{intj;for(j=0;j<SIZE;j++)if(n==stu[j].num)returnj;/*将j的值返回,经过search带回调用处*/if(j>SIZE) return-1;}voidfunction1()/*添加记录*/{ voidxt2(); inti; chark; printf("****************************添加学生信息********************************\n"); for(i=0;i<SIZE;i++) { printf("请输入该生学号:\n"); scanf("%d",&stu[i].num); printf("请输入该生姓名:\n"); scanf("%s",&stu[i].nam); printf("请输入该生所在班级:\n"); scanf("%s",&stu[i].clas); printf("请输入该生数学成绩:\n"); scanf("%f",&stu[i].math); printf("请输入该生英语成绩:\n"); scanf("%f",&stu[i].english); printf("请输入该生计算机成绩:\n"); scanf("%f",&stu[i].computer); getchar();printf("完成本次操作!!!\n");printf("是否返回上一菜单?y/n:\n");k=getchar();if(k=='n') continue;/*判断*/else break; } save();xt2();}voidfunction2()/*删除学生记录*/{ voidxt2(); inti,j; chara,k; printf("****************************删除学生信息******************************\n"); printf("请输入要删除学生的学号:\n"); scanf("%d",&i);j=search(i); if(j==-1) {loop:printf("该学生不存在,请重新输入!\n"); printf("输入0退出\n"); for(j=0;j<SIZE;j++) { if(j==-1) gotoloop; elsebreak; } } else {for(i=0;i<SIZE;i++) {printf("原数据为:\n"); printf("学号%d,姓名%s,班级%s,数学成绩%4.1f,英语成绩%4.1f,计算机成绩%4.1f\n",stu[j].num,stu[j].nam,stu[j].clas,stu[j].math,stu[j].english,stu[j].computer); stu[j].num=0; stu[j].nam[20]=0; stu[j].clas[20]=0; stu[j].math=0; stu[j].english=0; stu[j].computer=0; printf("删除结果为\n"); printf("学号%d,姓名%s,班级%s,数学成绩%4.1f,英语成绩%4.1f,计算机成绩%4.1f\n",stu[j].num,stu[j].nam,stu[j].clas,stu[j].math,stu[j].english,stu[j].computer); save();printf("完成本次操作!!!\n");k=getchar();if(k=='y') continue;/*判断*/else break;} } printf("是否返回主菜单y/n:\n"); scanf("%c",&a); if(a=='y') xt2(); else function2();}voidfunction3()/*修改*/{charname[20],phy[10];voidxt2(); printf("请输入要修改的学生姓名:"); scanf("%s",name); printf("\n"); inti; floatt; for(i=0;i<SIZE;i++)change:if(strcmp(stu[i].nam,name)==0) { printf("请输入要修改的科目:"); scanf("%s",phy); if(strcmp("math",phy)==0) { printf("输入成绩:"); scanf("%f",&t); stu[i].math=t; printf("成绩为:%4.2f\n",stu[i].math); }elseif(strcmp("english",phy)==0) { printf("输入成绩:"); scanf("%f",&t); stu[i].english=t; printf("成绩为:%4.2f\n",stu[i].english); }elseif(strcmp("computer",phy)==0) {printf("输入成绩:"); scanf("%f",&t); stu[i].computer=t; printf("成绩为:%4.2f\n",stu[i].computer); }else { printf("错误,请重新输入:");gotochange;} } save();printf("完成本次操作!!!\n");xt2(); }voidway1()/*按班级查询*/{ voidfunction4(); inti; charclas[20];chara;loop:printf("请输入要查询学生的班级:\n");scanf("%s",clas); for(i=0;i<SIZE;i++) { if(strcmp(clas,stu[i].clas)==0) printf("学号%d,姓名%s,班级%s,数学成绩%f,英语成绩%f,计算机成绩%f\n",stu[i].num,stu[i].nam,stu[i].clas,stu[i].math,stu[i].english,stu[i].computer); if(i==SIZE) {printf("您所查询的信息不存在,请重新输入"); gotoloop;} } printf("完成本次操作!!!\n"); scanf("%c",&a); if(a=='y') way1(); else function4();}voidway2()/*按学号查询*/{ voidfunction4(); inti; intnumber; chara;loop:printf("请输入要查询学生的学号:\n");scanf("%d",&number); for(i=0;i<SIZE;i++) { if(number==stu[i].num) printf("学号%d,姓名%s,班级%s,数学成绩%f,英语成绩%f,计算机成绩%f\n",stu[i].num,stu[i].nam,stu[i].clas,stu[i].math,stu[i].english,stu[i].computer); if(i==SIZE) {printf("您所查询的信息不存在,请重新输入\n"); gotoloop;} } printf("完成本次操作!!!\n"); scanf("%c",&a); if(a=='y') way2(); else function4();}voidcheck1()/*按学生数学成绩查询*/{ voidway3(); inti; chara; charname[20];loop:printf("请输入要查询的学生姓名\n"); scanf("%s",name);for(i=0;i<SIZE;i++) {if(strcmp(name,stu[i].nam)==0) printf("%s的数学成绩是%f\n",name,stu[i].math); } printf("完成本次操作!!!\n"); scanf("%c",&a); if(a=='y') gotoloop; else way3();}voidcheck2()/*按学生英语成绩查询*/{ voidway3(); inti; chara; charname[20];loop:printf("请输入要查询的学生姓名\n"); scanf("%s",name);for(i=0;i<SIZE;i++) {if(strcmp(name,stu[i].nam)==0) printf("%s的英语成绩是%f\n",name,stu[i].english); } printf("完成本次操作!!!\n"); scanf("%c",&a); if(a=='y') gotoloop; else way3();}voidcheck3()/*按学生计算机成绩查询*/{ voidway3(); inti; chara;charname[20];printf("请输入要查询的学生姓名\n"); scanf("%s",name);for(i=0;i<SIZE;i++) {if(strcmp(name,stu[i].nam)==0) printf("%s的计算机成绩是%f\n",name,stu[i].computer); } printf("完成本次操作!!!\n"); scanf("%c",&a); if(a=='y')check3(); else way3();}voidway3()/*按科目查询*/{ voidfunction4(); intcheck; printf("***************************请输入要查询的科目:**********************\n");printf("1按学生数学成绩查询\n"); printf("2按学生英语成绩查询\n"); printf("3按学生计算机成绩查询\n"); printf("4.返回上一菜单\n"); printf("请选择:\n");scanf("%d",&check); switch(check) { case1:check1();break; case2:check2();break; case3:check3();break; case4:function4();break;}}voidfunction4()/*查询记录*/{ voidmain(); intway; printf("**************************查询学生成绩********************************\n"); printf("1按班级查询\n"); printf("2按学号查询\n"); printf("3按科目查询\n"); printf("4返回主菜单\n"); printf("**********************************************************************\n");printf("请选择:\n");scanf("%d",&way); switch(way) { case1:way1();break; case2:way2();break; case3:way3();break; case4:main();break;}}voidfunction5()/*统计*/{ voidmain(); charphy[10]; inta;printf("请输入要统计的科目:");shuru:scanf("%s",phy);if(strcmp("math",phy)==0) { inti,j; floatt; for(i=0;i<SIZE;i++) for(j=0;j<SIZE-i;j++) { if(stu[i].math>stu[i+1].math) { t=stu[i].math; stu[i].math=stu[i+1].math; stu[i+1].math=t; } } for(j=0,i=0;i<SIZE;i++) {{ if(stu[i].math<60) j=j+1; }} printf("数学最高分为%4.1f,不及格人数为%d\n",stu[SIZE].math,j); } if(strcmp("english",phy)==0) {inti,j; floatt; for(i=0;i<SIZE;i++) for(j=0;j<SIZE-i;j++) { if(stu[i].english>stu[i+1].english) {t=stu[i].english; stu[i].english=stu[i+1].english; stu[i+1].english=t; } } for(j=0,i=0;i<SIZE;i++) { if(stu[i].english<60) {j=j+1; } } printf("英语最高分为%4.1f,不及格人数为%d\n",stu[SIZE].english,j); } if(strcmp("computer",phy)==0) { inti,j; floatt; for(i=0;i<SIZE;i++) for(j=0;j<SIZE-i;j++) { if(stu[i].computer>stu[i+1].computer) { t=stu[i].computer; stu[i].computer=stu[i+1].computer;stu[i+1].computer=t; } }for(j=0,i=0;i<SIZE;i++) if(stu[i].computer<60) {j=j+1; } printf("计算机最高分为%4.1f,不及格人数为%d\n",stu[SIZE].computer,j); } printf("1,继续统计\n");printf("2,返回主菜单\n"); printf("请选择:\n");scanf("%d",&a); switch(a) { case1:function5();break; case2:main();break; }}voidxt1(){ voidmain(); printf("************************学生操作系统**********************************\n"); printf("1.查询记录\n"); printf("2.返回上一菜单\n");printf("**********************************************************************\n");printf("\n"); intfunction; printf("请输入要选择的功能:"); scanf("%d",&function); switch(function) { case1:function4();break; case2:main();break;}}voidxt2(){voidmain(); printf("*************************教师操作系统**********************************\n");printf("1.添加记录\n"); printf("2.删除记录\n"); printf("3.修改记录\n"); printf("4.查询记录\n"); printf("5.统计记录\n"); printf("6.返回上一菜单\n"); printf("***********************************************************************\n");printf("\n"); intfunction; printf("请输入要选择的功能:"); scanf("%d",&function); switch(function) { case1:function1();break; case2:function2();break; case3:function3();break; case4:function4();break; case5:function5();break; case6:main();break; }}voidxt3(){ voidmain(); printf("**************************教务处操作系统*********************************\n"); printf("1.查询记录\n"); printf("2.统计记录\n"); printf("3.返回上一菜单\n"); printf("*************************************************************************\n");printf("\n"); intfunction; printf("请输入要选择的功能:"); scanf("%d",&function); switch(function) { case1:function4();break; case2:function5();break; case3:main();break; }}voidmain(){ inta; printf("************************学生成绩管理系统***********************************\n"); printf("1.学生 2.教师 3.教务处\n"); printf("***************************************************************************\n"); printf("请选择运行身份:");scanf("%d",&a); if(a==1) {xt1();} if(a==2) {xt2();} if(a==3) {xt3();}}6.2系统使用①录入信息时,每一个项目都必须输入相应的内容,输入错误时,系统自动提供输入错误提示,能够根据提

温馨提示

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

评论

0/150

提交评论