2017-04-21 19 views
1

私のプログラムに2つの関数を追加しようとしています。そのうちの1人は、プロトタイプの利用可能なプロパティをtrueからfalseに変更し、チェックアウト日を設定します。チェックアウト日は、現在の日付からいくつかのランダムな日数を引いたものに設定する必要があります(日数はランダム化する必要があります)。Javascript - 日付関数を使用してシミュレーションを実行するプロトタイプ関数

私の試み:

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

もう一つは、現在の日付とチェックアウトの日付をチェックし、それがより大きな14日だ場合にはtrueを返します。

私の試み:

Book.prototype.isOverdue = function() { 
    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 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; 
 
}; 
 

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

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

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

 
Book.prototype.checkIn = function() { 
 
    this.Available = true; 
 
}; 
 

 
Book.prototype.isOverdue = function() { 
 
    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; 
 
}; 
 

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

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

 
var authors = []; 
 
authors[0] = new Author("Auth", "One"); 
 
authors[1] = new Author("AutL", "Two"); 
 

 
var catalog = []; 
 
catalog[0] = new Book('Bk1', true, new Date(2001, 1, 21), new Date(), 123456, authors); 
 
catalog[1] = new Book('Bk2', true, new Date(2002, 2, 22), new Date(), 987656, authors); 
 
catalog[2] = new Book('Bk3', true, new Date(2003, 3, 23), new Date(), 092673, authors); 
 
catalog[3] = new Book('Bk4', true, new Date(2004, 4, 24), new Date(), 658342, authors); 
 
catalog[4] = new Book('Bk5', true, new Date(2005, 5, 25), new Date(), 345678, authors); 
 

 
var patrons = []; 
 
patrons[0] = new Patron('Pat1', 'Wat', 1, catalog, 0.00); 
 
patrons[1] = new Patron('Pat2', 'Wot', 1, catalog, 0.00); 
 
patrons[2] = new Patron('Pat3', 'Wit', 1, catalog, 0.00); 
 
patrons[3] = new Patron('Pat4', 'Wet', 1, catalog, 0.00); 
 
patrons[4] = new Patron('Pat5', 'Wut', 1, catalog, 0.00); 
 

 
//while loop or for loop for 90 days 
 
//For loop over catalog 
 
//forloop over patrons 
 
//Check if available , if so check book out 
 
//If not available check book back in 
 
//check checking back in check to see if book is overdue and if so add a fine 
 
//When down loop over patrons to see their fees 
 

 
for (var i = 0; i < 90; i++) { 
 
    for (var j = 0; j < catalog.length; j++) { 
 
    for (var k = 0; k < patrons.length; k++) { 
 
     var fine = patrons[k].fine; 
 
     if (catalog[k].Available) { 
 
     catalog[k].checkOut; 
 
     } else { 
 
     catalog[k].checkIn; 
 
     patrons[k].read; 
 
     } 
 
     if (catalog[k].isOverdue) { 
 
     fine = fine + 5.00; 
 
     } 
 
     patrons[k].fine = fine; 
 
    } 
 
    } 
 
} 
 

 
for (i = 0; i < patrons.length; i++) { 
 
    console.log(patrons[i].firstName + " has checked out 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 amount: $" + patrons[i].fine); 
 
}

私はプログラムを実行すると、すべてが実行されますが、常連客は、巨大な罰金を取得し終わると、などこれは無作為化されたシミュレーションであるはずですが、私はその問題を解決するために何をすべきかを理解できないようです。

+0

'checkOut'関数に' expireDate'変数を追加します。次に、その変数をチェックし、 'expireDate'と現在の日付との間の差異を計算します。 – Felix

答えて

0

あなたは言う:

チェックアウト日は現在の日付を引い日のいくつかのランダムな番号(日ランダム化されなければならない)に設定する必要があります。

まだにはradomisationありません:

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

1970-01-12T13のための新しい日付を返しnew Date(1000000000)表現:46:40.000Z、そう

new Date() - temp; 

は大を返します1491816607452のように、約1726日である。それはすべての本のためにすべての利用者のために同じ有効期限を設定するので、それらはすべて同じ罰金で終わる。

// Return a random integer between start and end inclusive 
 
// Does not check if start or end are integers 
 
function randInRange(start, end) { 
 
    return Math.floor(Math.random() * (end - start + 1)) + start; 
 
} 
 

 
// checkOut method as function for demo 
 
var checkOut = function() { 
 
    // Set randDays to random days from 10 to 20 
 
    var randDays = randInRange(10,20); 
 
    // return date minus randDays 
 
    var date = new Date(); 
 
    date.setDate(date.getDate() - randDays); 
 
    return date; 
 
}; 
 

 
// Some tests, 10 dates randomly 10 to 20 days ago 
 
for (var i=10; i; i--) { 
 
    console.log(checkOut().toString()); 
 
}

チェックアウト方法は、あなたが変更することができ、プレーン機能である:

あなたは、言って10〜20日のランダムな期間の常連客のチェックアウトの本を持っているしたい場合は

書籍コンストラクタに合わせてください。しかし、テストデータを送信するのではなく、特定の値に設定して、結果を正確に把握する必要があります。また、既知の問題のあるケースをテストして、問題が正しく処理されていることを確認する必要があります。

私はコードの残りの部分について詳しくは見ていません。

関連する問題