Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   File I/O (Reading from a Random-Access File) (http://www.go4expert.com/forums/file-i-o-reading-random-access-file-t8790/)

VersEtreOuNe 13Feb2008 00:38

File I/O (Reading from a Random-Access File)
 
INFO:
The program should enter a circle radius and Id for that circle to a file, then it should search for that id and print the radius for that circle.

PROBLEM:
This program compiles but it's not searching properly.

Circle.h
Code:

#ifndef CIRCLE_H
#define CIRCLE_H

#include <iostream>
#include <fstream>
using namespace std;

class Circle
{
        friend ostream& operator <<(ostream& output, const Circle& aCircle);
        friend istream& operator >>(istream& input, Circle& aCircle);

public:
        Circle();
        Circle(double radius, int id);
        Circle(const Circle& aCircle);

        void SetCircleRadius(double radius) { _circleRadius = radius; }
        void SetCircleId(int id)  { _circleId = id; }

        double GetCircleRadius() const  { return _circleRadius; }
        int GetCircleId() const { return _circleId; }

private:
        double  _circleRadius;
        int    _circleId;
};

#endif

Circle.cpp
Code:

#include "Circle.h"

Circle::Circle()
{
        _circleId = 0;
        _circleRadius = 0.0;
}

Circle::Circle(double radius, int id)
{
        _circleId = id;
        _circleRadius = radius;
}

Circle::Circle(const Circle& aCircle)
{
        _circleId = aCircle._circleId;
        _circleRadius = aCircle._circleRadius;
}

ostream& operator <<(ostream& output, const Circle& aCircle)
{
        output << "\n          ------------" << endl;
        output << "          Id    radius" << endl;
        output << "          ------------" << endl;
        output << "          " << aCircle._circleId << "    " << aCircle._circleRadius << endl;
        output << "          ------------" << "\n\n";

        return (output);
}

istream& operator >>(istream& input, Circle& aCircle)
{
        int quantity;
        cout << "\nHow many circles do you want to add ";
        input >> quantity;

        for (int i = 0; i < quantity; ++i)
        {
                cout << "\n\nEnter the ID of Circle #" << (i + 1) << " : ";
                input >> aCircle._circleId;

                cout << "Enter Radius of Circle #" << (i + 1) << " : ";
                input >> aCircle._circleRadius;

                cout << endl;
        }

        return (input);
}

main.cpp
Code:

#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

#include "Circle.h"

int main ()
{
        Circle aCircle;
        fstream file;
        int option;

        do
        {
                cout << "Menu \n"
                        << " (1) Add Circle(s) \n"
                        << " (2) Find a Circle by ID \n"
                        << " (3) Exit \n"
                        << "Your Selection -> ";
                cin >> option;

                switch (option)
                {
                case 1:
                        file.close();
                        file.clear();

                        file.open("Circle.dat", ios::out | ios::app | ios::binary);
                       
                        if (!file)
                        {
                                cerr << "\n\nFailed to open file.\n\n";
                                system("PAUSE");
                                exit(1);
                        }
                        else
                        {
                                cin >> aCircle;
                                file.write(reinterpret_cast<char*> (&aCircle), sizeof(Circle));
                        }
                        break;

                case 2:
                        file.close();
                        file.clear();


                        cout << "Enter id: ";
                        int id;
                        cin >> id;
                        aCircle.SetCircleId(id);

                        file.open("Circle.dat", ios::in | ios::app | ios::binary);

                        if (!file)
                        {
                                cerr << "\n\nFailed to open file.\n\n";
                                system("PAUSE");
                                exit(1);
                        }
                        else
                        {
                                file.seekg(id * sizeof(Circle), ios::beg);
                                file.read(reinterpret_cast<char *> (&aCircle), sizeof(Circle));

                                cout << aCircle;
                        }       
                        break;


                case 3:
                        file.close();
                        cout << "\n\nG  o    o    D    B    y    E\n\n";
                        exit(0);
                        break;


                default:
                        cerr << "\nERROR: Wrong Option menu. Please try again.\n\n";

                }

        } while (option != 3);

        return EXIT_SUCCESS;
}



All times are GMT +5.5. The time now is 07:33.