#include<stdio.h>
/************************************************************************************/
/*定义一个结构体*/
/************************************************************************************/
struct person
{
char name[10];
char department[10];
float basepay;
float allowance;
float total;
};
/************************************************************************************/
/*主函数*/
/************************************************************************************/
void main()
{
FILE *fp,*fq;
char ch;
int i=0; /*作循环变量使用*/
int j=0,k=0; /*建立一个计数的变量*/
struct person worker; /*定义一个结构变量,为输入数据作准备,即作中转站*/
struct person bridge[10]; /*建立一个后面更改文件数据的中转桥梁用的结构体数组*/
if((fp=fopen("F:\\paydata.txt","wb"))==NULL) /*打开文件*/
{
printf("connot open paydata file!\n");
exit(0);
}
printf("Please enter name,department,baseplay,allowance:\n");/*提示输入数据*/
scanf("%s%s%f%f",&worker.name,&worker.department,&worker.basepay,&worker.allowance);
/*接收输入数据到结构变量worker中*/
worker.total=worker.basepay+worker.allowance; /*计数出总工资,并存入相应的输入变量中*/
while(strcmp(&worker.name,"#")!=0) /*输入数据的结尾标志符# */
{
fwrite(&worker,sizeof(struct person),1,fp);
/*将结构变量中的数据通过文件写入函数fwrite和文件指针fp写入文件中*/
printf("Please enter name,department,baseplay,allowance:\n"); /*提示输入信息*/
scanf("%s",&worker.name);
scanf("%s%f%f",&worker.department,&worker.basepay,&worker.allowance);
worker.total=worker.basepay+worker.allowance; /*工资数据处理*/
j=j+1;k=k+1; /*记录输入数据的数目*/
}
printf("enter data over! The data is in the file of F:\\paydata.txt!\n");
fclose(fp); /*文件写入工作完毕,关闭写入文件指针*/
fq=fopen("F:\\paydata.txt","rb+");
/*建立一个可读写的文件指针,为后面更改文件中的数据以及输出数据做好准备工作*/
for(i=0;i<j;i++) /*将先前建立的文件数据读入到结构数组中,并作相应的修改*/
{
fread(&bridge[i],sizeof(struct person),1,fq);
bridge[i].basepay=bridge[i].basepay+100;
bridge[i].total=bridge[i].total+100;
}
rewind(fq); /*使位置指针重新返回文件的开头,此函数无返回值*/
for(i=0;i<j;i++) /*将修改之后的数据重新存入文件中*/
{
fwrite(&bridge[i],sizeof(struct person),1,fq);
}
rewind(fq);/*使位置指针重新返回文件的开头,此函数无返回值*/
printf("***********************************************************************\n"); /*最终数据输出部分*/
printf("Hello!The data of paydata.txt is :\n");
while(k!=0) /*将更改后的文件中的数据重新输出*/
{
fread(&worker,sizeof(struct person),1,fq);
printf("name:%s, department:%s, basepay:%5f, allowance:%5f, total:%5f\n",&worker.name,&worker.department,worker.basepay,worker.allowance,worker.total);
k=k-1;
}
fclose(fq); /*关闭文件指针*/
printf("Thank you for your attention! BYE!\n");
printf("**********************************************************************\n");
getch();
}
/*整个重新结束*/
/*************************************************************************************/
|