📄 finalwork.c
字号:
Print() //输出成绩
{
printf("\n");
printf("学号 姓名 数学 数据库概论 英语 C语言程序设计 平均分 \n ");
printf("-----------------------------------------------------------------------------\n");
for(p=stu;p<stu+n;p++)
{
printf(FORMAT,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->average);
printf("\n\n");
}
printf("\n");
}
void Order3(int i) //按某门课成绩排序,i课序号
{
int j,k;
struct student t;
for(j=0;j<=n-2;j++) //冒泡法排序
{
for(k=0;k<=n-2-j;k++)
if(stu[k].score[i]<stu[k+1].score[i])
{
t=stu[k];
stu[k]=stu[k+1];
stu[k+1]=t;
}
}
}
void doChoice2_4() //按某门课成绩排序
{
int i;
average(); //调用函数求平均成绩
printf("\n请输入课程代号(数学0, 数据库概论1, 英语2, C语言程序设计3):");
scanf("%d",&i); //取值
getchar(); //去空格符
if(i<4&&i>=0) //判断i的范围
{
Order3(i); //排序
Print(); //输出
}
else printf("i值不合要求!!!"); //i值不合要求
printf("\n");
}
void doChoice2() //选项2
{
char choice2;
average(); //调用函数求平均成绩
do
{
init2(); //输出菜单
choice2=getch();
if(choice2=='1') doChoice2_1(); //执行命令
else if(choice2=='2')
{
Oder1(); //调用函数,按成绩排序
Print(); //输出
}
else if(choice2=='3')
{
Oder2(); //调用函数,按学号排序
Print(); //输出
}
else if(choice2=='4') doChoice2_4(); //执行命令4
else if(choice2=='5') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void init3() //菜单
{
printf("\n请选择操作菜单:\n");
printf("\t①.输出总平均成绩\n");
printf("\t②.输出每门课程平均成绩\n");
printf("\t③.返回!!\n");
}
void doChoice3_1() //输出总平均成绩
{
printf("\n所有学生所有课程的平均成绩为:%.3f\n",total_ave);
printf("\n");
}
void doChoice3_2() //输出各门平均成绩
{
printf("\n");
printf("数学平均成绩:%.3f\n数据库概论平均成绩:%.3f\n",math_ave,data_ave);
printf("英语平均成绩:%.3f\nC语言程序设计平均成绩:%.3f\n",eng_ave,c_ave);
printf("\n");
}
void doChoice3() //选项3
{
char choice3;
average(); //求平均成绩
do
{
init3();
choice3=getch();
if(choice3=='1') doChoice3_1();
else if(choice3=='2') doChoice3_2();
else if(choice3=='3') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void init4() //菜单
{
printf("\n请选择操作菜单:\n");
printf("\t①.输出课程有不及格的学生名单\n");
printf("\t②.输出指定课程有不及格的学生名单\n");
printf("\t③.输出有三门或三门以上课程不及格的学生名单\n");
printf("\t④.计算并输出每门课不及格比例\n");
printf("\t⑤.返回!!\n");
}
void doChoice4_1() //输出课程有不及格的学生
{
int flag=1,i;
for(p=stu;p<stu+n;p++)
{
for(i=0;i<4;i++)
if(p->score[i]<60) //寻找不及格学生数据
{
printf("%s ",p->name); //输出不及格学生姓名
flag=0; //flag记号,判断有无不及格学生
break; //跳向下一学生数据
}
}
if(flag) printf("无人不及格^_^。\n"); //flag=1,无不及格学生
else printf("有不及格课程。\n");
}
pass2(int i) //寻找某课不及格学生
{
int flag=1; //flag记号
for(p=stu;p<stu+n;p++)
if(p->score[i]<60) //判断score是否小于60
{
printf("%s ",p->name); //输出学生姓名
flag=0;
}
if(flag) printf("无人不及格^_^。\n"); //flag=1,无人不及格
else printf("不及格\n");
}
void doChoice4_2() //输出指定课程有不及格的学生名单
{
int i;
printf("\n请输入课程代号(数学0, 数据库概论1, 英语2, C语言程序设计3):"); //输出
scanf("%d",&i); //取值
getchar(); //区空格符
if(i<4&&i>=0) pass2(i); //调用函数,
else printf("i值不合要求!!!"); //i值不合要求
printf("\n");
}
void doChoice4_3() //输出有三门或三门以上课程不及格的学生名单
{
int i,flag,flag1=1; //flag,flag1作记号
for(p=stu;p<stu+n;p++)
{
flag=0; //flag不及格课数
for(i=0;i<4;i++)
if(p->score[i]<60)
flag++;
if(flag>=3)
{
printf("\t%s有%d门课程不及格\n",p->name,flag);
flag1=0; //flag1,判断有无学生三门或三门以上不及格
}
}
if(flag1) printf("无人有三门或三门以上课程不及格^_^!\n"); //flag1=1
printf("\n");
}
void doChoice4_4() //输出每门课不及格比例
{
int fail[4]={0,0,0,0},i; //fail数组记录各科不及格人数
for(i=0;i<4;i++) //for循环计算各科不及格人数
for(p=stu;p<stu+n;p++)
if(p->score[i]<60)
fail[i]++;
printf("\n"); //输出
printf("课程 不及格人数 总人数 \n");
printf("**********************************************************\n");
printf("数学 %d %d \n",fail[0],n);
printf("数据库概论 %d %d \n",fail[1],n);
printf("英语 %d %d \n",fail[2],n);
printf("C语言程序设计 %d %d \n",fail[3],n);
printf("\n");
}
void doChoice4() //选项4
{
char choice4;
do
{
init4(); //输出菜单
choice4=getch();
if(choice4=='1') doChoice4_1(); //执行命令
else if(choice4=='2') doChoice4_2();
else if(choice4=='3') doChoice4_3();
else if(choice4=='4') doChoice4_4();
else if(choice4=='5') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
printf("\n");
}
////////////////////////////////////////////////////////////////////////////////////////////////
void init5() //菜单
{
printf("\n请选择操作菜单:\n");
printf("\t①.输出每门课成绩最好和最差的学生\n");
printf("\t②.总成绩分段查询(如总成绩在300~400)\n");
printf("\t③.各门成绩分段查询(如各门成绩均在80~90)\n");
printf("\t④.返回\n");
}
void doChoice5_1()
{
Oder1();
printf("\n 成绩最好的学生 成绩最差学生\n" );
Order3(0); //调用函数,输出数学成绩最好学生
printf("数学 %s %s\n",stu[0].name,stu[n-1].name);
Order3(1); //调用函数,输出数据库概论成绩最好学生
printf("数据库概论 %s %s\n",stu[0].name,stu[n-1].name);
Order3(2); //调用函数,输出英语成绩最好学生
printf("英语 %s %s\n",stu[0].name,stu[n-1].name);
Order3(3); //调用函数,输出c语言成绩最好学生
printf("C语言程序设计 %s %s\n",stu[0].name,stu[n-1].name);
printf("\n\n");
}
void doChoice5_2() //总成绩分段查询
{
int flag=0;
float M,m; //M上限,m下限
printf("请输入上限:");
scanf("%f",&M);
printf("\n请输入下限:");
scanf("%f",&m);
getchar(); //去空格符
average(); //调用函数求平均成绩
if(M<m) //判断M是否大于m
{
printf("上限小于下限,输入有误!!!\n");
return; //返回上一级菜单
}
for(p=stu;p<stu+n;p++) //m<=M,寻找处在该分数段的学生
if(p->average>(m/4)&&p->average<(M/4))
{
printf("%s ",p->name);
flag=1;
}
if(flag) printf("总分处在该分数段之间。"); //flag=1
else printf("没有总分处在该分数段之间的学生。"); //没符合要求的学生
printf("\n");
}
void doChoice5_3() //各门成绩分段查询
{
int flag=1,flag1=1,i;
float M,m; //M上限,m下限
printf("请输入上限:");
scanf("%f",&M);
printf("\n请输入下限:");
scanf("%f",&m);
getchar(); //去空格符
if(M<m) //判断M是否大于m
{
printf("上限小于下限,输入有误!!!\n");
return;
}
for(p=stu;p<stu+n;p++) //m<=M,寻找处在该分数段的学生
{ flag1=1; //flag记号,判断各科成绩是否均处在该分数段
{
for(i=0;i<4;i++)
if(p->score[i]<m||p->score[i]>M) flag1=0;
}
if(flag1) printf("%s ",p->name); //flag1=1
flag=0; //flag记号,判断是否存在符合条件的学生
}
if(flag) printf("没有符合条件的学生!"); //flag=1,
else printf("所有课程成绩都处在该分数段之间。");
printf("\n");
}
void doChoice5() //选项5
{
char choice5;
average();
do
{
init5();
choice5=getch();
if(choice5=='1') doChoice5_1();
else if(choice5=='2') doChoice5_2();
else if(choice5=='3') doChoice5_3();
else if(choice5=='4') return;
else printf("Input error!!!!\n");
}while(1);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -