学生成绩排名系统课程设计教学内容.docx
- 文档编号:23102992
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:32
- 大小:470.87KB
学生成绩排名系统课程设计教学内容.docx
《学生成绩排名系统课程设计教学内容.docx》由会员分享,可在线阅读,更多相关《学生成绩排名系统课程设计教学内容.docx(32页珍藏版)》请在冰豆网上搜索。
学生成绩排名系统课程设计教学内容
学生成绩排名系统课程设计
《程序设计基础》课程设计
------学生成绩排名系统
第1章课程设计的目的和要求
高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时巩固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的基本方法,熟悉程序开发的全过程,提高综合应用语言的能力。
高级语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。
1.1课程设计的目的
1.巩固和掌握高级语言程序设计基本概念;
2.掌握基本的程序设计方法;
3.掌握开发软件所需的需求定义能力;
4.提高书写程序设计说明文档的能力;
5.提高综合运用高级语言的能力,强化编程和调试能力。
1.2课程设计的基本要求
1.根据所给的课程设计题目,分析课程设计题目的要求;
2.对系统功能模块进行分析,写出详细的设计说明文档;
3.编写程序代码,调试所编写程序使其能正确运行;
4.设计完成的软件便于完成和使用;
5.设计完成后提交课程设计报告;
第2章课程设计任务内容
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.增加学生成绩记录模块(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个最大值选择结束
开始
Y
N
Y
N
N
Y
图3-6学生成绩排序流程图
3.3函数流程图
系统首先进入欢迎界面并提示用户输入不同的阿拉伯数字会进行不同的操作。
在用户做出选择后,根据用户输入的阿拉伯数字,程序将调用相应的功能模块,实现用户要进行的操作。
完成一次用户的操作后,再回到欢迎界面,等待用户再做出选择,再调用相应的功能模块……,知道用户在欢迎界面选择了退出,该系统结束,终止执行,如图3-7所示:
开始
输出界面
选择操作
选择1
录入
录入学生姓名,学号,成绩
选择2
删除
按学号
选择3
输入数据
输入学生的班级、学号、姓名、课程名、成绩
选择4
查询
按姓名、学号或课程名
选择6
排序
按成绩高低
选择5
退出系统
结束
图3-7函数流程图
第4章编码与调试
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删除学生成绩记录
第5章课程设计心得与体会
本次课程设计,使我对《数据结构》这门课程有了更深入的理解。
《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。
在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。
培养了基本的、良好的程序设计技能以及合作能力。
这次课程设计同样提高了我的综合运用所学知识的能力。
程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。
再总体解决大的问题。
这样做起来不仅有条理也使问题得到了轻松的解决。
在这段时间里,一直修改着相应的程序,并且尝试着调试各种运行结果。
终于,在自己的努力下,课程设计还算是有点起色。
经过这次的编程,我学会了很多东西。
比如说,如何在网上查找一些有用的东西,如何设计自己的目标,如何规划好自己的学习时间,如何让自己的思想应用到程序的编程过程中去,如何合理运用各种资源来提高自己的编程甚至是学习的能力。
另外,还有几点,我深有感触,就是我还问了别人怎样在Word文档中截图、怎样扩大或缩小图片等等。
总之,收获真的是挺大的。
通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。
需要多花时间上机练习。
这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。
这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。
以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!
总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。
不管怎么说,这次C++课程设计不仅给了我提高编程的能力的机会,而且让我的综合素质得到了一个全面的发展。
我相信,这样的日子一定能成为我以后生活中一段美好的回忆。
附录一参考文献
[1]谭浩强著《C++程序设计》,清华大学出版社
[2]严蔚敏、吴伟民编著《数据结构(C语言版)》,清华大学出版社
[3]王杰《数据结构经典算法实现与习题解答》,人民邮电大学出版社
附录二程序清单
#include
#include
#include
#include
#defineLENsizeof(Student)
#defineNULL0
typedefstructstudent
{
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
case3:
if(pm->score[0]
case4:
if(pm->score[1]
case5:
if(pm->score[2]
}
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
elseif(min_1>p->score[0])min_1=p->score[0];
if(max_2
elseif(min_2>p->score[1])min_2=p->score[1];
if(max_3
elseif(min_3>p->score[2])min_3=p->score[2];
if(max_4
elseif(min_4>p->score[3])min_4=p->score[3];
if(max_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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩排名 系统 课程设计 教学内容