Sign in to follow this  
shadowfire36

break this code into a class

Recommended Posts

shadowfire36    100
ok after some time im now ready into breaking my code apart into 4 class Sports,NBA,NFL,MLB, here is the original code
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// definition of strct that will hold all information of match
struct Match
{
	string Season;
	string Team1;
	string Team2;
	string Result;
};

// Display the main menu on screen
void DisplayMainMenu()
{
	cout<<"1- Please eneter team name"<<endl;
	cout<<"2- View last record"<<endl;
	cout<<"3- Exit program"<<endl;
	cout<<"Please select number"<<endl;
}

//Search within array of matches and display the results
void SearchMatches(Match* matches,int size,string TeamName)
{
	//declare the result array
	Match SearchResult[2000];
	//initalize the result counter
	int SearchResultCount=0;

	int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches[i].Team1==TeamName || matches[i].Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				//display the seasons
				cout<<endl<<"("<<SearchResultCount<<") "<<matches[i].Season;
				//store the matched match in the search result array
				SearchResult[SearchResultCount] = matches[i];
			}
	}
	cout<<endl;

	//check for results
	if(SearchResultCount>0)

	{
		
		
		cout << "which year would you like to view results "<<endl;
		cin>>SelectedNumber;

		SelectedNumber;
		
	ofstream myfile;
	myfile.open("recallTeam.txt",ios::app);
	myfile << endl << SelectedNumber;
	myfile.close();
		
		//display the match information
		cout<<SearchResult[SelectedNumber].Season<<endl;
		cout<<SearchResult[SelectedNumber].Team1<<endl;
		cout<<"Over"<<endl;
		cout<<SearchResult[SelectedNumber].Team2<<endl;
		cout<<SearchResult[SelectedNumber].Result<<endl;
	}
	else cout<<"No search result";
	cout<<endl;
}
void SearchMatches(Match* matches,int size,string TeamName, int record)
{
	//declare the result array
	Match SearchResult;
	//initalize the result counter
	int SearchResultCount=0;

	//int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches[i].Team1==TeamName || matches[i].Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				if (SearchResultCount == record)
				{
					//store the 
				//display the seasons
				//cout<<endl<<"("<<SearchResultCount<<") "<<matches[i].Season;
				
			     //store the matched match in the search result array
				SearchResult = matches[i];
					break;
				}
			}
	}
	cout<<endl;

	//check for results
	if(SearchResultCount>0)
	{
		//display the match information
		cout<<SearchResult.Season<<endl;
		cout<<SearchResult.Team1<<endl;
		cout<<"Over"<<endl;
		cout<<SearchResult.Team2<<endl;
		cout<<SearchResult.Result<<endl;
	}
	else cout<<"No search result";
	cout<<endl;
}

// This function is used for storing the last search keyword entered to the recallteam.txt
void WriteLastSearchWord(string word)
{
	ofstream myfile;
    myfile.open("recallTeam.txt");
    myfile <<word;
    myfile.close();
}
// This function is used for read the last search keyword enter from the recallteam.txt
void ReadLastSearchWord(string &team, int &record)
{
	ifstream inFile("recallTeam.txt");
	getline(inFile, team);
	inFile >> record;
	inFile.close();
}


int main()
{
	//initailze the matches ( array of strcuts )
	Match matches[2000];

	// create input stream to nba.txt file
	ifstream inFile("nfl.txt");

	//It will holds the read lines from the file
	string Buffer;

	// check if the file is exist 
	if(!inFile.is_open())
	{
		//display the error message
		cout<<"Failed to open file"<<endl;
		return 0;
	}

	// initalize the counter
	int matchesCounter=0;
	while(!inFile.eof())
	{
		//read season
		getline(inFile,Buffer);
		matches[matchesCounter].Season = Buffer;
		//read team1 name
		getline(inFile,Buffer);
		matches[matchesCounter].Team1 = Buffer;
		//read the "over" string
		getline(inFile,Buffer);
		//read team2 name
		getline(inFile,Buffer);
		matches[matchesCounter].Team2 = Buffer;
		//read result
		getline(inFile,Buffer);
		matches[matchesCounter].Result = Buffer;
		//read the empty line
		getline(inFile,Buffer);
		//update the matches counter
		matchesCounter++;
	}

	
	//its used for Main menu selection
	char Check='1';

	while(Check !='3')
	{
		//Display the main menu
		DisplayMainMenu();
		cin>>Check;

		switch(Check)
		{
			//Search 
		case '1':
			{
				string TeamName="";
				getline(cin,TeamName);//users input
				getline(cin,TeamName);//free buffer
				WriteLastSearchWord(TeamName);
				SearchMatches(matches,matchesCounter,TeamName);
				break;
			}
			//Display the last search team
		case '2':
			{
				string team;
				int record;
				ReadLastSearchWord(team, record);
				SearchMatches(matches,matchesCounter ,team , record);
	           
				break;
			}
			//Exit the program
		case '3':
			{
				exit(0);
			}
		default:continue;
		
		}
	}
}





now i have broken it to where that parent class will be the Sports class and the other 3 classes will drive from Sports the only problem is how i wrote my program and the problem is with the opening and closing of the file i defined in the runSportsSearch function i made . i made these functions in my Sports.h
struct Match
{
	string Season;
	string Team1;
	string Team2;
	string Result;
};
class Sports 
{
public:
void SearchMatches(Match* matches,int size,string TeamName);
virtual void SearchMatches(Match* matches,int size,string TeamName, int record);
int runSportsSearch();
void WriteLastSearchWord(string word);
void ReadLastSearchWord(std::string &team, int &record);
setTextName();
Sports();
} 



