最近课程设计,这个程序,编出来就是有问题
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define size 7
#define null 0
int score ;
typedef struct student
{ int number ;
char name [10];
int math;
int english;
int computer;
int average;
}stu;
stu stud[size];
typedef struct std_list
{
stu data;
struct std_list *next;
}list;
/*完成将数据写到磁盘文件input*/
void save()
{
FILE *fp;
int i;
if ( (fp=fopen ("input.dat","wb"))==null)
{ printf("can't open file!\n");
return ;
}
for (i=0;i<size; i++)
if (fwrite(&stud[i],sizeof( struct student),1, fp)!=1)
printf ("file write error!\n");
fclose (fp);
}
/* 键盘数据输入*/
void data_in( )
{ int i;
for (i=0;i<size;i++)
scanf( "%d%s%d%d%d",&stud[i].number,stud[i].name,&stud[i].math,&stud[i].english,&stud[i].computer);
printf("完成键盘输入学生成绩!\n ");
}
/*数据显示输出*/
void data_out ()
{ int i;
FILE *fp;
fp=fopen("input.dat","rb");
for(i=0;i<size;i++)
{fread(&stud[i],sizeof(struct student),1,fp);
printf("%4d %-4s %4d %4d %4d %4d\n",stud[i].number,stud[i].name,stud[i].math,stud[i].english,stud[i].computer);
}
printf ("input.dat 文件数据显示!\n");
}
list *func()
{
FILE *fp;
list *head=null,*p=null,*r=null;
int i;
if((fp=fopen("input.dat","rb"))==null)
{printf ("can't open input.dat !\n");
return 0;
}
while (1)
{
if (fread(&stud[i],sizeof(stud),1,fp)==-1) /*将文件记录读到数组中*/
break;
i++;
}
fclose(fp);
score=i;
return 0;
}
sort_math(int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for (j=i-1;j>=0&&temp.math>stud[j].math;j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
printf("按数学成绩排序的文件- math.dat\n");
save (); // 生成数学的排序成绩的文件
}
sort_engl(int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for(j=i-1;j>=0 && temp.english > stud[j].english; j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
printf("按英语成绩排序的文件- English.dat\n");
save(); // 生成英语的排序成绩的文件
}
sort_comp( int recds_num)
{int i,j;
stu temp;
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp.number=stud[i].number;
strcpy(temp.name,stud[i].name);
temp.math=stud[i].math;
temp.english=stud[i].english;
temp.computer=stud[i].computer;
for(j=i-1;j>=0&&temp.computer>stud[j].computer; j--)
stud[j+1]=stud[j];
stud[j+1]=temp;
}
printf("按计算机成绩排序的文件- Computer.dat\n");
save(); // 生成计算机的排序成绩的文件
}
aver_sort( int recds_num) /* 按平均成绩排序*/
{int t,i,j;
int sum=0;
stu temp;
for (t=1;t<recds_num;t++) /*求平均*/
{
sum=stud[t].math+stud[t].english+stud[t].computer;
sum=sum/3;
stud[t].average=sum;
}
for (i=1;i<recds_num;i++) /*插入排序*/
{
temp =stud[i];
for (j=i-1;j>=0&&temp.average > stud[j].average;j--)
stud[j+1] =stud [j];
stud[j+1]=temp;
}
}
//各门课程求平均
aver_math(int recds_num) /*按数学成绩求平均,最大值,最小值*/
{ int i,max,min;
int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1;i<recds_num;i++)
sum=sum+stud[i].math;
sum=sum/recds_num;
max=stud[1].math;
min=stud[1].math;
for (i=1; i<recds_num ; i++)
{ if( max< stud[i].math)
max= stud[i].math;
if (min > stud[i].math)
min = stud[i].math;
if (stud[i].math<60)
cout1++;
if (stud[i].math>60&&stud[i].math<=69)
cout2++;
if (stud[i].math>70&&stud[i].math<=79)
cout3++;
if (stud[i].math>80&&stud[i].math<=89)
cout4++;
if (stud[i].math>90)
cout5++;
}
printf("数学成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d", cout5);
}
aver_english( int recds_num) /* 按英语成绩求平均*/
{ int i,max,min;
int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1; i<recds_num;i++)
sum=sum+stud[i].english;
sum=sum/ recds_num;
max=stud[1].english;
min=stud[1].english;
for (i=1; i<recds_num;i++)
{ if( max< stud[i].english)
max= stud[i].english;
if (min > stud[i].english)
min = stud[i].english;
if (stud[i].english<60)
cout1++;
if (stud[i].english>60&&stud[i].english<=69)
cout2++;
if (stud[i].english>70&&stud[i].english<=79)
cout3++;
if (stud[i].english>80&&stud[i].english<=89)
cout4++;
if (stud[i].english>90)
cout5++;
}
printf("英语成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d", cout5);
}
aver_computer( int recds_num) /* 按计算机成绩求平均*/
{ int i,max,min;
int sum=0,cout1=0,cout2=0,cout3=0,cout4=0,cout5=0;
for (i=1; i<recds_num ; i++ )
sum=sum+stud[i].computer;
sum=sum/recds_num;
max=stud[1].computer;
min=stud[1].computer;
for (i=1; i<recds_num;i++ )
{ if( max< stud[i].computer)
max= stud[i].computer;
if (min > stud[i].computer)
min = stud[i].computer;
if (stud[i].computer<60)
cout1++;
if (stud[i].computer>60&&stud[i].computer<=69)
cout2++;
if (stud[i].computer>70&&stud[i].computer<=79)
cout3++;
if (stud[i].computer>80&&stud[i].computer<=89)
cout4++;
if (stud[i].computer>90 )
cout5++;
}
printf("计算机成绩统计情况:");
printf("平均成绩: %d", sum);
printf("最高分:%d",max);
printf("最低分:%d",min);
printf("不及格人数: %d", cout1);
printf("60~69分人数:%d", cout2);
printf("70~79分人数: %d", cout3);
printf("80~89分人数:%d",cout4);
printf("90分以上人数: %d",cout5);
}
search(int num,char *name1,int recds_num ) /*按姓名或学号查询*/
{ int i;
for(i=1;i<recds_num;i++)
{
if ((num==stud[i].number)||(name1==stud[i].name))
printf("学号: %d 数学:%d 英语:%d 计算机:%d\n", stud[i].number,stud[i].math,stud[i].english,stud[i].computer);
else printf("无此人!");
}
}
main ()
{ int a;
char str[100];
char c;
data_in();
save();
data_out(7);
func();
printf("各门课程成绩排序!\n");
sort_math(7);
sort_engl(7);
sort_comp(7);
printf("求出每个学生的平均成绩,并排序输出如下:\n");
aver_sort(7);
data_out(7);
printf (" 显示各门课程成绩统计:\n");
aver_math(7);
aver_english(7);
aver_computer(7) ;
printf("请输入学号或姓名:\n");
while (1)
{
scanf("%d%s",&a, &str);
search (a,str,7);
printf("是否继续查询?(Y/N)\n");
scanf("%s\n",&c);
if(c=='y'|| c=='Y')
continue;
else
if( c=='n'||c=='N')
break;
}
}
谢谢了,明天交报告了。