Skip to content

Instantly share code, notes, and snippets.

@marsicdev
Created October 29, 2017 16:50
Show Gist options
  • Save marsicdev/d5eb37336eac65a654790f8a3e2f2262 to your computer and use it in GitHub Desktop.
Save marsicdev/d5eb37336eac65a654790f8a3e2f2262 to your computer and use it in GitHub Desktop.
'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