学生成绩排名系统.docx
- 文档编号:10262280
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:17
- 大小:150.80KB
学生成绩排名系统.docx
《学生成绩排名系统.docx》由会员分享,可在线阅读,更多相关《学生成绩排名系统.docx(17页珍藏版)》请在冰豆网上搜索。
学生成绩排名系统
设计题目学生成绩排名系统
目录
1.实验题目--学生成绩排名系统------------------
2.设计目标----------------------------
3.问题描述----------------------------
4.需求分析----------------------------
采用直接插入排序法、冒泡排序法、快速排序法和选择排序法,还有归并排序算法(选做)
5.概要设计----------------------------
6.详细设计(给出程序的伪码描述和流程图)-------------
1)输入学生信息-------------------------------------------------------
2)直接插入排序-------------------------------------------------------
3)冒泡排序-----------------------------------------------------------
4)快速排序-----------------------------------------------------------
5)选择排序-----------------------------------------------------------
6)归并排序-----------------------------------------------------------
7)退出程序-----------------------------------------------------------
7.测试分析----------------------------
8.使用说明----------------------------
9.测试数据----------------------------
1)白盒测试
2)黑盒测试
十.课程设计总结--------------------------
1.题目:
学生成绩排名系统
2.设计目标
通过课程设计,巩固和加深对各种排序算法等理论知识的理解,更好地掌握C语言的基本知识和语法法则.从而培养和提高我们编写程序的能力,而且能帮助学生熟练地掌握各种排序算法的实现.
3.问题描述
某学院计算机系的每个年级有2个班,每班有100名学生。
考试后在各班及全年级按成绩高低排序,每门课成绩实行百分制。
设每个记录包含学号,姓名和成绩两项。
其中学号由4个字符组成,并且每人唯一,2个班的成绩分别放在2个.txt文件中。
请完成以下任务:
(1)分别用直接插入排序法、冒泡排序法、快速排序法和选择排序法对2个班级的成绩进行班级内排序;
(2)利用前面排序结果,用归并排序法将各班成绩归并为有序的年级成绩表。
(选做)
注:
所给的1.txt和2.txt都是范例,例举了10个,大家自己补充到100个。
4.需求分析
一个完整的程序应具有以下功能:
1)结构体的定义
定义学生的各个信息:
姓名,学号,总分及数学,英语,c语言各门成绩.
2)可以输入学生信息的函数luru( )
根据提示语句输入学生人数及学生信息,输入完毕后自动调用浏览函数,输出所有学生信息.
3)直接插入排序函数InsertSort( )
取出未排序列中的第一个元素,依次与已排序列中的元素比较并右移,放进合适的位置.排序完成后自动调用浏览函数,输出排序后的学生信息.
4)冒泡排序函数BubbleSort( )
每次循环找出一个最大元素,然后交换到最右端,每交换一次就标记一次.若没有发生交换就跳出循环.排序完成后自动调用浏览函数,输出排序后的学生信息.
5)快速排序函数QuickSort( )
简单选取首元素为基准,然后将序列中比基准小的元素移到基准左边,比基准大的元素移到基准右边,最后将基准换到正确的位置.排序完成后自动调用浏览函数,输出排序后的学生信息.
6)选择排序函数SelectSort( )
将序列中第i个元素与最小元素进行交换,以此类推.排序完成后自动调用浏览函数,输出排序后的学生信息.
7)归并排序函数Merge( )
将相邻的元素两两进行归并操作,如此一直循环.排序完成后自动调用浏览函数,输出排序后的学生信息.
8)主函数main( )
运用switch-case语句进行选择判断.
5.概要设计
1.结构体的定义
structstudent
{
charname[20];
intnum;//学号
floatscore[3];
floatsum;
}stu[N],stu1;
typedefstructstudentsqlist[MAXI];
2.所实现的功能如下:
1)可以输入学生信息的函数luru( )
2)直接插入排序函数InsertSort( )
3)冒泡排序函数BubbleSort( )
4)快速排序函数QuickSort( )
5)选择排序函数SelectSort( )
6)归并排序函数Merge( )
7)主函数main( )
voidmain()
{
while
(1)
{
switch(menu())
{
case1:
luru();
break;
case2:
InsertSort();//直接插入排序
break;
case3:
BubbleSort();//冒泡排序
break;
case4:
QuickSort();//快速排序
break;
case5:
SelectSort();//选择排序
break;
case6:
Merge();//归并排序
break;
case7:
printf("\t");
exit(0);
default:
printf("\t请重新输入!
\n\t\t");
system("pause>null");
}
}
}
6.详细设计(给出算法的伪码描述和流程图)
总体操作步骤:
1)输入学生信息:
voidluru()
{
inti,j;
intx=0,num;
system("cls");//清屏
printf("\t请输入学生人数,在(1-100)之间:
");
while
(1)
{
scanf("%d",&num);
if(1<=num&&num<=100)
break;
else
printf("\t请重新输入人数(1-100):
");
}
for(i=k;i { printf("\t请输入学生信息: "); printf("\n\tName%d: ",i+1); scanf("%s",stu[i].name); srand((long)time(NULL)); stu[i].num=x; printf("\t学号: "); scanf("%d",&stu[i].num); stu[i].sum=0; printf("\t数学: "); scanf("%f",&stu[i].score[0]); printf("\t英语: "); scanf("%f",&stu[i].score[1]); printf("\tc语言: "); scanf("%f",&stu[i].score[2]); for(j=0;j<3;j++) { stu[i].sum+=stu[i].score[j]; } printf("\t%f\n",stu[i].sum); } k+=num; save(); liulan(); system("pause");//类似于“Pressanykeytoexit” } 2)直接插入排序: voidInsertSort()//直接插入排序 { inti,j; load(); for(i=1;i { stu1=stu[i]; for(j=i;(j>0)&&(stu1.sum stu[j]=stu[j-1]; stu[j]=stu1; } save(); printf("\t按总分排序成功! \n"); liulan(); } 3)冒泡排序: voidBubbleSort()//冒泡排序 { inti,j; load(); for(i=0;i { for(j=0;j { if(stu[j].sum { stu1=stu[j]; stu[j]=stu[j+1]; stu[j+1]=stu1; } } } save(); printf("\t按总分排序成功! \n"); liulan(); } 4)快速排序 voidQuickSort(sqliststu,ints,intt) { inti=s,j=t; load(); if(s { stu[1]=stu[s]; do//以stu[1]为基准将序列分为两部分 { while(j>i&&stu[j].sum>=stu[1].sum)//从右向左找大于基准的记录 j--; if(i { stu[i]=stu[j]; i++; } while(i i++; if(i { stu[j]=stu[i]; j--; } } while(i stu[i]=stu[1]; QuickSort(stu,s,j-1);//递归调用 QuickSort(stu,j+1,t);//递归调用 save(); printf("\t按总分排序成功! \n"); liulan(); } } 5)选择排序 voidSelectSort()//选择排序 { inti,j,min,temp=100; load(); for(i=0;i { min=i; for(j=i+1;j if(stu[j].sum min=j; stu[temp]=stu[i]; stu[i]=stu[min]; stu[min]=stu[temp]; } save(); printf("\t按总分排序成功! \n"); liulan(); } 流程图: 7.测试分析 白盒: 查找代码完整性 黑盒: 测试是否可以正确的实现以下操作: 1)输入学生信息 2)直接插入排序 3)冒泡排序 4)快速排序 5)选择排序 6)归并排 7)退出程序 8.使用说明 打开开始菜单找到VC++6.0,打开此软件,用鼠标单击文件菜单里的打开选项,导入文件,按ctrl+F7,看程序是否有错误,如果没有错误按ctrl+F5进行运行. 首先在运行程序时根据弹出来的提示语句进行操作: 1)输入学生信息 2)直接插入排序 3)冒泡排序 4)快速排序 5)选择排序 6)归并排序 7)退出程序 我们根据提示,进行相应的输入即可.以此类推,按提示进行选择即可. 9.测试数据 测试内容 测试结果 输入学生信息 正确 直接插入排序 正确 冒泡排序 正确 快速排序 正确 选择排序 正确 归并排序 正确 退出程序 正确 输入学生信息: 直接插入排序: 冒泡排序: 快速排序: 选择排序: 退出程序: 10.课程设计总结 通过这次课程设计让我学到了许多东西,还巩固了我学过的知识,在设计的过程中遇到了许多问题,但是我没有放弃,在老师和同学的帮助下,我终于完成了程序,在这期间我也发现了自己的不足之处,特别是对以前所学过的知识理解的不够深刻,比如结构体,各种排序的算法等等.我收获很多,也很感谢各位老师.这次课程设计也让我明白了,只要努力了,就会有希望,就会有成功的机会.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩排名 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)