i defined them like this :
void sports::WriteLastSearchWord(string word)
{
    ofstream myfile;
    myfile.open(solo);
    myfile << word;
    myfile.close();
}

void Sports::ReadLastSearchWord(std::string &team, int &record)
{
	ifstream inFile(solo);
	getline(inFile, team);
	inFile >> record;
	inFile.close();
}
void Sports::setTextName(char *name3)
{
	solo = name3 ;// sets variable name for one text file

}
void Sports::SearchMatches(Match *matches, int size, std::string TeamName, int record)
{
      //this fuction is to overload the Searchmatches to store data of last team entered      

	//declare the result array
	Match SearchResult;
	//initalize the result counter
	int SearchResultCount=0;

	//int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches[i].Team1==TeamName || matches[i].Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				if (SearchResultCount == record)
				{
					//store the 
				//display the seasons
				//cout<<endl<<"("<<SearchResultCount<<") "<<matches[i].Season;
				
			     //store the matched match in the search result array
				SearchResult = matches[i];
					break;
				}
			}
	}
	cout<<endl;

	//check for results
	if(SearchResultCount>0)
	{
		//display the match information
		cout << SearchResult.Season << endl;
		cout <<SearchResult.Team1   << endl;
		cout <<"Over"<<endl;
		cout << SearchResult.Team2  << endl;
		cout << SearchResult.Result << endl;
	}
	else cout<<"No search result";
	cout<<endl;
}
void Sports::SearchMatches(Match *matches, int size, std::string TeamName)
{	

	
	//declare the result array
	Match SearchResult[2000];
	//initalize the result counter
	int SearchResultCount=0;

	int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches[i].Team1==TeamName || matches[i].Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				//display the seasons
				cout<<endl<<"("<< SearchResultCount << ") "<<matches[i].Season;
				//store the matched match in the search result array
				SearchResult[SearchResultCount] = matches[i];
			}
	}
	cout << endl;

	//check for results
	if(SearchResultCount>0)

	{
		
		
		cout << "which year would you like to view results "<<endl;
		cin >> SelectedNumber;

		SelectedNumber;
		
	    ofstream myfile;
	    myfile.open("recallTeam.txt",ios::app);
	    myfile << endl << SelectedNumber;
	    myfile.close();
		
		//display the match information
		cout << SearchResult[SelectedNumber].Season<< endl;
		cout << SearchResult[SelectedNumber].Team1 << endl;
		cout << "Over" << endl;
		cout << SearchResult[SelectedNumber].Team2 << endl;
		cout << SearchResult[SelectedNumber].Result << endl;
	}
	else cout << "No results found ";
	cout << endl;
}
Sports::int runSportsSearch()
{
        {
	ifstream inFile("nfl.txt");//want to remove file nfl.txt 
 //so the user
 can make a selection to what file they want open (such as nfl.txt,mlb.txt 
//or nba.txt 
	//initailze the matches ( array of strcuts )
	Match matches[2000];

	// create input stream to nba.txt file
	

	//It will holds the read lines from the file
	string Buffer;

	// check if the file is exist 
	if(!inFile.is_open())
	{
		//display the error message
		cout<<"Failed to open file"<<endl;
		return 0;
	}

	// initalize the counter
	int matchesCounter=0;
	while(!inFile.eof())
	{
		//read season
		getline(inFile,Buffer);
		matches[matchesCounter].Season = Buffer;
		//read team1 name
		getline(inFile,Buffer);
		matches[matchesCounter].Team1 = Buffer;
		//read the "over" string
		getline(inFile,Buffer);
		//read team2 name
		getline(inFile,Buffer);
		matches[matchesCounter].Team2 = Buffer;
		//read result
		getline(inFile,Buffer);
		matches[matchesCounter].Result = Buffer;
		//read the empty line
		getline(inFile,Buffer);
		//update the matches counter
		matchesCounter++;
	}

	
	//its used for Main menu selection
	char Check='1';

	while(Check !='3')
	{
		//Display the main menu
		DisplayMainMenu();
		cin>>Check;

		switch(Check)
		{
			//Search 
		case '1':
			{
				string TeamName="";
				
				getline(cin,TeamName);
				system("cls");
				cout << "Please Enter Team City And Team Name" <<endl;
				getline(cin,TeamName);//free's buffer
				WriteLastSearchWord(TeamName);
				SearchMatches(matches,matchesCounter,TeamName);
				break;
			}
			//Display the last search team
		case '2':
			{
				string team;
				int record;
				ReadLastSearchWord(team, record);
				system("cls");
				cout << "Last Recorded Viewed" <<endl;
				SearchMatches(matches,matchesCounter ,team , record);
	           
				break;
			}
			//Exit the program
		case '3':
			{
				exit(0);
			}
		default:continue;
		
		}
	}
}




my problem is how can i store a variable to hold a temporary value in the inFile until the user prompts which text will be sent from 1 of the other 3 classes to inFile i made coments to where file is ..i only have one problem which is inFile is an undeclared variable ..the other classes will all call the same functions from the sports class the only difference will be what file they open [Edited by - shadowfire36 on May 13, 2008 8:50:08 AM]

Share this post


Link to post
Share on other sites
Stowelly    156
forgive me if i miss the point here

but if you make inFile a protected member of sports class itll be usable throughout any classes that are inherited off of it

Share this post


Link to post
Share on other sites
shadowfire36    100
Quote:
Original post by Stowelly
forgive me if i miss the point here

but if you make inFile a protected member of sports class itll be usable throughout any classes that are inherited off of it



my bad i was a lil sleep last night when i was cutting and pasting i fixed it now

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this