Difference between revisions of "Directory:Derek Elder/Programs/SortedMovieList"

MyWikiBiz, Author Your Legacy — Sunday December 01, 2024
Jump to navigationJump to search
(start of page)
 
m
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
__TOC__
 +
==MovieType.h==
 
<pre>
 
<pre>
//Programmer:Derek Elder
 
//Assignment:Lab 2
 
//Section:0112
 
//Instructor:Hyman
 
//Time:T/TH 7:30 - 11:10 AM
 
 
 
#include <iostream>
 
#include <iostream>
 
#include <fstream>
 
#include <fstream>
Line 12: Line 8:
 
using namespace std;
 
using namespace std;
  
class BigInt
+
#ifndef __MovieType_H__
 +
#define __MovieType_H__
 +
 
 +
const string EndOfFile = "***";
 +
 
 +
class MovieType
 
{
 
{
friend BigInt operator+(const BigInt& num1, const BigInt& num2);
+
string m_title;
//Purpose:Operator overloaded, + operator will call AddBigInts.
+
int m_year;
//Precondition:None.
+
int m_gross;
//Postcondition:The two BigInts have been added together.
+
string m_studio;
friend ostream& operator<<(ostream& os, const BigInt& num);
+
string m_stars;
//Purpose:Operator overloaded, << operator will call PrintToBigInt.
 
//Precondition:None.
 
//Postcondition:The BigInt is printed.
 
friend bool AddBigInts(const BigInt& num1, const BigInt& num2, BigInt& sum);
 
//Purpose:Add two integers together into a sum.
 
//Precondition:BigInts num1 and num2 are valid.
 
//Postcondition:1.Return true if sum is valid.
 
// 2.Return false if there is overflow.
 
friend void firstIntegerLarger(const BigInt& largest, const BigInt& smallest, BigInt& sum);
 
//Purpose:Modularize AddBigInts function to make it more efficent.
 
//Precondition:BigInts num1 and num2 have been entered and contain good data.
 
//Postcondition:1.Sum has been populated by good data as long as numDigits <= MAX.
 
// 2.If there is overflow (numDigits > MAX) it will be indicated in operator+.
 
 
public:
 
public:
static const int MAX = 5;
+
MovieType();
BigInt();
+
//Purpose:Default Constructor.
//Default Constructor
+
//Precondition:None
//Purpose:Set numDigits to 0 to indicate an array is not populated.
+
//Postcondition:None
//Precondition:None.
+
int CompareKeys(const MovieType& movie2) const;
//Postcondition:Constructor has set numDigits to 0 indicating the array is not populated.
+
//Purpose:To compare two movies and determine where it should be inserted.
BigInt(const string& goodString);
+
//Precondition:Add function must be called and executed.
//Constructor
+
//Postcondition:String compare function is called to execute the comparison, resulting in two possible outcomes:
//Purpose:If num is intitalized in main with a value, the constructor calls StringToBigInt.
+
// 1.A positive value is returned and is added into the list.
//Precondition:None.
+
// 2.A 0 or a negative value is returned and isn't added into the list.
//Postcondition:BigInt num has been converted from a string into  an array.
+
void Initialize(string title, int year, int gross, string studio, string stars);
bool ReadBigInt(istream& is = cin);
+
//Purpose:Initializes a movie item with data, basically a constructor.
//default stream arg; ReadBigInt() means use "cin".
+
//Precondition:None
//Purpose:Read a BigInt, deposit into a string and call StringToBigInt.
+
//Postcondition:Populated with initial data.
//Precondition:None.
+
bool ReadOneMovieFromFile(istream& is = cin);
//Postcondition:1.Array is populated, data is valid.
+
//Purpose:To read one movie from a file at a time.
//             2.BigInt is too large, loops until an Int is entered that is small enough.
+
//Precondition:ReadAllMovies() must be called.
void PrintBigInt(ostream& os = cout) const;
+
//Postcondition:1.True is returned if one movie was taken from the data file and entered into the list.
//default stream arg; PrintBigInt() means use "cout".
+
// 2.False is returned if the EndOfFile flag was reached.
//Purpose:Print a BigInt in the same way it was entered by reversing the way it was stored into the array.
+
void Display(ostream&os = cout) const;
//Precondition:BigInt num is valid.
+
//Purpose:Displays one movie from the list.
//Postcondition:Data is printed on screen matching the way it was entered from the console.
+
//Precondition:List array must contain data.
private:
+
//Postcondition:Data listed to the console screen.
void StringToBigInt(const string& goodString);
 
//Purpose:Convert from characters to numeric data
 
//Precondition:Assume "goodString" is perfect.
 
//Postcondition:goodString is converted into numeric data and entered into an array.
 
int Digits[MAX];
 
int numDigits;
 
 
};
 
};
 
