@@ -0,0 +1,8 @@ | |||||
{ | |||||
"0": | |||||
{ | |||||
"Title": "Cracking the Coding Interview", | |||||
"Status": "AVAILABLE", | |||||
"Due Date": [10, 10, 2010] | |||||
} | |||||
} |
@@ -15,11 +15,9 @@ | |||||
<scope>test</scope> | <scope>test</scope> | ||||
</dependency> | </dependency> | ||||
<dependency> | <dependency> | ||||
<groupId>org</groupId> | |||||
<artifactId>json</artifactId> | |||||
<version>1.0</version> | |||||
<scope>system</scope> | |||||
<systemPath>${basedir}/src/main/resources/json.jar</systemPath> | |||||
<groupId>org.json</groupId> | |||||
<artifactId>org.json</artifactId> | |||||
<version>chargebee-1.0</version> | |||||
</dependency> | </dependency> | ||||
</dependencies> | </dependencies> | ||||
<build> | <build> | ||||
@@ -41,16 +39,6 @@ | |||||
<target>1.6</target> | <target>1.6</target> | ||||
</configuration> | </configuration> | ||||
</plugin> | </plugin> | ||||
<plugin> | |||||
<groupId>org.apache.maven.plugins</groupId> | |||||
<artifactId>maven-surefire-plugin</artifactId> | |||||
<version>2.20</version> | |||||
<configuration> | |||||
<additionalClasspathElements> | |||||
<additionalClasspathElement>/home/binhong/Git/LibrarySystem/lib/json.jar</additionalClasspathElement> | |||||
</additionalClasspathElements> | |||||
</configuration> | |||||
</plugin> | |||||
</plugins> | </plugins> | ||||
</build> | </build> | ||||
</project> | </project> |
@@ -1,7 +1,7 @@ | |||||
package libsys; | package libsys; | ||||
/* | /* | ||||
* Written by : Bin Hong Lee | * Written by : Bin Hong Lee | ||||
* Last edited : 5/31/2016 | |||||
* Last edited : 5/28/2017 | |||||
*/ | */ | ||||
class Book | class Book | ||||
@@ -31,6 +31,14 @@ class Book | |||||
this.status = "AVAILABLE"; | this.status = "AVAILABLE"; | ||||
} | } | ||||
public Book(int id, String title, String status, int[] dueDate) | |||||
{ | |||||
this.title = title; | |||||
this.id = id; | |||||
this.status = status; | |||||
this.dueDate = dueDate; | |||||
} | |||||
//Getters and setters | //Getters and setters | ||||
public String getTitle() | public String getTitle() | ||||
{ | { | ||||
@@ -4,10 +4,17 @@ package libsys; | |||||
* Last edited : 5/28/2017 | * Last edited : 5/28/2017 | ||||
*/ | */ | ||||
import java.util.*; | |||||
import java.util.List; | |||||
import java.util.ArrayList; | |||||
import org.json.JSONString; | import org.json.JSONString; | ||||
import org.json.JSONObject; | import org.json.JSONObject; | ||||
import org.json.JSONTokener; | import org.json.JSONTokener; | ||||
import org.json.JSONArray; | |||||
import java.io.FileInputStream; | |||||
import java.io.PrintWriter; | |||||
import java.io.File; | |||||
import java.util.Enumeration; | |||||
import java.io.Serializable; | |||||
class BookFactory | class BookFactory | ||||
{ | { | ||||
@@ -19,6 +26,40 @@ class BookFactory | |||||
id = 0; | id = 0; | ||||
} | } | ||||
public BookFactory(String jsonFileName) | |||||
{ | |||||
try | |||||
{ | |||||
System.out.println("Reading data from file..."); | |||||
FileInputStream in = new FileInputStream(jsonFileName); | |||||
JSONObject obj = new JSONObject(new JSONTokener(in)); | |||||
String [] ids = JSONObject.getNames(obj); | |||||
System.out.println(); | |||||
System.out.println("Parsing data into ArrayList..."); | |||||
for (int i = 0; i < ids.length; i++) | |||||
{ | |||||
JSONObject jsonBook = obj.getJSONObject(ids[i]); | |||||
int id = Integer.parseInt(ids[i]); | |||||
String title = jsonBook.getString("Title"); | |||||
String status = jsonBook.getString("Status"); | |||||
JSONArray jsonDueDate = jsonBook.getJSONArray("Due Date"); | |||||
int [] dueDate = new int[jsonDueDate.length()]; | |||||
for (int j = 0; j < jsonDueDate.length(); j++) | |||||
{ | |||||
dueDate[j] = jsonDueDate.optInt(j); | |||||
} | |||||
books.add(new Book(id, title, status, dueDate)); | |||||
} | |||||
System.out.println(); | |||||
} | |||||
catch (Exception ex) | |||||
{ | |||||
System.out.println(ex.getMessage()); | |||||
} | |||||
} | |||||
public Book newBook(String title) | public Book newBook(String title) | ||||
{ | { | ||||
Book temp = new Book(title, id); | Book temp = new Book(title, id); | ||||
@@ -0,0 +1,127 @@ | |||||
package libsys; | |||||
import java.util.Calendar; | |||||
import org.json.JSONObject; | |||||
class Handler | |||||
{ | |||||
Exception BookNotFound = new Exception("Error 404 : Book not found"); | |||||
BookFactory books = new BookFactory(); | |||||
UserFactory users = new UserFactory(); | |||||
Calendar cal; | |||||
public boolean borrowBook(User user, Book book) | |||||
{ | |||||
User newUser = user; | |||||
if(book.getStatus() == "AVAILABLE" && newUser.status()) | |||||
{ | |||||
book.rent(calDueDate(10)); | |||||
newUser.borrowNewBook(book.getId()); | |||||
books.update(book); | |||||
users.update(user, newUser); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
public boolean returnBook(User user, Book book) | |||||
{ | |||||
User newUser = user; | |||||
if(newUser.returnBook(book.getId())) | |||||
{ | |||||
book.returned(); | |||||
books.update(book); | |||||
users.update(user, newUser); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
public int[] calDueDate(int days) | |||||
{ | |||||
int[] dueDate = currentDay(); | |||||
for (int i = 0; i < days; i++) | |||||
{ | |||||
if(dueDate[2] < 28) | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
else if(dueDate[1] == 12) | |||||
{ | |||||
if(dueDate[2] == 31) | |||||
{ | |||||
dueDate[0]++; | |||||
dueDate[1] = 1; | |||||
dueDate[2] = 1; | |||||
} | |||||
} | |||||
else if(dueDate[1] == 2) | |||||
{ | |||||
if((dueDate[0] % 4) == 0) | |||||
{ | |||||
if(dueDate[2] == 29) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[2] == 28) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[1] == 4 || dueDate[1] == 6 || dueDate[1] == 9 || dueDate[1] == 11) | |||||
{ | |||||
if(dueDate[2] == 30) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[2] == 31) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
return dueDate; | |||||
} | |||||
public int[] currentDay() | |||||
{ | |||||
int[] currentDay = new int[3]; | |||||
currentDay[0] = cal.get(Calendar.YEAR) + 1900; | |||||
currentDay[1] = cal.get(Calendar.MONTH) + 1; | |||||
currentDay[2] = cal.get(Calendar.DAY_OF_MONTH); | |||||
return currentDay; | |||||
} | |||||
} |
@@ -1,135 +1,15 @@ | |||||
package libsys; | package libsys; | ||||
/* | /* | ||||
* Written by : Bin Hong Lee | * Written by : Bin Hong Lee | ||||
* Last edited : 5/27/2017 | |||||
* Last edited : 5/28/2017 | |||||
*/ | */ | ||||
import java.util.Date; | |||||
class Main | class Main | ||||
{ | { | ||||
Exception BookNotFound = new Exception("Error 404 : Book not found"); | |||||
static BookFactory books = new BookFactory(); | |||||
static UserFactory users = new UserFactory(); | |||||
static Date date = new Date(); | |||||
public static void main(String[] args) | public static void main(String[] args) | ||||
{ | { | ||||
new MainGUI().setVisible(true); | |||||
} | |||||
public static boolean borrowBook(User user, Book book) | |||||
{ | |||||
User newUser = user; | |||||
if(book.getStatus() == "AVAILABLE" && newUser.status()) | |||||
{ | |||||
book.rent(calDueDate(10)); | |||||
newUser.borrowNewBook(book.getId()); | |||||
books.update(book); | |||||
users.update(user, newUser); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
public static boolean returnBook(User user, Book book) | |||||
{ | |||||
User newUser = user; | |||||
if(newUser.returnBook(book.getId())) | |||||
{ | |||||
book.returned(); | |||||
books.update(book); | |||||
users.update(user, newUser); | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
public static int[] calDueDate(int days) | |||||
{ | |||||
int[] dueDate = currentDay(); | |||||
for (int i = 0; i < days; i++) | |||||
{ | |||||
if(dueDate[2] < 28) | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
else if(dueDate[1] == 12) | |||||
{ | |||||
if(dueDate[2] == 31) | |||||
{ | |||||
dueDate[0]++; | |||||
dueDate[1] = 1; | |||||
dueDate[2] = 1; | |||||
} | |||||
} | |||||
else if(dueDate[1] == 2) | |||||
{ | |||||
if((dueDate[0] % 4) == 0) | |||||
{ | |||||
if(dueDate[2] == 29) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[2] == 28) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[1] == 4 || dueDate[1] == 6 || dueDate[1] == 9 || dueDate[1] == 11) | |||||
{ | |||||
if(dueDate[2] == 30) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
else if(dueDate[2] == 31) | |||||
{ | |||||
dueDate[1]++; | |||||
dueDate[2] = 1; | |||||
} | |||||
else | |||||
{ | |||||
dueDate[2]++; | |||||
} | |||||
} | |||||
return dueDate; | |||||
} | |||||
public static int[] currentDay() | |||||
{ | |||||
int[] currentDay = new int[3]; | |||||
currentDay[0] = date.getYear() + 1900; | |||||
currentDay[1] = date.getMonth() + 1; | |||||
currentDay[2] = date.getDate(); | |||||
return currentDay; | |||||
Handler handler = new Handler(); | |||||
handler.books = new BookFactory("books.json"); | |||||
new MainGUI(handler).setVisible(true); | |||||
} | } | ||||
} | } |
@@ -1,14 +1,20 @@ | |||||
package libsys; | package libsys; | ||||
import java.awt.event.ActionEvent; | |||||
import java.awt.event.ActionListener; | |||||
@SuppressWarnings({"unchecked", "serial"}) | |||||
public class MainGUI extends javax.swing.JFrame | public class MainGUI extends javax.swing.JFrame | ||||
{ | { | ||||
public MainGUI() | |||||
Handler handler; | |||||
public MainGUI(Handler handler) | |||||
{ | { | ||||
this.handler = handler; | |||||
initComponents(); | initComponents(); | ||||
} | } | ||||
@SuppressWarnings("unchecked") | |||||
//GEN-BEGIN:initComponents | //GEN-BEGIN:initComponents | ||||
private void initComponents() | private void initComponents() | ||||
{ | { | ||||
@@ -36,6 +42,13 @@ public class MainGUI extends javax.swing.JFrame | |||||
bookMgtLabel.setText("Book Management"); | bookMgtLabel.setText("Book Management"); | ||||
bookSearchBtn.setText("Search"); | bookSearchBtn.setText("Search"); | ||||
bookSearchBtn.addActionListener(new ActionListener() | |||||
{ | |||||
public void actionPerformed(ActionEvent evt) | |||||
{ | |||||
bookSearchBtnActionPerformed(evt); | |||||
} | |||||
}); | |||||
bookTitle.setText("Title : "); | bookTitle.setText("Title : "); | ||||
@@ -173,6 +186,14 @@ public class MainGUI extends javax.swing.JFrame | |||||
} | } | ||||
//GEN-END:initComponents | //GEN-END:initComponents | ||||
private void bookSearchBtnActionPerformed(ActionEvent evt) | |||||
{ | |||||
Book thisBook = handler.books.getBook(0); | |||||
bookID.setText("ID : " + thisBook.getId()); | |||||
bookTitle.setText("Title : " + thisBook.getTitle()); | |||||
bookStatus.setText("Status : " + thisBook.getStatus()); | |||||
} | |||||
//GEN-BEGIN:variables | //GEN-BEGIN:variables | ||||
private javax.swing.JLabel bookID; | private javax.swing.JLabel bookID; | ||||
private javax.swing.JLabel bookMgtLabel; | private javax.swing.JLabel bookMgtLabel; | ||||
@@ -192,4 +213,6 @@ public class MainGUI extends javax.swing.JFrame | |||||
private javax.swing.JTextField userSearch; | private javax.swing.JTextField userSearch; | ||||
private javax.swing.JButton userSearchBtn; | private javax.swing.JButton userSearchBtn; | ||||
//GEN-END:variables | //GEN-END:variables | ||||
} | } |