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