+
int MovieType::CompareKeys(const MovieType& movie2) const
class OverFlowException
+
{
 +
return (m_title.compare(movie2.m_title));
 +
}
 +
void MovieType::Initialize(string title, int year, int gross, string studio, string stars)
 +
{
 +
m_title = title;
 +
m_year = year;
 +
m_gross = gross;
 +
m_studio = studio;
 +
m_stars = stars;
 +
}
 +
void MovieType::Display(ostream& os) const
 
{
 
{
public:
+
if(m_title == EndOfFile)
BigInt m_num1, m_num2;
 
char m_op;
 
OverFlowException(const BigInt& num1,const BigInt& num2, char op)
 
 
{
 
{
m_num1 = num1;
+
os<<"";
m_num2 = num2;
 
m_op = op;
 
 
}
 
}
};
+
else
 
 
void main()
 
{
 
BigInt num1, num2;//("12345");
 
bool moreNumbers = true;
 
char update = ' ';
 
 
 
while(moreNumbers)
 
 
{
 
{
try
+
os<<"Title:\t"<<m_title<<endl;
{
+
os<<"Year:\t"<<m_year<<endl;
num1.ReadBigInt();
+
os<<"Gross:\t$ "<<m_gross<<endl;
num2.ReadBigInt();
+
os<<"Studio:\t"<<m_studio<<endl;
cout<<"The BigInt entered is: ";
+
os<<"Stars:\t"<<m_stars<<endl;
num1.PrintBigInt();
+
os<<endl;
cout<<"The BigInt entered is: ";
 
num2.PrintBigInt();
 
cout<<"The sum is: "<<num1 + num2;
 
}
 
catch(OverFlowException ex)
 
{
 
cout<<"The sum has caused OVERFLOW"<<endl;
 
}
 
 
 
cout<<"Do you wish to add more numbers? ";
 
cin>>update;
 
cin.ignore(50,'\n');
 
if(update == 'Y' || update == 'y')
 
{
 
moreNumbers = true;
 
}
 
else
 
{
 
moreNumbers = false;
 
}
 
 
}
 
}
cout<<"Program Terminated on request."<<endl;
 
 
}
 
}
 
+
bool MovieType::ReadOneMovieFromFile(istream& is)
bool BigInt::ReadBigInt(istream& is)
 
 
{
 
{
int len = 0;
+
int index;
bool tooBig = false;
+
string str = "";
string inputString = "";
 
  
while(!tooBig) //Initialize tooBig, if integer is too big loop until BigInt entered is valid.
+
getline(is,m_title);
 +
if(m_title == EndOfFile)
 
{
 
{
cout<<"Enter an integer: ";
+
return false;
getline(cin,inputString);
+
}
 
+
else
len = (int)inputString.length(); //Length of the string entered into len
+
{
 
+
is>>m_year;
if(len > MAX)
+
is>>m_gross;
{
+
is>>m_studio;
cout<<"The number you entered is too big, try again!"<<endl;
+
getline(is,str);
tooBig = false;
+
index = (int)str.find_first_of(",",0);
}
+
if(index > 0)
 +
m_stars = str.substr(index+2,(str.length() - (index+1)));
 
else
 
else
{
+
m_stars = "None";
StringToBigInt(inputString);
+
return true;
tooBig = true;
 
}
 
 
}
 
}
return true;
 
 
}
 
}
void BigInt::PrintBigInt(ostream& os) const
+
MovieType::MovieType()
 +
:m_title(""), m_year(-1), m_gross(-1), m_studio(""), m_stars("")
 +
{}
 +
#endif
 +
</pre>
 +
==SortedMovieList.h==
 +
<pre>
 +
#include <iostream>
 +
#include <fstream>
 +
#include <string>
 +
#include <iomanip>
 +
#include "MovieType.h"
 +
using namespace std;
 +
