Created
October 29, 2017 16:50
-
-
Save marsicdev/d5eb37336eac65a654790f8a3e2f2262 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
/** | |
* Represents person | |
* @constructor | |
* @param {string} name - First name | |
* @param {string} surname - Last name | |
*/ | |
function Person(name, surname) { | |
this.name = name; | |
this.surname = surname; | |
} | |
/** | |
* Returns formated string in format | |
* first name last name | |
*/ | |
Person.prototype.getData = function () { | |
return this.name + " " + this.surname; | |
}; | |
/** | |
* Represents seat | |
* @param {number} seatNum - Seat from 1 to 100 | |
* @param {string} category - Business or Economy | |
*/ | |
function Seat(seatNum, category) { | |
this.number = seatNum; | |
this.category = category || "E"; | |
}; | |
/** | |
* Returns formated string in format | |
* seat number and seat category | |
*/ | |
Seat.prototype.getData = function () { | |
return this.number + ", " + this.category.toUpperCase(); | |
}; | |
/** | |
* Represents Passenger | |
* @constructor | |
* @param {Person} person - Person object | |
* @param {Seat} seat - Seat object | |
*/ | |
function Passenger(person, seat) { | |
this.person = person; | |
this.seat = seat; | |
} | |
/** | |
* Returns formated string in format | |
* Seat data, Person data | |
*/ | |
Passenger.prototype.getData = function () { | |
return this.seat.getData() + ", " + this.person.getData(); | |
}; | |
/** | |
* Representing flight | |
* @constructor | |
* @param {string} relation - | |
* @param {*} date | |
*/ | |
function Flight(relation, date) { | |
this.relation = relation; | |
this.date = new Date(date); | |
this.passengerList = []; | |
} | |
Flight.prototype.addPassenger = function (passenger) { | |
this.passengerList.push(passenger); | |
}; | |
Flight.prototype.getData = function () { | |
var day = this.date.getDate(); | |
var month = this.date.getMonth() + 1; // Months are zero based so we ad one | |
var year = this.date.getFullYear(); | |
var formattedDate = day + "." + month + "." + year; | |
return new String(formattedDate + ", " + this.relation); | |
}; | |
/** | |
* Representing airport | |
* @constructor | |
*/ | |
function Airport() { | |
// Hardcoded value for airport | |
// Each new instance of airport will | |
// be named Nikola Tesla | |
this.name = "Nikola Tesla"; | |
this.totalPassengers = 0; | |
this.businessPassengers = 0; | |
this.flightList = []; | |
} | |
Airport.prototype.addFlight = function (flight) { | |
this.flightList.push(flight); | |
} | |
Airport.prototype.getData = function () { | |
var totalPassengers = 0; | |
var output = String(""); | |
var outputData = String(""); | |
this.flightList.forEach(function (flight) { | |
var passengers = flight.passengerList; | |
totalPassengers += passengers.length; | |
outputData += "\t" + flight.getData() + "\n"; | |
passengers.forEach(function (passenger) { | |
outputData += "\t\t" + passenger.getData() + "\n"; | |
}, this); | |
}, this); | |
output = "Airport: " + this.name + ", total passengers: " + totalPassengers + "\n"; | |
output += outputData; | |
return output; | |
}; | |
/** | |
* Returns created Flight | |
* @param {string} relation - Relation | |
* @param {string} date - String in any parsable format | |
* @returns {Flight} | |
*/ | |
function createFlight(relation, date) { | |
return new Flight(relation, date); | |
} | |
/** | |
* Returns created Passenger | |
* @param {string} name - First name | |
* @param {string} surname - Last name | |
* @param {number} seatNumber - Seat number between 1 and 100 | |
* @param {string} category - Seat class "b" or "e" | |
* @returns {Passenger} | |
*/ | |
function createPassenger(name, surname, seatNumber, category) { | |
var p2 = new Person() | |
var person = new Person(name, surname); | |
var seat = new Seat(seatNumber, category); | |
var passenger = new Passenger(person, seat); | |
return passenger; | |
} | |
(function () { | |
// Create Airport | |
var airport = new Airport(); | |
createFlight() | |
// Create 2 flights | |
var belgradeParisFlight = createFlight("Belgrade - New York", "Oct 25 2017"); | |
var barcelonaBelgradeFlight = createFlight("Paris - Belgrade", "Nov 11 2017"); | |
// Create 4 passengers | |
var p1 = createPassenger("John", "Snow", 1, "b"); | |
var p2 = createPassenger("Cersei", "Lannister", 2, "e"); | |
var p3 = createPassenger("Daenerys", "Targaryen", 1); | |
var p4 = createPassenger("Tyrion", "Lannister", 2); | |
// Add passengers to first flight | |
belgradeParisFlight.addPassenger(p1); | |
belgradeParisFlight.addPassenger(p2); | |
// Add passengers to second flight | |
barcelonaBelgradeFlight.addPassenger(p3); | |
barcelonaBelgradeFlight.addPassenger(p4); | |
// Add flights to airport | |
airport.addFlight(belgradeParisFlight); | |
airport.addFlight(barcelonaBelgradeFlight); | |
// Output airport data | |
var airportData = airport.getData(); | |
console.log(airportData); | |
}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment