当前位置:文档之家› 学生成绩排名系统课程设计

学生成绩排名系统课程设计

《程序设计基础》课程设计------学生成绩排名系统第一章课程设计的目的和要求高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时巩固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的基本方法,熟悉程序开发的全过程,提高综合应用语言的能力。

高级语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。

1.1课程设计的目的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 模板设计图其中:1.学生成绩录入2..增加学生成绩记录模块可以完成学生成绩的输入,输入信息包括班级、学号、姓名、课程名、成绩。

3 .删除学生成绩记录模块可以完成学生成绩的删除。

4.查询学生成绩记录模块可以完成学生成绩的查询,可以通过输入姓名、学号或者是课程名来查询学生成绩。

5.学生成绩排序模块可以完成对学生成绩的排序,按照成绩的高低来进行排序。

3.2 函数模块、功能分析、参数说明1.增加学生成绩记录模块(void Manage::add( ))对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下: 主要完成将数据存入单链表中的工作。

在这次增加学生成绩记录中,记录可以从二进制形式存储的数据文件中读入,也可以从键盘逐个读入学生记录。

如图3-2所示:图3-2 增加学生成绩记录流程图.2.删除学生成绩记录模块(void Manage::del( ))要删除某个学生的信息,就要从磁盘文件中将所有同学信息读出来,然后除要删除的学生外,其它的所有记录再重新存入原来的磁盘文件中,如图3-3所示:NY图3-3 删除学生成绩记录流程图开始 读入信息输入要删除学生的学号是否找到 删除成功结束3..查询学生成绩记录模块(void Manage::search( ))主要完成在单链表中查找满足相关条件的学生记录。

用户可以按照学生的学号、姓名或课程名在单链表中进行查找。

未找到输出提示信息,如图3-4所示:图3-4 查询学生成绩记录流程图4.学生成绩排序模块主要完成按照成绩的高低来进行排序,如图3-6所示:图3-6 学生成绩排序流程图3.3 函数流程图系统首先进入欢迎界面并提示用户输入不同的阿拉伯数字会进行不同的操作。

在用户做出选择后,根据用户输入的阿拉伯数字,程序将调用相应的功能模块,实现用户要进行的操作。

完成一次用户的操作后,再回到欢迎界面,等待用户再做出选择,再调用相应的功能模块……,知道用户在欢迎界面选择了退出,该系统结束,终止执行,如图3-7所示:图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 <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#define LEN sizeof(Student)#define NULL 0typedef struct student{int num; /*学号*/char name[20]; /*姓名*/char sex[2]; /*性别*/int score[4]; /*成绩*/int sum; /*总成绩*/struct student *next;}Student;int n; /*声明一个全局变量*/Student *cin(void); /*声明学生信息函数*/Student *sort_all(Student *head); /*声明排序函数*/Student *sort_1(Student *head,int choose); /*声明按学号排序函数*/ void sort_2(Student *head); /*声明按总分排序函数*/void print(Student *head); /*声明显示函数*/void find(Student *head); /*声明查询函数*/Student *add_new(Student *head);Student *cin()/*声明学生信息函数*/{int flag;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");return head;}Student *sort_all(Student *head) /*定义排序函数*/{int choose;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){case 1:case 2:case 3:case 4:case 5:case 6:head=sort_1(head,choose);break;case 7:print(head);sort_2(head);break;case 8:print(head);break;case 0:return head;default: printf("\n\n您的输入错误!请重新输入:\n\n");break;}}}Student *sort_1(Student *head,int choose) /*定义按学号排序函数*/{Student *p1,*p2=head->next,*pm,*px;Student mid;if (!p2)return head;for(p1=p2;p1->next!=NULL;p1=p1->next){pm=p1;for(p2=p1->next;p2!=NULL;p2=p2->next)switch(choose){case 1:if (pm->num>p2->num) pm=p2;break;case 2:if (pm->sum<p2->sum) pm=p2;break;case 3:if (pm->score[0]<p2->score[0]) pm=p2;break; case 4:if (pm->score[1]<p2->score[1]) pm=p2;break; case 5: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);return head;}void sort_2(Student *head) /*定义按总分排序函数*/{Student *p=head->next;int count;int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0,sum_4=0;double aver_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];else if (min_1>p->score[0]) min_1=p->score[0];if (max_2<p->score[1]) max_2=p->score[1];else if (min_2>p->score[1]) min_2=p->score[1];if (max_3<p->score[2]) max_3=p->score[2];else if (min_3>p->score[2]) min_3=p->score[2];if (max_4<p->score[3]) max_4=p->score[3];else if (min_4>p->score[3]) min_4=p->score[3];if (max_sum<p->sum) max_sum=p->sum;else if (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(int i=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);}void find(Student *head) /*定义查询函数*/{Student *p;int choose,fnum;char tem[20];if (n==0) {printf("\n当前系统没有任何学生数据!\n ");return;}for(;;){printf("\n请输入您要查询学生的方式:\n\n");printf("1、按学号查询;2、按姓名查询;0、我不查询了。

相关主题