typedef MovieType MovieListItemType;
 +
 
 +
const int MAX = 20;
 +
int counter = 0;
 +
 
 +
class SortedMovieList
 +
{
 +
public:
 +
SortedMovieList();
 +
//Purpose:Default Constructor.
 +
//Precondition:None
 +
//Postcondition:None
 +
void listAdd(const MovieListItemType& newItem, bool& success);
 +
//Purpose:To insert a movie in the array.
 +
//Precondition:ReadAllMovies function executes.
 +
//Postcondition:listInsert function is called to find the correct position for the movie to be inserted.
 +
void listInsert(int index, MovieListItemType newItem, bool& success);
 +
//Purpose:To insert a movie in the correct position in the array.
 +
//Precondition:listAdd function is called.
 +
//Postcondition:Item is inserted into the correct place in the list.
 +
void listSubtract(const MovieListItemType& itemToRemove, bool& success);
 +
//Purpose:To remove a movie from the array.
 +
//Precondition:Remove choice is called from the menu.
 +
//Postcondition:The movie is removed from the list
 +
void listRemove(int index, bool& success);
 +
//Purpose:To remove a movie from the array.
 +
//Precondition:Remove choice is called from the menu.
 +
//Postcondition:The movie is removed from the list.
 +
void ReadAllMovies();
 +
//Purpose:Reads all of the movies in an input file.
 +
//Precondition:ReadOneMovieFromFile executes correctly.
 +
//Postcondition:The list is populated with all of the movies from the file.
 +
void DisplayList() const;
 +
//Purpose:Displays the entire list of movies.
 +
//Precondition:Array is populated from ReadAllMovies().
 +
//Postcondition:The list is displayed to the console.
 +
void Search(const MovieListItemType& itemToSearch, bool& success);
 +
//Purpose:To search through the list for the correct movie.
 +
//Precondition:Search called from the menu.
 +
//Postcondition:1.If the movie is found the index where it was found is returned.
 +
// 2.If the movie is not found the user will be notified.
 +
 +
private:
 +
MovieListItemType items[MAX];
 +
int size;
 +
};
 +
 
 +
SortedMovieList::SortedMovieList()
 +
:size(0)
 +
{}
 +
void SortedMovieList::listAdd(const MovieListItemType& newItem, bool& success)
 
{
 
{
int counter = numDigits - 1;
+
int i = 0;
  
for(int i = 0; i < numDigits; i++)
+
if(size == 0)
 +
{
 +
listInsert(i,newItem,success);
 +
return;
 +
}
 +
while((i < size) && (newItem.CompareKeys(items[i]) == 1))
 
{
 
{
cout<<Digits[counter];
+
i++;
counter--;
 
 
}
 
}
cout<<endl;
+
 
 +
listInsert(i,newItem,success);
 +
}
 +
void SortedMovieList::listInsert(int index, MovieListItemType newItem, bool& success)
 +
{
 +
  success = ((index >= 0) && (index <= size) && (size < MAX));
 +
 
 +
  if(success)
 +
  {
 +
  for(int pos = size; pos >= index; pos--)
 +
  {
 +
  items[pos+1] = items[pos];
 +
  }
 +
  items[index] = newItem;
 +
  size++;
 +
  counter++;
 +
  }
 
}
 
}
bool AddBigInts(const BigInt& num1, const BigInt& num2, BigInt& sum)
+
void SortedMovieList::listSubtract(const MovieListItemType& itemToRemove, bool& success)
 
