10 Replies - 406 Views - Last Post: 06 December 2012 - 07:02 AM Rate Topic: -----

#1 mccabec123  Icon User is offline

  • D.I.C Head

Reputation: 18
  • View blog
  • Posts: 225
  • Joined: 03-March 11

Writing complex class objects to file

Posted 05 December 2012 - 02:10 PM

Hey guys, I wanted to ask you guys before I began to attempt this, as I can't seem to see anyway of doing it without third party libraries, which I don't particularly want to use, as it is for a project I am doing for class, and I am not sure whether I'm allowed to use any libraries, other than standard libraries.

But basically I want to write an array of complex objects to a file to store them and then be able to load the saved data into the arrays again once the program is ran again after exit.

Somebody suggested just storing the data in a text file using XML, and then parsing the text file using the tags stored in the text file.

I was just wondering what the most efficient and best way would be to store the data.

As for a bit of background on the project, the project is an airport booking system which consists of 2 airplanes which hold 24 passengers. The planes can have multiple flights and upto 24 passengers. So passengers must be assigned to flight seats on the planes. All of this data is stored in two objects, one called passengers which has an array size of 24 (currently, I wish to turn this into a vector, but I have not used vectors yet) and flights with an array size of 100 (which I also wish to turn into a vector).

I hope this is enough information for you guys to get an idea. I just want to know the best way to go about it, so that I know from the start, rather than finding out down the line and realising that my way is deprecated or incredibly inefficient.

main.cpp:

//
//  main.cpp
//  Scotia Airlines
//
//  Created by Conner McCabe on 25/11/2012.
//  Copyright (c) 2012 Conner McCabe. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "flight.h"
#include <string.h>

using namespace std;


