我正在编学生成绩管理系统。。明天就要交了。求高手调试解决一下、、、小弟非常感谢
RT。。。明天我们就要交了。。。但是遇到调试上很大困难。。。求高手帮忙解决一下小弟的问题。。。我也不知具体问题出在哪#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int imax=0;
struct student
{ char num[10];
char name[15];
int chineseg;
int mathg;
int englishg;
int comg;
int total;
float ave;
int rank;}
stu[50];
void menu()
{printf("---------------欢迎来到学生成绩管理系统------------\n");
printf("*************请输入选项: 退出请按0************\n");
printf("***************************************************\n");
printf("**** 1 输入数据 2 添加数据 *****\n");
printf("**** 3 查找数据 4 修改数据 *****\n");
printf("**** 5 删除数据 6 输出数据 *****\n");
printf("**** 7 处理数据 8 保存数据 *****\n");
printf("**** 9 读取数据 10 统计数据 *****\n");
printf("***************************************************\n");
}
void input()
{ int i,im;
imax=im;
char num[10],name[15];
printf("请输入学生人数:");
scanf("%d",&im);
if(im>0&&im<=50)
{for (i=0;i<=im-1;i++)
{do {printf("输入学号:\t");scanf("%s",num);}while(strlen(num)>=10);
strcpy(stu[i].num,num);
do {printf("输入姓名:\t");scanf("%s",name);}while(strlen(name)>=15);
strcpy(stu[i].name,name);
do { printf("请输入语文成绩:\t"); scanf("%d",&stu[i].chineseg);}while(stu[i].chineseg>100||stu[i].chineseg<0);
do { printf("请输入数学成绩:\t"); scanf("%d",&stu[i].mathg);}while(stu[i].mathg>100||stu[i].mathg<0);
do { printf("请输入英语成绩:\t"); scanf("%d",&stu[i].englishg);}while(stu[i].englishg>100||stu[i].englishg<0);
do { printf("请输入计算机成绩:\t"); scanf("%d",stu[i].comg);}while(stu[i].comg>100||stu[i].comg<0);
stu[i].total=stu[i].chineseg+stu[i].mathg +stu[i].englishg +stu[i].comg;
stu[i].ave=stu[i].total/4;}
}
else printf("输入错误!");
return;
}
void insert()
{ int me;
do
{ if(imax>=50)
{ printf("空间不足!\n");
return;
}
imax++;
printf("请按顺序输入 学号 姓名 语文成绩 数学成绩 英语成绩 计算机成绩\n");
scanf("%s%s%d%d%d%d%d%d%",stu[imax-1].num,stu[imax-1].name,&stu[imax-1].chineseg,&stu[imax-1].mathg,&stu[imax-1].englishg,&stu[imax-1].comg);
if(imax>=50) { printf("\n空间不足!\n"); break; }
printf("输入0返回菜单\n");
printf("输入1继续添加\n");
scanf("%d",&me);
while(me!=0&&me!=1){ printf("输入错误,请重新输入");continue;}
if(me==0) return;
if(me==1) continue;
}while(1);
}
void del()
{
int i,n,j,h=0,g=0,k; char name[15]; char num[10];
do
{
if (imax==0) {printf("请输入数据!\n"); return; }
printf("1.按姓名删除\n");
printf("2.按学号删除\n");
printf("请输入要选择的序号:\n");
scanf("%d",&n);
if(n!=1&&n!=2)
printf("输入有误,请再输入");
else if(n==2)
{
printf("请输入学号:");
scanf("%s",num);
for(i=0;i<=imax-1;i++)
{ if(strcmp(stu[i].num,num)==0)
for (j=i;j<=imax-1;j++)
{ stu[j].chineseg=stu[j+1].chineseg;
stu[j].mathg=stu[j+1].mathg;
stu[j].englishg=stu[j+1].englishg;
stu[j].comg=stu[j+1].comg;
stu[j].total=stu[j+1].total;
stu[j].ave=stu[j+1].ave;
stu[j].rank=stu[j+1].rank;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
}
h=1;
}
imax--;
if(h==0) printf("没有该学生信息!");
}
else if(n==1)
{ printf("请输入学生姓名:");
scanf("%s",name);
for(i=0;i<=imax-1;i++)
{ if(strcmp(name,stu[i].name)==0)
for (j=i;j<=imax-1;j++)
{ stu[j].chineseg=stu[j+1].chineseg;
stu[j].mathg=stu[j+1].mathg;
stu[j].englishg=stu[j+1].englishg;
stu[j].comg=stu[j+1].comg;
stu[j].total=stu[j+1].total;
stu[j].ave=stu[j+1].ave;
stu[j].rank=stu[j+1].rank;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
}
g=1;
}
imax--;
if(g==0)
printf("没有该学生信息!");
}
printf("输入0返回菜单,输入1继续查找");
scanf("%d",&k);
while(k!=0&&k!=1)
printf("输入错误,请重新输入");
if(k==1)
continue;
if(k==0)
break;
}while(1);
}
void count()
{
int i,j,m;
for(i=0;i<=imax-1;i++)
{
stu[i].total=stu[i].chineseg+stu[i].mathg +stu[i].englishg +stu[i].comg;
stu[i].ave=stu[i].total/4;
stu[i].rank=1;
for(j=0;j<=imax-1;j++)
{
if(stu[i].total<stu[j].total) stu[i].rank++;
}
}
}
void modify()
{ int i=0,c=-1,choice,flag=0,m;
char num[10];
char name[15];
printf("0用学号查找");
printf("1用姓名查找\n");
scanf("%d",&m);
if (m!=0&&m!=1) printf("输入错误!\n");
else if(m==0) { printf("\n输入要修改的学生学号:");
scanf("%s",num);
for(i=0;i<=imax-1;i++)
{ if(strcmp(stu[i].num,num)==0) c=i;break;}
if(c!=-1){
printf("您要修改哪一项?\n");
printf("\n 1.学号(%s) 2.姓名(%s) 3.语文成绩(%d) 4.数学成绩(%d) 5.英语成绩(%d) 6.计算机成绩(%d) \n",stu[i].num,stu[i].name,stu[i].chineseg,stu[i].mathg ,stu[i].englishg ,stu[i].comg );
printf("\n ***********************请选择序号:");
scanf("%d",&choice);
if (!(choice>=1 && choice<=6)) {printf("请重新输入!") ; return;}
switch(choice)
{ case 1:printf("\n输入修改后的学号:");
scanf("%s",stu[i].num);break;
case 2:printf("\n输入修改后的姓名:");
scanf("%s",stu[i].name);break;
case 3:printf("\n输入修改后的语文成绩:");
scanf("%d",&stu[i].chineseg);break;
case 4:printf("\n输入修改后的数学成绩:");
scanf("%d",&stu[i].mathg);break;
case 5:printf("\n输入修改后的英语成绩:");
scanf("%d",&stu[i].englishg);break;
case 6:printf("\n输入修改后的计算机成绩:");
scanf("%d",&stu[i].comg);break;
default: return; }
}
else { printf("\n 该学生信息不存在!"); return; } }
else if(m==1) { printf("\n输入要修改的学生姓名:"); scanf("%s",name);
for(i=0;i<=imax-1;i++)
{ if(strcmp(stu[i].name,name)==0) c=i;break;}
if(c!=-1){
printf("\n您要修改哪一项?\n");
printf("\n 1.学号(%s) 2.姓名(%s) 3.语文成绩(%d) 4.数学成绩(%d) 5.英语成绩(%d) 6.计算机成绩(%d) \n",stu[i].num,stu[i].name,stu[i].chineseg,stu[i].mathg ,stu[i].englishg ,stu[i].comg );
printf("\n ***********************请选择序号:");
scanf("%d",&choice);
if (!(choice>=1 && choice<=6)) {printf("请重新输入!") ; return;}
switch(choice)
{ case 1:printf("\n输入修改后的学号:");
scanf("%s",&stu[i].num);break;
case 2:printf("\n输入修改后的姓名:");
scanf("%s",&stu[i].name);break;
case 3:printf("\n输入修改后的语文成绩:");
scanf("%d",&stu[i].chineseg);break;
case 4:printf("\n输入修改后的数学成绩:");
scanf("%d",&stu[i].mathg);break;
case 5:printf("\n输入修改后的英语成绩:");
scanf("%d",&stu[i].englishg);break;
case 6:printf("\n输入修改后的计算机成绩:");
scanf("%d",&stu[i].comg);break;
default: return; }
}
else { printf("\n 该学生信息不存在!"); return; } }
}
void search()
{
int i,i1,j1,h=0,g=0,m;
char name[15];
char num[10];
if(imax==0)
printf("请先输入学生信息\n");
while(i!=0)
{ printf("0用学号查找\t");
printf("1用姓名查找\n");
scanf("%d",&i1);
if(i1!=0&&i1!=1)
printf("输入错误\n");
else if(i1==0)
{ printf("请输入学生学号");
scanf("%s",num);
for(j1=0;j1<=imax-1;j1++)
if(strcmp(num,stu[j1].num)==0)
{ printf("学号 姓名 语文成绩 数学成绩 英语成绩 计算机成绩 总分 平均分 排名\n ");
printf("%-15s%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%\n",stu[j1].num,stu[j1].name,stu[j1].chineseg,stu[j1].mathg,stu[j1].englishg,stu[j1].comg,stu[j1].total,stu[j1].ave,stu[j1].rank);
g=1;
}
if(g==0)
printf("无此学生信息\n");
}
else if(i1==1)
{ printf("请输入学生姓名");
scanf("%s",name);
for(j1=0;j1<=imax-1;j1++)
if(strcmp(name,stu[j1].name)==0)
{ printf("学号 姓名 语文成绩 数学成绩 英语成绩 计算机成绩 总分 平均分 排名\n ");
printf("%-15s%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%\n",stu[j1].num,stu[j1].name,stu[j1].chineseg,stu[j1].mathg,stu[j1].englishg,stu[j1].comg,stu[j1].total,stu[j1].ave,stu[j1].rank);
h=1;
}
if(h==0)
printf("无此学生信息\n");
}
printf("输入0返回菜单,输入1继续查找");
while(scanf("%d",&m)&&m!=0&&m!=1)
printf("输入错误,请重新输入");
if(m==1)
continue;
if(m==0)
break;
}
}
void output(void)
{
int i;
for(i=0;i<=imax-1;i++)
{
printf("%-12s%-10s%-6s%-6s%-6s%-6s%-6s%-7s%-7s\n","学号","姓名","语文","数学","英语","计算机""总分","平均分","排名");
printf("%-12s%-10s%-6d%-6d%-6d%-6d%-7.2f%-2d\n",stu[i].num,stu[i].name,stu[i].chineseg,stu[i].mathg,stu[i].englishg,stu[i].comg,stu[i].total,stu[i].ave,stu[i].rank);
}
}
void sort()
{
int i,j,c,m,e,co,ci,mi,ei,coi;
c=0;
m=0;
e=0;
co=0;
ci=0;
mi=0;
ei=0;
coi=0;
printf("语文最高分为:");
for(i=0;i<=imax-1;i++)
{
for(j=0;j<=imax-1;j++)
{
if(stu[i].chineseg<stu[j].chineseg) ci=j;
}
}
printf("%d\n",stu[ci].chineseg);
printf("数学最高分为:");
for(i=0;i<=imax-1;i++)
{
for(j=0;j<=imax-1;j++)
{
if(stu[i].mathg<stu[j].mathg) mi=j;
}
}
printf("%d\n",stu[mi].mathg);
printf("英语最高分为:");
for(i=0;i<=imax-1;i++)
{
for(j=0;j<=imax-1;j++)
{
if(stu[i].englishg<stu[j].englishg) ei=j;
}
}
printf("%d\n",stu[ei].englishg);
printf("计算机最高分为:");
for(i=0;i<=imax-1;i++)
{
for(j=0;j<=imax-1;j++)
{
if(stu[i].comg<stu[j].comg) coi=j;
}
}
printf("%d\n",stu[coi].comg);
printf("语文不及格的有:");
for(i=0;i<=imax-1;i++)
{
if(stu[i].chineseg<60) {printf("%s(%d分)",stu[i].name,stu[i].chineseg); c++;}
}
printf("共%d人\n",c);
printf("数学不及格的有:");
for(i=0;i<=imax-1;i++)
{
if(stu[i].mathg<60) {printf("%s(%d分)",stu[i].name,stu[i].mathg); m++;}
}
printf("共%d人\n",m);
printf("英语不及格的有:");
for(i=0;i<=imax-1;i++)
{
if(stu[i].englishg<60) {printf("%s(%d分)",stu[i].name,stu[i].englishg); e++;}
}
printf("共%d人\n",e);
printf("计算机不及格的有:");
for(i=0;i<=imax-1;i++)
{
if(stu[i].comg<60) {printf("%s(%d分)",stu[i].name,stu[i].comg); co++;}
}
printf("共%d人\n",co);
i=0;
for(j=1;j<=imax;j++)
{
for(i=0;i<=imax-1;i++)
if(stu[i].rank==j)
{
printf("%-12s%-10s%-6s%-6s%-6s%-6s%-6s%-7s%-7s\n","学号","姓名","语文","数学","英语","计算机","总分","平均分","排名");
printf("%-12s%-10s%-6d%-6d%-6d%-6d%-6d%-7.2f%-2d\n",stu[i].num,stu[i].name,stu[i].chineseg,stu[i].mathg,stu[i].englishg,stu[i].total,stu[i].ave,stu[i].rank);
}
i++;
}
}
void save()
{
int i;
FILE *fp;
if((fp=fopen("student.data","w"))==NULL)
{
printf("Can't open file");
return;
}
for( i=0;i<=imax-1;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)==0) printf("error");
fclose(fp);
}
int inputfromfile()
{
int i;
FILE *fp;
if((fp=fopen("student.data","r"))==NULL)
{
printf("Can't open file");
return 0;
}
for( i=0;i<=imax-1;i++)
if(fread(&stu[i],sizeof(struct student),1,fp)==0) printf("error\n");
fclose(fp);
}
int main()
{int i;
i=0;
do
{ int select;
menu();
scanf("%d",&select);
switch(select)
{ case 0:printf("OK\n");exit(0);break;
case 1: input();count(); break;
case 2: insert();break;
case 3: search();break;
case 4: modify();count();break;
case 5: del();break;
case 6: output();break;
case 7: sort();break;
case 8: save();break;
case 9: inputfromfile();break;
case 10: count();break;
default:break;
}
}while(1);
}