{
 
{
if(num1.numDigits >= num2.numDigits)
+
int i = 0;
 +
 
 +
if(size == 0)
 
{
 
{
firstIntegerLarger(num1, num2, sum);
+
cout<<"List is empty"<<endl;
 
}
 
}
else
+
 
 +
while((i < size) && (itemToRemove.CompareKeys(items[i]) == 1))
 
{
 
{
firstIntegerLarger(num2, num1, sum);
+
i++;
 
}
 
}
  
//If Overflow return false, otherwise return true
+
listRemove(i,success);
if(sum.numDigits > MAX)
+
}
 +
void SortedMovieList::listRemove(int index, bool& success)
 +
{
 +
success = ((index >= 0) && (index < size));
 +
 
 +
if(success)
 
{
 
{
return false;
+
  for(int fromPosition = index + 1; fromPosition < size; fromPosition++)
 +
  items[fromPosition-1] = items[fromPosition];
 +
  size--;
 +
  counter--;
 
}
 
}
else
+
}
 +
void SortedMovieList::ReadAllMovies()
 +
{
 +
MovieListItemType newItem;
 +
ifstream Input;
 +
int i = 0;
 +
bool success;
 +
string inputFile = "";
 +
 
 +
Input.clear();
 +
cout<<"Welcome, please enter the name of your Input file: ";
 +
cin>>inputFile;
 +
cin.ignore(50,'\n');
 +
Input.open(inputFile.c_str());
 +
 
 +
while(newItem.ReadOneMovieFromFile(Input))
 
{
 
{
return true;
+
this->listAdd(newItem,success);
 
}
 
}
 +
 +
Input.close();
 
}
 
}
void firstIntegerLarger(const BigInt& largest, const BigInt& smallest, BigInt& sum)
+
void SortedMovieList::DisplayList() const
 
{
 
{
 
int i;
 
int i;
int remainder = 0;
 
  
for(i = 0; i < smallest.numDigits; i++)
+
for(i = 0; i < size; i++)
 
{
 
{
sum.Digits[i] = largest.Digits[i] + smallest.Digits[i] + remainder;
+
items[i].Display();
  
if(sum.Digits[i] >= 10)
+
if(i%3 == 0) //Every 3 movies, pause.
 
{
 
{
sum.Digits[i] = (sum.Digits[i] - 10);
+
cout<<"Press 'ENTER' if you wish to display more movies";
remainder = 1;
+
cin.get();
}
+
cout<<endl;
else
 
{
 
remainder = 0;
 
 
}
 
}
 
}
 
}
 +
}
 +
void SortedMovieList::Search(const MovieListItemType& itemToSearch, bool& success)
 +
{
 +
int i;
  
for(; i < largest.numDigits; i++)
+
for(i = 0; i < size; i++)
 
{
 
{
sum.Digits[i] = largest.Digits[i] + remainder;
+
if(itemToSearch.CompareKeys(items[i]) == 0)
 +
{
 +
cout<<endl<<"The Movie has been found at index "<<i<<"."<<endl;
 +
items[i].Display();
 +
break; //If the movie is found, go no further.
 +
}
  
if(sum.Digits[i] >= 10)
+
if(itemToSearch.CompareKeys(items[i]) == -1)
 
{
 
{
sum.Digits[i] = (sum.Digits[i] - 10);
+
cout<<endl<<"The movie you wished to search for has not been found."<<endl;
remainder = 1;
+
break; //If you have gone past the point where the movie should be stored
 +
      //in the list, go no further.
 
}
 
}
else
 
{
 
remainder = 0;
 
}
 
 
}
 
}
  
if(i == largest.numDigits && remainder == 1)
+
if(i == size)
 +
cout<<endl<<"The movie you wished to search for has not been found."<<endl;
 +
}
 +
</pre>
 +
==Main.cpp==
 +
<pre>
 +
#include <iostream>
 +
#include <fstream>
 +
#include <string>
 +
#include <iomanip>
 +
#include "MovieType.h"
 +
#include "SortedMovieList.h"
 +
using namespace std;
 +
 
 +
void clearScreen();
 +
//Purpose:To clear the screen.
 +
//Precondition:None
 +
//Postcondition:Screen is cleared.
 +
char displayMenuAndGetSelection();
 +
//Purpose:To display the menu and get the selection for searching.
 +
//Precondition:None
 +
//Postcondition:Search choice is entered and appropriate function is called.
 +
void addPerson(SortedMovieList& movieList);
 +
//Purpose:To add a person to the list.
 +
//Precondition:Choice must be selected from the menu.
 +
//Postcondition:List is searched and results are output to the console.
 +
void removePerson(SortedMovieList& movieList);
 +
//Purpose:To remove a person from the list.
 +
//Precondition:Choice must be selected from the menu.
 +
//Postcondition:List is searched and results are output to the console.
 +
void Pause();
 +
//Purpose:To pause the program and allow the user a break.
 +
//Precondition:None
 +
//Postcondition:None
 +
void searchList(SortedMovieList& movieList);
 +
//Purpose:To call the search function and find a movie in the list.
 +
//Precondition:Choice must be selected from the menu.
 +
//Postcondition:Search function is called.
 +
void quitProgram();
 +
//Purpose:To inform the user the program has been terminated.
 +
//Precondition:None
 +
//Postcondition:Program terminated.
 +
 
 +
void main()
 +
{
 +
char menuChoice = ' ';
 +
bool done = false;
 +
SortedMovieList movieList;
 +
 
 +
movieList.ReadAllMovies();
 +
 
 +
while(!done)
 
{
 
{
sum.Digits[i] = 1;
+
menuChoice = displayMenuAndGetSelection();
sum.numDigits = largest.numDigits + 1;
+
clearScreen();
}
+
switch(menuChoice)
else
+
{
{
+
case '1':
sum.numDigits = largest.numDigits;
+
movieList.DisplayList();
 +
Pause();
 +
done = false;
 +
break;
 +
case '2':
 +
searchList(movieList);
 +
Pause();
 +
done = false;
 +
break;
 +
case '3':
 +
removePerson(movieList);
 +
Pause();
 +
done = false;
 +
break;
 +
case '4':
 +
addPerson(movieList);
 +
Pause();
 +
done = false;
 +
break;
 +
case '5':
 +
cout<<"There are currently "<<counter<<" movies in the list."<<endl;
 +
Pause();
 +
done = false;
 +
break;
 +
case '6':
 +
quitProgram();
 +
done = true;
 +
break;
 +
default:
 +
cout<<"Incorrect choice selected"<<endl;
 +
Pause();
 +
done = false;
 +
break;
 +
}
 
}
 
}
 
}
 
}
void BigInt::StringToBigInt(const string& goodString)
+
 
 +
