Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

.If you are familiar with FLTK, can you please help me converting this code into GUI using FLTK. I am a beginner so any help

.If you are familiar with FLTK, can you please help me converting this code into GUI using FLTK. I am a beginner so any help would be appreciated.

#include

#include

#include

using namespace std;

/*////////////////

Patron Class

///////////////*/

class Patron{

public:

Patron(string patron_name, string patron_number) : name(patron_name), number(patron_number) {}

Patron() : name("unknown"), number("unknown") {}

string to_string();

string get_patron_name();

string get_patron_number();

private:

string name;

string number;

};

string Patron::to_string() {return name + " (" + number + ")";}

string Patron::get_patron_name() {return name;}

string Patron::get_patron_number() {return number;}

/*//////////////////

Media Class

///////////////////*/

class Media{

public:

Media(string m_title, string m_leading_actor, string m_director, int m_copyright, string m_genre, string m_media_type, string m_age_rating, int m_id) : title(m_title), leading_actor(m_leading_actor), director(m_director), copyright(m_copyright), genre(m_genre), age_rating(m_age_rating), media_type(m_media_type), id(m_id), checked_out(false), patron(Patron()) {}

bool is_checked_out();

void check_out(Patron p_patron);

void check_in();

string to_string();

//Throw execption if check out called and already checked out

//Throw exception if check in called and already checked in

class Invalid_transaction : public exception {};

private:

string title;

string leading_actor;

string director;

int copyright;

string genre;

string media_type;

string age_rating;

int id;

bool checked_out;

Patron patron;

};

bool Media::is_checked_out(){ return checked_out; }

void Media::check_out(Patron p_patron) {

if (checked_out) {

throw Invalid_transaction();

} else {

patron = p_patron;

checked_out = true;

}

}

void Media::check_in() {

if (checked_out) {

checked_out = false;

} else {

throw Invalid_transaction();

}

}

string Media::to_string() {

string med= "\"" + title + "\"" + " with " + leading_actor + ". Directed by " + director + ". " + std::to_string(copyright) + " ("+ genre + "). " + age_rating + ". " + media_type + ". ID: " + std::to_string(id);

if (checked_out) {

med += " Checked out to " + patron.get_patron_name() +

" (" + patron.get_patron_number() + ")";

}

return med;

}

/*//////////////////

Video Store Class

///////////////////*/

class Video_Store{

public:

void add_media(Media med);

void add_patron(Patron pat);

void check_out(int media_index, int patron_index);

void check_in(int media_index);

string media_to_string(int media_index);

string patron_to_string(int patron_index);

int number_of_media();

int number_of_patrons();

void easter_egg();

private:

vector medias;

vector patrons;

};

void Video_Store::add_media(Media med) {

medias.push_back(med);

}

void Video_Store::add_patron(Patron pat) {

patrons.push_back(pat);

}

void Video_Store::check_out(int media_index, int patron_index) {

medias[media_index].check_out(patrons[patron_index]);

}

void Video_Store::check_in(int media_index) {

medias[media_index].check_in();

}

string Video_Store::media_to_string(int media_index) {

return medias[media_index].to_string();

}

string Video_Store::patron_to_string(int patron_index) {

return patrons[patron_index].to_string();

}

int Video_Store::number_of_media() {

return medias.size();

}

int Video_Store::number_of_patrons() {

return patrons.size();

}

void Video_Store::easter_egg() {

add_media(Media("Spaceballs", "Mel Brooks", "Mel Brooks", 1987, "Comedy", "DVD", "PG", 1001));

add_media(Media("Jackass The Movie", "Johnny Knoxville", "Jeff Fremaine", 2002, "Comedy", "DVD", "R", 1005));

add_media(Media("Star Trek: Nemesis", "Patrick Stewart", "Stuart Baird", 2002, "Science Fiction", "DVD", "PG-13", 2001));

add_media(Media("Dead Poets Society", "Robin Williams", "Peter Weir", 1989, "Drama", "DVD", "PG", 1015));

add_media(Media("Fight Club", "Brad Pitt", "David Fincher", 1999, "Action", "Blu-Ray", "R", 1102));

add_media(Media("When in Rome", "Kristen Bell", "Mark Steven Johnson", 2010, "Romance", "PG-13", "Blu-Ray", 3000));

add_patron(Patron("Larry", "817-555-1111"));

add_patron(Patron("Curly", "817-555-2222"));

add_patron(Patron("Moe", "817-555-3333"));

}

// /////////////////////////////////////

// V I E W

