manually create a database file, then open it in code

using flag ios::trunc in open() function call can create a new file if it doesn't exist



👍 touch dbfile

👍 g++ personal.cpp database.cpp
👍 ./a.out
File name: dbfile
1. Add 2. Find 3. Modify a rec 4. Exit
Enter an option: 1
SSN: 123123123
SSN = 123123123
file dbfile opened
file dbfile closed
Enter an option: 4

👍 cat personal.h
#ifndef PERSONAL
#define PERSONAL
#include <fstream>
using namespace std;
class Personal {
public:
  Personal();
protected:
  char SSN[10];
  ostream& writeLegibly(ostream&);
  friend ostream& operator<<(
    ostream &o, Personal &p) {
    return p.writeLegibly(o);
  }
  istream& readFromConsole(istream&);
  friend istream& operator>>(
    istream &i, Personal &p) {
    return p.readFromConsole(i);
  }
};
#endif

👍 cat personal.cpp 
#include <iostream>
#include "personal.h"
Personal::Personal(){
}

ostream& Personal::writeLegibly(
  ostream &o){
  SSN[9] = '\0';
  o << "SSN = " << SSN;
  return o;
} 

istream& Personal::readFromConsole(
  istream &i){
  SSN[9] = '\0';
  char s[80];
  cout << "SSN: ";
  i.getline(s, 80);
  strncpy(SSN, s, 9);
  return i;
}

👍 cat database.h 
#ifndef DATABASE
#define DATABASE

template <typename T>
class Database {
public:
  Database();
  void run();
private:
  char fName[20];

  fstream database;
  void add(T&);

};
#endif

👍 cat database.cpp
#include <iostream>
#include "personal.h"
#include "database.h"

template <typename T>
Database<T>::Database() {
}

template<typename T>
void Database<T>::add(T &d) {
  database.open(fName,
    ios::in|ios::out|ios::binary);
  cout << "file " << fName
       << " opened" << endl;
  database.close();
  cout << "file " << fName
       << " closed" << endl;
}

template <typename T>
void Database<T>::run() {
  cout << "File name: ";
  cin >> fName;
  char option[5];
  T rec;
  cout << "1. Add "
       << "2. Find "
       << "3. Modify a record "
       << "4. Exit\n";
  cout << "Enter an option: ";
  cin.getline(option, 4); // get '\n'
  while (cin.getline(option, 4)) {
    if (*option == '1') {
      cin >> rec;
      cout << rec;
      add(rec);
    } else if (*option == '2') {
    } else if (*option == '3') {
    } else if (*option != '4')
      cout << "Wrong option\n";
    else return;
    cout << "Enter an option: ";
  }
}

int main() {
  Database<Personal>().run();
}

    

ch 1.10 CASE STUDY: RANDOM ACCESS FILE p43 of

© 拇指 2023