Difference between revisions of "Directory:Derek Elder/Programs/SortedMovieList"
MyWikiBiz, Author Your Legacy — Wednesday October 22, 2025
Jump to navigationJump to searchDerek Elder (talk | contribs) (start of page) |
Derek Elder (talk | contribs) (rework) |
||
| Line 1: | Line 1: | ||
| + | ==MovieType.h== | ||
<pre> | <pre> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
#include <iostream> | #include <iostream> | ||
#include <fstream> | #include <fstream> | ||
| Line 12: | Line 7: | ||
using namespace std; | using namespace std; | ||
| − | class | + | #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: | public: | ||
| − | + | MovieType(); | |
| − | + | //Purpose:Default Constructor. | |
| − | //Default Constructor | + | //Precondition:None |
| − | //Purpose: | + | //Postcondition:None |
| − | //Precondition: | + | int CompareKeys(const MovieType& movie2) const; |
| − | //Postcondition: | + | //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: | |
| − | //Purpose: | + | // 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: | + | void Initialize(string title, int year, int gross, string studio, string stars); |
| − | bool | + | //Purpose:Initializes a movie item with data, basically a constructor. |
| − | + | //Precondition:None | |
| − | //Purpose: | + | //Postcondition:Populated with initial data. |
| − | //Precondition: | + | bool ReadOneMovieFromFile(istream& is = cin); |
| − | //Postcondition:1. | + | //Purpose:To read one movie from a file at a time. |
| − | // | + | //Precondition:ReadAllMovies() must be called. |
| − | void | + | //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. | |
| − | //Purpose: | + | void Display(ostream&os = cout) const; |
| − | //Precondition: | + | //Purpose:Displays one movie from the list. |
| − | //Postcondition:Data | + | //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) | |
| − | bool | ||
{ | { | ||
| − | int | + | int index; |
| − | + | string str = ""; | |
| − | string | ||
| − | + | getline(is,m_title); | |
| + | if(m_title == EndOfFile) | ||
{ | { | ||
| − | + | return false; | |
| − | getline( | + | } |
| − | + | else | |
| − | + | { | |
| − | + | is>>m_year; | |
| − | if( | + | 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 | else | ||
| − | + | m_stars = "None"; | |
| − | + | return true; | |
| − | |||
| − | |||
} | } | ||
| − | |||
} | } | ||
| − | void | + | 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 | + | 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) | |
{ | { | ||
| − | if( | + | int i = 0; |
| + | |||
| + | if(size == 0) | ||
{ | { | ||
| − | + | cout<<"List is empty"<<endl; | |
} | } | ||
| − | + | ||
| + | while((i < size) && (itemToRemove.CompareKeys(items[i]) == 1)) | ||
{ | { | ||
| − | + | i++; | |
} | } | ||
| − | + | listRemove(i,success); | |
| − | if( | + | } |
| + | 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 | + | void SortedMovieList::DisplayList() const |
{ | { | ||
int i; | int i; | ||
| − | |||
| − | for(i = 0; i < | + | for(i = 0; i < size; i++) |
{ | { | ||
| − | + | items[i].Display(); | |
| − | if( | + | 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 < | + | for(i = 0; i < size; i++) |
{ | { | ||
| − | + | if(itemToSearch.CompareKeys(items[i]) == 0) | |
| + | { | ||
| + | cout<<endl<<"The Movie has been found at index "<<i<<"."<<endl;//add ... | ||
| + | items[i].Display(); | ||
| + | break; //If the movie is found, go no further. | ||
| + | } | ||
| − | if( | + | 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 == | + | 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) | ||
{ | { | ||
| − | + | 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 | + | |
| + | 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 | + | 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; | ||
} | } | ||
</pre> | </pre> | ||
Revision as of 22:16, 1 November 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;//add ...
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;
}