屯了两年的平常练习的代码,分享一下
学生成绩管理系统V2.0
1.学生成绩管理系统V2.0某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组和指针作为函数参数,编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数以及所占的百分比;(7)输出每个学生的学号、考试成绩,以及课程总分和平均分。
// 2020.2.29
//2020.3.01
//——>修改1.将菜单放入函数中
//——>修改2.在switch语句外加while语句
#include <stdio.h>
#include<stdlib.h>
#define N 30
int Menu(void);
void Input(int score[],long num[],int n);
void Caculate(int score[],long num[],int n);
void Sorthl(int score[],long num[],int n);
void Sortnumlh(int score[],long num[],int n);
void Sorthl2(int score[],long num[],int n);
void Select(int score[],long num[],int n);
void Statistics(int score[],long num[],int n);
void Printf(int score[],long num[],int n);
int main()
{
char itemSelected;
int score[N],n;
long num[N];
do{
printf("Please input the number of students:");
scanf("%d",&n);
}while(n<0||n>30);
while(1)
{
itemSelected = Menu();
switch(itemSelected)
{
case 1:
Input(score,num,n);
break;
case 2:
Caculate(score,num,n);
break;
case 3:
Sorthl(score,num,n);
break;
case 4:
Sortnumlh(score,num,n);
break;
case 5:
Select(score,num,n);
break;
case 6:
Statistics(score,num,n);
break;
case 7:
Printf(score,num,n);
break;
case 0:
printf("Exit procedure................!\n");
default:printf("Input error!\n");
}
}
return 0;
}
//1.函数功能:录入学生成绩和学号
void Input(int score[],long num[],int n)
{
int i;
printf("\n");
for(i=0;i<n;i++)
{
printf("Please input the student's ID and score:");
scanf("%ld%d",&num[i],&score[i]);
}
printf("\n");
}
//1.1函数功能:菜单
int Menu(void)
{
int k;
printf("\n");
printf("------学生成绩管理系统V2.0------\n");
printf("1.Input record/n");
printf("2.Caculate total and average score of course\n");
printf("3.Sort in descending order by scores\n");
printf("4.Sort in ascending order by number\n");
printf("5.Search by number\n");
printf("6.Statistic analysis\n");
printf("7.list record\n");
printf("0.Exit\n");
do{
printf("Please enter your choice:");
scanf("%d",&k);
}while(k<0||k>7);
return k;
}
//2.函数功能:输出学生得分总分以及平均分
void Caculate(int score[],long num[],int n)
{
int sum=0,i;
Input(score,num,n);
for(i=0;i<n;i++)
{
sum=sum+score[i];
}
printf("The sum of all the students is:%d\n",sum);
printf("The average of all the students is:%d\n",sum/n);
}
//3.函数功能:对学生得分进行从高到低排序并且输出排序
void Sorthl(int score[],long num[],int n)
{
int i,j,k,temp1;
long temp2;
Input(score,num,n);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[j]>score[k]) k=j;
}
//找出最大下标
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
}
printf("Ranking from high to low by achievement is\n");
for(i=0;i<n;i++)
{
printf("%d %ld %d\n",i+1,num[i],score[i]);
}
}
//3.1函数功能:对学生得分进行从高到低排序
void Sorthl2(int score[],long num[],int n)
{
int i,j,k,temp1;
long temp2;
Input(score,num,n);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[j]>score[k]) k=j;
}
//找出最大下标
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;//交换分数//
}
}
//4.函数功能:对学生的学号从低到高排序并输出排序//
void Sortnumlh(int score[],long num[],int n)
{
int i,j,k,temp1;
long temp2;
Input(score,num,n);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(num[j]<num[k])k=j;
}
if(k!=j)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
}
}
printf("Ranking from low to high by num is\n");
for(i=0;i<n;i++)
{
printf("%d %ld %d\n",i+1,num[i],score[i]);
}
}
//5.函数功能:用户输入学号进行查找并输出学号 排名 得分//
void Select(int score[],long num[],int n)
{
long num1;
int i;
Sorthl2(score,num,n);
printf("Please input the student's ID:");
scanf("%ld",&num1);
for(i=0;i<n;i++)
{
if(num1==num[i])
printf("%ld score is %d,ranking is %d\n",num[i],score[i],i+1);
}
}
//6.函数功能:统计五个类别的人数以及所占百分比//
void Statistics(int score[],long num[],int n)
{
int excellent=0,good=0,medium=0,pass=0,fail=0;
Input(score,num,n);
int i;
for(i=0;i<n;i++)
{
if(score[i]>=90&&score[i]<=100)excellent++;
if(score[i]>=80&&score[i]<=89)good++;
if(score[i]>=70&&score[i]<=79)medium++;
if(score[i]>=60&&score[i]<=69)pass++;
if(score[i]>=0&&score[i]<=59)fail++;
}
printf("Excellent %d excellent total %d%% people\n",excellent,(excellent*100)/n);
printf("Good %d good total %d%% people\n",good,(good*100)/n);
printf("Mediun %d medium total %d%% people\n",medium,(medium*100)/n);
printf("Pass %d pass total %d%% people\n",pass,(pass*100)/n);
printf("Fail %d fail total %d%% people\n",fail,(fail*100)/n);
}
//7.函数功能:输出成绩单
void Printf(int score[],long num[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%ld score is %d\n",num[i],score[i]);
}
Caculate(score,num,n);
}