C++ 输入输出流 对文件进行添加操作 c++程序设计第3版13章课后习题13.5

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.结果演示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


总结

代码原创,喜欢点个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值