//根据楼主给出的 结构体struct student以及函数wirte(),稍作修改.
//假设每个学生选修的课程数目不一定相同,课程名称也不一定相同.
//以下是修改后的测试代码.
#include
#include
#include
typedef struct student
{
//原代码char ke[20];
char ke[20][15]; //可存放20个课程名称,每个名称长度最大14
char xuehao[15]; //学号 (学号也可以用int整数型,或者long型)
char name[15]; //姓名
int chengji[21]; //chengji[20]用于保存总成绩
int keQty; //实际选修了多少个课程
float average; //平均分
} AO;
AO xx[50];
//输入数据
int testInput()
{
int n; //实际输入多少个学生
int m; //选修多少个课程
int i;
n=3;
strcpy(xx[0].xuehao,"1001");
strcpy(xx[0].name,"张一");
xx[0].keQty=1;
strcpy(xx[0].ke[0],"math");
xx[0].chengji[0]=90;
m=xx[0].keQty;
for(i=0;i {
xx[0].chengji[20] += xx[0].chengji[i];
}
xx[0].average = 1.0 * xx[0].chengji[20] / m;
strcpy(xx[1].xuehao,"1002");
strcpy(xx[1].name,"李二");
xx[1].keQty=3;
strcpy(xx[1].ke[0],"math");
strcpy(xx[1].ke[1],"english");
strcpy(xx[1].ke[2],"C");
xx[1].chengji[0]=81;
xx[1].chengji[1]=82;
xx[1].chengji[2]=87;
m=xx[1].keQty;
for(i=0;i {
xx[1].chengji[20] += xx[1].chengji[i];
}
xx[1].average = 1.0 * xx[1].chengji[20] / m;
strcpy(xx[2].xuehao,"1003");
strcpy(xx[2].name,"王三");
xx[2].keQty=2;
strcpy(xx[2].ke[0],"math");
strcpy(xx[2].ke[1],"english");
xx[2].chengji[0]=85;
xx[2].chengji[1]=86;
m=xx[2].keQty;
for(i=0;i {
xx[2].chengji[20] += xx[2].chengji[i];
}
xx[2].average = 1.0 * xx[2].chengji[20] / m;
printf("\n录入成功.\n");
return n;
}
//写入文件
void writeFile(AO data[],int n)
{
FILE *fp;
int i;
int ret;
fp=fopen("save.txt","w");
if(fp == NULL)
{
printf("\n打开文件错误.\n");
exit(1);
}
for(i=0;i {
ret=fwrite(&data[i],sizeof(AO),1,fp);
if(ret != 1)
{
printf("\n写入文件时出现错误.\n");
break;
}
}
fclose(fp);
printf("\n写入文件 save.txt 结束.\n");
}
//读取文件
void readFile()
{
AO testData[50]; //临时的结构体数组,只用于测试
FILE *fp;
int n;
int m;
int i,j;
int ret;
fp=fopen("save.txt","r");
if(fp == NULL)
{
printf("\n打开文件错误.\n");
exit(1);
}
n=0;
//函数feof(),检测是否遇到文件结束符,
//如果文件结束,则返回非1值,否则返回0
while( !feof(fp) )
{
ret=fread(&testData[n],sizeof(AO),1,fp);
if(ret == 1)
{
n++;
}
}
fclose(fp); //关闭文件
printf("\n读取文件结束,得到 %d 条记录.\n\n",n);
for(i=0;i {
printf("第%d个学生\n",i+1);
printf("学号: %s\n",testData[i].xuehao);
printf("姓名: %s\n",testData[i].name);
m=testData[i].keQty;
printf("选修%d个课程\n",m);
for(j=0;j {
printf("%s: %d\n",testData[i].ke[j],testData[i].chengji[j]);
}
printf("总成绩: %d\n",testData[i].chengji[20]);
printf("平均分: %0.1f\n",testData[i].average);
printf("\n");
}
}
int main(void)
{
int n;
n=testInput(); //输入数据
writeFile(xx,n); //写入文件
readFile(); //读取文件
return 0;
}