纯数组知识实现学生成绩管理(可排序,不及格统计,删除,查找,插入)
此程序完全是数组和函数实现,可在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; }