这个程序在“请输入课程”后就直接结束了程序
运行结果:
哪位同学看到后解答一下
万分感谢!!
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#define NULL 0
#define len sizeof(struct student)
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf%-12.1f\n"
#define DATA stu[i].no,stu[i].name,stu[i].grade[j].name,stu[i].grade[j].score
struct course
{
char name[30];
double score;
}*cou;
struct student
{
int no;//学号
char name[20];//姓名
struct course *grade;
}*stu;
int n, m;
char courseName[30],studentName[30];
void enter(){//登录界面
system("color F5");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 学生成绩管理系统 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**************制作者******学号**************\n);
printf("\t\t\t\t**********************************************\n");
}
void welcome(){
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 欢迎进入! **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**---------------功能菜单-------------------**\n");
printf("\t\t\t\t** 增加学生信息 ------------1 **\n");
printf("\t\t\t\t** 删除学生信息 ------------2 **\n");
printf("\t\t\t\t** 修改学生信息 ------------3 **\n");
printf("\t\t\t\t** 查询学生信息 ------------4 **\n");
printf("\t\t\t\t** 输出成绩排名 ------------5 **\n");
printf("\t\t\t\t** 退出管理系统 ------------0 **\n");
printf("\t\t\t\t**********************************************\n");
printf("请输入你想要进行的操作(数字): ");
}
void newput(struct student *st)
{
int i,j;
printf("请输入学生数及课程数:");
scanf("%d %d",&n,&m);
printf("请输入课程名称:");
for(j=0;j<m;j++);
{
gets(cou[j].name);
scanf("\n");
}
printf("\t姓名\t学号\t");
for(j=0;j<m;j++)
{
puts(cou[j].name);
printf("\t");
}
for(i=0;i<n;i++)
{
scanf("%s%d",stu[i].name,&stu[i].no);
for(j=0;j<m;j++)
{
scanf("%f",&stu[i].grade[j].score);
}
}
}
void find(struct student *stu)
{
int op;
int i=0,j,k,h,g=0,l=0;
int result=1;
int search_no;
char search_name[20] = { 0 };
while(1) {
printf("_________________________________________________________________\n");
printf("\n\t\t\t1、按学号查找\n");
printf("\t\t\t2、按姓名查找\n");
printf("\t\t\t退出当前菜单请输入-1\n");
printf("______________________________________________________________\n");
printf("\n\t\t\t请选择相应的选项:");
scanf("%d",&op);
system("cls");
if(op==-1)
return welcome() ;
if (op==1)
{
printf("\n\t\t请输入要查找的学号:");
scanf("%d",&search_no);
if(search_no<0)
{printf("输入的学号有误,请重新输入");
scanf("%d",&search_no);}
else{
for (i=0;i<n;i++)
{
if(stu[i].no==search_no)
break;
}
if (i >= n)
{ system("cls");
printf("\n\t\t未查询到相关信息!");
}
else{
system("cls");
printf("_____________________________________________________________________\n");
printf("\n\t\t学号");
printf("\t\t姓名");
for(j=0;j<m;j++)
{printf("\t\t%s", stu[i].grade[j].name);
}
printf("_______________________________________________________________________\n");
printf("\n\t\t%ld", stu[i].no);
printf("\t\t%s", stu[i].name);
for(k=0;k<m;k++)
{printf("\t\t%d",stu[i].grade[k].score);}
printf("________________________________________________________________________\n");
}
}
}
if (op==2)
{
printf("\n\t\t请输入要查找的姓名:");
scanf("%s",search_name);
while ( l < n)
{ for(h=0;h<20;h++)
{if(search_name[h]==stu[l].name[h])
g++;
if(search_name[h]!=stu[l].name[h])break;
}
if(g!=h)
l++;}
if (l >= n)
{ system("cls");
printf("\n\t\t未查询到相关信息!");
}
else{
system("cls");
printf("_____________________________________________________________________\n");
printf("\n\t\t学号");
printf("\t\t姓名");
for(j=0;j<m;j++)
{printf("\t\t%s", stu[l].grade[j].name);
}
printf("_______________________________________________________________________\n");
printf("\n\t\t%ld", stu[l].no);
printf("\t\t%s", stu[l].name);
for(k=0;k<m;k++)
{printf("\t\t%d",stu[l].grade[k].score);}
printf("________________________________________________________________________\n");
}
}
}
}
void del(struct student *stu)
{
int i,num,j=0;
printf("请输入要删除的学生的学号");
scanf("%d",&num);
for(i=0;i<n;i++)
{
if(stu[i].no==num)
j=i;
}
if(j==0) printf("没有该学生的信息!");
else for(i=j;i<n-1;i++)
stu[i]=stu[i+1];
printf("您已删除成功!\n");
}
void average(struct course *cou,struct student *stu)
{
int i,j;
double sum=0,ave;
for(i=0;i<m;i++)
{
printf("%s\n",cou[i].name);
for(j=0;j<n;j++)
{
sum=sum+stu[i].grade[j].score;
}
ave=sum/j;
printf("%f",ave);
}
}
void allgrade(struct course *cou,struct student *stu)
{
int i,j,k,l;
double sum,t;
double ave[]={0};
printf("姓名 学号 平均成绩");
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
{
printf(" %s",cou[j].name);
sum=sum+stu[i].grade[j].score;
}
printf("\n");
ave[i]=sum/j;
}
for(i=0;i<n-1;i++)
{
k=i;
for(l=i+1;l<n;l++)
if(ave[k]<ave[l]) k=l;
if(k!=i)
{
t=ave[i];ave[i]=ave[k];ave[k]=t;
}
}
for(i=0;i<n;i++)
{
printf("%s %d %f ",stu[i].name,stu[i].no,ave[i]);
for(j=0;j<m;j++)
printf("%f ",stu[i].grade[j]);
printf("\n");
}
}
void sele(struct student *stu,struct course *cou)
{
int i,j,max;
for(i=0;i<m;i++)
{
max=0;
for(j=0;j<n;j++)
{
if(stu[j].grade[i].score > stu[max].grade[i].score)
max=j;
}
printf("%s\t%s\t%d\t%d\n",cou[i],stu[max].name,stu[max].no,stu[max].grade[i]);
}
}
void print()
{ int x;
void sele(struct student *stu,struct course *cou);
void average(struct course *cou,struct student *stu);
void allgrade(struct course *cou,struct student *stu);
printf("\t***********************************************************\n");
printf("\t 1.单科最高成绩打印 \n");
printf("\t 2.单科平均成绩打印 \n");
printf("\t 3.所有学生成绩打印 \n");
printf("\t***********************************************************\n");
printf("请输入所选功能序号:");
scanf("%d",&x);
switch(x)
{
case 1:sele(&stu[n],&cou[m]);break;
case 2:average(&cou[m],&stu[n]);break;
case 3:allgrade(&cou[m],&stu[n]);break;
}
}
void show()
{
FILE *fp;
int i,j,k=0;
fp=fopen("data1.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
k++;
}
fclose(fp);
printf("学号 姓名 成绩\t\n");
for(i=0;i<k;i++)
{for(j=0;j<m;j++)
printf(FORMAT,DATA);
}
}
void modify(struct course *cou,struct student *stu)
{
FILE *fp;
int i=0,j=0,m=0,snum;
if((fp=fopen("data1.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
if(m==0)
{
printf("文件中没有记录!\n");
fclose(fp);
return;
}
show();
printf("请输入要修改的学生学号: ");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].no)
{
printf("找到了这名学生,可以修改他的信息!\n");
printf("姓名:");
scanf("%s",stu[i].name);
printf("成绩:");
scanf("%lf",&stu[i].grade);
printf("修改成功!");
if((fp=fopen("data1.txt","wb"))==NULL)
{
printf("can not open\n");
return;
}
for(j=0;j<m;j++)
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("can not save!");
getchar();
}
fclose(fp);
break;
}
if(i==m)
printf("没有找到这名学生!\n");
}
int main()//主函数
{
int oip,choice;
enter();
while(2){
welcome();
scanf("%d",&choice);
switch (choice){
case 1:newput(&stu[n]);break;
case 2:del(&stu[n]);break;
case 3:modify(&cou[m],&stu[n]);break;
case 4:find(&stu[n]); break;
case 5:print();break;
}
scanf("%d",&oip);
if(oip==0) break;
}
return 0;
}
你那函数写了这个scanf("\n");
newput输入课程名称前加fflush(stdin);清空缓存
请输入课程名称下面的那个for后面的分号去掉
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#define NULL 0
#define len sizeof(struct student)
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf%-12.1f\n"
#define DATA stu[i].no,stu[i].name,stu[i].grade[j].name,stu[i].grade[j].score
struct course
{
char name[30];
double score;
}cou[50];
struct student
{
int no;//学号
char name[20];//姓名
struct course *grade;
}stu[50];
int n, m;
char courseName[30],studentName[30];
void enter(){//登录界面
system("color F5");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 学生成绩管理系统 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**************制作者******学号**************\n");
printf("\t\t\t\t**********************************************\n");
}
void welcome(){
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 欢迎进入! **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t**---------------功能菜单-------------------**\n");
printf("\t\t\t\t** 增加学生信息 ------------1 **\n");
printf("\t\t\t\t** 删除学生信息 ------------2 **\n");
printf("\t\t\t\t** 修改学生信息 ------------3 **\n");
printf("\t\t\t\t** 查询学生信息 ------------4 **\n");
printf("\t\t\t\t** 输出成绩排名 ------------5 **\n");
printf("\t\t\t\t** 退出管理系统 ------------0 **\n");
printf("\t\t\t\t**********************************************\n");
printf("请输入你想要进行的操作(数字): ");
}
void newput(struct student *st)
{
int i,j;
printf("请输入学生数及课程数:");
scanf("%d %d",&n,&m);
printf("请输入课程名称:");
for(j=0;j<m;j++)
{
fflush(stdin);
gets(cou[j].name);
fflush(stdin);
}
printf("\t姓名\t学号\t");
for(j=0;j<m;j++)
{
puts(cou[j].name);
printf("\t");
}
for(i=0;i<n;i++)
{
scanf("%s%d",stu[i].name,&stu[i].no);
for(j=0;j<m;j++)
{
scanf("%f",&stu[i].grade[j].score);
}
}
}
void find(struct student *stu)
{
int op;
int i=0,j,k,h,g=0,l=0;
int result=1;
int search_no;
char search_name[20] = { 0 };
while(1) {
printf("_________________________________________________________________\n");
printf("\n\t\t\t1、按学号查找\n");
printf("\t\t\t2、按姓名查找\n");
printf("\t\t\t退出当前菜单请输入-1\n");
printf("______________________________________________________________\n");
printf("\n\t\t\t请选择相应的选项:");
scanf("%d",&op);
system("cls");
if(op==-1)
return welcome() ;
if (op==1)
{
printf("\n\t\t请输入要查找的学号:");
scanf("%d",&search_no);
if(search_no<0)
{printf("输入的学号有误,请重新输入");
scanf("%d",&search_no);}
else{
for (i=0;i<n;i++)
{
if(stu[i].no==search_no)
break;
}
if (i >= n)
{ system("cls");
printf("\n\t\t未查询到相关信息!");
}
else{
system("cls");
printf("_____________________________________________________________________\n");
printf("\n\t\t学号");
printf("\t\t姓名");
for(j=0;j<m;j++)
{printf("\t\t%s", stu[i].grade[j].name);
}
printf("_______________________________________________________________________\n");
printf("\n\t\t%ld", stu[i].no);
printf("\t\t%s", stu[i].name);
for(k=0;k<m;k++)
{printf("\t\t%d",stu[i].grade[k].score);}
printf("________________________________________________________________________\n");
}
}
}
if (op==2)
{
printf("\n\t\t请输入要查找的姓名:");
scanf("%s",search_name);
while ( l < n)
{ for(h=0;h<20;h++)
{if(search_name[h]==stu[l].name[h])
g++;
if(search_name[h]!=stu[l].name[h])break;
}
if(g!=h)
l++;}
if (l >= n)
{ system("cls");
printf("\n\t\t未查询到相关信息!");
}
else{
system("cls");
printf("_____________________________________________________________________\n");
printf("\n\t\t学号");
printf("\t\t姓名");
for(j=0;j<m;j++)
{printf("\t\t%s", stu[l].grade[j].name);
}
printf("_______________________________________________________________________\n");
printf("\n\t\t%ld", stu[l].no);
printf("\t\t%s", stu[l].name);
for(k=0;k<m;k++)
{printf("\t\t%d",stu[l].grade[k].score);}
printf("________________________________________________________________________\n");
}
}
}
}
void del(struct student *stu)
{
int i,num,j=0;
printf("请输入要删除的学生的学号");
scanf("%d",&num);
for(i=0;i<n;i++)
{
if(stu[i].no==num)
j=i;
}
if(j==0) printf("没有该学生的信息!");
else for(i=j;i<n-1;i++)
stu[i]=stu[i+1];
printf("您已删除成功!\n");
}
void average(struct course *cou,struct student *stu)
{
int i,j;
double sum=0,ave;
for(i=0;i<m;i++)
{
printf("%s\n",cou[i].name);
for(j=0;j<n;j++)
{
sum=sum+stu[i].grade[j].score;
}
ave=sum/j;
printf("%f",ave);
}
}
void allgrade(struct course *cou,struct student *stu)
{
int i,j,k,l;
double sum,t;
double ave[]={0};
printf("姓名 学号 平均成绩");
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
{
printf(" %s",cou[j].name);
sum=sum+stu[i].grade[j].score;
}
printf("\n");
ave[i]=sum/j;
}
for(i=0;i<n-1;i++)
{
k=i;
for(l=i+1;l<n;l++)
if(ave[k]<ave[l]) k=l;
if(k!=i)
{
t=ave[i];ave[i]=ave[k];ave[k]=t;
}
}
for(i=0;i<n;i++)
{
printf("%s %d %f ",stu[i].name,stu[i].no,ave[i]);
for(j=0;j<m;j++)
printf("%f ",stu[i].grade[j]);
printf("\n");
}
}
void sele(struct student *stu,struct course *cou)
{
int i,j,max;
for(i=0;i<m;i++)
{
max=0;
for(j=0;j<n;j++)
{
if(stu[j].grade[i].score > stu[max].grade[i].score)
max=j;
}
printf("%s\t%s\t%d\t%d\n",cou[i],stu[max].name,stu[max].no,stu[max].grade[i]);
}
}
void print()
{ int x;
void sele(struct student *stu,struct course *cou);
void average(struct course *cou,struct student *stu);
void allgrade(struct course *cou,struct student *stu);
printf("\t***********************************************************\n");
printf("\t 1.单科最高成绩打印 \n");
printf("\t 2.单科平均成绩打印 \n");
printf("\t 3.所有学生成绩打印 \n");
printf("\t***********************************************************\n");
printf("请输入所选功能序号:");
scanf("%d",&x);
switch(x)
{
case 1:sele(&stu[n],&cou[m]);break;
case 2:average(&cou[m],&stu[n]);break;
case 3:allgrade(&cou[m],&stu[n]);break;
}
}
void show()
{
FILE *fp;
int i,j,k=0;
fp=fopen("data1.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
k++;
}
fclose(fp);
printf("学号 姓名 成绩\t\n");
for(i=0;i<k;i++)
{for(j=0;j<m;j++)
printf(FORMAT,DATA);
}
}
void modify(struct course *cou,struct student *stu)
{
FILE *fp;
int i=0,j=0,m=0,snum;
if((fp=fopen("data1.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m] ,LEN,1,fp)==1)
m++;
if(m==0)
{
printf("文件中没有记录!\n");
fclose(fp);
return;
}
show();
printf("请输入要修改的学生学号: ");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].no)
{
printf("找到了这名学生,可以修改他的信息!\n");
printf("姓名:");
scanf("%s",stu[i].name);
printf("成绩:");
scanf("%lf",&stu[i].grade);
printf("修改成功!");
if((fp=fopen("data1.txt","wb"))==NULL)
{
printf("can not open\n");
return;
}
for(j=0;j<m;j++)
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{
printf("can not save!");
getchar();
}
fclose(fp);
break;
}
if(i==m)
printf("没有找到这名学生!\n");
}
int main()//主函数
{
int oip,choice;
enter();
while(2){
welcome();
scanf("%d",&choice);
switch (choice){
case 1:newput(&stu[n]);break;
case 2:del(&stu[n]);break;
case 3:modify(&cou[m],&stu[n]);break;
case 4:find(&stu[n]); break;
case 5:print();break;
}
scanf("%d",&oip);
if(oip==0) break;
}
return 0;
}