void clearScreen()
 +
{
 +
system("cls");
 +
}
 +
char displayMenuAndGetSelection()
 +
{
 +
char choice;
 +
clearScreen();
 +
cout<<endl<<endl<<endl;
 +
cout<<"'1' -- View the list."<<endl<<endl;
 +
cout<<"'2' -- Search the list."<<endl<<endl;
 +
cout<<"'3' -- Delete a movie from the list."<<endl<<endl;
 +
cout<<"'4' -- Add a movie to the list."<<endl<<endl;
 +
cout<<"'5' -- Count the number of movies in the list."<<endl<<endl;
 +
cout<<"'6' -- Quit the program."<<endl<<endl;
 +
cin>>choice;
 +
cin.ignore(50,'\n');
 +
return choice;
 +
}
 +
void addPerson(SortedMovieList& movieList)
 +
{
 +
MovieType movie;
 +
string title, studio, stars;
 +
int year, gross;
 +
cout<<"Enter title: ";
 +
getline(cin,title,'\n');
 +
cout<<"Enter year: ";
 +
cin>>year;
 +
cout<<"Enter gross: ";
 +
cin>>gross;
 +
cout<<"Enter studio: ";
 +
cin>>studio;
 +
cout<<"Enter stars: ";
 +
cin>>stars;
 +
movie.Initialize(title,year,gross,studio,stars);
 +
bool success;
 +
movieList.listAdd(movie,success);
 +
 
 +
cout<<endl<<"The movie has been added to the list."<<endl;
 +
}
 +
void removePerson(SortedMovieList& movieList)
 
{
 
{
int counter = 0;
+
MovieType movie;
string str = "";
+
string title;
str = goodString;
+
cout<<"Enter the title of the movie you wish to remove: ";
numDigits = (int)str.length();
+
getline(cin,title,'\n');
char ch = ' ';
+
movie.Initialize(title,0,0,"","");
 +
bool success;
 +
movieList.listSubtract(movie,success);
  
for(int i = numDigits-1; i >= 0; i--) //Reverse the string and position of numbers
+
cout<<endl<<"The movie has been removed from the list."<<endl;
{
 
ch = str[i]; //Convert from char to numeric value
 
Digits[counter] = ch - '0'; //char c = '2';
 
counter++; //int n = c - '0';
 
}
 
 
}
 
}
BigInt operator+(const BigInt& num1, const BigInt& num2)
+
void searchList(SortedMovieList& movieList)
 
