终于自己编好了,欢迎各位指导!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define CH 10 // 最大字符
#define N 50 // 学生的最大个数
typedef struct student
//学生的结构体
{
char name[CH]; // 姓名
char no[CH]; //学号
float chinese; //语文
float math; //数学
float english; //英语
float average; //平均分数
float total; //总分数
}student;
student s[N]; //学生数组
int num; //学生个数
/* 欢迎界面 */
void welcome()
{ printf("\n\n\n\n\n");
printf("\t\t ╭════════成绩管理系统════════╮ \n");
printf("\t\t║ ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ 欢迎使用该成绩管理系统 ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ 作者:薛明列 ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ 按任意键继续…… ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ ║\n");
printf("\t\t╰═══════════════════════╯\n");
getchar();
}
/* 菜单 */
void meun()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t ╭════════成绩管理系统════════╮ \n");
printf("\t\t║ --五邑大学专版 ║\n");
printf("\t\t║ 学 生 成 绩 管 理 系 统 ║\n");
printf("\t\t║ 主菜单 ║\n");
printf("\t\t║ 1. 录入学生成绩 ║\n");
printf("\t\t║ 2. 删除学生成绩 ║\n");
printf("\t\t║ 3. 修改学生成绩 ║\n");
printf("\t\t║ 4. 查询学生成绩 ║\n");
printf("\t\t║ 5. 单科分段统计 ║\n");
printf("\t\t║ 6. 单科排名输出 ║\n");
printf("\t\t║ 7. 总分排名输出 ║\n");
printf("\t\t║ 8. 学号排名输出 ║\n");
printf("\t\t║ 9. 退出系统 ║\n");
printf("\t\t║ 作者:薛明列 ║\n");
printf("\t\t╰═══════════════════════╯\n");
printf("\n\n\n\t\t 请选择菜单选项(1-9):");
}
/* 子菜单1 */
void meun1()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t ╭════════成绩管理系统════════╮ \n");
printf("\t\t║ --五邑大学专版 ║\n");
printf("\t\t║ 学 生 成 绩 管 理 系 统 ║\n");
printf("\t\t║ 子菜单 ║\n");
printf("\t\t║ 1. 按语文成绩分段统计 ║\n");
printf("\t\t║ 2. 按数学成绩分段统计 ║\n");
printf("\t\t║ 3. 按英语成绩分段统计 ║\n");
printf("\t\t║ 4. 返回主菜单 ║\n");
printf("\t\t║ 作者:薛明列 ║\n");
printf("\t\t╰═══════════════════════╯\n");
printf("\n\n\n\t\t 请选择子菜单选项(1-4):");
}
/* 子菜单2 */
void meun2()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t ╭════════成绩管理系统════════╮ \n");
printf("\t\t║ --五邑大学专版 ║\n");
printf("\t\t║ 学 生 成 绩 管 理 系 统 ║\n");
printf("\t\t║ 子菜单 ║\n");
printf("\t\t║ 1. 按语文成绩排名 ║\n");
printf("\t\t║ 2. 按数学成绩排名 ║\n");
printf("\t\t║ 3. 按英语成绩排名 ║\n");
printf("\t\t║ 4. 返回主菜单 ║\n");
printf("\t\t║ 作者:薛明列 ║\n");
printf("\t\t╰═══════════════════════╯\n");
printf("\n\n\n\t\t 请选择子菜单选项(1-4):");
}
void Add() //录入学生成绩
{
int i=num;
printf("请输入学号:");
scanf("%s",s[i].no);
printf("请输入姓名:");
scanf("%s",s[i].name);
printf("请输入语文:");
scanf("%f",&s[i].chinese);
while(s[i].chinese<0||s[i].chinese>100)
{
printf("你输入的语文成绩不符合实际情况,请重新输入!\n");
printf("请输入语文:");
scanf("%f",&s[i].chinese);
}
printf("请输入数学:");
scanf("%f",&s[i].math);
while(s[i].math<0||s[i].math>100)
{
printf("你输入的数学成绩不符合实际情况,请重新输入!\n");
printf("请输入数学:");
scanf("%f",&s[i].math);
}
printf("请输入英语:");
scanf("%f",&s[i].english);
while(s[i].english<0||s[i].english>100)
{
printf("你输入的英语成绩不符合实际情况,请重新输入!\n");
printf("请输入英语:");
scanf("%f",&s[i].english);
}
printf("\n");
s[i].total=s[i].chinese+s[i].math+s[i].english; //计算出总分数
s[i].average=s[i].total/3; //计算出平均分
num++;
}
void Delete() //删除学生成绩
{
int i=0,j=0;
char no[CH]; //学号
printf("请输入你要删除的学生学号:");
scanf("%s",no);
printf("\n\n");
for(i=0;i<num;i++) //先找到该学号对应的序号
if(strcmp(s[i].no,no)==0)
{ printf("删除成功!\n\n");
for(j=i;j<num-1;j++)
s[j]=s[j+1];
num--; //数量减少 1
return;
}
printf("\n\n\n");
printf("如果上面没有结果,则没有这个学号!\n\n");
}
void modify() //修改学生成绩
{
int i=0;
char no[CH]; //学号
printf("请输入你要修改的学生学号:");
scanf("%s",no);
printf("\n\n");
for(i=0;i<num;i++) //先找到该学号对应的序号
if(strcmp(s[i].no,no)==0)
{
printf("请输入学号:");
scanf("%s",s[i].no);
printf("请输入姓名:");
scanf("%s",s[i].name);
printf("请输入语文:");
scanf("%f",&s[i].chinese);
printf("请输入数学:");
scanf("%f",&s[i].math);
printf("请输入英语:");
scanf("%f",&s[i].english);
s[i].total=s[i].chinese+s[i].math+s[i].english; //计算出总分数
s[i].average=s[i].total/3; //计算出平均分
printf("\n\n");
return;
}
printf("\n\n\n");
printf("如果上面没有结果,则没有这个学号!\n\n");
}
void search() //查询学生成绩
{
int i=0;
char no[CH]; //学号
printf("请输入你要查询的学生学号:");
scanf("%s",no);
printf("\n\n");
for(i=0;i<num;i++) //先找到该学号对应的序号
if(strcmp(s[i].no,no)==0)
{
printf(" 学号 姓名 语文 数学 英语 总分数 平均分\n");
printf(" %s %s %.2f %.2f %.2f %.2f %.2f\n",s[i].no,s[i].name,s[i].chinese,s[i].math,s[i].english,s[i].total,s[i].average);
}
printf("\n\n\n");
printf("如果上面没有结果,则没有这个学号!\n\n");
}
void chinese () //按语文成绩分段统计
{
int i=0;
int verygood,good,common,pass,bad;
verygood=good=common=pass=bad=0;
float sum1=0,average1=0;
printf("课程名称:语文\n");
printf("------------------------------\n");
printf("学号 姓名 成绩\n");
printf("------------------------------\n");
for (i=0;i<num;i++)
{
printf("%s %s %.2f\n",s[i].no,s[i].name,s[i].chinese);
sum1=sum1+s[i].chinese;
if (s[i].chinese>90)
{
verygood++;
}
else
{
if (s[i].chinese>80)
{
good++;
}
else
{
if (s[i].chinese>60)
{
common++;
}
else
{
if(s[i].chinese>60)
{
pass++;
}
else
{
bad++;
}
}
}
}
}
printf("------------------------------\n");
printf("全班语文成绩统计:\n\n平均分:%.2f\n\n",sum1*1.0/num);
printf("------------------------------\n\n\n");
printf(" 等级 人数 所占比例\n");
printf("90~100分(优秀) %d %.2f %%\n",verygood,verygood*100.0/num);
printf("80~89分(良) %d %.2f %%\n",good,good*100.0/num);
printf("70~79分(中) %d %.2f %%\n",common,common*100.0/num);
printf("60~69分(及格) %d %.2f %%\n",pass,pass*100.0/num);
printf("0~59分(不及格) %d %.2f %%\n\n\n",bad,bad*100.0/num);
}
void math () //按数学成绩分段统计
{
int i=0;
int verygood,good,common,pass,bad;
verygood=good=common=pass=bad=0;
float sum2=0,average2=0;
printf("课程名称:数学\n");
printf("------------------------------\n");
printf("学号 姓名 成绩\n");
printf("------------------------------\n");
for (i=0;i<num;i++)
{
printf("%s %s %.2f\n",s[i].no,s[i].name,s[i].math);
sum2=sum2+s[i].math;
if (s[i].math>90)
{
verygood++;
}
else
{
if (s[i].math>80)
{
good++;
}
else
{
if (s[i].math>60)
{
common++;
}
else
{
if(s[i].math>60)
{
pass++;
}
else
{
bad++;
}
}
}
}
}
printf("------------------------------\n");
printf("全班数学成绩统计:\n\n平均分:%.2f\n\n",sum2*1.0/num);
printf("------------------------------\n\n\n");
printf(" 等级 人数 所占比例\n");
printf("90~100分(优秀) %d %.2f %%\n",verygood,verygood*100.0/num);
printf("80~89分(良) %d %.2f %%\n",good,good*100.0/num);
printf("70~79分(中) %d %.2f %%\n",common,common*100.0/num);
printf("60~69分(及格) %d %.2f %%\n",pass,pass*100.0/num);
printf("0~59分(不及格) %d %.2f %%\n\n\n",bad,bad*100.0/num);
}
void english () //按英语成绩分段统计
{
int i=0;
int verygood,good,common,pass,bad;
verygood=good=common=pass=bad=0;
float sum3=0,average3=0;
printf("课程名称:英语\n");
printf("------------------------------\n");
printf(" 学号 姓名 成绩\n");
printf("------------------------------\n");
for (i=0;i<num;i++)
{
printf(" %s %s %.2f\n",s[i].no,s[i].name,s[i].english);
sum3=sum3+s[i].english;
if (s[i].english>90)
{
verygood++;
}
else
{
if (s[i].english>80)
{
good++;
}
else
{
if (s[i].english>60)
{
common++;
}
else
{
if(s[i].english>60)
{
pass++;
}
else
{
bad++;
}
}
}
}
}
printf("------------------------------\n");
printf("全班英语成绩统计:\n\n平均分:%.2f\n\n",sum3*1.0/num);
printf("------------------------------\n\n\n");
printf(" 等级 人数 所占比例\n");
printf("90~100分(优秀) %d %.2f %%\n",verygood,verygood*100.0/num);
printf("80~89分(良) %d %.2f %%\n",good,good*100.0/num);
printf("70~79分(中) %d %.2f %%\n",common,common*100.0/num);
printf("60~69分(及格) %d %.2f %%\n",pass,pass*100.0/num);
printf("0~59分(不及格) %d %.2f %%\n\n\n",bad,bad*100.0/num);
}
void chinese_Sort() //按语文成绩排名
{
int i=0,j=0;
student m; //用于排序交换的临时变量
student s2[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++)
s2[i]=s[i];
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(s2[i].chinese<s2[j].chinese)
{
m=s2[i];
s2[i]=s2[j];
s2[j]=m;
}
printf("\t按语文成绩排名\n");
printf("------------------------------\n");
printf(" 学号 姓名 语文 \n");
for(i=0;i<num;i++)
printf(" %s %s %.2f \n",s2[i].no,s2[i].name,s2[i].chinese);
printf("------------------------------\n");
printf("\n\n\n");
}
void math_Sort() //按数学成绩排名
{
int i=0,j=0;
student n; //用于排序交换的临时变量
student s3[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++)
s3[i]=s[i];
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(s3[i].math<s3[j].math)
{
n=s3[i];
s3[i]=s3[j];
s3[j]=n;
}
printf("\t按数学成绩排名\n");
printf("------------------------------\n");
printf(" 学号 姓名 数学 \n");
for(i=0;i<num;i++)
printf(" %s %s %.2f \n",s3[i].no,s3[i].name,s3[i].math);
printf("------------------------------\n");
printf("\n\n\n");
}
void english_Sort() //按英语成绩排名
{
int i=0,j=0;
student k; //用于排序交换的临时变量
student s4[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++)
s4[i]=s[i];
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(s4[i].english<s4[j].english)
{
k=s4[i];
s4[i]=s4[j];
s4[j]=k;
}
printf("\t按英语成绩排名\n");
printf("------------------------------\n");
printf(" 学号 姓名 英语 \n");
for(i=0;i<num;i++)
printf(" %s %s %.2f \n",s4[i].no,s4[i].name,s4[i].english);
printf("------------------------------\n");
printf("\n\n\n");
}
void total_Sort() // 总分成绩排名
{
int i=0,j=0;
student t; //用于排序交换的临时变量
student s1[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++)
s1[i]=s[i];
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(s1[i].average<s1[j].average)
{
t=s1[i];
s1[i]=s1[j];
s1[j]=t;
}
printf("\t\t\t\t按学生总分排名\n");
printf("----------------------------------------------------------------------------\n");
printf(" 学号 姓名 语文 数学 英语 总分数 平均分\n");
for(i=0;i<num;i++)
printf(" %s %s %.2f %.2f %.2f %.2f %.2f\n",s1[i].no,s1[i].name,s1[i].chinese,s1[i].math,s1[i].english,s1[i].total,s1[i].average);
printf("----------------------------------------------------------------------------\n");
printf("\n\n\n");
}
void no_Sort() // 学号排名
{
int i=0,j=0;
student t; //用于排序交换的临时变量
student s0[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++)
s0[i]=s[i];
for(i=0;i<num;i++)
for(j=i+1;j<num;j++)
if(s0[i].no>s0[j].no)
{
t=s0[i];
s0[i]=s0[j];
s0[j]=t;
}
printf("\t\t\t\t按学生学号排名\n\n");
printf("----------------------------------------------------------------------------\n");
printf(" 学号 姓名 语文 数学 英语 总分数 平均分\n");
for(i=0;i<num;i++)
printf(" %s %s %.2f %.2f %.2f %.2f %.2f\n",s0[i].no,s0[i].name,s0[i].chinese,s0[i].math,s0[i].english,s0[i].total,s0[i].average);
printf("----------------------------------------------------------------------------\n");
printf("\n\n\n");
}
int main() //主函数
{
int choose=0;
num=0; //初始化学生个数为0
welcome();
meun();
scanf("%d",&choose);
printf("\n");
while(choose>0&&choose<9)
{
switch(choose)
{
case 1:Add();system("pause");break;
case 2:Delete();system("pause");break;
case 3:modify() ;system("pause");break;
case 4:search();system("pause");break;
case 5:{
int choose1;
meun1();
scanf("%d",&choose1);
printf("\n");
while(choose1>0&&choose1<4)
{
switch(choose1)
{
case 1:chinese ();system("pause");break;
case 2:math ();system("pause");break;
case 3:english ();system("pause");break;
}
printf("\n");
meun1();
scanf("%d",&choose1);
printf("\n");
}
}
;system("pause");break;
case 6: {
int choose2=0;meun2();
scanf("%d",&choose2);
printf("\n");
while(choose2>0&&choose2<4)
{
switch(choose2)
{
case 1:chinese_Sort();system("pause");break;
case 2:math_Sort();system("pause");break;
case 3:english_Sort();system("pause");break;
}
printf("\n");
meun2();
scanf("%d",&choose2);
printf("\n");
}
}
;system("pause");break;
case 7:total_Sort();system("pause");break;
case 8:no_Sort();system("pause");break;
}
printf("\n");
meun();
scanf("%d",&choose);
printf("\n");
}
printf("\n\n\t\t\t谢谢使用学生成绩管理系统,再见!\n\n\n\n");
printf("\t\t\t\t版权所有,翻版必究\n\n\n\n");
getchar();
}