void mainMenu()
{
    char choice[2];
    int intChoice;
    string flightID;
    char seatID[2];
    passenger passengers[24];
    flight flights[100];
    
    int passengerID;
    int first = 0;
    /* This loop is used to make sure that the user cannot enter bad data */
    do
    {
        if(first != 1){for(int i=0; i <= 100; i++){cout << endl;}first = 1;}
        cout << "\nWelcome to the Scotia Airlines booking system developed by Conner McCabe.  \n";
        cout << "-----------------------------------------------------------\n";
        cout << "*                                                         *\n";
        cout << "*     \\____            ____                               *\n";
        cout << "*      \\   \\           \\   \\                              *\n";
        cout << "*       \\\RMA\\_____      \\   \\                             *\n";
        cout << "*        \\...~-__()______\\___\\_____________________       *\n";
        cout << "*         \\         Rocky Mountain Airlines     ___\\      *\n";
        cout << "*         \\     oo ooooooooooooooooooooo o o  |_O__\\_     *\n";
        cout << "*         ~~--_________/~~~/________________________)     *\n";
        cout << "*              |      /   /()                  |          *\n";
        cout << "*              0     /   /()                   0          *\n";
        cout << "*                    ----                                 *\n";
        cout << "*                                                         *\n";
        cout << "-----------------------------------------------------------\n";
        cout << "* Please make a selection from one of the options below:  *\n";
        cout << "-----------------------------------------------------------\n";
        cout << "*                                                         *\n";
        cout << "*               1. New Passenger                          *\n";
        cout << "*                                                         *\n";
        cout << "*               2. View Passenger                         *\n";
        cout << "*                                                         *\n";
        cout << "*               3. New Booking                            *\n";
        cout << "*                                                         *\n";
        cout << "*               4. New Reservation                        *\n";
        cout << "*                                                         *\n";
        cout << "*               5. View Availability                      *\n";
        cout << "*                                                         *\n";
        cout << "*               6. Exit the Program                       *\n";
        cout << "*                                                         *\n";
        cout << "*                                                         *\n";
        cout << "-----------------------------------------------------------\n";
        cout << "\nPlease enter a number from 1 - 3 to select an option from the main menu: ";
        /* This resets the choice for each loop back */
        if(choice[0] != 0)
        {
            choice[0] = 0;
        }
        /* This statement reads in the user's choice */
        fgets(choice, 2, stdin);
        
        /* This if statement is used to determine whether the user has entered more than the character limit and if so it gets rid of the excess data */
        if(choice[strlen(choice)-1] != '\n')
        {
            eatExtraInput();
        }
        intChoice = atoi(&choice[0]);
        
        /* This switch statement is used to call each function based on the user's input */
        switch(intChoice)
        {
            case 1:
                for(int i=0; i <= 100; i++){cout << endl;};
                cout << "Please enter a new passenger ID: ";
                cin >> passengerID;
                if(passengers[passengerID].get_name() == "")
                {
                    passengers[passengerID].createPassenger(passengerID);
                }
                else
                {
                    cout << "*This passenger already exists\n\n";
                    cout << "Press the return key to continue...";
                    cin.ignore();
                    cin.get();
                }
                break;
            case 2:
                for(int i=0; i <= 100; i++){cout << endl;};
                cout << "Please enter the ID of the passenger's details you wish to view: ";
                cin >> passengerID;
                if(passengers[passengerID].get_name() != "")
                {
                    passengers[passengerID].displayDetails();
                }
                else
                {
                    cout << "*This passenger does not exist\n\n";
                    cout << "Press the return key to continue...";
                    cin.ignore();
                    cin.get();
                }
                break;
            case 3:
                for(int i=0; i <= 100; i++){cout << endl;};
                cout << "Please enter the ID of the passenger: ";
                cin >> passengerID;
                cout << "Please enter the ID of the flight: ";
                cin >> flightID;
                cout << "Please enter the unique seat ID e.g. '5D': ";
                cin >> seatID;
                cout << endl << "Flight ID: " << flightID << endl;
                flights[atoi(flightID.c_str())].bookSeat(passengers[passengerID], seatID, atoi(flightID.c_str()));
                break;
            case 4:
                for(int i=0; i <= 100; i++){cout << endl;};
                break;
            case 5:
                for(int i=0; i <= 100; i++){cout << endl;};
                cout << "Please enter the ID of the flight in which you would like to view: ";
                cin >> flightID;
                flights[atoi(flightID.c_str())].get_available_seats();
                break;
            case 6:
                for(int i=0; i <= 100; i++){cout << endl;};
                cout << "Press the return key to exit the program...";
                cin.ignore();
                cin.get();
                exit(0);
                break;
            default :
                for(int i=0; i <= 100; i++){cout << endl;};
                printf("*Please enter a valid condition! \n");
                break;
        }
        
    }while(intChoice != 1 || intChoice != 2 || intChoice != 3 );
}
/***********************************************************************************************************************************************/
/*                                                                                                                                             */
/*                       main Function                                                                                                         */
/*                       -------------                                                                                                         */
/*                                                                                                                                             */
/*                       This function is used to call the mainMenu function                                                                   */
/*                                                                                                                                             */
/*                                                                                                                                             */
/***********************************************************************************************************************************************/
int main(int argc, char *argv[])
{
    
    /* This calls the mainMenu function and starts the programs main role */
    mainMenu();
    system("pause");
    return 0;
    
}




passenger.h:
//
//  passenger.h
//  Scotia Airlines
//
//  Created by Conner McCabe on 25/11/2012.
//  Copyright (c) 2012 Conner McCabe. All rights reserved.
//

#ifndef __Scotia_Airlines__passenger__
#define __Scotia_Airlines__passenger__

#include <sstream>
#include <iostream>

using namespace std;

/***********************************************************************************************************************************************/
/*                                                                                                                                             */
/*        This function is used to swallow unwanted data stored in the buffer so that it is not passed onto the next line                      */
/*                                                                                                                                             */
/***********************************************************************************************************************************************/
void eatExtraInput()
{
    int c;
    while ((c = getchar()) != '\n');
}

class passenger {
    
public:
    