{
 
{
BigInt sum;
+
MovieType movie;
if(AddBigInts(num1,num2,sum) == false)
+
string title;
{
+
cout<<"Enter the title of the movie you wish to search for: ";
OverFlowException ex(num1,num2,'+');
+
getline(cin,title,'\n');
throw ex;
+
bool success;
}
+
movie.Initialize(title,0,0,"","");
else
+
movieList.Search(movie,success);
return sum;
+
 
 +
cout<<endl<<"The search has been conducted."<<endl;
 
}
 
}
ostream& operator<<(ostream& os, const BigInt& num)
+
void Pause()
 
{
 
{
num.PrintBigInt(os);
+
cout<<endl<<"Press 'ENTER' to continue..."<<endl;
return os;
+
cin.get();
 
}
 
}
BigInt::BigInt()
+
void quitProgram()
:numDigits(0)
 
{}
 
BigInt::BigInt(const string& goodString)
 
 
{
 
{
StringToBigInt(goodString);
+
cout<<"Program terminated, good bye!"<<endl;
 +
cout<<endl;
 
}
 
}
 
</pre>
 
</pre>

Latest revision as of 00:51, 18 December 2007

MovieType.h

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

#ifndef __MovieType_H__
#define __MovieType_H__

const string EndOfFile = "***";

class MovieType
{
	string m_title;
	int m_year;
	int m_gross;
	string m_studio;
	string m_stars;
public:
	MovieType();
	//Purpose:Default Constructor.
	//Precondition:None
	//Postcondition:None
	int CompareKeys(const MovieType& movie2) const;
	//Purpose:To compare two movies and determine where it should be inserted.
	//Precondition:Add function must be called and executed.
	//Postcondition:String compare function is called to execute the comparison, resulting in two possible outcomes:
	//		1.A positive value is returned and is added into the list.
	//		2.A 0 or a negative value is returned and isn't added into the list.
	void Initialize(string title, int year, int gross, string studio, string stars);
	//Purpose:Initializes a movie item with data, basically a constructor.
	//Precondition:None
	//Postcondition:Populated with initial data.
	bool ReadOneMovieFromFile(istream& is = cin);
	//Purpose:To read one movie from a file at a time.
	//Precondition:ReadAllMovies() must be called.
	//Postcondition:1.True is returned if one movie was taken from the data file and entered into the list.
	//		2.False is returned if the EndOfFile flag was reached.
	void Display(ostream&os = cout) const;
	//Purpose:Displays one movie from the list.
	//Precondition:List array must contain data.
	//Postcondition:Data listed to the console screen.
};
int MovieType::CompareKeys(const MovieType& movie2) const
{
	return (m_title.compare(movie2.m_title));
}
void MovieType::Initialize(string title, int year, int gross, string studio, string stars)
{
	m_title = title;
	m_year = year;
	m_gross = gross;
	m_studio = studio;
	m_stars = stars;
}
void MovieType::Display(ostream& os) const
{
	if(m_title == EndOfFile)
	{
		os<<"";
	}
	else
	{
		os<<"Title:\t"<<m_title<<endl;
		os<<"Year:\t"<<m_year<<endl;
		os<<"Gross:\t$ "<<m_gross<<endl;
		os<<"Studio:\t"<<m_studio<<endl;
		os<<"Stars:\t"<<m_stars<<endl;
		os<<endl;
	}
}
bool MovieType::ReadOneMovieFromFile(istream& is)
{
	int index;
	string str = "";

	getline(is,m_title);
	if(m_title == EndOfFile)
	{
		return false;
	}
	else
	{
		is>>m_year;
		is>>m_gross;
		is>>m_studio;
		getline(is,str);
		index = (int)str.find_first_of(",",0);
		if(index > 0)
			m_stars = str.substr(index+2,(str.length() - (index+1)));
		else
			m_stars = "None";
		return true;
	}
}
MovieType::MovieType()
:m_title(""), m_year(-1), m_gross(-1), m_studio(""), m_stars("")
{}
#endif

SortedMovieList.h

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include "MovieType.h"
using namespace std;
typedef MovieType MovieListItemType;

const int MAX = 20;
int counter = 0;

