Directory:Derek Elder/Programs/SortedMovieList
MyWikiBiz, Author Your Legacy — Sunday December 22, 2024
Jump to navigationJump to searchMovieType.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; }