C语言程序设计项目化教程(周雅静第3版) 训练及综合练习答案 项目8 训练与作业参考答案.docx
项目8学生成绩文件管理实践训练1 .从键盘上输入小王所在小组10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴,以文本文件方式存入磁盘。参考程序:方法1:ttinc1ude"stdio.h"main()inta103,i,j;charname1010;FI1E*p;定义一个文件指针类型的变量p=fopen(z,aaa.txt","w);打开一个文件用以写入文本文件Printf(请输入10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴M);for(i=0;i<10;i+)Printf("第%d个",i+1);scanf('%s”,namei);for(j=0;j<3;j+)scanf("%d”,&aij);/*将从键盘上读入的数据写入到aaa.txt文件中*/for(i=0;i<10;i+)fprintf(p,s”,namei);for(j=0;j<3;j+)fprintf(p,"%5d”,aij);fc1ose(p);关闭文件)方法2(用结构体)#CIefineN10ttinc1ude"stdio.h"inc1ude"process,h"有exit。函数,所有用此库函数/*定乂结构体*/structworkercharname10;itjg,gj,tb;main()workeremp1oyeeN,*pp;FI1E*fp;inti;pp=emp1oyee;*以写入的形式打开文件aa.txt*/if(fp=fopen(*aa.txt","w")=NU11)printf(打不开文件n");exit(1);Printf("请输入如个员工的姓名、基本工资、岗位津贴、通信补贴n”,N);/*输入10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴*/for(i=0;i<N;i+,pp+)scanf("%s%d%d%d”,pp->name,&pp->jg,&pp->gj,pp->tb);pp=emp1oyee;/*将10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴写入到文件aa.txt中*/for(i=0;i<N;i+,pp÷+)fprintf(fp,%s%d%d%dn*,pp->namefpp->jg,pp->gj,pp->tb);fc1ose(fp);关闭文件2 .从键盘中输入小王所在小组10个员工的信息:姓名、基本工资、岗位津贴、通信补贴,计算每个员工的总收入,然后将此10个员工的姓名、基本工资、岗位津贴、通信补贴、总收入写入到文本文件aa.txt中。参考程序:方法1:#inc1ude*stdio.h"defineN10main()intaN4,i,j,bN4;charnameN10;charnnN10;FI1E*p;定义一个文件指针类型的变量p=fopeC,aa.txt",w");/打开一个文件用以写入文本文件Printf("请输入如个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴n”,N);for(i=0;i<N;i+)Printf("第%d个",i+1);scanf("%s,namei);for(j=0;j<3;j+)scanf("%d”,&aij);ai3=ai0+ai1+ai2;*将从键盘上读入的数据写入到aa.txt文件中*/for(i=0;i<N;i+)fprintf(p,%s”,namei);for(j=0;j<4;j+)fprintf(p,"%5d”,aij);fc1ose(p);关闭文件方法2defineN2#inc1ude*stdio.h*inc1ude"process,h"有exit()函数,所有用此库函数/*定乂结构体*/structworkercharname10;itjg,gj,tb,ss;main()workeremp1oyeeN,*pp;FI1E*fp;inti;pp=emp1oyee;*以写入的形式打开文件aa.txt*/if(fp=fopen(*aa.txt","w")=NU11)printf("打不开文件n");exit(1);Printf("请输入d个员工的姓名、基本工资、岗位津贴、通信补贴n,N);/*输入10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴*/for(i=0;i<N;i+,pp+)scanf("%s%d%d%d”,pp->name,pp->jg,&pp->gj,pp->tb);pp->ss=pp->gj+pp->jg+pp->tb;pp=emp1oyee;/*将10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴写入到文件aa.txt中*/for(i=0;i<N;i+,pp÷+)fprintf(fp,%s%d%d%d%dnz,pp->name,pp->jg,PP->gj,pp->tb,pp->ss);fc1ose(fp);关闭文件3 .将上题中的文本文件aa.txt数据读出,并将读出的数据输出在显示器上。参考程序:方法1:inc1ude"stdio.hdefineN10main()inti,j,bN4;charnnN10;FI1E*p;定义一个文件指针类型的变量p=fopen(,aa.txt","r");打开aaa.txt文件/*从aaa.txt文件中读入数据到数组nn和数组b中*/for(i=0;i<N;i+)fscanf(p,s,nni);for(j=0;j<4;j+)fscanf(p,"%d",&bij);*输出数组b*/for(i=0;i<N;i+)Printf("%s",nni);for(j=0J<4;j+)printf(*%5d*,bij);printf("n");fc1ose(p);方法2(结构体)defineN10inc1ude"stdio.hinc1ude"process.h有exit。函数,所有用此库函数/*定义结构体*/structworkercharname10;itjg,gj,tb,ss;main()workeremp1oyeeN,*pp;FI1E*fp;inti;pp=emp1oyee;*以读入的形式打开文件aa.txt*/if(fp=fopen(z,aa.txt","r")=NU11)printf("打不开文件n");exit(1);/*从文件中将10个员工的工资信息:姓名、基本工资、岗位津贴、通信补贴,总收入读入到结构体数组emp1oyee中*/for(i=0;i<N;i+,pp+)fscanf(fp,"%s%d%d%d%d”,pp->name,pp->jg,&PP->gj,pp->tb,&pp->ss);fc1ose(fp);pp=emp1oyee;/*输出结构体数组student*/Printf("从文件aa.txt中读出的数据为:n");for(i=0;i<N;i+,pp+)printf(z,%s%d%d%d%dnz,pp->name,pp->jg,pp->gj,pp->tb,pp->ss);4 .按照输入员工的姓名,在aa.txt文件中查找该员工,找到以后输出该员工的所有数据,如果文件中没有输入的员工姓名,给出相应的提示信息。参考程序:defineN10ftinc1ude*stdio.hinc1ude"process"有exit。函数,所有用此库函数#inc1ude"string.h*定义结构体*/structworkercharname10;itjg,gj,tb,ss;)main()workeremp1oyeeN,*pp;charnn10;FI1E*fp;inti;i=0;fp=fopen(z,aa.txt","r);Printf(请输入要查找的姓名:);gets(nn);whi1e(!feof(fp)fscanf(fp,"%s%d%d%d%d”,emp1oyeei.name,&emp1oyeei.jg,emp1oyeei.gj,&emp1oyeei.tb,emp1oyeei.ss);if(strcmp(nn,emp1oyeei.name)=0)(printf(/,%s%d%d%d%dnz,emp1oyeei.name,emp1oyeei.jg,emp1oyeei.gj,emp1oyeei.tb,emp1oyeei.ss);break;i+;)if(i>=N)Printf("对不起,查无此人!r);fc1ose(fp);)5 .输入5个学生的信息:学号(2位整数)、姓名、3门课的成绩(3位整数1位小数)。计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DATo参考程序:defineN10#inc1ude"stdio.hinc1ude"process"有exit。函数,所有用此库函数/*定义结构体*/structstucharid5,name10;f1oatm1,m2,m3,avg;)main()stustudentN,*pp;FI1E*fp;inti;pp=student;*以写入的形式打开文件STU1.DAT*/if(fp=fopen("STU1DAT",Vz)=NU11)printf("打不开文件n");exit(1);)Printf(请输入%d个学生的数据n,N);/*输入N个同学的学号,姓名、三门课成绩并计算每个同学的平均分*/for(i=0;i<N;i+,pp+)(scanf(",%s%s%f%f%fz,pp->id,pp->name,pp->m1,&pp->m2,&pp->m3);pp->avg=(pp->m1+pp->m2+pp->m3)/3.0;)pp=student;/*将十个同学的姓名、三门课成绩、平均分写入到文件aa.txt中*/for(i=0;i<N;i+,pp+)fprintf(fp,z,%s%s%4.If%4.If%4.If%5.2fn”,pp->id,pp->name,pp->m1,pp->m2,pp->m3,pp->avg);fc1ose(fp);关闭文件)6 .从STU1DAT文件中读入学生数据,按平均成绩从高到低排序后写入文件STU2.DAT;参考程序:#defineN10#inc1ude"stdio.h"#inc1ude',process.h有exi1()函数,所有用此库函数/*定义结构体*/structstu(charid5,name10;f1oatm1,m2,m3,avg;main()stu