class SortedMovieList
{
public:
	SortedMovieList();
	//Purpose:Default Constructor.
	//Precondition:None
	//Postcondition:None
	void listAdd(const MovieListItemType& newItem, bool& success);
	//Purpose:To insert a movie in the array.
	//Precondition:ReadAllMovies function executes.
	//Postcondition:listInsert function is called to find the correct position for the movie to be inserted.
	void listInsert(int index, MovieListItemType newItem, bool& success);
	//Purpose:To insert a movie in the correct position in the array.
	//Precondition:listAdd function is called.
	//Postcondition:Item is inserted into the correct place in the list.
	void listSubtract(const MovieListItemType& itemToRemove, bool& success);
	//Purpose:To remove a movie from the array.
	//Precondition:Remove choice is called from the menu.
	//Postcondition:The movie is removed from the list
	void listRemove(int index, bool& success);
	//Purpose:To remove a movie from the array.
	//Precondition:Remove choice is called from the menu.
	//Postcondition:The movie is removed from the list.
	void ReadAllMovies();
	//Purpose:Reads all of the movies in an input file.
	//Precondition:ReadOneMovieFromFile executes correctly.
	//Postcondition:The list is populated with all of the movies from the file.
	void DisplayList() const;
	//Purpose:Displays the entire list of movies.
	//Precondition:Array is populated from ReadAllMovies().
	//Postcondition:The list is displayed to the console.
	void Search(const MovieListItemType& itemToSearch, bool& success);
	//Purpose:To search through the list for the correct movie.
	//Precondition:Search called from the menu.
	//Postcondition:1.If the movie is found the index where it was found is returned.
	//		2.If the movie is not found the user will be notified.
	
private:
	MovieListItemType items[MAX];
	int size;
};

SortedMovieList::SortedMovieList()
:size(0)
{}
void SortedMovieList::listAdd(const MovieListItemType& newItem, bool& success)
{
	int i = 0;

	if(size == 0)
	{
		listInsert(i,newItem,success);
		return;
	}
	while((i < size) && (newItem.CompareKeys(items[i]) == 1))
	{
		i++;
	}

	listInsert(i,newItem,success);
}
void SortedMovieList::listInsert(int index, MovieListItemType newItem, bool& success) 
{ 
   success = ((index >= 0) && (index <= size) && (size < MAX));

   if(success)
   {
	   for(int pos = size; pos >= index; pos--)
	   {
		   items[pos+1] = items[pos];
	   }
	   items[index] = newItem; 
	   size++;
	   counter++;
   }
}
void SortedMovieList::listSubtract(const MovieListItemType& itemToRemove, bool& success)
{
	int i = 0;

	if(size == 0)
	{
		cout<<"List is empty"<<endl;
	}

	while((i < size) && (itemToRemove.CompareKeys(items[i]) == 1))
	{
		i++;
	}

	listRemove(i,success);
}
void SortedMovieList::listRemove(int index, bool& success)
{
	success = ((index >= 0) && (index < size));

	if(success)
	{
	   for(int fromPosition = index + 1; fromPosition < size; fromPosition++)
		   items[fromPosition-1] = items[fromPosition];
	   size--;
	   counter--;
	}
}
void SortedMovieList::ReadAllMovies()
{
	MovieListItemType newItem;
	ifstream Input;
	int i = 0;
	bool success;
	string inputFile = "";

	Input.clear();
	cout<<"Welcome, please enter the name of your Input file: ";
	cin>>inputFile;
	cin.ignore(50,'\n');
	Input.open(inputFile.c_str());

	while(newItem.ReadOneMovieFromFile(Input))
	{
		this->listAdd(newItem,success);
	}

	Input.close();
}
void SortedMovieList::DisplayList() const
{
	int i;

	for(i = 0; i < size; i++)
	{
		items[i].Display();

		if(i%3 == 0) //Every 3 movies, pause.
		{
			cout<<"Press 'ENTER' if you wish to display more movies";
			cin.get();
			cout<<endl;
		}
	}
}
void SortedMovieList::Search(const MovieListItemType& itemToSearch, bool& success)
{
	int i;

	for(i = 0; i < size; i++)
	{
		if(itemToSearch.CompareKeys(items[i]) == 0)
		{
			cout<<endl<<"The Movie has been found at index "<<i<<"."<<endl;
			items[i].Display();
			break; //If the movie is found, go no further.
		}

		if(itemToSearch.CompareKeys(items[i]) == -1)
		{
			cout<<endl<<"The movie you wished to search for has not been found."<<endl;
			break; //If you have gone past the point where the movie should be stored
			       //in the list, go no further.
		}
	}

	if(i == size)
		cout<<endl<<"The movie you wished to search for has not been found."<<endl;
}

