改进了一下~
程序代码:
程序代码:/*
老师要求:
(1)键盘录入成绩
(2)课程的总分和平均分
(3)成绩从高到低名次表
(4)成绩从低到高名次表
(5)学号从小到大成绩表
(6)姓名字典顺序成绩表
(7)输入学号或者姓名查询学生成绩及排名
(8)统计优良中差类别所占百分比
*/
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#define s 3
struct student
{
char name[20];
int num;
int score[3];
float av;
int sum;
} p[s];
int i,j,r,t;
int flag=0;
r=0;
int main()
{
void (*p)()=NULL;
void menu();
void scan();
void sumandav();
void sort3();
void sort4();
void sort5();
void sort6();
void search7();
void count8();
char ch=0;
while (1)
{
r=0;/*排名要重置啊~*/
menu();
printf("请选择功能%c:\n",032);
switch(ch=getch()-'0')
{
case 1 :
p=scan;
break;
case 2:
p=sumandav;
break;
case 3:
p=sort3;
break;
case 4:
p=sort4;
break;
case 5:
p=sort5;
break;
case 6:
p=sort6;
break;
case 7:
p=search7;
break;
case 8:
p=count8;
break;
case 9:
exit(0);
default:
p=NULL;
break;
}
if ((flag!=0||p==scan)&&(ch>0&&ch<10))
{
system("cls");
(*p)();
system("pause");
}
else if (ch>0&&ch<10&&flag==0)
{
system("cls");
puts("请先初始化数据");
system("pause");
}
}
return 0;
}
void menu()
{
system("cls");
printf("\t *学生成绩管理系统100.0版* \n");
printf("\t 功能 \n");
printf("\t1,键盘录入成绩\n");
printf("\t2,课程的总分和平均分\n");
printf("\t3,成绩从高到低名次表\n");
printf("\t4,成绩从低到高名次表\n");
printf("\t5,学号从小到大成绩表\n");
printf("\t6,姓名字典顺序成绩表\n");
printf("\t7,输入学号或者姓名查询学生成绩及排名\n");
printf("\t8,统计优良中差类别所占百分比\n");
printf("\t9,都不喜欢拜拜%c!\n",001);
}
void scan()
{
for(j=0; j<s; j++)
{
printf("请输入第%d个学生的(学号-姓名-科目1-科目2-科目3):\n",j+1);
scanf("%d%s%d%d%d",&p[j].num,p[j].name,&p[j].score[0],&p[j].score[1],&p[j].score[2]);
p[j].av=(float )(p[j].score[0]+p[j].score[1]+p[j].score[2])/3;
p[j].sum=p[j].score[0]+p[j].score[1]+p[j].score[2];
}
flag=1;
printf("输入成功,即将执行下一步操作\n");
}
void sumandav()
{
// scan();
printf(" 学号 姓名 高数 c语言 英语 总分 平均分 \n");
for(j=0; j<s; j++)
{
printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av);
}
}
void sort3()
{
struct student t={0};
for(j=0; j<s-1; j++)
{
for(i=0; i<s-1-j; i++)
{
if(p[i].sum<p[i+1].sum)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
printf(" 学号 姓名 高数 c语言 英语 总分 平均分 排名(总分down)\n");
for(j=0; j<s; j++)
{
r++;
printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r);
}
}
void sort4()
{
// void scan();
struct student t={0};
// scan();
for(j=0; j<s-1; j++)
{
for(i=0; i<s-1-j; i++)
{
if(p[i].sum<p[i+1].sum)//////////
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(总分up)\n");
for(j=0,r=4; j<s; j++)/////////////////
{
r--;
printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r);
}
}
void sort5()
{
// void scan();
struct student t={0};
// scan();
for(j=0; j<s-1; j++)
{
for(i=0; i<s-1-j; i++)
{
if(p[i].num>p[i+1].num)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(学号)\n");
for(j=0,r=4; j<s; j++)
{
r--;
printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r);
}
}
void sort6()
{
char t1[20]={0};
struct student t={0};
// scan();
for(j=0; j<s-1; j++)
{
for(i=0; i<s-1-j; i++)
{
if(strcmp(p[i].name,p[i+1].name)>0)
{
t = p[i]; //strcpy(t1,p[i].name);
p[i] = p[i+1]; //strcpy(p[i].name,p[i+1].name);
p[i+1] = t; //strcpy(p[i+1].name,t1);
}
}
}
printf("学号 姓名 高数 c语言 英语 总分 平均分 排名(姓名)\n");
for(j=0; j<s; j++)
{
r++;
printf("%-5d%-5s%-5d%-5d%-5d%-5d%-7.1f%-5d\n",p[j].num,p[j].name,p[j].score[0],p[j].score[1],p[j].score[2],p[j].sum,p[j].av,r);
}
}
void search7()
{
void my_sort();
char name3[20];
int num1;
int rr[3]={0};
int i=0;
int j=0;
// scan();
my_sort();
printf("您想查找的学生的学号或者姓名:\n");
scanf("%d%s",&num1,name3);/////////////
for(i=0; i<s; i++)
{
if((strcmp(name3,p[i].name)==0)||(num1==p[i].num))
{
printf("高数 c语言 英语 总分 排名\n");
printf("%-5d%-5d%-5d%-5d%-5d\n",p[i].score[0],p[i].score[1],p[i].score[2],p[i].sum,i+1);
break;
}
}
}
void my_sort()
{
int i=0;
int j=0;
struct student t={0};
for(j=0; j<s-1; j++)
{
for(i=0; i<s-1-j; i++)
{
if(p[i].sum<p[i+1].sum)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
}
void count8()
{
float k=0,q=0,x=0,f=0;
float m,n,sb,xsb;
// void scan();
// scan();
for(i=0; i<s; i++)
{
if(p[i].sum<180)
{
k++;
}
else if(p[i].sum>=180&&p[i].sum<=210)
{
q++;
}
else if(p[i].sum>210&&p[i].sum<=240)
{
x++;
}
else if(p[i].sum>240&&p[i].sum<=300)
{
f++;
}
}
m=f/s;
n=x/s;
sb=q/s;
xsb=k/s;
printf("优:%.1f 良:%.1f 中:%.1f 差:%.1f\n",m,n,sb,xsb);
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]








