美文网首页c/c++IT狗工作室C语言
第三篇:戏说C++文件I/O (后篇)

第三篇:戏说C++文件I/O (后篇)

作者: 铁甲万能狗 | 来源:发表于2019-12-30 11:52 被阅读0次

文件流读写完整案例

下面是一个关于文件流读写入的实际示例

首先,我们定义了Employee的类,关于这个类我们的api原型我们会放到employee.hh文件,代码的主体实现放在emloyee.cpp文件中.

  • employee.hh文件
//employee.hhw文件
//作者:铁甲万能🐶
//授权方式:谢绝转载
#include <iostream>

using namespace std;
class Employee {
  int eid;
  char name[25];
  char depart[5];
  float salary;
  char grade;

 public:
      void getdata() {
            cout << "--职员信息录入--" << endl;
            cout << "工号:";
            cin >> eid;
            cout << "姓名:";
            cin >> name;
            cout << "部门:";
            cin >> depart;
            cout << "薪水:";
            cin >> salary;
            cout << "绩效:(分级有 'A', 'B', 'C', 'D'):";
            cin >> grade;
            evaluate();
     }

    void evaluate();
    void display();
    void update();

     int getID() { return eid; }
};
  • employee.cpp文件
#include "../header/employee.hh"

void Employee::evaluate() {
  if (grade == 'A') {
    salary = salary * 1.10;
  } else if (grade == 'B') {
    salary = salary * 1.07;
  } else if (grade == 'C') {
    salary = salary * 1.04;
  } else {
    salary = salary * 0.95;
  }
}

void Employee::display() {
  cout << "----员工信息-----" << endl;
  cout << "工号:" << eid << endl;
  cout << "姓名:" << name << endl;
  cout << "薪水:" << salary << endl;
  cout << "评级:" << grade << endl;
}

void Employee::update() {}

当然还少不掉我们的调用层代码

#include <fstream>
#include <iostream>
#include "./utils/tool.cpp"
#include "employee.cpp"

/**https://github.com/courri/Cpp-Primer-5th-Edition/blob/master/7/useScreen.cpp**/

using namespace std;

int main(int argc, char const *argv[]) {
  string filename("../files/emp.db");
  fstream dbf;

  if (!exists(filename)) {
    dbf.open(filename, ios::out);
    dbf.close();
  }
  dbf.open(filename, ios::in | ios::app | ios::binary);

  char answer = 'y';
  cout << "需要录入职员数据吗?" << endl;
  cin >> answer;

  Employee emp = Employee();

  //写操作
  while (true) {
    emp.getdata();
    dbf.write((char *)&emp, sizeof(emp));
    cout << "记录大小:" << sizeof(emp) << "字节" << endl;
    cout << "添加职工记录到emp.db" << endl;
    cout << "还需要继续吗?" << endl;
    cin >> answer;
    if (answer != 'y' && answer != 'Y') {
      break;
    }
  }

  if (!dbf.is_open()) {
    cout << "加载dbf文件" << endl;
    dbf.open(filename, ios::in | ios::binary);
  }

  dbf.seekg(0);

  while (!dbf.eof()) {
    dbf.read((char *)&emp, sizeof(emp));
    emp.display();
  }
  return 0;
}
插入新数据

那么我们看看我们保存到emp.db文件的二进制数据信息,这里我们需要可以打开二进制的文本工具,这里推荐wxhexeditor.
ubuntu下安装如下:

sudo apt-get install wxhexeditor

我们可以发现已经写入相关的信息了,下图涉及到C/C++内存管理和对象数据序列化的话题,我们会在日后的文章另行展开话题


2019-08-31 16-34-51 的螢幕擷圖.png

相关文章

  • 第三篇:戏说C++文件I/O (后篇)

    文件流读写完整案例 下面是一个关于文件流读写入的实际示例 首先,我们定义了Employee的类,关于这个类我们的a...

  • 第三篇:戏说C++文件I/O (前篇)

    本篇会讲述文件流的详细操作和实际开发中碰到的一些典型问题 文件写入操作 append写入模式以下示例打开一个文件且...

  • C++的输入输出流总结

    c++ I/O(不包括文件) http://www.cnblogs.com/chinazhangjie/archi...

  • UNIX 文件I/O

    UNIX 文件I/O 引言 介绍UNIX系统可用的文件I/O函数---打开文件、读文件、写文件等 UNIX文件I/...

  • linux系统API,c,c++的标准I/O和文件I/O

    标准I/O:数据从内存与标准i/o设备(stdio,stdout,stderr)之间的数据流动 文件I/O:文件的...

  • C++ 输入输出总结

    C++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。 从C继承来的I/O操作 ...

  • C语言学习12.文件和IO

    I/O:input/output,输入输出。分三类:标准I/O,串I/O,文件I/O 标准I/O: 标准输入:从标...

  • Python文件操作

    文件I/O I 输入(input) O输出(Output) 文件操作步骤:1.打开文件 2.读写文件 3...

  • 文件I/O

    文件描述符 http://blog.csdn.net/cywosp/article/details/3896523...

  • 文件I/O

    所有执行I/O操作的系统调用都以文件描述符(一个非负整数)来指代打开的文件。包括pipe,FIFO,socket,...

网友评论

    本文标题:第三篇:戏说C++文件I/O (后篇)

    本文链接:https://www.haomeiwen.com/subject/icyzectx.html