《C语言程序设计》实训报告
学生成绩管理系统V1.0
班 级:计算机科学与技术(数据库一班)
学 号:
姓 名:
指导老师:
提交日期:
目 录
需求说明
本系统实现的功能如下:
1.录入每个学生学号成绩并整理成绩;
2.输出学生成绩总分和各科成绩平均分;
3.按各科成绩由高到低排出成绩表;
4. 按学号由小到大排出成绩表;
5. 按学号查询学生考试成绩;
6. 输出所有学生学号及各科成绩;
7. 输出总分最高的学生;
8. 按5个等级统计人数以及所占百分比(等级:优秀,良好,中等,及格,不及格);
9. 添加学生成绩并全部输出相关成绩信息;
(可实现之前录入学生成绩和添加录入学生成绩的相关成绩排序及查找)
10.退出系统;
设计说明
设计方法:
① 数组:多个一维数组;
② 子函数:使用多个子函数的调用实现该系统的所有功能;
重难点:
1)实现各个数组的同时排序;当按某数组(数据)排序时,同一个学生的所有数据跟随排序;
2)添加录入学生成绩后,实现按学号查找所有输入的学生成绩;
3)并且实现所有录入学生成绩的按各科成绩由高到低排序;
特色:
1)用简单的设计方法来实现较为简单的学生成绩管理系统设计;
2) 系统功能明确,子函数执行功能明确,功能注释清晰;
3) 可实现四门课程成绩的录入;
测试说明
若有特殊的输入要求,请在此说明:不能输入越界人数(不能超过80人)
主要功能的运行过程截图展示,必要时在图前增加文字说明。
1)首先,该系统显示输入学生人数的提示的界面;
输入所要录入的学生人数,例如输入3后,会显示一个操作界面;
2)输入1开始录入每个学生学号成绩并整理成绩,系统会自动返回操作界面;
3)输入2,输出学生成绩总分和各科成绩平均分,会自动返回操作界面(以下省略);
4)输入3,按各科成绩由高到低排出成绩表;
5)输入4,按学号由小到大排出成绩表 ;
6)输入5,按学号查询学生考试成绩,会显示如下图的输入提示:
例如,查找学号为102的学生:
7) 输入6,输出所有学生学号及各科成绩;
8) 输入7,输出总分最高的学生 ;
9)输入8,按5个等级统计人数以及所占百分比(等级:优秀,良好,中等,及格,不及格);
10)输入9,添加学生成绩并全部输出相关成绩信息,会显示如下图的操作界面:
这里先以添加一位学生成绩为例:
若要继续添加输入y(继续添加学生成绩);
若输入n,将会停止添加学生相关信息及成绩,会输出录入学生的总人数,并会全部输出添加前与添加后学生的相关成绩信息:
运行功能9后,可以运行之前运行过的所有功能(已测试过)
11)输入10,将会结束该系统,并且会清除所有显示的内容;
源 码
//学生成绩管理系统V1.0
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define N 80
void readscore_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void sum_average_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void score_up_to_down(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void num_up_to_down(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void search_num_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void all_score_look_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void max_sum_score_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void level_percentage_(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void add_num_score(long num[],int score1[],int score2[],int score3[],int score4[],int n);
void main()
{
int choice,n;
int score1[N],score2[N],score3[N],score4[N];
long num[N];
printf(" /************************************************/ ");
printf("\n ----------------- 学生成绩管理系统 ------------------- \n");
printf(" /************************************************/ \n");
printf(" 请输入学生人数(不大于80人):");
scanf("%d",&n);
printf("\n --------------------------------------------------------------------------------------\n");
while(1)
{
//主菜单
printf("|| /************************************************/ ||");
printf("\n|| ----------------- 学生成绩管理系统 ----------------- ||\n");
printf("|| /************************************************/ ||\n");
printf("||---------->->>->>>--- 1. 录入每个学生学号成绩并整理成绩 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 2. 输出学生成绩总分和各科成绩平均分 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 3. 按成绩由高到低排出成绩表 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 4. 按学号由小到大排出成绩表 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 5. 按学号查询学生考试成绩 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 6. 输出所有学生学号及各科成绩 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 7. 输出总分最高的学生 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 8. 按5个等级统计人数以及所占百分比 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 9. 添加学生成绩并全部输出相关成绩信息---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 10.退出 ---<<<-<<-<----------||\n");
printf("||---------->->>->>>--- 请选择(1-10)所要执行的操作: ---<<<-<<-<----------||\n");
printf(" ======================================================================================\n");
scanf("%d",&choice);
getchar();
switch(choice)
{
//选择所运行的子函数
case 1:readscore_(num,score1,score2,score3,score4,n);break;
case 2:sum_average_(num,score1,score2,score3,score4,n);break;
case 3:score_up_to_down(num,score1,score2,score3,score4,n);break;
case 4:num_up_to_down(num,score1,score2,score3,score4,n);break;
case 5:search_num_(num,score1,score2,score3,score4,n);break;
case 6:all_score_look_(num,score1,score2,score3,score4,n);break;
case 7:max_sum_score_(num,score1,score2,score3,score4,n);break;
case 8:level_percentage_(num,score1,score2,score3,score4,n);break;
case 9:add_num_score(num,score1,score2,score3,score4,n);break;
case 10:system("cls");//清屏函数
printf("\n\n\n\n\n\n\n");
printf("\n--------------------------------------------------------------------------------------\n");
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<----------欢迎使用,下次再见!---------->>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("\n--------------------------------------------------------------------------------------\n");
system("pause");
exit(0);break;
}
}
}
//功能一:录入每个学生学号,成绩
void readscore_(long num[],int score1[],int score2[],int score3[],int score4[],int n)
{
int i;
printf("请输入学生相关信息:\n",n);
for(i=0;i<n;i++)
{
printf("学生 数学 英语 C语言 计算机网络 \n");
printf("学号 成绩 成绩 成绩 基础成绩 \n");
scanf("%ld%*c%d%*c%d%*c%d%*c%d",&num[i],&score1[i],&score2[i],&score3[i],&score4[i]); //输入学生学号,学生成绩
}
printf("--------------------------------------------------------------------------------------\n");
printf("整理后的学生相关信息表:\n");
printf("--------------------------------------------------------------------------------------\n");
printf("%4s%10s%10s%10s %10s\n","学生学号","数学成绩","英语成绩","C语言成绩","计算机网络基础成绩");
for(i=0;i<n;i++)
{
printf("%4ld%10d%10d%10d%10d\n",num[i],score1[i],score2[i],score3[i],score4[i]);
}
printf("\n======================================================================================\n");
}
//功能二:输出学生的成绩总分,各科成绩平均分
void sum_average_(long num[],int score1[],int score2[],int score3[],int score4[],int n)
{
int i;
double average1,average2,average3,average4;
double sum=0,sum1=0,sum2=0,sum3=0,sum4=0;
printf("--------------------------------------------------------------------------------------\n");
printf("每个学生的成绩总分:\n");
for(i=0;i<n;i++)
{
sum=0;
sum=sum+score1[i]+score2[i]+score3[i]+score4[i];
printf("%4s%10s\n","学生学号","总分");
{
printf("%4ld %10.0f\n",num[i],sum);
}
}
printf("--------------------------------------------------------------------------------------\n");
printf("各科成绩平均分\n");
for(i=0;i<n;i++) //数学成绩平均分
{
sum1=sum1+score1[i];
}
average1=sum1/n;
for(i=0;i<n;i++) //英语成绩平均分
{
sum2=sum2+score2[i];
}
average2=sum2/n;
for(i=0;i<n;i++) //c语言成绩平均分
{
sum3=sum3+score3[i];
}
average3=sum3/n;
for(i=0;i<n;i++) //计算机网络基础成绩平均分
{
sum4=sum4+score4[i];
}
average4=sum4/n;
printf("%10s %10s %10s %10s\n","数学成绩","英语成绩","C语言成绩","计算机网络基");
printf("%10s %10s %10s %10s\n","平均分","平均分" ,"平均分","础成绩平均分");
printf("%10.2f%10.2f%10.2f%10.2f\n",average1,average2,average3,average4);
printf("\n ======================================================================================\n");
}
//功能三:按成绩由高到低排出成绩表
void score_up_to_down(long num[],int score1[],int score2[],int score3[],int score4[],int n)
{
int i,j,k,temp1,temp2,temp3,temp4;//temp1,temp2,temp3,temp4表示成绩
long temp; //temp2表示学号
printf("--------------------------------------------------------------------------------------\n");
printf("按数学成绩由高到低排出成绩表\n");
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score1[j]>score1[k])
{
k=j;
}
}
if(k!=i)
{
temp1=score1[k];//交换成绩
score1[k]=score1[i];
score1[i]=temp1;
temp2=score2[k];
score2[k]=score2[i];
score2[i]=temp2;
temp3=score3[k];
score3[k]=score3[i];
score3[i]=temp3;