dungo
dungo

Reputation: 103

Display Object Output in Javascript

I've been having trouble with this part of my assignment. I have most of it coded but I have been having trouble implementing this last part:

Write a loop that simulates checkouts and checkins for a 3 month period. Every day iterate over the catalog, and every person in the patrons array. If the patron currently has the book checked out then check it in. If it is not checked out then add it to the patrons list of books via the patrons read method. If the book is overdue then add a fine of $5.00 to the patron returning it. At the end of the 3 month period, display each patron, the books they have currently checked out and any fine they may have.

Here is the code I have so far:

//Author class
var Author = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
};

var Book = function(title, Available, publicationDate, checkoutDate, callNumber, Authors) {
  this.title = title;
  this.Available = Available;
  this.publicationDate = publicationDate;
  this.checkoutDate = checkoutDate;
  this.callNumber = callNumber;
  this.Authors = Authors;
};
Book.prototype.checkOut = function() {
  this.Available = false;
  var temp = new Date(1000000000);
  var d = new Date() - temp;
  var res = new Date(d);
  this.checkoutDate = res;
};
Book.prototype.isOverdue = function() {
  //Get 1 day in milliseconds
  var singleDay = 1000 * 60 * 60 * 24;
  var todayDate = new Date().getTime();
  var difference = todayDate - this.checkoutDate.getTime();
  if (Math.round(difference / singleDay) >= 14) {
    return true;
  }
  return false;
};

var Patron = function(firstName, lastName, libraryCardNumber, booksOut, fine) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.libraryCardNumber = libraryCardNumber;
  this.booksOut = booksOut;
  this.fine = fine;
};
Patron.prototype.read = function(book) {
  this.booksOut.add(book);
}
Patron.prototype.read = function(book) {
  this.booksOut.remove(this.booksOut.length);
}
//creating author objects
var authors = []
authors[0] = new Author("Neil", "Armstrong");
authors[1] = new Author("Hard", "Popeye");

var mybooks = []
mybooks[0] = new Book('gravity', true, new Date(2000, 5, 20), new Date(), 10, authors);
mybooks[1] = new Book('munro', true, new Date(2000, 5, 20), new Date(), 11, authors);
mybooks[2] = new Book('kohli', true, new Date(2000, 5, 20), new Date(), 12, authors);
mybooks[3] = new Book('sachin', true, new Date(2000, 5, 20), new Date(), 13, authors);
mybooks[4] = new Book('sehwag', true, new Date(2000, 5, 20), new Date(), 14, authors);

var patrons = []
patrons[0] = new Patron('master', 'jumbo', 1, mybooks, 0.00);
patrons[1] = new Patron('kyle', 'munro', 1, mybooks, 0.00);
patrons[2] = new Patron('master', 'jumbo2', 1, mybooks, 0.00);
patrons[3] = new Patron('master', 'jumbo3', 1, mybooks, 0.00);
patrons[4] = new Patron('master', 'jumbo4', 1, mybooks, 0.00);

var j = 0;
while (j < patrons.length) {
  var books = patrons[j].booksOut;
  var fine = patrons[j].fine;
  for (var i = 0; i < books.length; i++) {
    if (books[i].isOverdue()) {
      fine = fine + 5.00;
    }
  }
  patrons[j].fine = fine;
  console.log(patrons[0]);
}

The problem is it outputs the same object over and over again infinitely. Why does the happen and how can I fix it?

Upvotes: 1

Views: 148

Answers (1)

arshovon
arshovon

Reputation: 13651

I have tweaked your code and show you a way to generate the output. As it is an assignment problem I have no intention to solve it totally. Modify it to get the expected output. Tell us if you have more problem.

//Author class
var Author = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
};

var Book = function(title, Available, publicationDate, checkoutDate, callNumber, Authors) {
  this.title = title;
  this.Available = Available;
  this.publicationDate = publicationDate;
  this.checkoutDate = checkoutDate;
  this.callNumber = callNumber;
  this.Authors = Authors;
};

Book.prototype.checkOut = function(){
  this.Available = false;
  var temp = new Date(1000000000);
  var d = new Date()-temp;
  var res = new Date(d);
  this.checkoutDate = res;
};

Book.prototype.isOverdue = function(){
  //Get 1 day in milliseconds
  var singleDay=1000*60*60*24;
  var todayDate = new Date().getTime();
  var difference = todayDate - this.checkoutDate.getTime();
  if(Math.round(difference/singleDay) >= 14){
    return true;
  }
  return false;
};

var Patron = function(firstName, lastName, libraryCardNumber, booksOut, fine) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.libraryCardNumber = libraryCardNumber;
  this.booksOut = booksOut;
  this.fine = fine;
};

Patron.prototype.read = function(book){
  this.booksOut.add(book);
}

Patron.prototype.read = function(book){
  this.booksOut.remove(this.booksOut.length);
}

//creating author objects
var authors = []
authors[0] = new Author("Neil","Armstrong");
authors[1] = new Author("Hard","Popeye");

var mybooks = []
mybooks[0] = new Book('gravity',true,new Date(2000,5,20), new Date(), 10,authors);
mybooks[1] = new Book('munro',true,new Date(2000,5,20), new Date(), 11,authors);
mybooks[2] = new Book('kohli',true,new Date(2000,5,20), new Date(), 12,authors);
mybooks[3] = new Book('sachin',true,new Date(2000,5,20), new Date(), 13,authors);
mybooks[4] = new Book('sehwag',true,new Date(2000,5,20), new Date(), 14,authors);

var patrons = []
patrons[0] = new Patron('master','jumbo',1,mybooks,0.00);
patrons[1] = new Patron('kyle','munro',1,mybooks,0.00);
patrons[2] = new Patron('master','jumbo2',1,mybooks,0.00);
patrons[3] = new Patron('master','jumbo3',1,mybooks,0.00);
patrons[4] = new Patron('master','jumbo4',1,mybooks,0.00);

var j=0;
while(j < patrons.length){
  var books = patrons[j].booksOut;
  var fine = patrons[j].fine;
  for(var i=0;i<books.length;i++){
    if(books[i].isOverdue()){
      fine = fine + 5.00;
    }
  }
  patrons[j].fine = fine;
  j++;
}

for(i=0; i < patrons.length;i++){
  console.log(patrons[i].firstName+" has taken the following books:");
  for(j=0;j<patrons[i].booksOut.length;j++){
    console.log(patrons[i].booksOut[j].title);
  }
  console.log(patrons[i].firstName+" has fine = "+patrons[i].fine);
}

Upvotes: 2

Related Questions