// /////////////////////////////////////

class View {

public:

View(Video_Store& vs) : video_store(vs) { }

string get_menu();

string get_media_list();

string get_patron_list();

string get_help();

private:

Video_Store& video_store;

};

string View::get_menu() {

string menu = R"(

===================================

C1325 Video Store Management System

===================================

Media

------------

(1) Add Media

(2) List all Media

(3) Check out Media

(4) Check in Media

Patrons

-------

(5) Add patron

(6) List all patrons

Utility

-------

(9) Help

(0) Exit

)";

return menu;

}

string View::get_media_list() {

string list = R"(

-------------------------

List of Video Store Media

-------------------------

)";

for (int i=0; i

list += std::to_string(i) + ") " + video_store.media_to_string(i) + ' ';

}

return list;

}

string View::get_patron_list() {

string list = R"(

-----------------------

List of Beloved Patrons

-----------------------

)";

for (int i=0; i

list += std::to_string(i) + ") " + video_store.patron_to_string(i) + ' ';

}

return list;

}

string View::get_help() {

return "Try harder.";

}

// /////////////////////////////////////

// C O N T R O L L E R

// /////////////////////////////////////

class Controller {

public:

Controller (Video_Store& vs, View& view) : video_store(vs), view(view) { }

void cli();

void execute_cmd(int cmd);

private:

int get_int(string prompt, int max_int);

Video_Store& video_store;

View& view;

};

void Controller::cli() {

int cmd = -1;

while (cmd != 0) {

cout << view.get_menu() << endl;

cout << "Command? ";

cin >> cmd;

cin.ignore(); // consume

execute_cmd(cmd);

}

}

int Controller::get_int(string prompt, int max_int) {

int result;

while(true) {

cout << prompt;

cin >> result;

cin.ignore(); // consume

if (0 <= result && result <= max_int) break;

cout << "Please enter an integer between 0 and " << max_int << endl;

}

return result;

}

void Controller::execute_cmd(int cmd) {

if (cmd == 1) { // Add media

string title, leading_actor, director, genre, media_type, age_rating;

int copyright, id;

cout << "Title? ";

getline(cin, title);

cout << "Leading Actor? ";

getline(cin, leading_actor);

cout << "Director? ";

getline(cin, director);

cout << "Copyright date? ";

cin >> copyright;

cin.ignore();

cout << "Genre?";

getline(cin, genre);

cout << "Media Type?";

getline(cin, media_type);

cout << "Age Rating";

getline(cin, age_rating);

cout << "ID? ";

cin >> id;

cin.ignore();

video_store.add_media(Media(title, leading_actor, director, copyright, genre, age_rating, media_type, id));

} else if (cmd == 2) { // List all media

cout << view.get_media_list();

} else if (cmd == 3) { // Check out media

int med, pat;

cout << view.get_media_list();

med = get_int("Media number? ", video_store.number_of_media() - 1);

cout << view.get_patron_list();

pat = get_int("Patron number? ", video_store.number_of_patrons() - 1);

try {

video_store.check_out(med, pat);

} catch (Media::Invalid_transaction e) {

cerr << "##### That media is not available for check out" << endl;

}

} else if (cmd == 4) { // Check in media

int med;

cout << view.get_media_list();

med = get_int("Media number? ", video_store.number_of_media() - 1);

try {

video_store.check_in(med);

} catch (Media::Invalid_transaction e) {

cerr << "##### That media is not available for check in" << endl;

}

} else if (cmd == 5) { // Add patron

string name, number;

cout << "Name? ";

getline(cin, name);

cout << "Phone number? ";

getline(cin, number);

video_store.add_patron(Patron(name, number));

} else if (cmd == 6) { // List all patrons

cout << view.get_patron_list();

} else if (cmd == 9) { // Help

cout << view.get_help();

} else if (cmd == 0) { // Exit

} else if (cmd == 99) { // Easter Egg

video_store.easter_egg();

} else {

cerr << "**** Invalid command - type 9 for help" << endl << endl;

}

}

int main()

{

Video_Store vs;

View view{vs};

Controller controller(vs, view);

controller.cli();

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

T Sql Fundamentals

Authors: Itzik Ben Gan

4th Edition

0138102104, 978-0138102104

More Books

Students also viewed these Databases questions

Question

8. Explain the difference between translation and interpretation.

Answered: 1 week ago

Question

10. Discuss the complexities of language policies.

Answered: 1 week ago

Question

1. Understand how verbal and nonverbal communication differ.

Answered: 1 week ago