C++ 对文件的操作
@[TOC](文章目录)
前言
编写实现
1按职工由小到大的顺序将5个员工的数据(号码,姓名,年龄,工资)输出到磁盘文件中保存
2从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾
3输出全部职工的数据
4从键盘输入一个号码,在文件中查找有无此职工号,如有则显示此职工是第几个职工,以及该职工的全部数据,如没有,输出无此人
可以反复多次查询,如果查找的职工号为0,就结束查询
提示:以下是本篇文章正文内容,下面案例可供参考
一、定义的函数
void add();
添加函数,调用一次添加一位职工数据
void print();
打印出文件中所有数据
void findWorker();
职工查找函数,输入职工号num
进行查找,如果存在就输出这个职工数据,如果无输出查无此人,输入0退出查询.
二、代码
1.完整代码
代码如下(示例):
#include<iostream>
#include<fstream>
using namespace std;
/*
编写实现
1按职工由小到大的顺序将5个员工的数据(号码,姓名,年龄,工资)输出到磁盘文件中保存
2从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾
3输出全部职工的数据
4从键盘输入一个号码,在文件中查找有无此职工号,如有则显示此职工是第几个职工,以及该职工的全部数据,如没有,输出无此人
可以反复多次查询,如果查找的职工号为0,就结束查询
*/
struct worker {
int num;
char name[20];
int age;
double wage;
};
int main() {
void add();//添加员工信息函数
void findWorker();//查找工人函数
void print();//打印数据函数
worker arr[5] = { 101,"Q",19,22000,
102,"W",22,32000,
103,"LI",22,14000,
104,"Wang",23,4400,
105,"PO",34,114220 };
ofstream outfile("f3.dat",ios::binary);
if (!outfile) {
cout << "打开失败";
exit(1);
}
outfile.write((char*)&arr[0], sizeof(arr));
outfile.close();
add();
//add();
print();
findWorker();
return 0;
}
void add() {
ofstream outfile("f3.dat", ios::binary|ios::app);//ios::out会删除原文件,ios::app输出方式打开,指向文件末尾
if (!outfile) {
cout << "打开失败";
exit(1);
}
worker new_worker;
cout << "新工作的工号:"<<endl;
cin >> new_worker.num;
cout << "新人的名字:" << endl;
cin >> new_worker.name;
cout << "新人的年龄:" << endl;
cin >> new_worker.age;
cout << "新人的工资:" << endl;
cin >> new_worker.wage;
//导入到文件中
//outfile.seekp(6*sizeof(new_worker),ios::beg);//定位到底6个位置
outfile.write((char*)&new_worker, sizeof(new_worker));
outfile.close();
}
void findWorker() {
worker arr[10];
ifstream infile("f3.dat", ios::binary);
if (!infile) {
cerr << "打开失败";
exit(1);
}
for (int i=0;i<10;i++) {
infile.read((char*)&arr[i],sizeof(arr[i]));//加一个为空判断
}
infile.close();
bool k;//while 定义测试
while (1) {
k= false;//查找人的bool
int num;
cout << "输入要查找人的号码:" << endl;
cin >> num;
if (num == 0) {
cout << "查询结束";
break;
}
for (int i = 0; i < 10; i++) {
if (arr[i].num == num) {
k = true;
cout << "他是" << i << "号员工" << endl;
cout << "num:" << arr[i].num << endl;
cout << "name:" << arr[i].name << endl;
cout << "age:" << arr[i].age << endl;
cout << "wage:" << arr[i].wage << endl;
}
}
if (!k) {
cout << "查无此人" << endl;
}
}
}
void print() {
worker arr[10];
ifstream infile("f3.dat", ios::binary);
if (!infile) {
cerr << "打开失败";
exit(1);
}
for (int i = 0; i < 10; i++) {
infile.read((char*)&arr[i], sizeof(arr[i]));//加一个为空判断
}
for (int i = 0; i < 10; i++) {
if (!(arr[i].num > 0 && arr[i].num < 200)) break;//如果工号不符合要求退出
cout << i << "号员工" << endl;
cout << "num:" << arr[i].num << endl;
cout << "name:" << arr[i].name << endl;
cout << "age:" << arr[i].age << endl;
cout << "wage:" << arr[i].wage << endl;
}
infile.close();
}
2.结果演示
总结
代码原创,喜欢点个
吧