Main.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include "MovieType.h"
#include "SortedMovieList.h"
using namespace std;

void clearScreen();
//Purpose:To clear the screen.
//Precondition:None
//Postcondition:Screen is cleared.
char displayMenuAndGetSelection();
//Purpose:To display the menu and get the selection for searching.
//Precondition:None
//Postcondition:Search choice is entered and appropriate function is called.
void addPerson(SortedMovieList& movieList);
//Purpose:To add a person to the list.
//Precondition:Choice must be selected from the menu.
//Postcondition:List is searched and results are output to the console.
void removePerson(SortedMovieList& movieList);
//Purpose:To remove a person from the list.
//Precondition:Choice must be selected from the menu.
//Postcondition:List is searched and results are output to the console.
void Pause();
//Purpose:To pause the program and allow the user a break.
//Precondition:None
//Postcondition:None
void searchList(SortedMovieList& movieList);
//Purpose:To call the search function and find a movie in the list.
//Precondition:Choice must be selected from the menu.
//Postcondition:Search function is called.
void quitProgram();
//Purpose:To inform the user the program has been terminated.
//Precondition:None
//Postcondition:Program terminated.

void main()
{
	char menuChoice = ' ';
	bool done = false;
	SortedMovieList movieList;

	movieList.ReadAllMovies();

	while(!done)
	{
		menuChoice = displayMenuAndGetSelection();
		clearScreen();
		switch(menuChoice)
		{
			case '1':
				movieList.DisplayList();
				Pause();
				done = false;
				break;
			case '2':
				searchList(movieList);
				Pause();
				done = false;
				break;
			case '3':
				removePerson(movieList);
				Pause();
				done = false;
				break;
			case '4':
				addPerson(movieList);
				Pause();
				done = false;
				break;
			case '5':
				cout<<"There are currently "<<counter<<" movies in the list."<<endl;
				Pause();
				done = false;
				break;
			case '6':
				quitProgram();
				done = true;
				break;
			default:
				cout<<"Incorrect choice selected"<<endl;
				Pause();
				done = false;
				break;
		}
	}
}

void clearScreen()
{
	system("cls");
}
char displayMenuAndGetSelection()
{
	char choice;
	clearScreen();
	cout<<endl<<endl<<endl;
	cout<<"'1' -- View the list."<<endl<<endl;
	cout<<"'2' -- Search the list."<<endl<<endl;
	cout<<"'3' -- Delete a movie from the list."<<endl<<endl;
	cout<<"'4' -- Add a movie to the list."<<endl<<endl;
	cout<<"'5' -- Count the number of movies in the list."<<endl<<endl;
	cout<<"'6' -- Quit the program."<<endl<<endl;
	cin>>choice;
	cin.ignore(50,'\n');
	return choice;
}
void addPerson(SortedMovieList& movieList)
{
	MovieType movie;
	string title, studio, stars;
	int year, gross;
	cout<<"Enter title: ";
	getline(cin,title,'\n');
	cout<<"Enter year: ";
	cin>>year;
	cout<<"Enter gross: ";
	cin>>gross;
	cout<<"Enter studio: ";
	cin>>studio;
	cout<<"Enter stars: ";
	cin>>stars;
	movie.Initialize(title,year,gross,studio,stars);
	bool success;
	movieList.listAdd(movie,success);

	cout<<endl<<"The movie has been added to the list."<<endl;
}
void removePerson(SortedMovieList& movieList)
{
	MovieType movie;
	string title;
	cout<<"Enter the title of the movie you wish to remove: ";
	getline(cin,title,'\n');
	movie.Initialize(title,0,0,"","");
	bool success;
	movieList.listSubtract(movie,success);

	cout<<endl<<"The movie has been removed from the list."<<endl;
}
void searchList(SortedMovieList& movieList)
{
	MovieType movie;
	string title;
	cout<<"Enter the title of the movie you wish to search for: ";
	getline(cin,title,'\n');
	bool success;
	movie.Initialize(title,0,0,"","");
	movieList.Search(movie,success);

	cout<<endl<<"The search has been conducted."<<endl;
}
void Pause()
{
	cout<<endl<<"Press 'ENTER' to continue..."<<endl;
	cin.get();
}
void quitProgram()
{
	cout<<"Program terminated, good bye!"<<endl;
	cout<<endl;
}