计算机基础C程序设计之学生成绩管理系统

学习目的:

某班最多不超过30人(具体人数由键盘输入)参加某门课程的考试,请用一维数据做函数参数编程实现学生成绩管理系统.

学习内容:

学生成绩管理系统v1.0

1.录入学生学号和成绩;

2.计算课程的总分和平均分;

3.按成绩由高到低排列出名次表;

4.按学号由小到大排出成绩表;

5.按学号查询学生排名及其考试成绩;

6.按优秀(90-100)、良好(80-90)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数以及所占的百分比;

7.输出每个学生的学号、考试成绩。

程序实现:

#include <stdio.h>
#define STU_NUM 30    //最多30人
//期末考试题目
//显示菜单,并获得用户键盘输入的选项
int Menu(void)
{
    int iSelect;
    printf("\n学生成绩管理系统v1.0\n");
    printf("1.录入学生学号和成绩\n");
    printf("2.计算课程的总分和平均分\n");
    printf("3.按成绩由高到低排列出名次表\n");
    printf("4.按学号由小到大排出成绩表\n");
    printf("5.按学号查询学生排名及其考试成绩\n");
    printf("6.按优秀(90-100)、良好(80-90)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数以及所占的百分比\n");
    printf("7.输出每个学生的学号、考试成绩\n");
    printf("8.关闭程序.\n");
    printf("请您输入的选择:\n");
    scanf("%d",&iSelect);
    return iSelect;
}
//No.1
void ReadScore(long num[],float score[],int n)
{
     int i;
     for(i=0;i<n;i++)
     {
		 printf("请您输入学生学号和成绩:");
         scanf("%ld%f",&num[i],&score[i]); 
     }
}
//No.2
void AverSumofScore(float score[],int n)
{
	int i,sum=0;
  
	double ave;     
	for(i=0;i<n;i++)  
	sum=sum+score[i];   
	ave=(double)sum/n;   
	printf("课程的总分=%ld,平均分=%f\n",sum,ave);
	
}
//No.3
void DeSortbyScore(long num[],float score[],int n)
{
	int i,j,k,h;
	float t;
	
	for(i=0;i<n;i++)
	{
		k=i;        
		for(j=i+1;j<n;j++)       
		{
			if (score[j]>score[k])    
            k=j;
		}
		 if(i!=k)    
		{
			 t=score[k],h=num[k];
			 score[k]=score[i],num[k]=num[i];
			 score[i]=t,num[i]=h;
		 }
	}
	for(i=0;i<n;i++)
	printf("学号:%10ld,考试成绩:%f\n",num[i],score[i]);
}

//No.4
void AsSortbyNum(long num[],float score[],int n)
{
		 int i,j,k,h;
		 float t;
		 for(i=0;i<n;i++) 
		 {     
			 k=i;     
			 for(j=i+1;j<n;j++) 
			 {       
				 if (num[j]<num[k])
					 k=j;     
			 }         
			 if(i!=k)  
			 {          
					t=score[k],h=num[k];
					score[k]=score[i],num[k]=num[i]; 
					score[i]=t,num[i]=h;  
			 }  
		 }    
		 for(i=0;i<n;i++) 
			 printf("学号:%10ld,成绩:%f\n",num[i],score[i]);
		 //以长整形打印用%ld
}
	
//No.5
void SearchbyNum(long num[],float score[],int n)
{
	int high=n-1,low=0,mid,c=0,pos,find=0,i,x;

	printf("请输入查找学号\n");
	scanf("%d",&x);
    while(find==0&&low<=high)
	{
        mid=(high+low)/2;
	    if(x>num[mid])
			low=mid+1;
        else if(x<num[mid])
			high=mid-1;
		else
		{
            pos=mid;
			find=1;
		}
	} 
	for(i=0;i<n;i++)
	{
		if(num[i]>num[pos])
			c++;
    }
    printf("学号:%10ld,排名:%d,成绩:%f\n",num[pos],c+1,score[pos]);
	 
}
//No.6
void StatisticAnalysis(long num[],float score[],int n)
{
	 int a=0,b=0,c=0,d=0,e=0,i;
	 double A,B,C,D,E;
	 for(i=0;i<n;i++)
	 {      
		 if(score[i]>=90)
			 a++;     
		 else if(score[i]>=80)
			 b++;  
		 else if(score[i]>=70)
			 c++;  
		 else if(score[i]>=60) 
			 d++;  
		 else   
			 e++;   
	 } 
     A=(double)a/n*100; 
	 B=(double)b/n*100;  
	 C=(double)c/n*100;
	 D=(double)d/n*100;    
	 E=(double)e/n*100;   
	 printf("优秀人数%d,百分比:%f%%\n",a,A);  
	 printf("良好人数%d,百分比:%f%%\n",b,B); 
	 printf("中等人数%d,百分比:%f%%\n",c,C);  
	 printf("及格人数%d,百分比:%f%%\n",d,D);   
	 printf("不及格人数%d,百分比:%f%%\n",e,E);


}
//No.7
void List(long num[],float score[],int n)
 {      
	  int i;   
	  for(i=0;i<n;i++) 
	  {    
		  printf("学号:%10ld,成绩:%f\n",num[i],score[i]); 
		}
  }

main()
{

    int iSelectItem;
    int n=0;
    long num[STU_NUM];
	float score[STU_NUM];
    printf("请您输入具体的学生人数(n<%d):",STU_NUM);
    scanf("%d",&n);
    do
    {

        iSelectItem=Menu();
        switch(iSelectItem)
        {
            case 1:  //录入学生学号和成绩
				 ReadScore(num,score,n);
                 break;
            case 2:  //计算课程的总分和平均分
				 AverSumofScore (score,n);
                 break;
            case 3:
				 DeSortbyScore(num,score,n);
                 break;
            case 4:
				 AsSortbyNum(num,score,n);
                 break;
            case 5:
				 SearchbyNum(num,score,n);
                 break;
            case 6:
				 StatisticAnalysis(num,score,n);
                 break;
            case 7:   //打印出学生学号 和 成绩
				 List(num,score,n);
                 break;
            case 8:
                 printf("退出程序.\n");
                 break;
            default:
                 printf("输入有错误!\n");
                 break;
        }

    }while(iSelectItem!=8);
}

猜你喜欢

转载自blog.csdn.net/qq_42880059/article/details/91358098
今日推荐