自己写的 利用指针写的有关学生成绩系统!欢迎赐教,给些建议2012-2-12---2012-2-14
2012-02-18 14:01
399 查看
<pre>
#include<stdio.h>
#include<string.h>
#define M 3
struct student
{
int class1;
int num;
char name[10];
float score[3];
float average;
}; //学生结构体的定义
main() //主函数
{
int i;
int m;
int flag=0;
struct student students[M];
struct student *p1[M],*p2[M],*p3[M],*p4[M],*p5[M],*p6[M],*p61[M],*p7[M];
//函数的声明
void input(struct student *p1[M]);
void average1(struct student *p2[M]);
void average2(struct student *p3[M]);
void output(struct student *p4[M]);
void output1(struct student *p5[M]);
void checknum(struct student *p6[M]);
void checkname(struct student *p61[M]);
void change(struct student *p7);
con: //使用goto语句的标记,使可以多次查询
printf("\n\n\n");
printf(" --------------------------\n");
printf(" 1.成绩的输入 \n");
printf(" 2.班级各科平均分的查询 \n");
printf(" 3.年级排名查询 \n");
printf(" 4.班级排名查询 \n");
printf(" 5.个人学生成绩情况查询 \n");
printf(" 6.学生信息修改 \n");
printf(" 7.退出 \n");
printf(" --------------------------\n");
for(i=0;i<M;i++) //利用指针数组,以下函数不必要传入结构体
{p1[i]=&students[i];
p2[i]=&students[i];
p3[i]=&students[i];
p4[i]=&students[i];
p5[i]=&students[i];
p6[i]=&students[i];
p61[i]=&students[i];
p7[i]=&students[i];
};
scanf("%d",&i);
average2(p3); //每个同学的个人平均分,需先计算
switch(i)
{
case 1: {
input(p1);
flag=1;
goto con;
break; //成绩的输入
};
case 2: {
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
};
average1(p2);
goto con;
break; //班级各科平均分的查询
};
case 3: {
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
output(p4);
goto con;
break; // 班级排名查询
};
case 4:{
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
output1(p5);
goto con;
break; // 年级排名查询
};
case 5: {
if(flag==0)
{ printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
printf("按学号查询请按1,按名字查询请按2\n"); //查询个人学生成绩情况
getchar();
scanf("%d",&m);
if(m==1) {checknum(p6);goto con;}
if(m==2) {checkname(p61);goto con;}
};
case 6: {
if(flag==0)
{ printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
};
change(p7);
goto con;
break;
};
case 7: {
break;
};
default: {printf("输入有误,请重新输入\n");goto con;}
};
}
// 1)成绩的输入
void input(struct student *p1[M])
{
int i;
for(i=0;i<M;i++)
{printf("班级:\n");
scanf("%d",&p1[i]->class1);
printf("学号:\n");
scanf("%d",&p1[i]->num);
printf("名字:\n");
scanf("%s",p1[i]->name);
printf("成绩分别为:\n");
scanf("%f%f%f",&p1[i]->score[0],&p1[i]->score[1],&p1[i]->score[2]);
}; //数据的输入
printf("-------------------------\n");
printf("您刚输入的数据为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //检测
{
printf("%-5d",p1[i]->class1);
printf("%7d",p1[i]->num);
printf("%10s",p1[i]->name);
printf(" %f,%f,%f",p1[i]->score[0],p1[i]->score[1],p1[i]->score[2]);
printf("\n");
};
printf("------------------------\n");
}
//2)班级各科平均分查询
void average1(struct student *p2[M])
{
int i,j;
float y=0;
int k,h=0;
float average[M];
printf("请输入该班班级:\n");
scanf("%d",&k);
for(i=0;i<M;i++)
{if(p2[i]->class1==k) h++; //选出这个班的人数
};
for(i=0;i<3;i++)
{for(j=0;j<M;j++)
{if(p2[j]->class1==k) //符合该班的人数的分数
{
y+=p2[j]->score[i];
};
};
average[i]=y/h;
y=0;
};
for(i=0;i<3;i++) //检测
{printf(" 该班第%d科平均分为%f分\n",i+1,average[i]);
};
printf("--------------------------\n");
}
// 3)计算每位同学的平均分(float数据类型)
void average2(struct student *p3[M])
{
int i,j;
float y;
for(i=0;i<M;i++)
{for(j=0;j<3;j++)
{y+=p3[i]->score[j];
};
p3[i]->average=y/3;
y=0;
};
}
//4)年级排名的查询
void output(struct student *p4[M])
{
int i,j,y=1;
int k;
float fscore[M];
float temp;
float max;
int flag,n;
int num[M]={0};
int num1[M]={0};
for(i=0;i<M;i++) //把学生平均分复制到另一个数组
{fscore[i]=p4[i]->average;
};
for(i=0;i<M;i++)
printf("\nfscore[%d]=%f\n",i,fscore[i]);
//对这个数组的大小进行排序
for(i=0;i<M-1;i++)
{k=i;
for(j=i+1;j<M;j++)
{if(fscore[k]<fscore[j]) k=j;
};
if(k!=i)
{temp=fscore[k];
fscore[k]=fscore[i];
fscore[i]=temp;
};
};
for(i=0;i<M;i++)
printf("\nfscore[%d]=%f\n",i,fscore[i]);
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //把这个数组和结构体的平均分一一对应
{for(j=0;j<M;j++)
{
flag=0;
y=1; //为了解决平均分相同的输出问题
for(n=0;n<M;n++)
{if(p4[j]->num==num
&&p4[j]->class1==num1
) y=0;
};
if(y!=0)
{if(fscore[i]==p4[j]->average)
{
printf("%-5d",p4[j]->class1);
printf("%7d",p4[j]->num);
printf("%10s",p4[j]->name);
printf(" %f,%f,%f",p4[j]->score[0],p4[j]->score[1],p4[j]->score[2]);
printf(" average:%f\n",p4[j]->average);
num[i]=p4[j]->num;
num1[i]=p4[j]->class1;
flag=1;
};
};
if(flag==1)break;
};
};
printf("--------------------------\n");
}
//按学号查询
void checknum(struct student *p6[M])
{
int i,j;
int m;
char n;
do
{
printf("查找学生的学号是 :\n");
scanf("%d",&m);
printf("\n------");
printf("\n");
for(i=0;i<M;i++)
{if(m==p6[i]->num)
{ printf("该学生信息为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
printf("%-5d",p6[i]->class1);
printf("%7d",p6[i]->num);
printf("%10s",p6[i]->name);
printf(" %f,%f,%f",p6[i]->score[0],p6[i]->score[1],p6[i]->score[2]);
printf("\n");
break;
};
};
printf("---------------------------\n");
printf("DO you want to continue:y/n\n");
getchar();
scanf("%c",&n);
}while(n=='y');
}
//按名字查询
void checkname(struct student *p61[M])
{
int i,j;
int k=0;
char m;
char name[10];
do
{
printf("查找学生的姓名是 :\n");
scanf("%s",name);
printf("\n------");
for(i=0;i<M;i++)
{if(strcmp(name,p61[i]->name)==0)
{
k=i;
break;
};
};
printf("该学生信息为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
printf("%-5d",p61[i]->class1);
printf("%7d",p61[i]->num);
printf("%10s",p61[i]->name);
printf(" %f,%f,%f",p61[i]->score[0],p61[i]->score[1],p61[i]->score[2]);
printf("\n");
printf("-----------------------\n");
printf("DO you want to continue? (y/n)\n");
getchar();
scanf("%c",&m);
}while(m=='y');
}
//学生信息的修改
void change(struct student *p7[M])
{
int i,j;
int k,m;
float n1,n2,n3; //修改成绩需要
char name[10]; //修改名字需要
printf("需要修改的名字为:\n");
scanf("%s",name);
for(i=0;i<M;i++)
{if(strcmp(name,p7[i]->name)==0)
{printf("good1\n");
k=i;
break;
};
printf("good2\n");
};
printf("k=%d\n",k);
printf("----------------------\n");
printf("1.修改学号\n");
printf("2.修改名字\n");
printf("3.修改成绩\n");
scanf("%d",&j);
printf("---------------------\n");
if(j==1)
{printf("该学生学号为%d\n",p7[k]->num);
printf("修改为:\n");
scanf("%d",&m);
p7[k]->num=m;
printf("修改成功!\n");
printf("-----------------------\n");
};
if(j==2)
{printf("该学生名字为%s\n",p7[k]->name);
printf("修改为:\n");
scanf("%s",name);
strcpy(p7[k]->name,name);
printf("修改成功!\n");
printf("-----------------------\n");
};
if(j==3)
{printf("该学生成绩为%f %f %f\n",p7[k]->score[0],p7[k]->score[1],p7[k]->score[2]);
printf("修改为!\n");
scanf("%f%f%f",&n1,&n2,&n3);
p7[k]->score[0]=n1;
p7[k]->score[1]=n2;
p7[k]->score[2]=n3;
printf("修改成功!\n");
printf("-----------------------\n");
};
}
//5)班级排名查询
void output1(struct student *p5[M])
{
int i,j=0,y=1;
float fscore[M]={0};
float temp;
float max;
int k;
int m;
int flag,n;
int num[M];
printf("请输入班级\n");
scanf("%d",&k);
for(i=0;i<M;i++) //把学生平均分复制到另一个数组
{if((p5[i]->class1)==k)
{fscore[j]=(p5[i]->average);
j++;
};
};
for(i=0;i<M-1;i++)
{m=i;
for(j=i+1;j<M;j++)
{if(fscore[m]<fscore[j]) m=j;
};
if(m!=i)
{temp=fscore[m];
fscore[m]=fscore[i];
fscore[i]=temp;
};
};
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //把这个数组和结构体的平均分一一对应
{for(j=0;j<M;j++)
{flag=0;
y=1;
for(n=0;n<M;n++)
{
if((p5[j]->num)==num
) y=0;
};
if(y!=0)
{if(fscore[i]==(p5[j]->average)&&(p5[j]->class1)==k)
{
printf("%-5d",p5[j]->class1);
printf("%7d",p5[j]->num);
printf("%10s",p5[j]->name);
printf(" %f,%f,%f",p5[j]->score[0],p5[j]->score[1],p5[j]->score[2]);
printf("\n");
num[i]=(p5[j]->num);
flag=1;
};
};
if(flag==1)break;
};
};
printf("--------------------------\n");
}
<pre>
#include<stdio.h>
#include<string.h>
#define M 3
struct student
{
int class1;
int num;
char name[10];
float score[3];
float average;
}; //学生结构体的定义
main() //主函数
{
int i;
int m;
int flag=0;
struct student students[M];
struct student *p1[M],*p2[M],*p3[M],*p4[M],*p5[M],*p6[M],*p61[M],*p7[M];
//函数的声明
void input(struct student *p1[M]);
void average1(struct student *p2[M]);
void average2(struct student *p3[M]);
void output(struct student *p4[M]);
void output1(struct student *p5[M]);
void checknum(struct student *p6[M]);
void checkname(struct student *p61[M]);
void change(struct student *p7);
con: //使用goto语句的标记,使可以多次查询
printf("\n\n\n");
printf(" --------------------------\n");
printf(" 1.成绩的输入 \n");
printf(" 2.班级各科平均分的查询 \n");
printf(" 3.年级排名查询 \n");
printf(" 4.班级排名查询 \n");
printf(" 5.个人学生成绩情况查询 \n");
printf(" 6.学生信息修改 \n");
printf(" 7.退出 \n");
printf(" --------------------------\n");
for(i=0;i<M;i++) //利用指针数组,以下函数不必要传入结构体
{p1[i]=&students[i];
p2[i]=&students[i];
p3[i]=&students[i];
p4[i]=&students[i];
p5[i]=&students[i];
p6[i]=&students[i];
p61[i]=&students[i];
p7[i]=&students[i];
};
scanf("%d",&i);
average2(p3); //每个同学的个人平均分,需先计算
switch(i)
{
case 1: {
input(p1);
flag=1;
goto con;
break; //成绩的输入
};
case 2: {
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
};
average1(p2);
goto con;
break; //班级各科平均分的查询
};
case 3: {
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
output(p4);
goto con;
break; // 班级排名查询
};
case 4:{
if(flag==0)
{printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
output1(p5);
goto con;
break; // 年级排名查询
};
case 5: {
if(flag==0)
{ printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
}
printf("按学号查询请按1,按名字查询请按2\n"); //查询个人学生成绩情况
getchar();
scanf("%d",&m);
if(m==1) {checknum(p6);goto con;}
if(m==2) {checkname(p61);goto con;}
};
case 6: {
if(flag==0)
{ printf("未输入成绩,无法查询!请重新输入\n");
goto con;
break;
};
change(p7);
goto con;
break;
};
case 7: {
break;
};
default: {printf("输入有误,请重新输入\n");goto con;}
};
}
// 1)成绩的输入
void input(struct student *p1[M])
{
int i;
for(i=0;i<M;i++)
{printf("班级:\n");
scanf("%d",&p1[i]->class1);
printf("学号:\n");
scanf("%d",&p1[i]->num);
printf("名字:\n");
scanf("%s",p1[i]->name);
printf("成绩分别为:\n");
scanf("%f%f%f",&p1[i]->score[0],&p1[i]->score[1],&p1[i]->score[2]);
}; //数据的输入
printf("-------------------------\n");
printf("您刚输入的数据为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //检测
{
printf("%-5d",p1[i]->class1);
printf("%7d",p1[i]->num);
printf("%10s",p1[i]->name);
printf(" %f,%f,%f",p1[i]->score[0],p1[i]->score[1],p1[i]->score[2]);
printf("\n");
};
printf("------------------------\n");
}
//2)班级各科平均分查询
void average1(struct student *p2[M])
{
int i,j;
float y=0;
int k,h=0;
float average[M];
printf("请输入该班班级:\n");
scanf("%d",&k);
for(i=0;i<M;i++)
{if(p2[i]->class1==k) h++; //选出这个班的人数
};
for(i=0;i<3;i++)
{for(j=0;j<M;j++)
{if(p2[j]->class1==k) //符合该班的人数的分数
{
y+=p2[j]->score[i];
};
};
average[i]=y/h;
y=0;
};
for(i=0;i<3;i++) //检测
{printf(" 该班第%d科平均分为%f分\n",i+1,average[i]);
};
printf("--------------------------\n");
}
// 3)计算每位同学的平均分(float数据类型)
void average2(struct student *p3[M])
{
int i,j;
float y;
for(i=0;i<M;i++)
{for(j=0;j<3;j++)
{y+=p3[i]->score[j];
};
p3[i]->average=y/3;
y=0;
};
}
//4)年级排名的查询
void output(struct student *p4[M])
{
int i,j,y=1;
int k;
float fscore[M];
float temp;
float max;
int flag,n;
int num[M]={0};
int num1[M]={0};
for(i=0;i<M;i++) //把学生平均分复制到另一个数组
{fscore[i]=p4[i]->average;
};
for(i=0;i<M;i++)
printf("\nfscore[%d]=%f\n",i,fscore[i]);
//对这个数组的大小进行排序
for(i=0;i<M-1;i++)
{k=i;
for(j=i+1;j<M;j++)
{if(fscore[k]<fscore[j]) k=j;
};
if(k!=i)
{temp=fscore[k];
fscore[k]=fscore[i];
fscore[i]=temp;
};
};
for(i=0;i<M;i++)
printf("\nfscore[%d]=%f\n",i,fscore[i]);
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //把这个数组和结构体的平均分一一对应
{for(j=0;j<M;j++)
{
flag=0;
y=1; //为了解决平均分相同的输出问题
for(n=0;n<M;n++)
{if(p4[j]->num==num
&&p4[j]->class1==num1
) y=0;
};
if(y!=0)
{if(fscore[i]==p4[j]->average)
{
printf("%-5d",p4[j]->class1);
printf("%7d",p4[j]->num);
printf("%10s",p4[j]->name);
printf(" %f,%f,%f",p4[j]->score[0],p4[j]->score[1],p4[j]->score[2]);
printf(" average:%f\n",p4[j]->average);
num[i]=p4[j]->num;
num1[i]=p4[j]->class1;
flag=1;
};
};
if(flag==1)break;
};
};
printf("--------------------------\n");
}
//按学号查询
void checknum(struct student *p6[M])
{
int i,j;
int m;
char n;
do
{
printf("查找学生的学号是 :\n");
scanf("%d",&m);
printf("\n------");
printf("\n");
for(i=0;i<M;i++)
{if(m==p6[i]->num)
{ printf("该学生信息为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
printf("%-5d",p6[i]->class1);
printf("%7d",p6[i]->num);
printf("%10s",p6[i]->name);
printf(" %f,%f,%f",p6[i]->score[0],p6[i]->score[1],p6[i]->score[2]);
printf("\n");
break;
};
};
printf("---------------------------\n");
printf("DO you want to continue:y/n\n");
getchar();
scanf("%c",&n);
}while(n=='y');
}
//按名字查询
void checkname(struct student *p61[M])
{
int i,j;
int k=0;
char m;
char name[10];
do
{
printf("查找学生的姓名是 :\n");
scanf("%s",name);
printf("\n------");
for(i=0;i<M;i++)
{if(strcmp(name,p61[i]->name)==0)
{
k=i;
break;
};
};
printf("该学生信息为:\n");
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
printf("%-5d",p61[i]->class1);
printf("%7d",p61[i]->num);
printf("%10s",p61[i]->name);
printf(" %f,%f,%f",p61[i]->score[0],p61[i]->score[1],p61[i]->score[2]);
printf("\n");
printf("-----------------------\n");
printf("DO you want to continue? (y/n)\n");
getchar();
scanf("%c",&m);
}while(m=='y');
}
//学生信息的修改
void change(struct student *p7[M])
{
int i,j;
int k,m;
float n1,n2,n3; //修改成绩需要
char name[10]; //修改名字需要
printf("需要修改的名字为:\n");
scanf("%s",name);
for(i=0;i<M;i++)
{if(strcmp(name,p7[i]->name)==0)
{printf("good1\n");
k=i;
break;
};
printf("good2\n");
};
printf("k=%d\n",k);
printf("----------------------\n");
printf("1.修改学号\n");
printf("2.修改名字\n");
printf("3.修改成绩\n");
scanf("%d",&j);
printf("---------------------\n");
if(j==1)
{printf("该学生学号为%d\n",p7[k]->num);
printf("修改为:\n");
scanf("%d",&m);
p7[k]->num=m;
printf("修改成功!\n");
printf("-----------------------\n");
};
if(j==2)
{printf("该学生名字为%s\n",p7[k]->name);
printf("修改为:\n");
scanf("%s",name);
strcpy(p7[k]->name,name);
printf("修改成功!\n");
printf("-----------------------\n");
};
if(j==3)
{printf("该学生成绩为%f %f %f\n",p7[k]->score[0],p7[k]->score[1],p7[k]->score[2]);
printf("修改为!\n");
scanf("%f%f%f",&n1,&n2,&n3);
p7[k]->score[0]=n1;
p7[k]->score[1]=n2;
p7[k]->score[2]=n3;
printf("修改成功!\n");
printf("-----------------------\n");
};
}
//5)班级排名查询
void output1(struct student *p5[M])
{
int i,j=0,y=1;
float fscore[M]={0};
float temp;
float max;
int k;
int m;
int flag,n;
int num[M];
printf("请输入班级\n");
scanf("%d",&k);
for(i=0;i<M;i++) //把学生平均分复制到另一个数组
{if((p5[i]->class1)==k)
{fscore[j]=(p5[i]->average);
j++;
};
};
for(i=0;i<M-1;i++)
{m=i;
for(j=i+1;j<M;j++)
{if(fscore[m]<fscore[j]) m=j;
};
if(m!=i)
{temp=fscore[m];
fscore[m]=fscore[i];
fscore[i]=temp;
};
};
printf("班级 ");
printf("学号");
printf(" 名字");
printf(" 成绩\n");
for(i=0;i<M;i++) //把这个数组和结构体的平均分一一对应
{for(j=0;j<M;j++)
{flag=0;
y=1;
for(n=0;n<M;n++)
{
if((p5[j]->num)==num
) y=0;
};
if(y!=0)
{if(fscore[i]==(p5[j]->average)&&(p5[j]->class1)==k)
{
printf("%-5d",p5[j]->class1);
printf("%7d",p5[j]->num);
printf("%10s",p5[j]->name);
printf(" %f,%f,%f",p5[j]->score[0],p5[j]->score[1],p5[j]->score[2]);
printf("\n");
num[i]=(p5[j]->num);
flag=1;
};
};
if(flag==1)break;
};
};
printf("--------------------------\n");
}
<pre>
相关文章推荐
- 利用C语言版本的数据库制作一个学生成绩管理系统
- 利用指针找出不及格学生的成绩
- C语言练手自己编写学生成绩管理系统
- 学生管理系统(利用指针实现)
- (C语言)利用结构体数组制作学生成绩管理系统
- C语言练手自己编写学生成绩管理系统
- 学生成绩管理系统(指针,动态数组…
- 利用c++类和对象建立学生成绩管理系统
- 简易的学生成绩录入系统(结构,结构指针,结构数组的运用)
- 利用返回指针值的函数进行查找学生的成绩
- 学生成绩管理系统_结构体、指针、存储、排序、动态内存分配
- C语言利用结构体数组实现学生成绩管理系统
- 就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会,并将学生信息管理系统进行修改,使能完成其他的功能,并撰写体会,附加源代码。
- 设计一个学生成绩管理系统,实现对学生成绩的动态管理,实现对学生成绩的输入,显示,删除,查找,插入,最佳,保存,计算,排序等主要功能
- c语言的学生成绩管理系统
- 软件需求规格说明书——学生成绩查询系统
- 用C++写学生成绩管理系统
- Java GUI 实战练习 学生成绩管理系统
- 学生成绩管理系统(C语言)
- C实现的一个简单的学生成绩管理系统