职工工资文件
一.前言
C語(yǔ)言譚書中文件一章,不錯(cuò)的題目。
二.題目
9.有一磁盤文件employee,內(nèi)存放職工的數(shù)據(jù)。每個(gè)職工的數(shù)據(jù)包括職工姓名、職工號(hào)、性別、年齡、住址、工資、健康狀況、文化程度。今要求將職工名、工資的信息單獨(dú)抽出來(lái)另建一個(gè)簡(jiǎn)明的職工工資文件。
由于一開始沒有employee文件,需要自己創(chuàng)建一下:
#include<stdio.h> #include<stdlib.h> typedef struct{char name[20];//職工姓名int num;//職工號(hào)char gender[10];//性別int age;char address[30];//住址 int wage;char h_condition[10];//健康狀況 char edu_degree[10];//文化程度 }Staff;int main(){//創(chuàng)造一個(gè)employee文件 Staff staffs[4];FILE*fp;int i;int count=0;Staff*p=staffs;if((fp=fopen("C:\\Users\\17604\\Desktop\\employee.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }//從鍵盤輸入職工數(shù)據(jù) for(p=staffs;p<staffs+4;p++){count++;printf("請(qǐng)輸入第%d個(gè)職工的職工號(hào),姓名,性別,年齡,住址,工資,健康狀況,文化程度:\n",count);scanf("%d%s%s%d%s%d%s%s",&p->num,p->name,p->gender,&p->age,p->address,&p->wage,p->h_condition,p->edu_degree);} // fclose(fp);//打印職工數(shù)據(jù)printf("職工號(hào) 姓名 性別 年齡 住址 工資 健康狀況 文化程度:\n");for(p=staffs;p<staffs+4;p++){printf("%-4d%8s%4s%6d%10s%6d%10s%10s\n",p->num,p->name,p->gender,p->age,p->address,p->wage,p->h_condition,p->edu_degree);} //寫入 p=staffs;for(i=0;i<4;i++){if(fwrite(p,sizeof(Staff),1,fp)!=1){printf("寫入文件失敗!!\n");}p++; }fclose(fp);return 0; }程序執(zhí)行效果圖:(在我的計(jì)算機(jī)中C:\Users\17604\Desktop\employee.dat,文件就生成了)
可以開始干題目了!!!
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct{char name[20];//職工姓名int num;//職工號(hào)char gender[10];//性別int age;char address[30];//住址 int wage;char h_condition[10];//健康狀況 char edu_degree[10];//文化程度 }Staff;typedef struct{char name[20];//職工姓名int wage; } StaffWage; int main(){Staff staffs[4];StaffWage staffwages[4];StaffWage*pt=staffwages;FILE*fp;int i;Staff*p=staffs;if((fp=fopen("C:\\Users\\17604\\Desktop\\employee.dat","rb"))==NULL){printf("打開文件失敗!!");exit(0); }//讀入 p=staffs;for(i=0;i<4;i++){if(fread(p,sizeof(Staff),1,fp)!=1){printf("讀入文件失敗!!\n");}p++; }fclose(fp);//打印職工數(shù)據(jù)同時(shí)給職工工資表賦值 printf("職工號(hào) 姓名 性別 年齡 住址 工資 健康狀況 文化程度:\n");for(p=staffs;p<staffs+4;p++){printf("%-4d%8s%4s%6d%10s%6d%10s%10s\n",p->num,p->name,p->gender,p->age,p->address,p->wage,p->h_condition,p->edu_degree);strcpy(pt->name,p->name);pt->wage=p->wage;pt++; } //將職工工資表寫入文件 if((fp=fopen("C:\\Users\\17604\\Desktop\\employeeWage.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }pt=staffwages;for(i=0;i<4;i++){if(fwrite(pt,sizeof(StaffWage),1,fp)!=1){printf("寫入文件失敗!!\n");}pt++; }fclose(fp);return 0; }效果圖:
驗(yàn)證,由于是二進(jìn)制文件,用記事本無(wú)法查看,所以寫一個(gè)程序查看一下是否正確(是否為題目所求)
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct{char name[20];//職工姓名int num;//職工號(hào)char gender[10];//性別int age;char address[30];//住址 int wage;char h_condition[10];//健康狀況 char edu_degree[10];//文化程度 }Staff;typedef struct{char name[20];//職工姓名int wage; } StaffWage; int main(){Staff staffs[4];StaffWage staffwages[4];StaffWage*pt=staffwages;FILE*fp;int i;Staff*p=staffs;if((fp=fopen("C:\\Users\\17604\\Desktop\\employee.dat","rb"))==NULL){printf("打開文件失敗!!");exit(0); }//讀入 p=staffs;for(i=0;i<4;i++){if(fread(p,sizeof(Staff),1,fp)!=1){printf("讀入文件失敗!!\n");}p++; }fclose(fp);//打印職工數(shù)據(jù)同時(shí)給職工工資表賦值 printf("職工號(hào) 姓名 性別 年齡 住址 工資 健康狀況 文化程度:\n");for(p=staffs;p<staffs+4;p++){printf("%-4d%8s%4s%6d%10s%6d%10s%10s\n",p->num,p->name,p->gender,p->age,p->address,p->wage,p->h_condition,p->edu_degree);strcpy(pt->name,p->name);pt->wage=p->wage;pt++; } //將職工工資表寫入文件 if((fp=fopen("C:\\Users\\17604\\Desktop\\employeeWage.dat","wb"))==NULL){printf("打開文件失敗!!");exit(0); }pt=staffwages;for(i=0;i<4;i++){if(fwrite(pt,sizeof(StaffWage),1,fp)!=1){printf("寫入文件失敗!!\n");}pt++; }fclose(fp);return 0; }效果圖:
附加題:
10.從第9題的“職工工資文件”中刪去一個(gè)職工的數(shù)據(jù),再存回原文件。
效果圖:
再使用上述程序查看文件效果圖:
后記:
由于今天時(shí)間有點(diǎn)匆忙,任務(wù)有點(diǎn)多,擼碼,沒有考慮很多細(xì)節(jié)。只是為完成和實(shí)現(xiàn)。代碼寫的有點(diǎn)死。很多代碼塊可以寫成函數(shù)模塊。
呃呃。。對(duì)就是這樣。頭疼…擼碼擼的有點(diǎn)多。
總結(jié)
- 上一篇: Python 字符串、时间、日期、时间戳
- 下一篇: cannot import name U