纯数组知识实现学生成绩管理(可排序,不及格统计,删除,查找,插入)
此程序完全是数组和函数实现,可在VC 6.0下通过编译;有兴趣的人可以自己添加些控制函数
程序代码:#include<stdio.h>
#include<string.h>
#include <windows.h>
#define M 1000//定义此表最大容量(即学生人数最大为1000人)
int r;//定义全局变量,记录保存用户输入了r个学生
void get(char name[M][20],int num[M],int score[M][3]) //定义输入函数。
{
char c;
for(r=0;r<M;r++)
{
if(r==0)
{
printf(">>请按顺序输入第[%d]个学生的信息,空格隔开(姓名 学号 英语 数学 物理)\n",r+1);
scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
}
if(r>0)
{
printf(">>请按顺序输入第[%d]个学生的信息(同上)[结束输入请按Q,继续输入按ENTER]:",r+1);
getchar();
c=getchar();
if(c=='Q'||c=='q')
goto tuichu;
else
scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
}
}
tuichu: ;
}
void list()//画出框架
{
printf("*****************************************************************************\n");
printf("* 09软件<2>班成绩表 *\n");
printf("*\t姓名\t学号\t英语\t数学\t物理\t平均分\t总分\t名次 *\n");
printf("*****************************************************************************\n");
}
void order(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//排序,输出总分、平均分、名次。
{
int i,j,w,x,y,z,s;
float m;
char a[20];
for(i=0;i<r;i++)
{
sum[i]=score[i][0]+score[i][1]+score[i][2];
mean[i]=float(sum[i])/3;
}
for(j=0;j<r;j++)
{
for(i=r-1;i>j;i--)
{
if(sum[i]>=sum[i-1])
{
strcpy(a,name[i]);//交换姓名
strcpy(name[i],name[i-1]);
strcpy(name[i-1],a);
w=num[i];//交换学号
num[i]=num[i-1];
num[i-1]=w;
x=score[i][0];//交换英语成绩
score[i][0]=score[i-1][0];
score[i-1][0]=x;
y=score[i][1];//交换数学成绩
score[i][1]=score[i-1][1];
score[i-1][1]=y;
z=score[i][2];//交换物理成绩
score[i][2]=score[i-1][2];
score[i-1][2]=z;
s=sum[i];//交换总分
sum[i]=sum[i-1];
sum[i-1]=s;
m=mean[i];//交换平均分
mean[i]=mean[i-1];
mean[i-1]=m;
}
}
}
for(j=0;j<r;j++)
printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
}
void fail(char name[M][20],int num[M],int score[M][3])//不及格学生统计
{
printf(">>存在不及格的学生有:\n");
int i,j,k;
for(i=0;i<r;i++)
{
for(j=0;j<3;j++)
{
if(score[i][j]<60)
{
printf(" %s %d ",name[i],num[i]);
switch(j)
{
case 0:printf("英语");break;
case 1:printf("数学");break;
case 2:printf("物理");break;
}
printf(" %d分 不及格\n",score[i][j]);
}
}
}
k=score[0][0];
for(i=0;i<r;i++)
{
for(j=0;j<r-1;j++)
{
if(score[i][j]<k)
k=score[i][j];
}
}
if(k>=60)
printf(" 该班级学生无不及格现象\n");
}
void search(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//查找函数
{
int h,i;
char c;
loop1:printf(">>请输入您要查找学生的学号:");
scanf("%d",&h);
for(i=0;i<=r;i++)
{
if(i==r)
{
printf(" 没有查询到该学生的信息,请重新输入\n");
goto loop1;
}
if(h==num[i])
{
system("cls");
list();
printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t *\n",name[i],num[i],score[i][0],score[i][1],score[i][2],mean[i],sum[i],rank[i]);
printf("-----------------------------------------------------------------------------\n");
jixu: printf(">>继续查询请按G,结束请按Q:");
getchar();
c=getchar();
if(c=='G'||c=='g')
goto loop1;
else if(c=='Q'||c=='q')
goto exit;
else
goto jixu;
}
}
exit:;
}
int delete_1(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//删除函数
{
int u,i,j,k;
char c;
char b[20]={'\0'};
loop3:printf(">>请输入您要删除学生的学号:");
scanf("%d",&u);
for(i=0;i<=r;i++)
{
if(i==r)
{
printf(" 没有查询到该学生的信息,请重新输入\n");
goto loop3;
}
if(u==num[i])
{
for(j=i;j<r;j++)
{
if(j==r-1)
{
strcpy(name[j],b);
num[j]=NULL;
sum[j]=NULL;
mean[j]=NULL;
for(k=0;k<3;k++)
score[j][k]=NULL;
}
else
{
strcpy(name[j],name[j+1]);
num[j]=num[j+1];
sum[j]=sum[j+1];
mean[j]=mean[j+1];
for(k=0;k<3;k++)
score[j][k]=score[j+1][k];
}
}
list();
for(j=0;j<r-1;j++)
printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
printf("-----------------------------------------------------------------------------\n");
r--;
jixu: if(r>0)
{
printf(">>继续删除请按G,结束请按Q:");
getchar();
c=getchar();
if(c=='G'||c=='g')
goto loop3;
else if(c=='Q'||c=='q')
goto exit;
else
goto jixu;
}
else
{
printf("注意!该表已无数据!\n");
return 0;
}
}
}
exit: return 0;
}
void insert(char name[M][20],int num[M],int score[M][3],int sum[M],float mean[M],int rank[M])//插入函数
{
int i,j,k,w,x,y,z,s;
float m;
char c;
char d[20];
loop4:printf(">>请按顺序输入插入的学生的信息(姓名 学号 英语 数学 物理)\n");
scanf("%s%d%d%d%d",name[r],&num[r],&score[r][0],&score[r][1],&score[r][2]);
sum[r]=score[r][0]+score[r][1]+score[r][2];
mean[r]=float(sum[r])/3;
for(i=0;i<r;i++)
{
if(sum[r]>sum[i])
{
for(j=i+1;j<r;j++)
{
for(k=r;k>=j;k--)
{
strcpy(d,name[k]);//交换姓名
strcpy(name[k],name[k-1]);
strcpy(name[k-1],d);
w=num[k];//交换学号
num[k]=num[k-1];
num[k-1]=w;
x=score[k][0];//交换英语成绩
score[k][0]=score[k-1][0];
score[k-1][0]=x;
y=score[k][1];//交换数学成绩
score[k][1]=score[k-1][1];
score[k-1][1]=y;
z=score[k][2];//交换物理成绩
score[k][2]=score[k-1][2];
score[k-1][2]=z;
s=sum[k];//交换总分
sum[k]=sum[k-1];
sum[k-1]=s;
m=mean[k];//交换平均分
mean[k]=mean[k-1];
mean[k-1]=m;
}
loop5: list();
for(j=0;j<=r;j++)
printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
printf("-----------------------------------------------------------------------------\n");
r++;
jixu: printf(">>继续插入请按G,结束请按Q:");
getchar();
c=getchar();
if(c=='G'||c=='g')
goto loop4;
else if(c=='Q'||c=='q')
goto exit;
else
goto jixu;
}
}
else if(sum[r]<=sum[r-1])
goto loop5;
}
for(i=0;i<r;i++)
{
if(sum[r]<=sum[i]&&sum[r]>sum[i+1])
{
for(j=i+1;j<r;j++)
{
for(k=r;k>j;k--)
{
strcpy(d,name[k]);//交换姓名
strcpy(name[k],name[k-1]);
strcpy(name[k-1],d);
w=num[k];//交换学号
num[k]=num[k-1];
num[k-1]=w;
x=score[k][0];//交换英语成绩
score[k][0]=score[k-1][0];
score[k-1][0]=x;
y=score[k][1];//交换数学成绩
score[k][1]=score[k-1][1];
score[k-1][1]=y;
z=score[k][2];//交换物理成绩
score[k][2]=score[k-1][2];
score[k-1][2]=z;
s=sum[k];//交换总分
sum[k]=sum[k-1];
sum[k-1]=s;
m=mean[k];//交换平均分
mean[k]=mean[k-1];
mean[k-1]=m;
}
list();
for(j=0;j<=r;j++)
printf("*\t%s\t%d\t %d\t %d\t %d\t%.2f\t%d\t %d\t *\n",name[j],num[j],score[j][0],score[j][1],score[j][2],mean[j],sum[j],rank[j]);
printf("-----------------------------------------------------------------------------\n");
r++;
jixu_1: printf(">>继续插入请按G,结束请按Q:");
getchar();
c=getchar();
if(c=='G'||c=='g')
goto loop4;
else if(c=='Q'||c=='q')
goto exit;
else
goto jixu_1;
}
}
else
continue;
}
exit:;
}
int main()
{
int i;
int sum[M]={NULL},rank[M]={NULL};
char name[M][20]={NULL};
int num[M]={NULL},score[M][3]={NULL};
float mean[M]={NULL};
get(name,num,score);
for(i=0;i<M;i++)
rank[i]=i+1;
system("cls");
list();
order(name,num,score,sum,mean,rank);
printf("-----------------------------------------------------------------------------\n");
fail(name,num,score);
printf("-----------------------------------------------------------------------------\n");
char m;
loop2: printf(">>请选择接下来操作的流程(查找S,删除D,插入I,退出Q):");
getchar();
m=getchar();
if(m=='S'||m=='s')
goto chazhao;
else if(m=='D'||m=='d')
goto shanchu;
else if(m=='I'||m=='i')
goto charu;
else if(m=='Q'||m=='q')
goto exit;
else
{
printf(" 输入错误!请重新输入\n");
goto loop2;
}
chazhao:search(name,num,score,sum,mean,rank);
goto loop2;
shanchu:delete_1(name,num,score,sum,mean,rank);
goto loop2;
charu:insert(name,num,score,sum,mean,rank);
goto loop2;
exit:return 0;
}






