//START binFilesHeader.h
#include <iostream>
#include <fstream>
using namespace std;
struct MemRec
{
int num;
char name[26];
char type;
float dues;
};
void InitializeFile(char fname[]);
void PrintFile(char fname[]);
void UpdateFile(char fname[], int choice);
void DeleteMem(char fname[]);
long ReturnByte(long val);
//THIS IS THE END OF binFilesHeader.h
//START binFilesHeader.cpp
#include "binFilesHeader.h"
void InitializeFile(char fname[])
{
fstream outFile(fname, ios::out|ios::binary);
MemRec tempRec = {0, " ", ' ', 0.0};
for (int i=0; i<500; i++)
{
outFile.seekp(ReturnByte(i), ios::beg);
outFile.write((char*)&tempRec, sizeof(tempRec));
}
outFile.close();
}
void PrintFile(char fname[])
{
fstream inFile(fname, ios::in|ios::binary);
MemRec memInfo;
bool flag = false;
int counter = 0;
while(!inFile.eof())
{
inFile.seekg(ReturnByte(counter), ios::beg);
inFile.read((char*)&memInfo, sizeof(memInfo));
if (memInfo.num != 0)
{
cout << endl
<< "Member Number: " << memInfo.num << endl
<< "Member Name: " << memInfo.name << endl
<< "Member Type: " << memInfo.type << endl
<< "Monthly Dues: " << memInfo.dues << endl;
flag = true;
}
counter++;
}
if (flag==false)
{
cout << endl
<< "There are only \"dummy\" records at this time.";
}
inFile.close();
}
void UpdateFile(char fname[], int choice)
{
fstream outFile(fname, ios::in|ios::out|ios::binary);
MemRec memInfo;
int selection;
int memNum;
cout << endl
<< "Enter member number: ";
cin >> memNum;
cin.ignore(1, '\n');
outFile.seekg(ReturnByte(memNum-1), ios::beg);
outFile.read((char*)&memInfo, sizeof(memInfo));
if (choice==1)
{
if (memInfo.num != 0)
{
cout << "Sorry, that member already exists:"
<< endl
<< endl
<< "Member Number: " << memInfo.num << endl
<< "Member Name: " << memInfo.name << endl
<< "Member Type: " << memInfo.type << endl
<< "Monthly Dues: " << memInfo.dues;
}
else
{
memInfo.num = memNum;
cout << "Member number: " << memInfo.num << endl
<< endl
<< "Enter Member's Name: ";
cin.getline(memInfo.name, 26);
cout << "Enter Member's Type: ";
cin >> memInfo.type;
cout << "Enter Monthly Dues: ";
cin >> memInfo.dues;
outFile.seekp(ReturnByte(memNum-1), ios::beg);
outFile.write((char*)&memInfo, sizeof(memInfo));
}
}
else
{
cout << "Select field to update 1)name, 2)type, 3)dues: ";
cin >> selection;
cin.ignore(1,'\n');
switch(selection)
{
case 1: cout << "Enter new name: ";
cin.getline(memInfo.name, 26);
break;
case 2: cout << "Enter membership type (F or S): ";
cin >> memInfo.type;
break;
case 3: cout << "Enter monthly dues: ";
cin >> memInfo.dues;
break;
}
outFile.seekp(ReturnByte(memNum-1), ios::beg);
outFile.write((char*)&memInfo, sizeof(memInfo));
cout << endl
<< "Member Number: " << memInfo.num << endl
<< "Member Name: " << memInfo.name << endl
<< "Member Type: " << memInfo.type << endl
<< "Monthly Dues: " << memInfo.dues;
}
outFile.close();
}
void DeleteMem(char fname[])
{
fstream outFile(fname, ios::out|ios::in|ios::binary);
int memNum;
MemRec nullRec = {0, " ", ' ', 0.0};
cout << "Enter member number: ";
cin >> memNum;
outFile.seekp(ReturnByte(memNum-1), ios::beg);
outFile.write((char*)&nullRec, sizeof(nullRec));
}
long ReturnByte(long val)
{
return sizeof(MemRec) * val;
}
//THIS IS THE END OF binFilesHeader.cpp
//START binFilesDriver.cpp
#include "binFilesHeader.h"
void main(void)
{
int choice;
fstream checkFile("members.dat", ios::in|ios::binary);
if (checkFile.fail())
{
InitializeFile("members.dat");
}
else
{
checkFile.close();
}
do
{
cout << endl
<< endl
<< "Hard Body Health Club" << endl
<< endl
<< "1) Enter a new member" << endl
<< "2) Update a member" << endl
<< "3) Delete a member" << endl
<< "4) Print member list" << endl
<< "5) Quit" << endl
<< endl
<< "Enter your choice (1-5): ";
cin >> choice;
if (choice == 1 || choice == 2)
{
UpdateFile("members.dat", choice);
}
else if (choice == 3)
{
DeleteMem("members.dat");
}
else if (choice == 4)
{
PrintFile("members.dat");
}
}
while (choice != 5);
cout << endl
<< "END PROGRAM";
}
//THIS IS THE END OF binFilesDriver.cpp