本人刚学C++不久,遇到一个题目编程:学员成绩管理系统
一直有几个问题解决不了,主要是程序中的修改和查询部分我不知道具体出错如何修改,麻烦高手指导指导.如能详细解释更不胜感激!
源程序如下
---------------------------------------------------------------
#include <stdio.h>
#define N 50 // 班级人数
int x=0;struct student
{
int num;
char name[20];
int score[3];
int all;
double avg;
}stu[N];struct student input() // 输入
{
int j;
int zcj;
struct student st;
printf("请输入学员信息:\n");
printf("\n");
printf("学号:");
scanf("%d",&st.num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(st.name);
printf("\n");
printf("三门成绩:\n");
zcj=0;
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&st.score[j]);
zcj+=st.score[j];
}
st.all=zcj;
st.avg=zcj/3;
return st;
}void search (struct student stud[]) // 查询
{
char stud[50];
int i,j;
char ch='n';
printf("\n请输入查询的学员姓名:\n");
fflush(stdin);
gets(st.name);
printf("\n"); for(j=0;j<i;j++)
{
if(strcmp(st.name,stud)==0)
{
ch='y';
break;
}
}
if(ch=='n')
{
printf("该学员信息不存在!\n");
}
else
{
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
printf("%d\t",stud[i].num);
printf("%s\t",stud[i].name);
printf("%d\t",st.score[0]);
printf("%d\t",st.score[1]);
printf("%d\t",st.score[2]);
printf("%d\t",stud[i].all);
printf("%6.2f\t",stud[i].avg);
printf("\n");
}
}void ren (struct student stud[]) // 修改
{
int i,j;
int zcj;
struct student st;
char name1[20]; find(stu); printf("请输入需要修改的学员姓名:\n");
fflush(stdin);
gets(name1);
printf("\n"); if(strcmp(st[i].name,name1)==0)
{
printf("学号:");
scanf("%d",&st.num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(st.name);
printf("\n");
printf("三门成绩:\n");
zcj=0;
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&st.score[j]);
zcj+=st.score[j];
}
st.all=zcj;
st.avg=zcj/3; printf("修改后的学员详细信息为:\n");
}
for(i=0;i<n;i++)
{
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
printf("%d %s %d %d %d\n",stud[i].num,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].all,stud[i].avg);
}
}void display(struct student stud[]) // 输出
{
int i;
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
for(i=0;i<x;i++)
{
printf("%d\t",stud[i].num);
printf("%s\t",stud[i].name);
printf("%d\t",st.score[0]);
printf("%d\t",st.score[1]);
printf("%d\t",st.score[2]);
printf("%d\t",stud[i].all);
printf("%6.2f\t",stud[i].avg);
printf("\n");
}
}void cmp(struct student stud[]) //排序
{
int i,j;
struct student stmp;
for(i=0;i<x;i++)
{
for(j=0;j<x-i-1;j++)
{
if(stud[j].ave<stud[j+1].ave)
{
stmp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=stmp;
}
}
}
}
void insert(struct student stud[]) // 插入
{
int i,j;
struct student stmp;
printf("\n 请输入要插入的学员信息:\n");
stmp=input();
for(i=0;i<x;i++)
{
if(stud[i].ave>stmp.ave)
break;
}
for(j=x;j>i;j--)
{
stud[j]=stud[j-1];
}
stud[i]=stmp;
++x;
printf("插入后的全部学员详细信息为:");
cmp(stud);
display(stud);
}void del(struct student stud[]) // 删除
{
int i,j;
int num;
printf("\n请输入要删除信息的学员的学号:");
scanf("%d",&num);
for(i = 0;i < x;i++)
{
if(stud[i].num==num)
break;
}
--x;
for(j=i;j<x;j++)
{
stud[j]=stud[j+1];
}
printf("删除该学员信息后的详细信息为:");
cmp(stud);
display(stud);}void main() //主程序
{
int a;
char ch='y';
do
{
printf("*****************************************\n");
printf("* *\n");
printf("* 欢迎进入 *\n");
printf("* 学员成绩管理系统 *\n");
printf("* *\n");
printf("* *\n");
printf("*****************************************\n");
printf("\n \t 1、输入学员信息\n \t2、查询学员信息\n\t3、修改学员信息\n \t4、插入学员信息\n \t5、删除学员信息\n \t6、显示学员信息(按平均成绩顺序)\n\t0、退出\n");
printf("\n");
printf("请选择功能:");
scanf("%d",&a); if(a==0) //0、退出
{
printf("*****************************************\n");
printf("* *\n");
printf("* 欢迎使用 *\n");
printf("* 学员成绩管理系统 *\n");
printf("* *\n");
printf("* *\n");
printf("*****************************************\n");
break;
}
else if(a==1) //1、输入学员信息
{
input(stu); }
else if(a==2) //2、查询学员信息
{
search (stu); }
else if(a==3) //3、修改学员信息
{
ren(stu);
} else if(a==4) //4、插入学员信息
{
if(x<N)
{
insert(stu);
}
else
{
printf("\n\t人数超出! 无法插入学员信息!\n");
}
}
else if(a==5) //5、删除学员信息
{
del(stu);
}
else if(a==6) //6、显示学员信息
{
cmp(stu);
display(stu);
} else
{
printf("输入错误!");
}
}while(1);
}
一直有几个问题解决不了,主要是程序中的修改和查询部分我不知道具体出错如何修改,麻烦高手指导指导.如能详细解释更不胜感激!
源程序如下
---------------------------------------------------------------
#include <stdio.h>
#define N 50 // 班级人数
int x=0;struct student
{
int num;
char name[20];
int score[3];
int all;
double avg;
}stu[N];struct student input() // 输入
{
int j;
int zcj;
struct student st;
printf("请输入学员信息:\n");
printf("\n");
printf("学号:");
scanf("%d",&st.num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(st.name);
printf("\n");
printf("三门成绩:\n");
zcj=0;
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&st.score[j]);
zcj+=st.score[j];
}
st.all=zcj;
st.avg=zcj/3;
return st;
}void search (struct student stud[]) // 查询
{
char stud[50];
int i,j;
char ch='n';
printf("\n请输入查询的学员姓名:\n");
fflush(stdin);
gets(st.name);
printf("\n"); for(j=0;j<i;j++)
{
if(strcmp(st.name,stud)==0)
{
ch='y';
break;
}
}
if(ch=='n')
{
printf("该学员信息不存在!\n");
}
else
{
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
printf("%d\t",stud[i].num);
printf("%s\t",stud[i].name);
printf("%d\t",st.score[0]);
printf("%d\t",st.score[1]);
printf("%d\t",st.score[2]);
printf("%d\t",stud[i].all);
printf("%6.2f\t",stud[i].avg);
printf("\n");
}
}void ren (struct student stud[]) // 修改
{
int i,j;
int zcj;
struct student st;
char name1[20]; find(stu); printf("请输入需要修改的学员姓名:\n");
fflush(stdin);
gets(name1);
printf("\n"); if(strcmp(st[i].name,name1)==0)
{
printf("学号:");
scanf("%d",&st.num);
printf("\n");
printf("姓名:");
fflush(stdin);
gets(st.name);
printf("\n");
printf("三门成绩:\n");
zcj=0;
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&st.score[j]);
zcj+=st.score[j];
}
st.all=zcj;
st.avg=zcj/3; printf("修改后的学员详细信息为:\n");
}
for(i=0;i<n;i++)
{
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
printf("%d %s %d %d %d\n",stud[i].num,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].all,stud[i].avg);
}
}void display(struct student stud[]) // 输出
{
int i;
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
for(i=0;i<x;i++)
{
printf("%d\t",stud[i].num);
printf("%s\t",stud[i].name);
printf("%d\t",st.score[0]);
printf("%d\t",st.score[1]);
printf("%d\t",st.score[2]);
printf("%d\t",stud[i].all);
printf("%6.2f\t",stud[i].avg);
printf("\n");
}
}void cmp(struct student stud[]) //排序
{
int i,j;
struct student stmp;
for(i=0;i<x;i++)
{
for(j=0;j<x-i-1;j++)
{
if(stud[j].ave<stud[j+1].ave)
{
stmp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=stmp;
}
}
}
}
void insert(struct student stud[]) // 插入
{
int i,j;
struct student stmp;
printf("\n 请输入要插入的学员信息:\n");
stmp=input();
for(i=0;i<x;i++)
{
if(stud[i].ave>stmp.ave)
break;
}
for(j=x;j>i;j--)
{
stud[j]=stud[j-1];
}
stud[i]=stmp;
++x;
printf("插入后的全部学员详细信息为:");
cmp(stud);
display(stud);
}void del(struct student stud[]) // 删除
{
int i,j;
int num;
printf("\n请输入要删除信息的学员的学号:");
scanf("%d",&num);
for(i = 0;i < x;i++)
{
if(stud[i].num==num)
break;
}
--x;
for(j=i;j<x;j++)
{
stud[j]=stud[j+1];
}
printf("删除该学员信息后的详细信息为:");
cmp(stud);
display(stud);}void main() //主程序
{
int a;
char ch='y';
do
{
printf("*****************************************\n");
printf("* *\n");
printf("* 欢迎进入 *\n");
printf("* 学员成绩管理系统 *\n");
printf("* *\n");
printf("* *\n");
printf("*****************************************\n");
printf("\n \t 1、输入学员信息\n \t2、查询学员信息\n\t3、修改学员信息\n \t4、插入学员信息\n \t5、删除学员信息\n \t6、显示学员信息(按平均成绩顺序)\n\t0、退出\n");
printf("\n");
printf("请选择功能:");
scanf("%d",&a); if(a==0) //0、退出
{
printf("*****************************************\n");
printf("* *\n");
printf("* 欢迎使用 *\n");
printf("* 学员成绩管理系统 *\n");
printf("* *\n");
printf("* *\n");
printf("*****************************************\n");
break;
}
else if(a==1) //1、输入学员信息
{
input(stu); }
else if(a==2) //2、查询学员信息
{
search (stu); }
else if(a==3) //3、修改学员信息
{
ren(stu);
} else if(a==4) //4、插入学员信息
{
if(x<N)
{
insert(stu);
}
else
{
printf("\n\t人数超出! 无法插入学员信息!\n");
}
}
else if(a==5) //5、删除学员信息
{
del(stu);
}
else if(a==6) //6、显示学员信息
{
cmp(stu);
display(stu);
} else
{
printf("输入错误!");
}
}while(1);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货