学生成绩排名系统课程设计_第1页
学生成绩排名系统课程设计_第2页
学生成绩排名系统课程设计_第3页
学生成绩排名系统课程设计_第4页
学生成绩排名系统课程设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

?程序设计根底?课程设计------学生成绩排名系统课程设计的目的和要求高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时稳固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的根本方法,熟悉程序开发的全过程,提高综合应用语言的能力。高级语言程序设计的主要任务是要求学生遵循软件开发过程的根本标准,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。1.稳固和掌握高级语言程序设计根本概念;2.掌握根本的程序设计方法;3.掌握开发软件所需的需求定义能力;4.提高书写程序设计说明文档的能力;5.提高综合运用高级语言的能力,强化编程和调试能力。1.2课程设计的根本要求1.根据所给的课程设计题目,分析课程设计题目的要求;2.对系统功能模块进行分析,写出详细的设计说明文档;3.编写程序代码,调试所编写程序使其能正确运行;4.设计完成的软件便于完成和使用;5.设计完成后提交课程设计报告;课程设计任务内容2.1考核内容2.1.1编写的C++语言程序●针对编写的C++程序,应该主要考查以下内容:●是否符合题目要求,是否完成了主要功能;●是否存在语法错误、逻辑错误及运行错误;●程序设计是否合理;●程序是否具有良好的可读性和可靠性;●是否符合结构化程序设计所倡导的根本理念;●用户界面是否友好。2.1.2课程设计报告●针对提交的课程设计报告,应该主要考查以下内容:●程序设计的报告内容是否全面,观点是否正确;●设计过程是否符合结构化程序设计方法的根本原那么;●层次是否清楚,语言是否通顺;●各种图表是否标准;是否具有良好的程序设计习惯。2.2课题10、学生信息管理系统设计实现以下功能:1)系统以菜单方式工作;2)学生信息录入功能〔学生信息用文件保存〕;3)学生信息浏览功能;4)查询、排序功能〔至少两种查询依据和两种排序依据〕;5)学生信息删除、修改功能。备注:学生信息包括:学号,姓名,年龄,性别,出生年月,地址,,E-mail等。详细设计说明3.1模板设计图该系统可以按功能进行模块划分,其模块如图3-1所示:图3-1模板设计图其中:2..增加学生成绩记录模块可以完成学生成绩的输入,输入信息包括班级、学号、姓名、课程名、成绩。3.删除学生成绩记录模块可以完成学生成绩的删除。4.查询学生成绩记录模块可以完成学生成绩的查询,可以通过输入姓名、学号或者是课程名来查询学生成绩。5.学生成绩排序模块可以完成对学生成绩的排序,按照成绩的上下来进行排序。3.2函数模块、功能分析、参数说明1.增加学生成绩记录模块〔voidManage::add())对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下:主要完成将数据存入单链表中的工作。在这次增加学生成绩记录中,记录可以从二进制形式存储的数据文件中读入,也可以从键盘逐个读入学生记录。如图3-2所示:

图3-2增加学生成绩记录流程图 .2.删除学生成绩记录模块〔voidManage::del())要删除某个学生的信息,就要从磁盘文件中将所有同学信息读出来,然后除要删除的学生外,其它的所有记录再重新存入原来的磁盘文件中,如图3-3所示:开始开始读入信息读入信息输入要删除学生的学号输入要删除学生的学号是否找到是否找到 N删除成功Y删除成功结束结束图3-3删除学生成绩记录流程图3..查询学生成绩记录模块〔voidManage::search())主要完成在单链表中查找满足相关条件的学生记录。用户可以按照学生的学号、姓名或课程名在单链表中进行查找。未找到输出提示信息,如图3-4所示:图3-4查询学生成绩记录流程图4.学生成绩排序模块主要完成按照成绩的上下来进行排序,如图3-6所示:结束结束初始化指向第一个位置待排序元素为N-1个初始化最大值及位置,计算待比拟元素的地址和计算比拟次数比拟对象小于当前最大值保存新的最大值和它的位置调整指针,准备下一次比拟本次比拟操作结束?将最大值元素和当前位置元素进行交换,调整到一个位置调整缓冲区对应记录N—1个最大值选择结束开始YNYNNY图3-6学生成绩排序流程图3.3函数流程图系统首先进入欢送界面并提示用户输入不同的阿拉伯数字会进行不同的操作。在用户做出选择后,根据用户输入的阿拉伯数字,程序将调用相应的功能模块,实现用户要进行的操作。完成一次用户的操作后,再回到欢送界面,等待用户再做出选择,再调用相应的功能模块……,知道用户在欢送界面选择了退出,该系统结束,终止执行,如图3-7所示:开始开始按学号删除选择2录入学生姓名,学号,成绩录入选择1选择操作输出界面按学号删除选择2录入学生姓名,学号,成绩录入选择1选择操作输出界面输入学生的班级、学号、姓名、课程名、成绩选择3输入学生的班级、学号、姓名、课程名、成绩选择3输入数据输入数据按成绩上下排序选择6按姓名、学号或课程名查询选择4 按成绩上下排序选择6按姓名、学号或课程名查询选择4退出系统选择5 退出系统选择5结束结束图3-7函数流程图编码与调试4.1软件与测试翻开软件后,界面会出现你所需要的功能,根据你要进行的操作来选择。4.2运行结果及截图1.此图为程序运行成功后,出现的界面,此为主菜单界面,可依据界面执行。如图4-1所示:2.首先录入学生成绩记录,输入学生的班级、学号、姓名、课程名、成绩,如图4-2所示:图4-2录入学生成绩记录3返回主菜单,选择相应的操作,对学生成绩进行排序和相应的查询,如图4-3所示:图4-3学生成绩排序4.返回主菜单,进行查询学生成绩记录操作,如图4-4所示:图4-4学生成绩排序5.返回主菜单,进行对学生成员进行增加。如图4-5所示:图4-5查询学生成绩6.返回主菜单,进行删除学生成绩记录操作,按照学号来删除学生信息,如图4-6所示:图4-6删除学生成绩记录课程设计心得与体会本次课程设计,使我对?数据结构?这门课程有了更深入的理解。?数据结构?是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。培养了根本的、良好的程序设计技能以及合作能力。这次课程设计同样提高了我的综合运用所学知识的能力。程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。再总体解决大的问题。这样做起来不仅有条理也使问题得到了轻松的解决。在这段时间里,一直修改着相应的程序,并且尝试着调试各种运行结果。终于,在自己的努力下,课程设计还算是有点起色。经过这次的编程,我学会了很多东西。比方说,如何在网上查找一些有用的东西,如何设计自己的目标,如何规划好自己的学习时间,如何让自己的思想应用到程序的编程过程中去,如何合理运用各种资源来提高自己的编程甚至是学习的能力。另外,还有几点,我深有感触,就是我还问了别人怎样在Word文档中截图、怎样扩大或缩小图片等等。总之,收获真的是挺大的。通过这段时间的课程设计,我认识到数据结构是一门比拟难的课程。需要多花时间上机练习。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的根本技能,提高了我适应实际,实践编程的能力。这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。不管怎么说,这次C++课程设计不仅给了我提高编程的能力的时机,而且让我的综合素质得到了一个全面的开展。我相信,这样的日子一定能成为我以后生活中一段美好的回忆。附录一参考文献[1]谭浩强著?C++程序设计?,清华大学出版社[2]严蔚敏、吴伟民编著?数据结构(C语言版)?,清华大学出版社[3]王杰?数据结构经典算法实现与习题解答?,人民邮电大学出版社附录二程序清单>#include<stdlib.h>#include<malloc.h>#include<string.h>#defineLENsizeof(Student)#defineNULL0typedefstructstudent{ intnum;/*学号*/ charname[20];/*姓名*/ charsex[2];/*性别*/ intscore[4];/*成绩*/ intsum;/*总成绩*/ structstudent*next;}Student;intn;/*声明一个全局变量*/Student*cin(void);/*声明学生信息函数*/Student*sort_all(Student*head);/*声明排序函数*/Student*sort_1(Student*head,intchoose);/*声明按学号排序函数*/voidsort_2(Student*head);/*声明按总分排序函数*/voidprint(Student*head);/*声明显示函数*/voidfind(Student*head);/*声明查询函数*/Student*add_new(Student*head);Student*cin()/*声明学生信息函数*/{ intflag; Student*head,*p1,*p2; n=0; head=(Student*)malloc(LEN);/*分配LEN大小的内存空间给head,head为首地址*/ p2=head; printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1); scanf("%d",&flag); while(getchar()!='\n'); for(;flag;)/*输入每个学生的信息*/ { n++; p1=(Student*)malloc(LEN); p1->num=flag;/*把flag复制给p1里面的num*/ printf("请输入第%d名学生的姓名:",n);/*输入姓名*/ scanf("%s",p1->name); printf("请输入第%d学生的性别:",n);/*输入性别*/ scanf("%s",p1->sex); printf("请输入第%d名学生的语文成绩:",n);/*输入语文成绩*/ scanf("%d",&p1->score[0]); printf("请输入第%d名学生的数学成绩:",n);/*输入数学成绩*/ scanf("%d",&p1->score[1]); printf("请输入第%d名学生的英语成绩:",n);/*输入英语成绩*/ scanf("%d",&p1->score[2]); printf("请输入第%d名学生的C语言成绩:",n);/*输入C语言成绩*/ scanf("%d",&p1->score[3]); p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];/*求和*/ p2->next=p1;/*将后一个节点指向当前节点*/ p2=p1;/*让p2成为当前节点*/ printf("\n请输入第%d名学生的学号,没有此学生那么输入0表示结束:",n+1); scanf("%d",&flag); } p2->next=NULL;/*结束标志*/ printf("\n\n"); returnhead; }Student*sort_all(Student*head)/*定义排序函数*/{ intchoose; for(;;) { printf("\n\t\t&&&&&学生成绩统计排序&&&&&\n"); printf("\t\t&\t1.按学生学号排序\t&\n"); printf("\t\t&\t2.按学生总分排序\t&\n"); printf("\t\t&\t7.单科高分及均分\t&\n"); printf("\t\t&\t8.显示当前学生成绩\t&\n"); printf("\t\t&\t0.返回上一级菜单\t&\n"); printf("请输入你要执行的操作:"); scanf("%d",&choose); while(getchar()!='\n'); switch(choose) { case1: case2: case3: case4: case5: case6:head=sort_1(head,choose);break; case7:print(head);sort_2(head);break; case8:print(head);break; case0:returnhead; default:printf("\n\n您的输入错误!请重新输入:\n\n");break; } }}Student*sort_1(Student*head,intchoose)/*定义按学号排序函数*/{ Student*p1,*p2=head->next,*pm,*px; Studentmid; if(!p2) returnhead; for(p1=p2;p1->next!=NULL;p1=p1->next) { pm=p1; for(p2=p1->next;p2!=NULL;p2=p2->next) switch(choose) { case1:if(pm->num>p2->num)pm=p2;break;case2:if(pm->sum<p2->sum)pm=p2;break;case3:if(pm->score[0]<p2->score[0])pm=p2;break;case4:if(pm->score[1]<p2->score[1])pm=p2;break;case5:if(pm->score[2]<p2->score[2])pm=p2;break; } if(pm!=p1) { mid=*pm; *pm=*p1; *p1=mid; px=pm->next; pm->next=p1->next; p1->next=px; } } printf("\n排序后的成绩表为:\n"); print(head); returnhead;}voidsort_2(Student*head)/*定义按总分排序函数*/{ Student*p=head->next; intcount; intmax_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4; intmax_sum,min_sum; intsum_1=0,sum_2=0,sum_3=0,sum_4=0; doubleaver_1,aver_2,aver_3,aver_4,aver_sum,percent; if(!p) return; max_1=min_1=p->score[0]; max_2=min_2=p->score[1]; max_3=min_3=p->score[2]; max_4=min_4=p->score[3]; max_sum=min_sum=p->sum; for(;p;p=p->next) { if(max_1<p->score[0])max_1=p->score[0]; elseif(min_1>p->score[0])min_1=p->score[0]; if(max_2<p->score[1])max_2=p->score[1]; elseif(min_2>p->score[1])min_2=p->score[1]; if(max_3<p->score[2])max_3=p->score[2]; elseif(min_3>p->score[2])min_3=p->score[2];if(max_4<p->score[3])max_4=p->score[3]; elseif(min_4>p->score[3])min_4=p->score[3]; if(max_sum<p->sum)max_sum=p->sum; elseif(min_sum>p->sum)min_sum=p->sum; sum_1+=p->score[0]; sum_2+=p->score[1]; sum_3+=p->score[2]; sum_4+=p->score[3]; } aver_1=1.0*sum_1/n; aver_2=1.0*sum_2/n; aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n; for(p=head;p;p=p->next)for(inti=0;i<4;i++){if(p->score[i]>=60)count++;} percent=(float)count/(float)n/4; aver_sum=aver_1+aver_2+aver_3+aver_4; printf("总共%d名学生,具体数据为:\n",n); printf("总分最高分为%d,最低分位%d,平均分为%.2f,percent=%.2f\n,count=%d", max_sum,min_sum,aver_sum,percent,count);}voidfind(Student*head)/*定义查询函数*/{ Student*p; intchoose,fnum; chartem[20]; if(n==0){printf("\n当前系统没有任何学生数据!\n");return;} for(;;) { printf("\n请输入您要查询学生的方式:\n\n"); printf("1、按学号查询;2、按姓名查询;0、我不查询了。\n\n"); printf("请选择:"); scanf("%d",&choose); while(getchar()!='\n'); if(choose==1) { printf("\n请输入你要查询的学生的学号,输入0退出学号查询:"); scanf("%d",&fnum); for(;fnum;) { for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next); if(!p) { printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:"); scanf("%d",&fnum); } elseif(p->num==fnum) { printf("\n学号为%d学生的数据为:\n",p->num); printf("学号\t姓名\t性别\t语文成绩数学成绩英语成绩C语言成绩总分\n");/*输出所有的学生信息*/ printf("%d\t%s\t%s\t%d%d%d%d%d\n",p->num, p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->sum); printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学号查询了:"); scanf("%d",&fnum); } } } elseif(choose==2) { printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:"); scanf("%s",tem); for(;strcmp(tem,"0");) { for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next); if(!p) { printf("\n\n找不到你要查询的姓名,请重新输入,输入0表示结束:"); scanf("%s",tem); } elseif(!strcmp(p->name,tem)) { printf("\n姓名为%s学生的数据为:\n",p->name); printf("学号\t姓名\t性别\t语文成绩数学成绩英语成绩C语言成绩总分\n"); printf("%d\t%s\t%s\t%d%d%d%d%d\n",p->num, p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->sum); printf("\n\n请输入你还要查询的学生的姓名,输入0表示不按姓名查询了:"); scanf("%s",tem); } } } elseif(choose==0){printf("\n你选择了不查询!\n");break;} else{printf("\n你以其他方式选择了不查询!\n");break;} }}Student*add_new(Student*head)/*定义插入函数*/{ Student*p; intflag; printf("\n\n请输入你要新参加学生的学号,学号为0表示结束输入:"); scanf("%d",&flag); while(getchar()!='\n'); for(;flag;) { p=(Student*)malloc(LEN); p->num=flag; printf("请输入新参加学生的姓名:",n);/*输入姓名*/ scanf("%s",p->name); printf("请输入新参加学生的性别:");/*输入性别*/ scanf("%s",p->sex); printf("请输入新参加学生的语文成绩:",n);/*输入语文成绩*/ scanf("%d",&p->score[0]); printf("请输入新参加学生的数学成绩:",n);/*输入数学成绩*/ scanf("%d",&p->score[1]); printf("请输入新参加学生的英语成绩:",n);/*输入英语成绩*/ scanf("%d",&p->score[2]); printf("请输入新参加学生的C语言成绩:",n);/*输入英语成绩*/ scanf("%d",&p->score[3]); p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]; p->next=head->next; head->next=p; n++; printf("\n请输入还要参加学生的学号,没有此学生那么输入0表示结束:"); scanf("%d",&flag); } head=sort_1(head,1); printf("参加后的成绩表为:\n"); print(head); returnhead;}voidprint(Student*head){ Student*p=head->next; if(!p){printf("\n\n此系统目前没有任何学生数据!\n\n\n");return;} printf("此系统目前共计学生%d名:\n",n); printf("&&&&&&&&&&&&&&&&&&&&&&&&&&学生成绩统计一览&&&&&&&&&&&&&&&&&&&&&&&&&&&&\ &&&&&\n"); printf("学号\t姓名\t性别\t语文成绩数学成绩英语成绩C语言成绩总分\n"); for(;p;p=p->next) printf("%d\t%s\t%s\t%d%d%d%d%d\n", p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->score[3],p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);}structstudent*del(structstudent*head,longnum)/*定义删除学生信息函数*/{structstudent*p1,*p2;if(head==NULL){printf("\nlistnull!\n");returnhead;}p1=head;while(num!=p1->num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->num){if(p1==head)head=p1->next;elsep2->next=p1->next;printf("delete:%ld\n",num);n=n-1;}elseprintf("%ldnotdeenfound!\n",num);return(head);}intmain()/*主函数即用户的操作界面*/{ Student*head; intchoose,i,num;/*声明局部变量*/ head=(Student*)malloc(LEN); head->next=NULL; for(;;) { printf("\n\t\t***

温馨提示

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

评论

0/150

提交评论