    int get_passenger_ID()
    {
        return passengerID;
    }
    string get_name()
    {
        return name;
    }
    int get_age()
    {
        return age;
    }
    string get_address()
    {
        return address;
    }
    float get_discount()
    {
        return discount;
    }
    int set_ID(int id)
    {
        if((passengerID = id))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int set_name(string passedName)
    {
        return 1;
    }
    int set_age(int passedAge)
    {
        if((age = passedAge))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int set_address(string passedAddress)
    {
        return 1;
    }
    int set_discount(int passedDiscount)
    {
        if((discount = passedDiscount))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    void createPassenger(int id)
    {
        cin.ignore();
        cin.clear();
        passengerID = id;
        cout << "Please enter the name of the Passenger: ";
        getline(cin, name);
        cout << "Please enter the Passenger's age: ";
        cin >> age;
        cin.ignore();
        cin.clear();
        cout << "Please enter the address of the Passenger: ";
        getline(cin, address);
        cout << "Please enter the Passenger's discount amount: ";
        cin >> discount;
        cout << "Press the return key to continue...";
        cin.ignore();
        cin.get();
    }
    void displayDetails()
    {
        cout << "ID: " << passengerID << endl;
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
        cout << "Address: " << address << endl;
        cout << "Discount Amount: " << discount << "%" << endl;
        cout << "Press the return key to continue...";
        cin.ignore();
        cin.get();
    }
private:
    
    string name;
    int age;
    int passengerID;
    string address;
    float discount;
    
};

#endif /* defined(__Scotia_Airlines__passenger__) */



flight.h:
//
//  passenger.h
//  Scotia Airlines
//
//  Created by Conner McCabe on 25/11/2012.
//  Copyright (c) 2012 Conner McCabe. All rights reserved.
//

#ifndef __Scotia_Airlines__passenger__
#define __Scotia_Airlines__passenger__

#include <sstream>
#include <iostream>

using namespace std;

/***********************************************************************************************************************************************/
/*                                                                                                                                             */
/*        This function is used to swallow unwanted data stored in the buffer so that it is not passed onto the next line                      */
/*                                                                                                                                             */
/***********************************************************************************************************************************************/
void eatExtraInput()
{
    int c;
    while ((c = getchar()) != '\n');
}

class passenger {
    
public:
    
    int get_passenger_ID()
    {
        return passengerID;
    }
    string get_name()
    {
        return name;
    }
    int get_age()
    {
        return age;
    }
    string get_address()
    {
        return address;
    }
    float get_discount()
    {
        return discount;
    }
    int set_ID(int id)
    {
        if((passengerID = id))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int set_name(string passedName)
    {
        return 1;
    }
    int set_age(int passedAge)
    {
        if((age = passedAge))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    int set_address(string passedAddress)
    {
        return 1;
    }
    int set_discount(int passedDiscount)
    {
        if((discount = passedDiscount))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    void createPassenger(int id)
    {
        cin.ignore();
        cin.clear();
        passengerID = id;
        cout << "Please enter the name of the Passenger: ";
        getline(cin, name);
        cout << "Please enter the Passenger's age: ";
        cin >> age;
        cin.ignore();
        cin.clear();
        cout << "Please enter the address of the Passenger: ";
        getline(cin, address);
        cout << "Please enter the Passenger's discount amount: ";
        cin >> discount;
        cout << "Press the return key to continue...";
        cin.ignore();
        cin.get();
    }
    void displayDetails()
    {
        cout << "ID: " << passengerID << endl;
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
        cout << "Address: " << address << endl;
        cout << "Discount Amount: " << discount << "%" << endl;
        cout << "Press the return key to continue...";
        cin.ignore();
        cin.get();
    }
private:
    
    string name;
    int age;
    int passengerID;
    string address;
    float discount;
    
};

#endif /* defined(__Scotia_Airlines__passenger__) */




seat.h:
//
//  seat.h
//  Scotia Airlines
//
//  Created by Conner McCabe on 26/11/2012.
//  Copyright (c) 2012 Conner McCabe. All rights reserved.
//

#ifndef Scotia_Airlines_seat_h
#define Scotia_Airlines_seat_h

#include <iostream>
#include "passenger.h"
using namespace std;

class seat : public passenger {
    
public:
    seat(){seatStatus = 0;}
    int get_status()
    {
        return seatStatus;
    }
    void setStatus(int passedStatus)
    {
        seatStatus = passedStatus;
    }
private:
    int seatStatus;
    
};

#endif






Also, unrelated, but if possible, if anyone has experience with vectors I'd love to know how to use them, as they seem awfully complex when I last looked at them anyway, and I'm not really sure how they work.

Thanks as always guys, Conner.

This post has been edited by mccabec123: 05 December 2012 - 03:29 PM


Is This A Good Question/Topic? 0
  • +

Replies To: Writing complex class objects to file

#2 jimblumberg  Icon User is offline

  • member icon


Reputation: 3993
  • View blog
  • Posts: 12,323
  • Joined: 25-December 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 02:30 PM

There are many, many ways of reading from and writing information to files, from simple text files to remote client server SQL database files. You the designer must decide on which method is applicable to your needs. Looking at your "simple" description I would think about using something simple, maybe CSV formatted files. As for an explanation of vector Google would be a good place to start.


Once you have figured out what information you actually need to store you can start to determine what the actual file structure you will need.

Jim
Was This Post Helpful? 0
  • +
  • -

#3 jjl  Icon User is offline

  • Engineer
  • member icon

Reputation: 1072
  • View blog
  • Posts: 4,532
  • Joined: 09-June 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 02:33 PM

I would write the "complex" object to a file as binary data.

http://www.codinguni...-binary-file-io
Was This Post Helpful? 0
  • +
  • -

#4 mccabec123  Icon User is offline

  • D.I.C Head

Reputation: 18
  • View blog
  • Posts: 225
  • Joined: 03-March 11

Re: Writing complex class objects to file

Posted 05 December 2012 - 02:55 PM

View Postjjl, on 05 December 2012 - 02:33 PM, said:

There are many, many ways of reading from and writing information to files, from simple text files to remote client server SQL database files. You the designer must decide on which method is applicable to your needs. Looking at your "simple" description I would think about using something simple, maybe CSV formatted files. As for an explanation of vector Google would be a good place to start.


Once you have figured out what information you actually need to store you can start to determine what the actual file structure you will need.

Jim


Hey Jim, I've looked up vectors before, but I couldn't quite get my head around them and when I was using them I kept getting compiler errors so I gave up. And at the time, it was not essential to use them, but I want to know regardless now. Also what are the different ways of writing to a file in C++, disregarding SQL databases and such for the moment. What are the functions necessary and such like?

View Postjjl, on 05 December 2012 - 02:33 PM, said:

I would write the "complex" object to a file as binary data.

http://www.codinguni...-binary-file-io


I read that binary files get very messy and hard to handle when it comes to C++ objects. So I don't know if that would be the best idea, unless what I read was incorrect, if you could shed some light on how to write objects into binary files, then that'd be great :)
Was This Post Helpful? 0
  • +
  • -

#5 jimblumberg  Icon User is offline

  • member icon


Reputation: 3993
  • View blog
  • Posts: 12,323
  • Joined: 25-December 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:06 PM

You need to show us some code so we can see what you are dealing with. We can't reasonably determine the proper way to save this information without seeing that information. Also your code samples will give us at least a little indication about your level of knowledge of the language. As I said there are many different ways of accomplishing this task, without knowing anything about your level of experience, the actual program requirements it is impossible to tell you exactly where to start. You need to start this program, based on your current knowledge and the problem specification you were assigned to accomplish.

There are quite a few tutorials on this site to explain how to read and write information to a file. You may want to start with this link: C++ file IO. And as far as your problem with vectors, post your code where you are trying to use this construct. Post the code along with the complete error messages exactly as they appear in your development environment, and ask specific questions. Then perhaps we can point you in the correct direction.

Jim
Was This Post Helpful? 0
  • +
  • -

#6 jjl  Icon User is offline

  • Engineer
  • member icon

Reputation: 1072
  • View blog
  • Posts: 4,532
  • Joined: 09-June 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:08 PM

Quote

I read that binary files get very messy and hard to handle when it comes to C++ objects.

Binary data is the most simple way (conceptually) to write data to files, since there is no conversion. The bits that you write are the bits that appear in the file.

Quote

if you could shed some light on how to write objects into binary files, then that'd be great

Here is an example of storing "Person" structures to a file and then reading them back into a vector.

#include <iostream>
#include <fstream>
#include <vector>
#include <limits.h>

struct Person {
   char name[50];
   int age;
};

std::streampos getNumPeople(std::ifstream &file) {
   std::streampos size = file.tellg();

   file.seekg(0, std::ios::end);
   size = file.tellg() - size;
   file.seekg(0, std::ios::beg);
   return size / sizeof(Person);
}

void printPeople(const std::vector<Person> &people) {
   for(int i=0; i<people.size(); i++)
      std::cout<<"Name: "<<people[i].name<<std::endl
      <<"Age: "<<people[i].age<<std::endl;
   std::cout<<std::endl;
}

void readPeople(std::vector<Person> &people, const char *filename) {
   std::ifstream file(filename, std::ios::binary);

   if(file) {
      people.resize(getNumPeople(file));
      file.read((char*)&people[0], people.size() * sizeof(Person));
      file.close();
   }
}

void savePeople(const std::vector<Person> &people, const char *filename) {
   std::ofstream file(filename, std::ios::binary);

   if(file) {
      for(int i=0; i<people.size(); i++)
         file.write((char*)&people[i], sizeof(Person));
      file.close();
   }
}

void getPerson(std::vector<Person> &people) {
   Person temp;
   std::cout<<"Enter Name: ";
   std::cin.getline(temp.name, 50);
   std::cout<<"Enter Age: ";
   std::cin>>temp.age;
   people.push_back(temp);
}

int main() {
   Person temp;
   char again;
   std::vector<Person> people;

   //read in people structures from file
   readPeople(people, "people.bin");
   std::cout<<"Previously Entered\n";
   printPeople(people); //print content

   do {
      getPerson(people);
      std::cout<<"Enter more people? (Y/N): ";
      std::cin>>again;
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
   } while(again == 'Y');

   //save people structures back to file
   savePeople(people, "people.bin");

   std::cin.ignore();
   std::cin.get();
   return 0;
}




This post has been edited by jjl: 05 December 2012 - 03:12 PM

Was This Post Helpful? 0
  • +
  • -

#7 mccabec123  Icon User is offline

  • D.I.C Head

Reputation: 18
  • View blog
  • Posts: 225
  • Joined: 03-March 11

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:27 PM

View Postjjl, on 05 December 2012 - 03:08 PM, said:

Quote

I read that binary files get very messy and hard to handle when it comes to C++ objects.

Binary data is the most simple way (conceptually) to write data to files, since there is no conversion. The bits that you write are the bits that appear in the file.

Quote

if you could shed some light on how to write objects into binary files, then that'd be great

Here is an example of storing "Person" structures to a file and then reading them back into a vector.

#include <iostream>
#include <fstream>
#include <vector>
#include <limits.h>

struct Person {
   char name[50];
   int age;
};

std::streampos getNumPeople(std::ifstream &file) {
   std::streampos size = file.tellg();

   file.seekg(0, std::ios::end);
   size = file.tellg() - size;
   file.seekg(0, std::ios::beg);
   return size / sizeof(Person);
}

void printPeople(const std::vector<Person> &people) {
   for(int i=0; i<people.size(); i++)
      std::cout<<"Name: "<<people[i].name<<std::endl
      <<"Age: "<<people[i].age<<std::endl;
   std::cout<<std::endl;
}

void readPeople(std::vector<Person> &people, const char *filename) {
   std::ifstream file(filename, std::ios::binary);

   if(file) {
      people.resize(getNumPeople(file));
      file.read((char*)&people[0], people.size() * sizeof(Person));
      file.close();
   }
}

void savePeople(const std::vector<Person> &people, const char *filename) {
   std::ofstream file(filename, std::ios::binary);

   if(file) {
      for(int i=0; i<people.size(); i++)
         file.write((char*)&people[i], sizeof(Person));
      file.close();
   }
}

void getPerson(std::vector<Person> &people) {
   Person temp;
   std::cout<<"Enter Name: ";
   std::cin.getline(temp.name, 50);
   std::cout<<"Enter Age: ";
   std::cin>>temp.age;
   people.push_back(temp);
}

int main() {
   Person temp;
   char again;
   std::vector<Person> people;

   //read in people structures from file
   readPeople(people, "people.bin");
   std::cout<<"Previously Entered\n";
   printPeople(people); //print content

   do {
      getPerson(people);
      std::cout<<"Enter more people? (Y/N): ";
      std::cin>>again;
      std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
   } while(again == 'Y');

   //save people structures back to file
   savePeople(people, "people.bin");

   std::cin.ignore();
   std::cin.get();
   return 0;
}





As I said before, I am not using structs, I'm using objects, as in C++ classes, not C structures. Objects contain more than just data. They contain methods, constructors, and a vast array of other things. Not to mention the scope of the data that they store. I know how to store structs in binary files as these are just data types, but classes are nowhere near as simple. To do it your way, I'd need to extract all of the data from the object itself then place it into the binary file, rather than just dropping the object into the file.

I have added all of the header files and the main C++ file in the original description now, if this helps :) This code is incredibly unoptimised and will probably have a few nit bits here and there as I've not thoroughly looked through it for errors yet.

This post has been edited by mccabec123: 05 December 2012 - 03:31 PM

Was This Post Helpful? 0
  • +
  • -

#8 jimblumberg  Icon User is offline

  • member icon


Reputation: 3993
  • View blog
  • Posts: 12,323
  • Joined: 25-December 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:50 PM

If you know how to write binary files using structures then writing classes is not really much different. As long as the "objects" contain fixed sized data you write them exactly the same. Writing a class using write only writes the data members, not the class member functions.

Jim

This post has been edited by jimblumberg: 05 December 2012 - 03:51 PM

Was This Post Helpful? 0
  • +
  • -

#9 mccabec123  Icon User is offline

  • D.I.C Head

Reputation: 18
  • View blog
  • Posts: 225
  • Joined: 03-March 11

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:57 PM

View Postjimblumberg, on 05 December 2012 - 03:50 PM, said:

If you know how to write binary files using structures then writing classes is not really much different. As long as the "objects" contain fixed sized data you write them exactly the same. Writing a class using write only writes the data members, not the class member functions.

Jim


Seriously? I read somewhere that it was a bad idea to use Binary files? Or is this just rubbish? What about when it comes to loading the file's data into the objects again?
Was This Post Helpful? 0
  • +
  • -

#10 jjl  Icon User is offline

  • Engineer
  • member icon

Reputation: 1072
  • View blog
  • Posts: 4,532
  • Joined: 09-June 09

Re: Writing complex class objects to file

Posted 05 December 2012 - 03:59 PM

Quote

As I said before, I am not using structs, I'm using objects, as in C++ classes, not C structures

The only difference between structures and classes in C++ is their default access specifiers (public, private). Everything else is exactly the same.

Quote

I'd need to extract all of the data from the object itself

You are correct, you can only read/write POD data types to binary files. The problem would be in writing std::string as binary. You could read char-by char, or simply replace the std::strings with character arrays.

Quote

Somebody suggested just storing the data in a text file using XML, and then parsing the text file using the tags stored in the text file.

This seems like overkill. You can just write out passenger records line by line, then parse each line when you read them in. Your file should take the form of something like this
<name> <passengerID> <address> <discount>

Example, you file could look something like this.

Justin 2 121_kendell 2.232
Bob 4 232_northview 3.343
ect..

You can read the file line-by-line using getline:
http://www.cplusplus...string/getline/

For each line you will need to split each of the tokens at each while space. Here is a link on string splitting:
http://cplusplus.com.../strings/split/

This post has been edited by jjl: 05 December 2012 - 04:09 PM

Was This Post Helpful? 2
  • +
  • -

#11 mccabec123  Icon User is offline

  • D.I.C Head

Reputation: 18
  • View blog
  • Posts: 225
  • Joined: 03-March 11

Re: Writing complex class objects to file

Posted 06 December 2012 - 07:02 AM

Okay guys, this should be enough to give me a ground to work from. Thanks again :)
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1