我是小白,请各位大神看看这个程序哪里有错误,改了很久都不对
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define MAXN 100 //一个班最多的人数
#define MAXM 10 //最多课程门数
void input();
void search();
void sort();
void save();
void load();
void print();
main()
{
//欢迎首界面
char a,b;
char subject[MAXM][12]; //保存所有课程名称
char number[MAXN][10]; //保存全班学号
char name[MAXN][20]; //保存全班姓名
float score[MAXN][MAXM]; //保存全班所有课程成绩
float sum[MAXN]; //保存全班总成绩
int n,m; //n,m保存全班实际人数和课程数
do
{
scanf("%c",&a);
if(a!=10) //a为课程
{
printf(" 您输入有误,请重新输入,谢谢!!!\n");
scanf("%c",&b);
}
b=a;
}
while(b!=10);
system("cls");
//功能选择界面
int select;
while(1)
{
system("cls");
printf(" ***********欢迎进入XX X学院学生管理系统***********\n");
printf("\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(" 8.学生成绩读取\n");
printf(" 9.学生成绩报表打印\n");
printf(" 0.退出系统\n");
printf("\n");
printf("\n");
printf("\n 请输入您的选择编号,回车键确定:\n");
printf(" ------------------------------------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:input();break;
case 2:search();break;
case 6:sort();break;
case 7:save();break;
case 8:load();break;
case 9:print();break;
case 0:printf(" 谢谢您的使用。\n");
}
}
}
//输入成绩模块
void input()
{
system("cls");
int i,j,n,m;
char subject[j];
char number[i];
char name[i];
char sum[i];
printf(" ***********新建学生成绩信息***********\n");
printf("\n");
printf("\n");
printf("\n 请输入全班人数:");
scanf("%d",&n); //n为学生人数
printf("\n 请输入课程门数:");
scanf("%d",&m); //m为课程门数
printf("\n 请输入%d门课程名称\n",m);
for(j=0;j<m;j++)
{
printf("\n 第%d门课程名称:",j+1);
scanf("%s",subject[j]);
}
printf("\n 第%d个学生数据\n",n);
for(i=0;i<n;i++)
{
printf("\n 请输入第%d个人的数据\n",i+1);
printf("\n 学号:");
scanf("%s",number[i]);
printf("\n 姓名:");
scanf("%s",name[i]);
printf("\n %d门课程的成绩:\n",m);
sum[i]=0;
//边输入边统计总成绩
char score[i][j];
for(j=0;j<m;j++)
{
printf(" %s成绩:",subject[j]);
scanf(" %f成绩",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
}
//查询成绩模块
void search()
{
long char students[index].number;//147行
char students[index].name;
system("cls");
int j;
int search1();
int search2();
int select,index;
printf("\n ***********查询学生成绩信息***********\n");
while(1)
{
printf("\n 1.按学号查询\n");
printf(" 2.按姓名查询\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:");
printf("\n ---------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:index=search1(); break;
case 2:index=search2();break;
case 0:return;
}
if(index!=-1)
{
printf("\n 学号 :%s\n",students[index].number); //怎么定义
printf("\n 姓名 :%s\n",students[index].name);
for(j=0;j<m;j++)
{
printf("\n %s成绩 :",subject[j]);
printf("%.2f\n",score[index][j]);
}
printf("\n 总成绩 :%.2f\n",sum[index]);
printf("\n 平均成绩:%.2f\n",sum[index]/m);
printf("\n 您还可以继续查询其他学生成绩信息:\n");
}
else printf("\n 没有这个同学。\n");
}
}
//按学号查询模块
int search1()
{
system("cls");
int i;
char s_number[10];
printf(" 请输入要查询的学号:\n");
scanf("%s",s_number);
printf(" 该同学的信息如下:\n");
for(i=0;i<n;i++)
if(strcmp(number[i],s_number)==0)
break;
if(i<n)
return i;
else return -1;
}
//按姓名查询模块
int search2()
{
system("cls");
int i;
char s_name[10];
printf(" 请输入要查询的姓名:");
scanf("%s",s_name);
for(i=0;i<n;i++)
if(strcmp(name[i],s_name)==0)
break;
if(i<n)
return i;
else return -1;
}
//排名模块
void sort()
{
system("cls");
void sort1();
void sort2();
void sort3();
int select;
while(1)
{
printf(" ***********学生成绩排名信息***********\n");
printf("\n 1.按学号排名\n");
printf(" 2.按姓名排名\n");
printf(" 3.按总成绩排名\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:\n");
printf(" --------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:sort1();break;
case 2:sort2();break;
case 3:sort();break;
case 0:return;
}
}
}
//按学号排名模块
void sort1()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(number[i],number[k])<0)
k=j;
if (k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//按姓名排名模块
void sort2()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[j],name[k])<0)
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//按总成绩排名模块
void sort3()
{
system("cls");
int i,j,k;
char x_number[10];
char x_name[20];
float x;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(sum[j]<sum[k])
k=j;
if(k!=i)
{
strcpy(x_number,number[i]);
strcpy(number[i],number[k]);
strcpy(number[k],x_number);
strcpy(x_name,name[i]);
strcpy(name[i],name[k]);
strcpy(name[k],x_name);
for(j=0;j<m;j++)
{
x=score[i][j];
score[i][j]=score[k][j];
score[k][j]=x;
}
x=sum[i];sum[i]=sum[k];sum[k]=x;
}
}
printf("排序完毕.\n");
}
//保存成绩模块
void save()
{
system("cls");
FILE *fp;
char filename[20];
int i,j;
printf(" 请输入文件名: ");
scanf("%s",filename);
if((fp=fopen(filename, "w"))==NULL)
{
printf(" 打开文件失败.\n");
return;
}
fprintf(fp, "%d %d",n,m);
for(j=0;j<m;j++)
fprintf(fp, "%s",subject[j]);
for(i=0;i<n;i++)
{
fprintf(fp, "%s %s",number[i],name[i]);
for(j=0;j<m;j++)
fprintf(fp, "%5.1f",score[i][j]);
}
fclose(fp);
printf(" 保存完毕.\n");
}
// 提取成绩模块
void load( )
{
system("cls");
FILE * fp;
char filename[20];
int i,j;
printf (" 请输入文件名:");
scanf("%s",filename);
if ((fp=fopen(filename,"r"))==NULL)
{
printf(" 文件不存在.\n");
return;
}
fscanf(fp,"%d%d",&n,&m);
for(j=0;j<m;j++)
fscanf(fp,"%s",subject[j]);
for(i=0;i<n;i++)
{
fscanf(fp,"%s%s",number[i],name[i]);
sum[i]=0;
for(j=0;j<m;j++)
{
fscanf(fp,"%f",&score[i][j]);
sum[i]=sum[i]+score[i][j];
}
}
fclose(fp);
printf(" 提取完毕.\n");
}
//打印成绩报表模块
void print()
{
system("cls");
void print1();
void print2();
int select;
printf(" ***********打印学生成绩信息***********\n");
printf("\n");
printf("\n");
printf(" 1.屏幕显示报表\n");
printf(" 2.打印机打印报表\n");
printf(" 0.返回\n");
printf("\n 请输入您的选择编号:");
printf("\n --------------------------------------\n");
scanf("%d",&select);
switch(select)
{
case 1:print1();break;
case 2:print2();break;
case 0:return;
}
}
// 屏幕显示报表模块
void print1()
{
system("cls");
int i,j;
printf(" 成绩总表\n");
printf(" 学号姓名:");
for (j=0;j<m;j++)
printf("%10s",subject[j]);
printf(" 总成绩平均成绩\n");
for (i=0;i<n;i++)
{
printf("%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
printf("%6.1f",score[i][j]);
printf("%6.1f %6.2f\n",sum[i],sum[i]/m);
}
printf(" 显示完毕.\n");
}
// 打印机打印报表模块
void print2( )
{
system("cls");
FILE * fp;
int i,j;
printf(" 请准备好打印机,按任意键继续…\n");
scanf("% * c");
if ((fp=fopen("prn","w"))==NULL)
{
printf(" 打印机没有准备好.\n");
return;
}
fprintf(fp," 成绩总表\n");
fprintf(fp," 学号姓名\n");
for (j=0;j<m;j++ )
fprintf(fp,"%10s",subject[j]);
fprintf(fp," 总成绩平均成绩\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%6.1f",score[i][j]);
fprintf(fp,"%8s %8s",number[i],name[i]);
for (j=0;j<m;j++)
fprintf(fp,"%6.1f %6.2f\n",sum[i],sum[i]/m);
}
fclose(fp);
printf(" 打印完毕.\n");
}