资源描述
#include<stdio.h>
#include<conio.h>
course_name(int i)
{ switch(i)
{
case 1:printf("数学"); break;
case 2:printf("语文"); break;
case 3:printf("政治"); break;
case 4:printf("英语"); break;
}
}
xianshi(long *p1,int (*p2)[100],int n,int m)
{ int i,j;
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("编号 学号");
for(i=1;i<=m;i++)
{ printf(" "); course_name(i); }
printf("\n");
for(i=0;i<n;i++)
{ printf("(%d) %4ld",i,*(p1+i));
for(j=0;j<m;j++)
printf(" %3d",*(*(p2+i)+j));
printf("\n");
}
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
print2(int m)
{ int i,j;
printf("-----------------------------------提 示--------------------------------------\n");
for(i=1;i<=m;i++)
{printf(" %d-->",i);
course_name(i);
}
printf("\n------------------------------------------------------------------------------\n");
}
out()
{ printf("\n\n\n\n\n\n\n按任意键继续(退出请按Esc键).......");
/*
if(getch()==27) exit(1);
else clrscr();
*/
}
stu_zhongfen(int (*p2)[100],int n,int m)
{ int sum,i,j;
for(i=0;i<n;i++)
{ sum=0;
for(j=0;j<m;j++)
sum=sum+*(*(p2+i)+j);
*(*(p2+i)+m)=sum;
}
}
input(long *p1,int (*p2)[100],int n,int m)
{ int i,j;
for(i=0;i<n;i++)
{ printf("\n□请输入第%d个学生的学号:",i+1);
scanf("%ld",p1+i);
for(j=0;j<m;j++)
{ printf("\n■请输入第%d门课程的成绩:",j+1);
scanf("%d",*(p2+i)+j);
}
}
printf("......输入完毕!\n");
out();
}
edit(long *p1,int (*p2)[100],int n,int m)
{ long xuehao;
int kecheng,fenshu,i,j;
while(1)
{
printf("●请输入要修改成绩的学生的学号:\n");
scanf("%ld",&xuehao);
for(i=0;i<n;i++)
{ if(*(p1+i)==xuehao)
break;
}
if(i>=n) printf("该学好不存在!请从新输入!\n");
else break;
}
print2(m);
printf("\n▲请输入你要修改的课程编号\n");
scanf("%d",&kecheng);
printf("\n◆请输入修改后的分数:");
scanf("%d",&fenshu);
*(*(p2+i)+kecheng-1)=fenshu;
printf("\n.......修改成功.......\n");
out();
}
/*
delete(long *p1,int (*p2)[100],int n)
{ long xuehao;
int i,j;
printf("\n请输入你要删除成绩的学生的学号:");
scanf("%ld",&xuehao);
for(i=0;i<n;i++)
{ if(*(p1+i)==xuehao)
break;
}
for(j=i;j<n-1;j++)
{ *(p2+j)=*(p2+j)+1;
*(p1+j0=*(p1+j)+1;
}
printf("\n删除成功!\n");
out();
}
*/
chaxun(long *p1,int (*p2)[100],int n,int m)
{
long xuehao;
int counter=1,j=0,i;
while(1)
{
printf("\n●请输入要查询的学生的学号:");
scanf("%ld",&xuehao);
for(i=0;i<n;i++)
{ if(*(p1+i)==xuehao)
break;
}
if(i>=n) printf("该学号不存在!请从新输入!\n");
else break;
}
stu_zhongfen(p2,n,m);
while(j<n)
{ if(j!=i)
{ if(*(*(p2+j)+m)>*(*(p2+i)+m)) counter++;
j++;
}
else
j++;
}
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("\n 您要查询的学生信息如下:\n");
printf("\n");
printf(" 课程名 分数\n");
for(j=0;j<m;j++)
{ printf(" ");
course_name(j+1);
printf(" %4d\n",*(*(p2+i)+j));
}
printf("\n 总分为:%3d\n",*(*(p2+i)+m));
printf(" 班级排名为:%3d\n",counter);
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
highestscore(int (*p2)[100],int n,int m)
{ int a[10];
int i,j,temp;
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
printf("\n 课程 最高分\n");
for(j=0;j<m;j++)
{ for(i=1;i<n;i++)
if(*(*(p2+0)+j)<*(*(p2+i)+j))
{ temp=*(*(p2+0)+j);
*(*(p2+0)+j)=*(*(p2+i)+j);
*(*(p2+i)+j)=temp;
}
printf(" ");
course_name(j+1);
printf(" %3d\n",*(*(p2+0)+j));
}
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
out();
}
stu_average(long *p1,int (*p2)[100],int n,int m)
{ int i,j;
float average[100];
stu_zhongfen(p2,n,m);
for(i=0;i<n;i++)
average[i]=*(*(p2+i)+m)/(float)m;
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
printf("\n每个学生的平均分如下\n");
printf(" 编号 学号 平均分\n");
for(i=0;i<n;i++)
printf(" %d %4ld %f\n",i,*(p1+i),average[i]);
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
course_average(int (*p2)[100],int n,int m)
{ int a[10];
int i,j,sum;
for(i=0;i<m;i++)
{ sum=0;
for(j=0;j<n;j++)
sum=sum+*(*(p2+j)+i);
a[i]=sum;
}
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
printf("\n每门课程的平均分如下:\n");
printf(" 课程名 平均分\n");
for(i=0;i<m;i++)
{ printf(" ");
course_name(i+1);
printf(" %f\n",(float)a[i]/m);
}
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
course_jiangxu(int (*p2)[100],int n,int m)
{ int i,j,k,temp,a[100];
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
for(j=0;j<m;j++)
{ for(i=0;i<n;i++)
a[i]=*(*(p2+i)+j);
for(i=0;i<n-1;i++)
{ for(k=1;k<n;k++)
if(a[i]<a[k])
{ temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
printf(" ");
course_name(j+1);
for(i=0;i<n;i++)
printf(" %3d ",a[i]);
printf("\n");
}
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
tongji(long *p1,int (*p2)[100],int n,int m)
{ int i,j=0,k,max,min,a[100];
print2(m);
while(1)
{
printf("\n★请输入课程代号:\n");
scanf("%d",&k);
if(k>m) printf("你输入的课程代号不正确,请按照上面的提示从新输入!\n");
else break;
}
while(1)
{
printf("\n▲请输入分数段:");
scanf("%d%d",&min,&max);
for(i=0;i<n;i++)
if(*(*(p2+i)+k-1)>=min&&*(*(p2+i)+k-1)<=max)
{ a[j]=i;
j++;
}
if(j==0) printf("此分数段无学生!请从新输入!\n");
else break;
}
printf("\n课程"); course_name(k);
printf("分数段%d---%d的学生信息如下:\n",min,max);
printf("学号 分数\n");
for(i=0;i<j;i++)
printf("%4ld %3d\n",*(p1+a[i]),*(*(p2+a[i])+k-1));
out();
}
score_jiangxu(int (*p2)[100],int n,int m)
{ int i,j,k,temp,a[100];
float average[100];
stu_zhongfen(p2,n,m);
printf("\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
for(i=0;i<n;i++)
{ a[i]=*(*(p2+i)+m);
average[i]=*(*(p2+i)+m)/(float)m;
}
for(i=0;i<n-1;i++)
{ for(k=1;k<n;k++)
if(a[i]<a[k])
{ temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
printf("排名 总分 平均分\n");
for(i=0;i<n;i++)
printf("(%d) %3d %f\n",i+1,a[i],average[i]);
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out();
}
print1()
{ system("cls");
printf("★1.浏览学生信息 ★2.修改学生信息\n");
printf("★3.删除学生信息 ★4.查询学生成绩和排名\n");
printf("★5.查询每个学生的平均分 ★6.查询每门课程的平均分\n");
printf("★7.查询每门课程最高分 ★8.降序排列学生总分和平均分\n");
printf("★9.降序排列每门课程的分数 ★10.按课程名和分数段进行统计\n");
printf("请选择:");
}
main()
{ int m,n,i;
long *p1,num[100]; /*数组元素地址:*(指针变量+行下标)+列下标*/
int (*p2)[100],score[100][100];
printf("\n●请输入学生总数:");
scanf("%d",&n);
printf("\n○请输入课程总数:");
scanf("%d",&m);
p1=num;
p2=score;
printf("\n ★★现在请输入学号和成绩★★\n");
print2(m);
input(p1,p2,n,m);
while(1)
{ print1();
scanf("%d",&i);
if(i<0||i>10) printf(".....输入错误!....");
else
switch(i)
{ case 1: xianshi(p1,p2,n,m); break;
case 2: edit(p1,p2,n,m); break;
case 4: chaxun(p1,p2,n,m); break;
case 5: stu_average(p1,p2,n,m); break;
case 6: course_average(p2,n,m); break;
case 7: highestscore(p2,n,m); break;
case 8: score_jiangxu(p2,n,m); break;
case 9: course_jiangxu(p2,n,m); break;
case 10: tongji(p1,p2,n,m); break;
}
}
}
展开阅读全文