File I/O (Reading from a Random-Access File)

Discussion in 'C' started by VersEtreOuNe, Feb 12, 2008.

  1. VersEtreOuNe

    VersEtreOuNe New Member

    Joined:
    Feb 12, 2008
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    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;
    }
    
    
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice