一个学生成绩管理系统

源代码在线查看: sort.cpp

软件大小: 15 K
上传用户: invill
关键词: 管理系统
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include "headfile.h"
				//使用堆排序对各科成绩按从高到低排列
				Status Sort(Hash *H)
				{
					HeapType a,b,c;
					int i,j,k,m;
					stu t;
					j=k=m=1;
					a.length=b.length=c.length=0;
					//把哈希表中的数据放到堆结构中
					for(i=0;i					{
						if(H[i])
						{
							t=H[i];
							while(t)
							{
								a.r[j]=t->s.datastruct;
								b.r[k]=t->s.english;
								c.r[m]=t->s.math;
								j++;
								k++;
								m++;
								a.length++;
								b.length++;
								c.length++;
								t=t->next;
							}
						}
					}
					//中文成绩
					if(a.length>1)
					{
					HeapSort (a);
				    
					printf("	数据结构成绩从高到低排列为:\n\n");
					for(i=a.length;i>0;i--)
						printf("%d  ",a.r[i]);
					printf("\n\n");
					Calculate(a);
					printf("\n\n");
					}
					//英文成绩
					if(b.length>1)
					{
					HeapSort (b);
					printf("	英文成绩从高到低排列为:\n\n");
					for(i=b.length;i>0;i--)
						printf("%d  ",b.r[i]);
					printf("\n\n");
					Calculate(b);
					printf("\n\n");
					}
					//数学成绩
					if(c.length>1)
					{
					HeapSort (c);
					printf("	数学成绩从高到低排列为:\n\n");
					for(i=c.length;i>0;i--)
						printf("%d  ",c.r[i]);
					printf("\n\n");
					Calculate(c);
					printf("\n\n");	
					}
					return OK;
				}
				
				void HeapAdjust (HeapType &H , int s, int m)
				{   // 已知 R[s..m]中记录的关键字除 R[s] 之外均
				    // 满足堆的特征,本函数自上而下调整 R[s] 的
				    // 关键字,使 R[s..m] 也成为一个大顶堆。
					int rc;
					int j;
				rc = H.r[s];    // 暂存 R[s] 
				for ( j=2*s; j				    //自上而下的筛选过程;
					if ( j				             // 左/右“子树根”之间先进行相互比较
				             // 令 j 指示关键字较大记录的位置
					if ( !LT(rc ,H.r[j]) )  break; 
				           // 再作“根”和“子树根”之间的比较,
				           // 若“>=”成立,则说明已找到 rc 的插
				           // 入位置 s ,不需要继续往下调整
				H.r[s] = H.r[j];   s = j;    
				        // 否则记录上移,尚需继续往下调整
				
				}
				H.r[s] = rc;  // 将调整前的堆顶记录插入到 s 位置
				} // HeapAdjust
				
				void HeapSort ( HeapType &H ) {
				  // 对顺序表 H 进行堆排序。
				int temp;
				int i;
				for ( i=H.length/2;i>0;--i )
				     HeapAdjust ( H, i, H.length );    // 建大顶堆
				
				for ( i=H.length; i>1; --i ) {
				     //H.r[1]←→H.r[i];    
					temp=H.r[1];
					H.r[1]=H.r[i];
					H.r[i]=temp;
				         // 将堆顶记录当前未经排序子序列
				          //  H.r[1..i]中最后一个记录相互交换
				     HeapAdjust(H, 1, i-1);  // 对 H.r[1] 进行筛选
				}
				
				} // HeapSort
				//统计各个分数段的人数
				void Calculate(HeapType h)
				{
					int a,b,c,d,e;
					int i;
					a=b=c=d=e=0;
					for(i=1;i					{
					if(h.r[i]>=90)
						a++;
					else if(h.r[i]>=80)
						b++;
					else if(h.r[i]>70)
						c++;
					else if(h.r[i]>60)
						d++;
					else
						e++;
					}
					printf("90分以上的有%d人		",a);
					printf("80-90分的有%d人\n",b);
					printf("70-80分的有%d人		",c);
					printf("60-70分的有%d人\n",d);
					printf("60分以下的有%d人\n",e);
				}			

相关资源