From 1e2388fafb9e95d4f4f6157e49ddbeae4062f810 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Sat, 27 Apr 2024 23:59:32 +0330 Subject: [PATCH 01/16] Class Book created(1) --- Answers/Library/.gitignore | 38 ++++++++++++++++++ Answers/Library/.idea/.gitignore | 3 ++ Answers/Library/.idea/encodings.xml | 7 ++++ Answers/Library/.idea/misc.xml | 14 +++++++ Answers/Library/.idea/vcs.xml | 6 +++ Answers/Library/pom.xml | 17 ++++++++ Answers/Library/src/main/java/Book.java | 53 +++++++++++++++++++++++++ 7 files changed, 138 insertions(+) create mode 100644 Answers/Library/.gitignore create mode 100644 Answers/Library/.idea/.gitignore create mode 100644 Answers/Library/.idea/encodings.xml create mode 100644 Answers/Library/.idea/misc.xml create mode 100644 Answers/Library/.idea/vcs.xml create mode 100644 Answers/Library/pom.xml create mode 100644 Answers/Library/src/main/java/Book.java diff --git a/Answers/Library/.gitignore b/Answers/Library/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/Answers/Library/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Answers/Library/.idea/.gitignore b/Answers/Library/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Answers/Library/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Answers/Library/.idea/encodings.xml b/Answers/Library/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/Answers/Library/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Answers/Library/.idea/misc.xml b/Answers/Library/.idea/misc.xml new file mode 100644 index 0000000..fdc35ea --- /dev/null +++ b/Answers/Library/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Answers/Library/.idea/vcs.xml b/Answers/Library/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/Answers/Library/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Answers/Library/pom.xml b/Answers/Library/pom.xml new file mode 100644 index 0000000..7f9cd39 --- /dev/null +++ b/Answers/Library/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.example + Library + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java new file mode 100644 index 0000000..c2a9401 --- /dev/null +++ b/Answers/Library/src/main/java/Book.java @@ -0,0 +1,53 @@ +import java.util.UUID; + +public class Book { + private String bookID; + private String title; + private String author; + private boolean availability; + private String description; + + public Book(String title, String author, String description) { + this.bookID = UUID.randomUUID().toString(); + this.title = title; + this.author = author; + this.description = description; + this.availability = true; + } + + public String getBookID() { + return bookID; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public boolean isAvailability() { + return availability; + } + + public void setAvailability(boolean availability) { + this.availability = availability; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} From 4fa38d32038da54f1bf027b8fda5cc18111bbd6d Mon Sep 17 00:00:00 2001 From: arshiammz Date: Sun, 28 Apr 2024 13:32:46 +0330 Subject: [PATCH 02/16] Admin Class and User Class added ! --- Answers/Library/src/main/java/Admin.java | 42 +++++++++++++++++++++ Answers/Library/src/main/java/User.java | 47 ++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 Answers/Library/src/main/java/Admin.java create mode 100644 Answers/Library/src/main/java/User.java diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java new file mode 100644 index 0000000..5f1a523 --- /dev/null +++ b/Answers/Library/src/main/java/Admin.java @@ -0,0 +1,42 @@ +import java.util.UUID; + +public class Admin { + private String completeName; + private String ID; + private String phoneNumber; + private int password; + public User(String completeName, String phoneNumber, int password){ + this.completeName = completeName; + this.ID = UUID.randomUUID().toString(); + this.phoneNumber = phoneNumber; + this.password = password; + } + + public String getCompleteName() { + return completeName; + } + + public String getID() { + return ID; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public int getPassword() { + return password; + } + + public void setCompleteName(String completeName) { + this.completeName = completeName; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public void setPassword(int password) { + this.password = password; + } +} diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java new file mode 100644 index 0000000..f71c509 --- /dev/null +++ b/Answers/Library/src/main/java/User.java @@ -0,0 +1,47 @@ +import java.util.UUID; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public class User { + private String completeName; + private String ID; + private String phoneNumber; + private String date_of_registration; + public static String getFormattedDate() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return date.format(formatter); + } + + public User(String completeName, String phoneNumber){ + this.completeName = completeName; + this.ID = UUID.randomUUID().toString(); + this.phoneNumber = phoneNumber; + this.date_of_registration = getFormattedDate(); + } + + public String getCompleteName() { + return completeName; + } + + public String getID() { + return ID; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public String getDate_of_registration() { + return date_of_registration; + } + + public void setCompleteName(String completeName) { + this.completeName = completeName; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + +} \ No newline at end of file From 0a6fc201c5859f522d7b985990b111a2fb944224 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Fri, 3 May 2024 22:50:53 +0330 Subject: [PATCH 03/16] basic structure of library created! --- Answers/Library/.idea/.name | 1 + Answers/Library/src/main/java/Admin.java | 20 ++++++++++---------- Answers/Library/src/main/java/Library.java | 8 ++++++++ Answers/Library/src/main/java/User.java | 14 +++++++------- 4 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 Answers/Library/.idea/.name create mode 100644 Answers/Library/src/main/java/Library.java diff --git a/Answers/Library/.idea/.name b/Answers/Library/.idea/.name new file mode 100644 index 0000000..9cbb2bf --- /dev/null +++ b/Answers/Library/.idea/.name @@ -0,0 +1 @@ +Admin.java \ No newline at end of file diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index 5f1a523..23c068b 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -1,19 +1,19 @@ import java.util.UUID; public class Admin { - private String completeName; + private String fullName; private String ID; private String phoneNumber; - private int password; - public User(String completeName, String phoneNumber, int password){ - this.completeName = completeName; + private String password; + public Admin(String fullName, String phoneNumber, String password){ + this.fullName = fullName; this.ID = UUID.randomUUID().toString(); this.phoneNumber = phoneNumber; this.password = password; } - public String getCompleteName() { - return completeName; + public String getFullName() { + return fullName; } public String getID() { @@ -24,19 +24,19 @@ public String getPhoneNumber() { return phoneNumber; } - public int getPassword() { + public String getPassword() { return password; } - public void setCompleteName(String completeName) { - this.completeName = completeName; + public void setFullName(String fullName) { + this.fullName = fullName; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } - public void setPassword(int password) { + public void setPassword(String password) { this.password = password; } } diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java new file mode 100644 index 0000000..54afdc6 --- /dev/null +++ b/Answers/Library/src/main/java/Library.java @@ -0,0 +1,8 @@ +public class Library { + String libName = "NIT"; + int capacity = 1250; + String operatinghours = "from 8 AM to 6 PM"; + + + +} diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index f71c509..3daf8f2 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -3,7 +3,7 @@ import java.time.format.DateTimeFormatter; public class User { - private String completeName; + private String fullName; private String ID; private String phoneNumber; private String date_of_registration; @@ -13,15 +13,15 @@ public static String getFormattedDate() { return date.format(formatter); } - public User(String completeName, String phoneNumber){ - this.completeName = completeName; + public User(String fullName, String phoneNumber){ + this.fullName = fullName; this.ID = UUID.randomUUID().toString(); this.phoneNumber = phoneNumber; this.date_of_registration = getFormattedDate(); } - public String getCompleteName() { - return completeName; + public String getFullName() { + return fullName; } public String getID() { @@ -36,8 +36,8 @@ public String getDate_of_registration() { return date_of_registration; } - public void setCompleteName(String completeName) { - this.completeName = completeName; + public void setFullName(String completeName) { + this.fullName = completeName; } public void setPhoneNumber(String phoneNumber) { From 2b8b3f7cedc8815273b5e811427b6635dfdfed7e Mon Sep 17 00:00:00 2001 From: arshiammz Date: Sat, 4 May 2024 14:02:52 +0330 Subject: [PATCH 04/16] Book Repository completed :) --- Answers/Library/src/main/java/Book.java | 4 +- Answers/Library/src/main/java/Library.java | 106 ++++++++++++++++++++- 2 files changed, 104 insertions(+), 6 deletions(-) diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java index c2a9401..92a9603 100644 --- a/Answers/Library/src/main/java/Book.java +++ b/Answers/Library/src/main/java/Book.java @@ -1,6 +1,8 @@ import java.util.UUID; +import java.io.Serializable; -public class Book { +public class Book implements Serializable { + private static final long serialVersionUID = 1L; private String bookID; private String title; private String author; diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 54afdc6..f2dffd4 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -1,8 +1,104 @@ -public class Library { - String libName = "NIT"; - int capacity = 1250; - String operatinghours = "from 8 AM to 6 PM"; - +import java.io.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Scanner; +public class Library { + private final List books = new ArrayList<>(); + private static final String FILE_NAME = "Library.dat"; + private String libName = "NIT"; + private static int capacity = 1250; + private String operatinghours = "NIT library is open from 8 AM to 6 PM"; + public String getOperatinghours() { + return operatinghours; + } + public Library(){ + loadBooks(); + } + public void addBook(String title, String author, String description){ + if (capacity > 0){ + books.add(new Book(title,author,description)); + capacity --; + books.sort(Comparator.comparing(Book::getTitle)); + saveBooks(); + System.out.println("Book added to library successfully."); + }else { + System.out.println("There is no capacity to add books!"); + } + } + public void rentBook(String title){ + boolean found = false; + for (int i = 0; i < books.size(); i++) { + if (title.equalsIgnoreCase(books.get(i).getTitle()) && books.get(i).isAvailability()){ + books.get(i).setAvailability(false); + saveBooks(); + System.out.println(title + " book rented successfully."); + found = true; + break; + } + } if (!found){ + System.out.println(title + " book is not available now!"); + } + } + public void returnBook() { + Scanner scanner = new Scanner(System.in); + while (true) { + System.out.println("Please enter the title of the book you want to return:"); + String title = scanner.nextLine(); + boolean found = false; + for (int i = 0; i < books.size(); i++) { + if (books.get(i).getTitle().equalsIgnoreCase(title)){ + books.get(i).setAvailability(true); + saveBooks(); + System.out.println("Book returned successfully."); + found = true; + break; + } + } + if (!found) { + System.out.println("Book not found. Would you like to:"); + System.out.println("1. Try again"); + System.out.println("2. Cancel operation"); + System.out.print("Enter option (1 or 2): "); + String option = scanner.nextLine(); + if ("2".equals(option)) { + System.out.println("Operation cancelled."); + break; + } + } else { + break; + } + } + scanner.close(); + } + public void getAvailableBooks(){ + for (int i = 0; i < books.size(); i++) { + if (books.get(i).isAvailability()){ + System.out.println(books.get(i).getTitle()); + } + } + } + private void saveBooks() { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) { + oos.writeObject(books); + } catch (IOException e) { + System.out.println("Error saving books: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadBooks(){ + File file = new File(FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + books.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading books: " + e.getMessage()); + } + } + } } From a06b9fe27cd202ed6f5c5337a013d36b3097e8bb Mon Sep 17 00:00:00 2001 From: arshiammz Date: Sun, 5 May 2024 14:00:11 +0330 Subject: [PATCH 05/16] user registries added to Library class --- Answers/Library/src/main/java/Library.java | 50 ++++++++++++++++++++++ Answers/Library/src/main/java/User.java | 4 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index f2dffd4..2aed2e9 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -6,6 +6,7 @@ public class Library { private final List books = new ArrayList<>(); + private final List users = new ArrayList<>(); private static final String FILE_NAME = "Library.dat"; private String libName = "NIT"; private static int capacity = 1250; @@ -13,7 +14,11 @@ public class Library { public String getOperatinghours() { return operatinghours; } + public String getLibName(){ + return libName; + } public Library(){ + loadUsers(); loadBooks(); } public void addBook(String title, String author, String description){ @@ -101,4 +106,49 @@ private void loadBooks(){ } } } + //---------------------------------------------------------------------------------------------------------- + //User registries + public void addUser(String fullName,String phoneNumber){ + users.add(new User(fullName,phoneNumber)); + users.sort(Comparator.comparing(User::getFullName)); + saveUsers(); + System.out.println("User " + fullName + " added successfully."); + } + + public void removeUser(String ID){ + boolean found = false; + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getID().equalsIgnoreCase(ID)){ + users.remove(users.get(i)); + saveUsers(); + System.out.println("User " + users.get(i).getFullName() + " removed successfully."); + found = true; + break; + } + } + if (!found){ + System.out.println("Error removing user!"); + } + } + private void saveUsers(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))){ + oos.writeObject(users); + } catch (IOException e) { + System.out.println("Error saving users: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadUsers(){ + File file = new File(FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + users.addAll((List) object); + } + } catch (IOException |ClassNotFoundException e) { + System.out.println("Error loading users: " + e.getMessage()); + } + } + } } diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index 3daf8f2..eea4e3d 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -1,8 +1,10 @@ +import java.io.Serializable; import java.util.UUID; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -public class User { +public class User implements Serializable { + private static final long serialVersionUID = 1L; private String fullName; private String ID; private String phoneNumber; From 6226bdd080540c9ff5803485c5b73a1cab1deb50 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Fri, 10 May 2024 17:45:16 +0330 Subject: [PATCH 06/16] Library Class updated and RENT Class added --- Answers/Library/src/main/java/Admin.java | 14 +++- Answers/Library/src/main/java/Book.java | 12 +++- Answers/Library/src/main/java/Library.java | 74 ++++++++++++++++++---- Answers/Library/src/main/java/Rent.java | 46 ++++++++++++++ Answers/Library/src/main/java/User.java | 22 +++++-- 5 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 Answers/Library/src/main/java/Rent.java diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index 23c068b..e74f8d3 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -1,8 +1,9 @@ +import java.io.Serializable; import java.util.UUID; -public class Admin { +public class Admin implements Serializable { private String fullName; - private String ID; + private final String ID; private String phoneNumber; private String password; public Admin(String fullName, String phoneNumber, String password){ @@ -39,4 +40,13 @@ public void setPhoneNumber(String phoneNumber) { public void setPassword(String password) { this.password = password; } + @Override + public String toString() { + return "Admin{" + + "fullName='" + fullName + '\'' + + ", ID='" + ID + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + // Do not include the password for security reasons + '}'; + } } diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java index 92a9603..9953262 100644 --- a/Answers/Library/src/main/java/Book.java +++ b/Answers/Library/src/main/java/Book.java @@ -3,7 +3,7 @@ public class Book implements Serializable { private static final long serialVersionUID = 1L; - private String bookID; + private final String bookID; private String title; private String author; private boolean availability; @@ -52,4 +52,14 @@ public String getDescription() { public void setDescription(String description) { this.description = description; } + @Override + public String toString() { + return "Book{" + + "bookID='" + bookID + '\'' + + ", title='" + title + '\'' + + ", author='" + author + '\'' + + ", availability=" + availability + + ", description='" + description + '\'' + + '}'; + } } diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 2aed2e9..98df17b 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -6,8 +6,15 @@ public class Library { private final List books = new ArrayList<>(); + private final List admins = new ArrayList<>(); private final List users = new ArrayList<>(); - private static final String FILE_NAME = "Library.dat"; + + + private static final String Book_FILE_NAME = "Books.dat"; + private static final String Admin_FILE_NAME = "Admins.dat"; + private static final String User_FILE_NAME = "Users.dat"; + + private String libName = "NIT"; private static int capacity = 1250; private String operatinghours = "NIT library is open from 8 AM to 6 PM"; @@ -18,8 +25,9 @@ public String getLibName(){ return libName; } public Library(){ - loadUsers(); loadBooks(); + loadAdmins(); + loadUsers(); } public void addBook(String title, String author, String description){ if (capacity > 0){ @@ -75,7 +83,6 @@ public void returnBook() { break; } } - scanner.close(); } public void getAvailableBooks(){ @@ -86,7 +93,7 @@ public void getAvailableBooks(){ } } private void saveBooks() { - try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Book_FILE_NAME))) { oos.writeObject(books); } catch (IOException e) { System.out.println("Error saving books: " + e.getMessage()); @@ -94,9 +101,9 @@ private void saveBooks() { } @SuppressWarnings("unchecked") private void loadBooks(){ - File file = new File(FILE_NAME); + File file = new File(Book_FILE_NAME); if (file.exists()){ - try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Book_FILE_NAME))){ Object object = ois.readObject(); if (object instanceof List) { books.addAll((List) object); @@ -131,7 +138,7 @@ public void removeUser(String ID){ } } private void saveUsers(){ - try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(User_FILE_NAME))){ oos.writeObject(users); } catch (IOException e) { System.out.println("Error saving users: " + e.getMessage()); @@ -139,16 +146,61 @@ private void saveUsers(){ } @SuppressWarnings("unchecked") private void loadUsers(){ - File file = new File(FILE_NAME); + File file = new File(User_FILE_NAME); if (file.exists()){ - try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(User_FILE_NAME))){ Object object = ois.readObject(); if (object instanceof List) { users.addAll((List) object); } - } catch (IOException |ClassNotFoundException e) { + } catch (IOException | ClassNotFoundException e) { System.out.println("Error loading users: " + e.getMessage()); } } } -} + //---------------------------------------------------------------------------------------------------------- + //Admin registries + public void addAdmin(String fullName,String phoneNumber,String password){ + admins.add(new Admin(fullName,phoneNumber,password)); + admins.sort(Comparator.comparing(Admin::getFullName)); + saveAdmins(); + System.out.println("Admin " + fullName + " added successfully."); + } + public void removeAdmin(String ID){ + boolean found = false; + for (int i = 0; i < admins.size(); i++) { + if (admins.get(i).getID().equalsIgnoreCase(ID)){ + admins.remove(admins.get(i)); + saveUsers(); + System.out.println("Admin " + admins.get(i).getFullName() + " removed successfully."); + found = true; + break; + } + } + if (!found){ + System.out.println("Error removing admin!"); + } + } + + private void saveAdmins(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Admin_FILE_NAME))){ + oos.writeObject(admins); + } catch (IOException e) { + System.out.println("Error saving admins: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadAdmins(){ + File file = new File(Admin_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Admin_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + admins.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading admins: " + e.getMessage()); + } + } + } +} \ No newline at end of file diff --git a/Answers/Library/src/main/java/Rent.java b/Answers/Library/src/main/java/Rent.java new file mode 100644 index 0000000..b714acd --- /dev/null +++ b/Answers/Library/src/main/java/Rent.java @@ -0,0 +1,46 @@ +import java.io.Serializable; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.Period; +import java.util.UUID; + +public class Rent implements Serializable { + private static final long serialVersionUID = 1L; + private Book book; + private User user; + private String rentalID; + private String rentalDate; + private String returnDate; + public Rent(Book book,User user){ + this.book = book; + this.user = user; + this.rentalID = UUID.randomUUID().toString(); + this.rentalDate = getRentalDate(); + this.returnDate = getReturnDate(); + } + public static String getRentalDate() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return date.format(formatter); + } + public static String getReturnDate() { + LocalDate date = LocalDate.now(); + Period period = Period.ofDays(20); + LocalDate rentalDate = date.plus(period); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return rentalDate.format(formatter); + } + + @Override + public String toString() { + return "Rent{" + + "BookName='" + book.getTitle() + '\'' + + ", UserName='" + user.getFullName() + '\'' + + ", userID='" + user.getID() + '\'' + + ", rentalDate=" + rentalDate + + ", returnDate=" + returnDate + + ", rentalID=" + rentalID + + '}'; + } + +} diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index eea4e3d..e01b4c8 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -6,14 +6,9 @@ public class User implements Serializable { private static final long serialVersionUID = 1L; private String fullName; - private String ID; + private final String ID; private String phoneNumber; private String date_of_registration; - public static String getFormattedDate() { - LocalDate date = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); - return date.format(formatter); - } public User(String fullName, String phoneNumber){ this.fullName = fullName; @@ -46,4 +41,19 @@ public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } + public static String getFormattedDate() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return date.format(formatter); + } + @Override + public String toString() { + return "User{" + + "fullName='" + fullName + '\'' + + ", ID='" + ID + '\'' + + ", phoneNumber='" + phoneNumber + '\'' + + ", date_of_registration='" + date_of_registration + '\'' + + '}'; + } + } \ No newline at end of file From 91174ecaab64bf9eb6e0ed2262426dc4f9942eaf Mon Sep 17 00:00:00 2001 From: arshiammz Date: Wed, 15 May 2024 22:32:55 +0330 Subject: [PATCH 07/16] Class Rent completed,Library updated,Main created! --- Answers/Library/src/main/java/Admin.java | 6 +- Answers/Library/src/main/java/Book.java | 6 +- Answers/Library/src/main/java/Library.java | 97 ++++++++++++++++++---- Answers/Library/src/main/java/Main.java | 74 +++++++++++++++++ Answers/Library/src/main/java/Rent.java | 21 ++++- Answers/Library/src/main/java/User.java | 7 +- 6 files changed, 184 insertions(+), 27 deletions(-) create mode 100644 Answers/Library/src/main/java/Main.java diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index e74f8d3..85f057e 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -3,12 +3,14 @@ public class Admin implements Serializable { private String fullName; - private final String ID; + private String ID; private String phoneNumber; private String password; + static int currentID = 0; public Admin(String fullName, String phoneNumber, String password){ + currentID ++; this.fullName = fullName; - this.ID = UUID.randomUUID().toString(); + this.ID = String.valueOf(currentID); this.phoneNumber = phoneNumber; this.password = password; } diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java index 9953262..9e10441 100644 --- a/Answers/Library/src/main/java/Book.java +++ b/Answers/Library/src/main/java/Book.java @@ -3,14 +3,16 @@ public class Book implements Serializable { private static final long serialVersionUID = 1L; - private final String bookID; + private String bookID; private String title; private String author; private boolean availability; private String description; + static int currentID = 0; public Book(String title, String author, String description) { - this.bookID = UUID.randomUUID().toString(); + currentID ++; + this.bookID = String.valueOf(currentID); this.title = title; this.author = author; this.description = description; diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 98df17b..09e7cf8 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -8,11 +8,13 @@ public class Library { private final List books = new ArrayList<>(); private final List admins = new ArrayList<>(); private final List users = new ArrayList<>(); + private final List rents = new ArrayList<>(); private static final String Book_FILE_NAME = "Books.dat"; private static final String Admin_FILE_NAME = "Admins.dat"; private static final String User_FILE_NAME = "Users.dat"; + private static final String Rent_FILE_NAME = "Rents.dat"; private String libName = "NIT"; @@ -28,6 +30,7 @@ public Library(){ loadBooks(); loadAdmins(); loadUsers(); + loadRents(); } public void addBook(String title, String author, String description){ if (capacity > 0){ @@ -54,11 +57,30 @@ public void rentBook(String title){ System.out.println(title + " book is not available now!"); } } - public void returnBook() { - Scanner scanner = new Scanner(System.in); - while (true) { - System.out.println("Please enter the title of the book you want to return:"); - String title = scanner.nextLine(); + public void rentSpecificBook(String bookName,String memberName,String memberID){ + int x=0,y=0; + boolean bookFound =false; + boolean userFound =false; + for (int i = 0; i < books.size(); i++) { + if (books.get(i).getTitle().equalsIgnoreCase(bookName)){ + x = i; + bookFound = true; + } + + } + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getID().equalsIgnoreCase(memberID)) { + y = i; + userFound = true; + } + } + if (bookFound && userFound){ + createRent(books.get(x),users.get(y)); + } else { + System.out.println("Error renting book!"); + } + } + public void returnBook(String title) { boolean found = false; for (int i = 0; i < books.size(); i++) { if (books.get(i).getTitle().equalsIgnoreCase(title)){ @@ -70,19 +92,8 @@ public void returnBook() { } } if (!found) { - System.out.println("Book not found. Would you like to:"); - System.out.println("1. Try again"); - System.out.println("2. Cancel operation"); - System.out.print("Enter option (1 or 2): "); - String option = scanner.nextLine(); - if ("2".equals(option)) { - System.out.println("Operation cancelled."); - break; - } - } else { - break; + System.out.println("error returning book!"); } - } } public void getAvailableBooks(){ @@ -203,4 +214,56 @@ private void loadAdmins(){ } } } + + //---------------------------------------------------------------------------------------------------------- + //Rents registries + + public void createRent(Book book,User user){ + rents.add(new Rent(book,user)); + rentBook(book.getTitle()); + saveRents(); + } + public void removeRent(String ID){ + boolean found = false; + for (int i = 0; i < rents.size(); i++) { + if (rents.get(i).getRentalID().equalsIgnoreCase(ID)){ + rents.remove(rents.get(i)); + saveRents(); + found = true; + break; + } + } + if (!found){ + System.out.println("Error returning book!"); + } + } + public void showRents(){ + for (int i = 0; i < rents.size(); i++) { + System.out.println(rents.get(i).toString()); + } + } + + private void saveRents(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Rent_FILE_NAME))){ + oos.writeObject(rents); + } catch (IOException e) { + System.out.println("Error saving rents: " + e.getMessage()); + } + } + + @SuppressWarnings("unchecked") + private void loadRents(){ + File file = new File(Rent_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Rent_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + rents.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading rents: " + e.getMessage()); + } + } + } + } \ No newline at end of file diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/Main.java new file mode 100644 index 0000000..ee1c353 --- /dev/null +++ b/Answers/Library/src/main/java/Main.java @@ -0,0 +1,74 @@ +import java.util.Scanner; + +public class Main { + static Library library = new Library(); + static Scanner scanner = new Scanner(System.in); + public static void CLI(){ + System.out.println("welcome to" + library.getLibName()); + System.out.println("Please write your choice:"); + System.out.println("lib::addBook::::::"); + System.out.println("lib::getHour"); + System.out.println("lib::rent::"); + System.out.println("lib::addMember::::"); + System.out.println("lib::specificRent::::::"); + System.out.println("lib::getAvailableBooks"); + System.out.println("lib::removeMember::"); + System.out.println("lib::return::"); + System.out.println("exit"); + String input; + while (true) { + input = scanner.nextLine(); + if ("exit".equalsIgnoreCase(input)) { + System.out.println("Good bye :("); + break; + } + processCommand(input); + } + } + public static void processCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "addbook": + String name,author,description; + System.out.println("enter name of book:"); + name = scanner.nextLine(); + System.out.println("enter name of author:"); + author = scanner.nextLine(); + System.out.println("write some description:"); + description = scanner.nextLine(); + library.addBook(name,author,description); + break; + case "gethour": + System.out.println(library.getOperatinghours()); + break; + case "rent": + String bookname = scanner.nextLine(); + System.out.println("enter book name:"); + library.rentBook(bookname); + break; + case "addmember": + // + break; + case "specificrent": + // + break; + case "getavailablebooks": + library.getAvailableBooks(); + break; + case "removemember": + System.out.println("please enter member id:"); + String memberId = scanner.nextLine(); + library.removeUser(memberId); + break; + case "return": + System.out.println("enter book name:"); + String bookName = scanner.nextLine(); + library.returnBook(bookName); + break; + default: + System.out.println("Invalid input! Please try again."); + + } + } +} diff --git a/Answers/Library/src/main/java/Rent.java b/Answers/Library/src/main/java/Rent.java index b714acd..0423967 100644 --- a/Answers/Library/src/main/java/Rent.java +++ b/Answers/Library/src/main/java/Rent.java @@ -15,15 +15,28 @@ public Rent(Book book,User user){ this.book = book; this.user = user; this.rentalID = UUID.randomUUID().toString(); - this.rentalDate = getRentalDate(); - this.returnDate = getReturnDate(); + this.rentalDate = createRentalDate(); + this.returnDate = createReturnDate(); } - public static String getRentalDate() { + + public String getRentalID() { + return rentalID; + } + + public String getRentalDate() { + return rentalDate; + } + + public String getReturnDate() { + return returnDate; + } + + public static String createRentalDate() { LocalDate date = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); return date.format(formatter); } - public static String getReturnDate() { + public static String createReturnDate() { LocalDate date = LocalDate.now(); Period period = Period.ofDays(20); LocalDate rentalDate = date.plus(period); diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index e01b4c8..805105d 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -6,13 +6,16 @@ public class User implements Serializable { private static final long serialVersionUID = 1L; private String fullName; - private final String ID; + private String ID; private String phoneNumber; private String date_of_registration; + static int currentID = 0; + public User(String fullName, String phoneNumber){ + currentID++; this.fullName = fullName; - this.ID = UUID.randomUUID().toString(); + this.ID = String.valueOf(currentID); this.phoneNumber = phoneNumber; this.date_of_registration = getFormattedDate(); } From f80031d260e69f77d596cfa2d2a7a72cf42cfbf1 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 13:22:54 +0330 Subject: [PATCH 08/16] Main menu completed without roles! --- Answers/Library/src/main/java/Admin.java | 3 +++ Answers/Library/src/main/java/Book.java | 2 ++ Answers/Library/src/main/java/Library.java | 12 ++++------ Answers/Library/src/main/java/Main.java | 28 ++++++++++++++++++---- Answers/Library/src/main/java/Rent.java | 10 +++++++- Answers/Library/src/main/java/User.java | 2 ++ 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index 85f057e..1eb7b98 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -1,7 +1,10 @@ +import java.io.Serial; import java.io.Serializable; import java.util.UUID; public class Admin implements Serializable { + @Serial + private static final long serialVersionUID = 1L; private String fullName; private String ID; private String phoneNumber; diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java index 9e10441..ac63e35 100644 --- a/Answers/Library/src/main/java/Book.java +++ b/Answers/Library/src/main/java/Book.java @@ -1,7 +1,9 @@ +import java.io.Serial; import java.util.UUID; import java.io.Serializable; public class Book implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String bookID; private String title; diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 09e7cf8..4de3098 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -87,6 +87,7 @@ public void returnBook(String title) { books.get(i).setAvailability(true); saveBooks(); System.out.println("Book returned successfully."); + deleteRent(title); found = true; break; } @@ -99,7 +100,7 @@ public void returnBook(String title) { public void getAvailableBooks(){ for (int i = 0; i < books.size(); i++) { if (books.get(i).isAvailability()){ - System.out.println(books.get(i).getTitle()); + System.out.println(books.get(i).toString()); } } } @@ -223,19 +224,14 @@ public void createRent(Book book,User user){ rentBook(book.getTitle()); saveRents(); } - public void removeRent(String ID){ - boolean found = false; + public void deleteRent(String title){ for (int i = 0; i < rents.size(); i++) { - if (rents.get(i).getRentalID().equalsIgnoreCase(ID)){ + if (rents.get(i).getBook().getTitle().equalsIgnoreCase(title)){ rents.remove(rents.get(i)); saveRents(); - found = true; break; } } - if (!found){ - System.out.println("Error returning book!"); - } } public void showRents(){ for (int i = 0; i < rents.size(); i++) { diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/Main.java index ee1c353..cc695fb 100644 --- a/Answers/Library/src/main/java/Main.java +++ b/Answers/Library/src/main/java/Main.java @@ -14,6 +14,7 @@ public static void CLI(){ System.out.println("lib::getAvailableBooks"); System.out.println("lib::removeMember::"); System.out.println("lib::return::"); + System.out.println("lib::addAdmin::::::"); System.out.println("exit"); String input; while (true) { @@ -48,10 +49,29 @@ public static void processCommand(String command){ library.rentBook(bookname); break; case "addmember": - // + System.out.println("enter users fullName: "); + String fullName = scanner.nextLine(); + System.out.println("enter users phoneNumber: "); + String phoneNumber = scanner.nextLine(); + library.addUser(fullName,phoneNumber); + break; + case "addadmin": + System.out.println("enter admins fullName: "); + String adminFullName = scanner.nextLine(); + System.out.println("enter admins phoneNumber: "); + String adminPhoneNumber = scanner.nextLine(); + System.out.println("enter new admins password: "); + String adminsPassword = scanner.nextLine(); + library.addAdmin(adminFullName,adminPhoneNumber,adminsPassword); break; case "specificrent": - // + System.out.println("enter bookName:"); + String bookName =scanner.nextLine(); + System.out.println("enter members fullName:"); + String fullMemberName = scanner.nextLine(); + System.out.println("enter members ID:"); + String ID = scanner.nextLine(); + library.rentSpecificBook(bookName,fullMemberName,ID); break; case "getavailablebooks": library.getAvailableBooks(); @@ -63,8 +83,8 @@ public static void processCommand(String command){ break; case "return": System.out.println("enter book name:"); - String bookName = scanner.nextLine(); - library.returnBook(bookName); + String BookName = scanner.nextLine(); + library.returnBook(BookName); break; default: System.out.println("Invalid input! Please try again."); diff --git a/Answers/Library/src/main/java/Rent.java b/Answers/Library/src/main/java/Rent.java index 0423967..fcf0ef0 100644 --- a/Answers/Library/src/main/java/Rent.java +++ b/Answers/Library/src/main/java/Rent.java @@ -1,3 +1,4 @@ +import java.io.Serial; import java.io.Serializable; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -5,6 +6,7 @@ import java.util.UUID; public class Rent implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Book book; private User user; @@ -22,6 +24,12 @@ public Rent(Book book,User user){ public String getRentalID() { return rentalID; } + public Book getBook(){ + return book; + } + public User getUser(){ + return user; + } public String getRentalDate() { return rentalDate; @@ -38,7 +46,7 @@ public static String createRentalDate() { } public static String createReturnDate() { LocalDate date = LocalDate.now(); - Period period = Period.ofDays(20); + Period period = Period.ofDays(21); LocalDate rentalDate = date.plus(period); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); return rentalDate.format(formatter); diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index 805105d..eb06507 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -1,9 +1,11 @@ +import java.io.Serial; import java.io.Serializable; import java.util.UUID; import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class User implements Serializable { + @Serial private static final long serialVersionUID = 1L; private String fullName; private String ID; From 179e530142f6eb6e375716e0feae06f00eece32b Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 16:21:34 +0330 Subject: [PATCH 09/16] Roles added! --- Answers/Library/src/main/java/Library.java | 16 +++++ Answers/Library/src/main/java/Main.java | 69 +++++++++++++++++++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 4de3098..80b9e98 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -149,6 +149,14 @@ public void removeUser(String ID){ System.out.println("Error removing user!"); } } + public boolean checkUser(String fullName,String ID){ + boolean found = false; + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getFullName().equalsIgnoreCase(fullName) && users.get(i).getID().equalsIgnoreCase(ID)) + found = true; + } + return found; + } private void saveUsers(){ try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(User_FILE_NAME))){ oos.writeObject(users); @@ -193,6 +201,14 @@ public void removeAdmin(String ID){ System.out.println("Error removing admin!"); } } + public boolean checkAdmin(String fullName,String ID,String Password){ + boolean found = false; + for (int i = 0; i < admins.size(); i++) { + if (admins.get(i).getFullName().equalsIgnoreCase(fullName) && admins.get(i).getID().equalsIgnoreCase(ID) && admins.get(i).getPassword().equalsIgnoreCase(Password)) + found = true; + } + return found; + } private void saveAdmins(){ try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Admin_FILE_NAME))){ diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/Main.java index cc695fb..e099e6e 100644 --- a/Answers/Library/src/main/java/Main.java +++ b/Answers/Library/src/main/java/Main.java @@ -3,7 +3,74 @@ public class Main { static Library library = new Library(); static Scanner scanner = new Scanner(System.in); - public static void CLI(){ + + + public static void ROLE(){ + System.out.println("Please write your role:"); + System.out.println("Admin / User"); + String role; + while (true){ + role =scanner.nextLine(); + if (role.equalsIgnoreCase("Admin")){ + System.out.println("enter your fullName:"); + String fullName = scanner.nextLine(); + System.out.println("enter your ID:"); + String ID = scanner.nextLine(); + System.out.println("enter your password:"); + String password = scanner.nextLine(); + if (library.checkAdmin(fullName,ID,password)){ + MainMenu(); + break; + } + } else if (role.equalsIgnoreCase("User")){ + System.out.println("enter your fullName:"); + String fullName = scanner.nextLine(); + System.out.println("enter your ID:"); + String ID = scanner.nextLine(); + if (library.checkUser(fullName,ID)){ + MainMenu(); + break; + } + + }else { + System.out.println("invalid entry please try again."); + continue; + } + + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public static void MainMenu(){ System.out.println("welcome to" + library.getLibName()); System.out.println("Please write your choice:"); System.out.println("lib::addBook::::::"); From a419a2f30fd1386ef589f57be34c572eed46c06e Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 19:04:56 +0330 Subject: [PATCH 10/16] Main Class completed and CLI is ready :) --- Answers/Library/src/main/java/Main.java | 193 +++++++++++------------- 1 file changed, 88 insertions(+), 105 deletions(-) diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/Main.java index e099e6e..7efd80f 100644 --- a/Answers/Library/src/main/java/Main.java +++ b/Answers/Library/src/main/java/Main.java @@ -1,88 +1,103 @@ import java.util.Scanner; - public class Main { static Library library = new Library(); static Scanner scanner = new Scanner(System.in); + public static void start(){ + getROLE(); + } - - public static void ROLE(){ + public static void getROLE(){ System.out.println("Please write your role:"); - System.out.println("Admin / User"); + System.out.println("lib::Admin::::::"); + System.out.println("lib::User::::"); + System.out.println("Exit"); String role; while (true){ role =scanner.nextLine(); - if (role.equalsIgnoreCase("Admin")){ - System.out.println("enter your fullName:"); - String fullName = scanner.nextLine(); - System.out.println("enter your ID:"); - String ID = scanner.nextLine(); - System.out.println("enter your password:"); - String password = scanner.nextLine(); - if (library.checkAdmin(fullName,ID,password)){ - MainMenu(); + if (role.equalsIgnoreCase("exit")){ + System.out.println("exiting program..."); break; } - } else if (role.equalsIgnoreCase("User")){ - System.out.println("enter your fullName:"); - String fullName = scanner.nextLine(); - System.out.println("enter your ID:"); - String ID = scanner.nextLine(); - if (library.checkUser(fullName,ID)){ - MainMenu(); - break; + roleCommand(role); + } + } + public static void roleCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "admin" : + if (library.checkAdmin(parts[2],parts[3],parts[4])){ + AdminsMainMenu(); + }else { + System.out.println("wrong information!"); } - - }else { - System.out.println("invalid entry please try again."); - continue; - } - + break; + case "user" : + if (library.checkUser(parts[2],parts[3])) { + UsersMainMenu(); + }else { + System.out.println("wrong information!"); + } + break; + default: + System.out.println("invalid input! please try again."); } } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public static void MainMenu(){ - System.out.println("welcome to" + library.getLibName()); + public static void UsersMainMenu(){ + System.out.println("Welcome to" + library.getLibName()); System.out.println("Please write your choice:"); - System.out.println("lib::addBook::::::"); System.out.println("lib::getHour"); System.out.println("lib::rent::"); - System.out.println("lib::addMember::::"); System.out.println("lib::specificRent::::::"); System.out.println("lib::getAvailableBooks"); - System.out.println("lib::removeMember::"); System.out.println("lib::return::"); - System.out.println("lib::addAdmin::::::"); - System.out.println("exit"); + System.out.println("back"); + String input; + while (true) { + input = scanner.nextLine(); + if ("back".equalsIgnoreCase(input)) { + System.out.println("Good bye :("); + break; + } + UserprocessCommand(input); + } + } + public static void UserprocessCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "gethour": + System.out.println(library.getOperatinghours()); + break; + case "rent": + library.rentBook(parts[2]); + break; + case "specificrent": + library.rentSpecificBook(parts[2],parts[3],parts[4]); + break; + case "getavailablebooks": + library.getAvailableBooks(); + break; + case "return": + library.returnBook(parts[2]); + break; + default: + System.out.println("Invalid input! Please try again."); + + } + } + public static void AdminsMainMenu(){ + System.out.println("Welcome to" + library.getLibName()); + System.out.println("Please write your choice:"); + System.out.println("lib::addBook::::::"); + System.out.println("lib::getHour"); + System.out.println("lib::rent::"); + System.out.println("lib::addMember::::"); + System.out.println("lib::specificRent::::::"); + System.out.println("lib::getAvailableBooks"); + System.out.println("lib::removeMember::"); + System.out.println("lib::return::"); + System.out.println("exit"); String input; while (true) { input = scanner.nextLine(); @@ -90,68 +105,36 @@ public static void MainMenu(){ System.out.println("Good bye :("); break; } - processCommand(input); + AdminprocessCommand(input); } } - public static void processCommand(String command){ + public static void AdminprocessCommand(String command){ String[] parts = command.split("::"); String operation = parts[1]; switch (operation.toLowerCase()){ case "addbook": - String name,author,description; - System.out.println("enter name of book:"); - name = scanner.nextLine(); - System.out.println("enter name of author:"); - author = scanner.nextLine(); - System.out.println("write some description:"); - description = scanner.nextLine(); - library.addBook(name,author,description); + library.addBook(parts[2],parts[3],parts[4]); break; case "gethour": System.out.println(library.getOperatinghours()); break; case "rent": - String bookname = scanner.nextLine(); - System.out.println("enter book name:"); - library.rentBook(bookname); + library.rentBook(parts[2]); break; case "addmember": - System.out.println("enter users fullName: "); - String fullName = scanner.nextLine(); - System.out.println("enter users phoneNumber: "); - String phoneNumber = scanner.nextLine(); - library.addUser(fullName,phoneNumber); - break; - case "addadmin": - System.out.println("enter admins fullName: "); - String adminFullName = scanner.nextLine(); - System.out.println("enter admins phoneNumber: "); - String adminPhoneNumber = scanner.nextLine(); - System.out.println("enter new admins password: "); - String adminsPassword = scanner.nextLine(); - library.addAdmin(adminFullName,adminPhoneNumber,adminsPassword); + library.addUser(parts[2],parts[3]); break; case "specificrent": - System.out.println("enter bookName:"); - String bookName =scanner.nextLine(); - System.out.println("enter members fullName:"); - String fullMemberName = scanner.nextLine(); - System.out.println("enter members ID:"); - String ID = scanner.nextLine(); - library.rentSpecificBook(bookName,fullMemberName,ID); + library.rentSpecificBook(parts[2],parts[3],parts[4]); break; case "getavailablebooks": library.getAvailableBooks(); break; case "removemember": - System.out.println("please enter member id:"); - String memberId = scanner.nextLine(); - library.removeUser(memberId); + library.removeUser(parts[2]); break; case "return": - System.out.println("enter book name:"); - String BookName = scanner.nextLine(); - library.returnBook(BookName); + library.returnBook(parts[2]); break; default: System.out.println("Invalid input! Please try again."); From 67b61b656f75e24347024f7dbf7b32fca30aa956 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 21:02:44 +0330 Subject: [PATCH 11/16] Main renamed to MYAPP and updated. --- Answers/Library/src/main/java/Admin.java | 6 +-- Answers/Library/src/main/java/Book.java | 10 ++-- Answers/Library/src/main/java/Library.java | 3 ++ .../src/main/java/{Main.java => MyApp.java} | 50 +++++++++++-------- Answers/Library/src/main/java/User.java | 8 +-- 5 files changed, 43 insertions(+), 34 deletions(-) rename Answers/Library/src/main/java/{Main.java => MyApp.java} (74%) diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index 1eb7b98..2191625 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -48,9 +48,9 @@ public void setPassword(String password) { @Override public String toString() { return "Admin{" + - "fullName='" + fullName + '\'' + - ", ID='" + ID + '\'' + - ", phoneNumber='" + phoneNumber + '\'' + + "fullName='" + getFullName() + '\'' + + ", ID='" + getID() + '\'' + + ", phoneNumber='" + getPhoneNumber() + '\'' + // Do not include the password for security reasons '}'; } diff --git a/Answers/Library/src/main/java/Book.java b/Answers/Library/src/main/java/Book.java index ac63e35..155ea2a 100644 --- a/Answers/Library/src/main/java/Book.java +++ b/Answers/Library/src/main/java/Book.java @@ -59,11 +59,11 @@ public void setDescription(String description) { @Override public String toString() { return "Book{" + - "bookID='" + bookID + '\'' + - ", title='" + title + '\'' + - ", author='" + author + '\'' + - ", availability=" + availability + - ", description='" + description + '\'' + + "bookID='" + getBookID() + '\'' + + ", title='" + getTitle() + '\'' + + ", author='" + getAuthor() + '\'' + + ", availability=" + isAvailability() + + ", description='" + getDescription() + '\'' + '}'; } } diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 80b9e98..4545f29 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -32,6 +32,9 @@ public Library(){ loadUsers(); loadRents(); } + public boolean isAdminEmpty(){ + return admins.isEmpty(); + } public void addBook(String title, String author, String description){ if (capacity > 0){ books.add(new Book(title,author,description)); diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/MyApp.java similarity index 74% rename from Answers/Library/src/main/java/Main.java rename to Answers/Library/src/main/java/MyApp.java index 7efd80f..725bc87 100644 --- a/Answers/Library/src/main/java/Main.java +++ b/Answers/Library/src/main/java/MyApp.java @@ -1,18 +1,20 @@ import java.util.Scanner; -public class Main { +public class MyApp { static Library library = new Library(); static Scanner scanner = new Scanner(System.in); public static void start(){ + if (library.isAdminEmpty()) + library.addAdmin("Arshia mohammadzade","09031241172","1384"); getROLE(); } public static void getROLE(){ - System.out.println("Please write your role:"); - System.out.println("lib::Admin::::::"); - System.out.println("lib::User::::"); - System.out.println("Exit"); String role; while (true){ + System.out.println("Please write your role:"); + System.out.println("lib::Admin::::::"); + System.out.println("lib::User::::"); + System.out.println("Exit"); role =scanner.nextLine(); if (role.equalsIgnoreCase("exit")){ System.out.println("exiting program..."); @@ -44,16 +46,16 @@ public static void roleCommand(String command){ } } public static void UsersMainMenu(){ - System.out.println("Welcome to" + library.getLibName()); - System.out.println("Please write your choice:"); + System.out.println("Welcome to" + library.getLibName()); + String input; + while (true) { + System.out.println("Please write your operation:"); System.out.println("lib::getHour"); System.out.println("lib::rent::"); System.out.println("lib::specificRent::::::"); System.out.println("lib::getAvailableBooks"); System.out.println("lib::return::"); System.out.println("back"); - String input; - while (true) { input = scanner.nextLine(); if ("back".equalsIgnoreCase(input)) { System.out.println("Good bye :("); @@ -88,27 +90,28 @@ public static void UserprocessCommand(String command){ } public static void AdminsMainMenu(){ System.out.println("Welcome to" + library.getLibName()); - System.out.println("Please write your choice:"); - System.out.println("lib::addBook::::::"); - System.out.println("lib::getHour"); - System.out.println("lib::rent::"); - System.out.println("lib::addMember::::"); - System.out.println("lib::specificRent::::::"); - System.out.println("lib::getAvailableBooks"); - System.out.println("lib::removeMember::"); - System.out.println("lib::return::"); - System.out.println("exit"); String input; while (true) { + System.out.println("Please write your operation:"); + System.out.println("lib::addBook::::::"); + System.out.println("lib::getHour"); + System.out.println("lib::rent::"); + System.out.println("lib::addMember::::"); + System.out.println("lib::specificRent::::::"); + System.out.println("lib::getAvailableBooks"); + System.out.println("lib::removeMember::"); + System.out.println("lib::return::"); + System.out.println("lib::showRents"); + System.out.println("back"); input = scanner.nextLine(); - if ("exit".equalsIgnoreCase(input)) { + if ("back".equalsIgnoreCase(input)) { System.out.println("Good bye :("); break; } - AdminprocessCommand(input); + AdminsProcessCommand(input); } } - public static void AdminprocessCommand(String command){ + public static void AdminsProcessCommand(String command){ String[] parts = command.split("::"); String operation = parts[1]; switch (operation.toLowerCase()){ @@ -136,6 +139,9 @@ public static void AdminprocessCommand(String command){ case "return": library.returnBook(parts[2]); break; + case "showrents": + library.showRents(); + break; default: System.out.println("Invalid input! Please try again."); diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index eb06507..e39791d 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -54,10 +54,10 @@ public static String getFormattedDate() { @Override public String toString() { return "User{" + - "fullName='" + fullName + '\'' + - ", ID='" + ID + '\'' + - ", phoneNumber='" + phoneNumber + '\'' + - ", date_of_registration='" + date_of_registration + '\'' + + "fullName='" + getFullName() + '\'' + + ", ID='" + getID() + '\'' + + ", phoneNumber='" + getPhoneNumber() + '\'' + + ", date_of_registration='" + getDate_of_registration() + '\'' + '}'; } From 0f4ddc11276b5a8fba9fe10e6beae9873de5d502 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 21:49:26 +0330 Subject: [PATCH 12/16] Main(final) class added! --- Answers/Library/src/main/java/Main.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Answers/Library/src/main/java/Main.java diff --git a/Answers/Library/src/main/java/Main.java b/Answers/Library/src/main/java/Main.java new file mode 100644 index 0000000..c58af28 --- /dev/null +++ b/Answers/Library/src/main/java/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + MyApp myApp = new MyApp(); + myApp.start(); + } +} From f43874213852839e3c09b425854f9c5cd0dc7a75 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 22:10:32 +0330 Subject: [PATCH 13/16] now admin,user are inheriated from Person --- Answers/Library/src/main/java/Admin.java | 36 ++++------------------- Answers/Library/src/main/java/Person.java | 33 +++++++++++++++++++++ Answers/Library/src/main/java/User.java | 29 ++---------------- 3 files changed, 41 insertions(+), 57 deletions(-) create mode 100644 Answers/Library/src/main/java/Person.java diff --git a/Answers/Library/src/main/java/Admin.java b/Answers/Library/src/main/java/Admin.java index 2191625..d9f5be5 100644 --- a/Answers/Library/src/main/java/Admin.java +++ b/Answers/Library/src/main/java/Admin.java @@ -2,56 +2,32 @@ import java.io.Serializable; import java.util.UUID; -public class Admin implements Serializable { +public class Admin extends Person implements Serializable { @Serial private static final long serialVersionUID = 1L; - private String fullName; - private String ID; - private String phoneNumber; private String password; static int currentID = 0; - public Admin(String fullName, String phoneNumber, String password){ + + public Admin(String fullName, String phoneNumber, String password) { + super(fullName, phoneNumber); currentID ++; - this.fullName = fullName; this.ID = String.valueOf(currentID); - this.phoneNumber = phoneNumber; this.password = password; } - - public String getFullName() { - return fullName; - } - - public String getID() { - return ID; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public String getPassword() { + public String getPassword(){ return password; } - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - public void setPassword(String password) { this.password = password; } + @Override public String toString() { return "Admin{" + "fullName='" + getFullName() + '\'' + ", ID='" + getID() + '\'' + ", phoneNumber='" + getPhoneNumber() + '\'' + - // Do not include the password for security reasons '}'; } } diff --git a/Answers/Library/src/main/java/Person.java b/Answers/Library/src/main/java/Person.java new file mode 100644 index 0000000..862c4ef --- /dev/null +++ b/Answers/Library/src/main/java/Person.java @@ -0,0 +1,33 @@ +import java.io.Serializable; + +public abstract class Person { + protected String fullName; + protected String ID; + protected String phoneNumber; + + public Person(String fullName, String phoneNumber) { + this.fullName = fullName; + this.phoneNumber = phoneNumber; + } + + public String getFullName() { + return fullName; + } + + public String getID() { + return ID; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } +} + diff --git a/Answers/Library/src/main/java/User.java b/Answers/Library/src/main/java/User.java index e39791d..6fcf75a 100644 --- a/Answers/Library/src/main/java/User.java +++ b/Answers/Library/src/main/java/User.java @@ -4,47 +4,22 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; -public class User implements Serializable { +public class User extends Person implements Serializable { @Serial private static final long serialVersionUID = 1L; - private String fullName; - private String ID; - private String phoneNumber; private String date_of_registration; static int currentID = 0; - public User(String fullName, String phoneNumber){ + super(fullName,phoneNumber); currentID++; - this.fullName = fullName; this.ID = String.valueOf(currentID); - this.phoneNumber = phoneNumber; this.date_of_registration = getFormattedDate(); } - - public String getFullName() { - return fullName; - } - - public String getID() { - return ID; - } - - public String getPhoneNumber() { - return phoneNumber; - } - public String getDate_of_registration() { return date_of_registration; } - public void setFullName(String completeName) { - this.fullName = completeName; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } public static String getFormattedDate() { LocalDate date = LocalDate.now(); From cdd26f7afe978b23c9d6f4a448fe71f0954b90b8 Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 22:18:35 +0330 Subject: [PATCH 14/16] showUsers method added. --- Answers/Library/src/main/java/Library.java | 5 +++++ Answers/Library/src/main/java/MyApp.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/Answers/Library/src/main/java/Library.java b/Answers/Library/src/main/java/Library.java index 4545f29..257cf81 100644 --- a/Answers/Library/src/main/java/Library.java +++ b/Answers/Library/src/main/java/Library.java @@ -152,6 +152,11 @@ public void removeUser(String ID){ System.out.println("Error removing user!"); } } + public void showUsers(){ + for (int i = 0; i < users.size(); i++) { + System.out.println(users.get(i).toString()); + } + } public boolean checkUser(String fullName,String ID){ boolean found = false; for (int i = 0; i < users.size(); i++) { diff --git a/Answers/Library/src/main/java/MyApp.java b/Answers/Library/src/main/java/MyApp.java index 725bc87..4eca9e8 100644 --- a/Answers/Library/src/main/java/MyApp.java +++ b/Answers/Library/src/main/java/MyApp.java @@ -102,6 +102,7 @@ public static void AdminsMainMenu(){ System.out.println("lib::removeMember::"); System.out.println("lib::return::"); System.out.println("lib::showRents"); + System.out.println("lib::showUsers"); System.out.println("back"); input = scanner.nextLine(); if ("back".equalsIgnoreCase(input)) { @@ -142,6 +143,9 @@ public static void AdminsProcessCommand(String command){ case "showrents": library.showRents(); break; + case "showusers": + library.showUsers(); + break; default: System.out.println("Invalid input! Please try again."); From b62fffa4a98c6dd8b8fdd7216c25bfb259584b8b Mon Sep 17 00:00:00 2001 From: arshiammz Date: Thu, 16 May 2024 23:50:37 +0330 Subject: [PATCH 15/16] Final Library :)))) --- Answers/Library3/.gitignore | 38 +++ Answers/Library3/.idea/.gitignore | 3 + Answers/Library3/.idea/encodings.xml | 7 + Answers/Library3/.idea/misc.xml | 14 + Answers/Library3/.idea/vcs.xml | 6 + Answers/Library3/Admins.dat | Bin 0 -> 204 bytes Answers/Library3/Books.dat | Bin 0 -> 234 bytes Answers/Library3/Rents.dat | Bin 0 -> 58 bytes Answers/Library3/Users.dat | Bin 0 -> 267 bytes Answers/Library3/pom.xml | 17 ++ Answers/Library3/src/main/java/Admin.java | 57 ++++ Answers/Library3/src/main/java/Book.java | 70 +++++ Answers/Library3/src/main/java/Library.java | 289 ++++++++++++++++++++ Answers/Library3/src/main/java/Main.java | 6 + Answers/Library3/src/main/java/MyApp.java | 152 ++++++++++ Answers/Library3/src/main/java/Rent.java | 67 +++++ Answers/Library3/src/main/java/User.java | 65 +++++ 17 files changed, 791 insertions(+) create mode 100644 Answers/Library3/.gitignore create mode 100644 Answers/Library3/.idea/.gitignore create mode 100644 Answers/Library3/.idea/encodings.xml create mode 100644 Answers/Library3/.idea/misc.xml create mode 100644 Answers/Library3/.idea/vcs.xml create mode 100644 Answers/Library3/Admins.dat create mode 100644 Answers/Library3/Books.dat create mode 100644 Answers/Library3/Rents.dat create mode 100644 Answers/Library3/Users.dat create mode 100644 Answers/Library3/pom.xml create mode 100644 Answers/Library3/src/main/java/Admin.java create mode 100644 Answers/Library3/src/main/java/Book.java create mode 100644 Answers/Library3/src/main/java/Library.java create mode 100644 Answers/Library3/src/main/java/Main.java create mode 100644 Answers/Library3/src/main/java/MyApp.java create mode 100644 Answers/Library3/src/main/java/Rent.java create mode 100644 Answers/Library3/src/main/java/User.java diff --git a/Answers/Library3/.gitignore b/Answers/Library3/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/Answers/Library3/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Answers/Library3/.idea/.gitignore b/Answers/Library3/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Answers/Library3/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Answers/Library3/.idea/encodings.xml b/Answers/Library3/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/Answers/Library3/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Answers/Library3/.idea/misc.xml b/Answers/Library3/.idea/misc.xml new file mode 100644 index 0000000..fdc35ea --- /dev/null +++ b/Answers/Library3/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Answers/Library3/.idea/vcs.xml b/Answers/Library3/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/Answers/Library3/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Answers/Library3/Admins.dat b/Answers/Library3/Admins.dat new file mode 100644 index 0000000000000000000000000000000000000000..5581b0dcd12905d0b9dbf0f2ac70d09d7902d8bf GIT binary patch literal 204 zcmXYpK?;IE7=@o@5V)&#&iCfqSq)9B z7VH46^~#_ZG;eN7S?q3%5?Q_D}bn}Ku8Gbb?N8~tiZ6mee4=oD3CY?MQ)ILq|ZHahwP#> zxUgpInX$iqQ8%ke>6{gDD>yvkN#@ zlA@TS6H-{yf;G#fM1zj9F;?(a#{9mfYTf@3%hh@qwu@k&O%AvrE74vlx3pXfo9cg5 q2#Z!v;_F1h542)IG6=9XYAHhi}??Za;pmKKJ-Ff?x%ax1DKg00>{B zL3=2A^v3o3FhK~BhH!PyaIS~4xWF=xAK2M4ztwP=A)8IL-8hr?-45AS + + 4.0.0 + + org.example + Library3 + 1.0-SNAPSHOT + + + 21 + 21 + UTF-8 + + + \ No newline at end of file diff --git a/Answers/Library3/src/main/java/Admin.java b/Answers/Library3/src/main/java/Admin.java new file mode 100644 index 0000000..2191625 --- /dev/null +++ b/Answers/Library3/src/main/java/Admin.java @@ -0,0 +1,57 @@ +import java.io.Serial; +import java.io.Serializable; +import java.util.UUID; + +public class Admin implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + private String fullName; + private String ID; + private String phoneNumber; + private String password; + static int currentID = 0; + public Admin(String fullName, String phoneNumber, String password){ + currentID ++; + this.fullName = fullName; + this.ID = String.valueOf(currentID); + this.phoneNumber = phoneNumber; + this.password = password; + } + + public String getFullName() { + return fullName; + } + + public String getID() { + return ID; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public String getPassword() { + return password; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public void setPassword(String password) { + this.password = password; + } + @Override + public String toString() { + return "Admin{" + + "fullName='" + getFullName() + '\'' + + ", ID='" + getID() + '\'' + + ", phoneNumber='" + getPhoneNumber() + '\'' + + // Do not include the password for security reasons + '}'; + } +} diff --git a/Answers/Library3/src/main/java/Book.java b/Answers/Library3/src/main/java/Book.java new file mode 100644 index 0000000..4fec129 --- /dev/null +++ b/Answers/Library3/src/main/java/Book.java @@ -0,0 +1,70 @@ +import java.io.Serial; +import java.util.UUID; +import java.io.Serializable; + +public class Book implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + private String bookID; + private String title; + private String author; + private boolean availability; + private String description; + static int currentID = 0; + + public Book(String title, String author, String description) { + currentID ++; + this.bookID = String.valueOf(currentID); + this.title = title; + this.author = author; + this.description = description; + this.availability = true; + } + + public String getBookID() { + return bookID; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public boolean isAvailability() { + return availability; + } + + public void setAvailability(boolean availability) { + this.availability = availability; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + @Override + public String toString() { + return "Book{" + + "title='" + getTitle() + '\'' + + ", bookID='" + getBookID() + '\'' + + ", author='" + getAuthor() + '\'' + + ", availability=" + isAvailability() + + ", description='" + getDescription() + '\'' + + '}'; + } +} + diff --git a/Answers/Library3/src/main/java/Library.java b/Answers/Library3/src/main/java/Library.java new file mode 100644 index 0000000..668e91a --- /dev/null +++ b/Answers/Library3/src/main/java/Library.java @@ -0,0 +1,289 @@ +import java.io.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Scanner; + +public class Library { + private final List books = new ArrayList<>(); + private final List admins = new ArrayList<>(); + private final List users = new ArrayList<>(); + private final List rents = new ArrayList<>(); + + + private static final String Book_FILE_NAME = "Books.dat"; + private static final String Admin_FILE_NAME = "Admins.dat"; + private static final String User_FILE_NAME = "Users.dat"; + private static final String Rent_FILE_NAME = "Rents.dat"; + + + private String libName = "NIT"; + private static int capacity = 1250; + private String operatinghours = "NIT library is open from 8 AM to 6 PM"; + public String getOperatinghours() { + return operatinghours; + } + public String getLibName(){ + return libName; + } + public Library(){ + loadBooks(); + loadAdmins(); + loadUsers(); + loadRents(); + } + public boolean isAdminEmpty(){ + return admins.isEmpty(); + } + public void addBook(String title, String author, String description){ + if (capacity > 0){ + books.add(new Book(title,author,description)); + capacity --; + books.sort(Comparator.comparing(Book::getTitle)); + saveBooks(); + System.out.println("Book added to library successfully."); + }else { + System.out.println("There is no capacity to add books!"); + } + } + public void rentBook(String title){ + boolean found = false; + for (int i = 0; i < books.size(); i++) { + if (title.equalsIgnoreCase(books.get(i).getTitle()) && books.get(i).isAvailability()){ + books.get(i).setAvailability(false); + saveBooks(); + System.out.println(title + " book rented successfully."); + found = true; + break; + } + } if (!found){ + System.out.println(title + " book is not available now!"); + } + } + public void rentSpecificBook(String bookName,String memberName,String memberID){ + int x=0,y=0; + boolean bookFound =false; + boolean userFound =false; + for (int i = 0; i < books.size(); i++) { + if (books.get(i).getTitle().equalsIgnoreCase(bookName)){ + x = i; + bookFound = true; + } + + } + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getID().equalsIgnoreCase(memberID)) { + y = i; + userFound = true; + } + } + if (bookFound && userFound){ + createRent(books.get(x),users.get(y)); + } else { + System.out.println("Error renting book!"); + } + } + public void returnBook(String title) { + boolean found = false; + for (int i = 0; i < books.size(); i++) { + if (books.get(i).getTitle().equalsIgnoreCase(title)){ + books.get(i).setAvailability(true); + saveBooks(); + System.out.println("Book returned successfully."); + deleteRent(title); + found = true; + break; + } + } + if (!found) { + System.out.println("error returning book!"); + } + } + + public void getAvailableBooks(){ + for (int i = 0; i < books.size(); i++) { + if (books.get(i).isAvailability()){ + System.out.println(books.get(i).toString()); + } + } + } + private void saveBooks() { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Book_FILE_NAME))) { + oos.writeObject(books); + } catch (IOException e) { + System.out.println("Error saving books: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadBooks(){ + File file = new File(Book_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Book_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + books.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading books: " + e.getMessage()); + } + } + } + //---------------------------------------------------------------------------------------------------------- + //User registries + public void addUser(String fullName,String phoneNumber){ + users.add(new User(fullName,phoneNumber)); + users.sort(Comparator.comparing(User::getFullName)); + saveUsers(); + System.out.println("User " + fullName + " added successfully."); + } + + public void removeUser(String ID){ + boolean found = false; + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getID().equalsIgnoreCase(ID)){ + users.remove(users.get(i)); + saveUsers(); + System.out.println("User " + users.get(i).getFullName() + " removed successfully."); + found = true; + break; + } + } + if (!found){ + System.out.println("Error removing user!"); + } + } + public void showUsers(){ + for (int i = 0; i < users.size(); i++) { + System.out.println(users.get(i).toString()); + } + } + public boolean checkUser(String fullName,String ID){ + boolean found = false; + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getFullName().equalsIgnoreCase(fullName) && users.get(i).getID().equalsIgnoreCase(ID)) + found = true; + } + return found; + } + private void saveUsers(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(User_FILE_NAME))){ + oos.writeObject(users); + } catch (IOException e) { + System.out.println("Error saving users: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadUsers(){ + File file = new File(User_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(User_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + users.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading users: " + e.getMessage()); + } + } + } + //---------------------------------------------------------------------------------------------------------- + //Admin registries + public void addAdmin(String fullName,String phoneNumber,String password){ + admins.add(new Admin(fullName,phoneNumber,password)); + admins.sort(Comparator.comparing(Admin::getFullName)); + saveAdmins(); + System.out.println("Admin " + fullName + " added successfully."); + } + public void removeAdmin(String ID){ + boolean found = false; + for (int i = 0; i < admins.size(); i++) { + if (admins.get(i).getID().equalsIgnoreCase(ID)){ + admins.remove(admins.get(i)); + saveUsers(); + System.out.println("Admin " + admins.get(i).getFullName() + " removed successfully."); + found = true; + break; + } + } + if (!found){ + System.out.println("Error removing admin!"); + } + } + public boolean checkAdmin(String fullName,String ID,String Password){ + boolean found = false; + for (int i = 0; i < admins.size(); i++) { + if (admins.get(i).getFullName().equalsIgnoreCase(fullName) && admins.get(i).getID().equalsIgnoreCase(ID) && admins.get(i).getPassword().equalsIgnoreCase(Password)) + found = true; + } + return found; + } + + private void saveAdmins(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Admin_FILE_NAME))){ + oos.writeObject(admins); + } catch (IOException e) { + System.out.println("Error saving admins: " + e.getMessage()); + } + } + @SuppressWarnings("unchecked") + private void loadAdmins(){ + File file = new File(Admin_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Admin_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + admins.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading admins: " + e.getMessage()); + } + } + } + + //---------------------------------------------------------------------------------------------------------- + //Rents registries + + public void createRent(Book book,User user){ + rents.add(new Rent(book,user)); + rentBook(book.getTitle()); + saveRents(); + } + public void deleteRent(String title){ + for (int i = 0; i < rents.size(); i++) { + if (rents.get(i).getBook().getTitle().equalsIgnoreCase(title)){ + rents.remove(rents.get(i)); + saveRents(); + break; + } + } + } + public void showRents(){ + for (int i = 0; i < rents.size(); i++) { + System.out.println(rents.get(i).toString()); + } + } + + private void saveRents(){ + try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Rent_FILE_NAME))){ + oos.writeObject(rents); + } catch (IOException e) { + System.out.println("Error saving rents: " + e.getMessage()); + } + } + + @SuppressWarnings("unchecked") + private void loadRents(){ + File file = new File(Rent_FILE_NAME); + if (file.exists()){ + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Rent_FILE_NAME))){ + Object object = ois.readObject(); + if (object instanceof List) { + rents.addAll((List) object); + } + } catch (IOException | ClassNotFoundException e) { + System.out.println("Error loading rents: " + e.getMessage()); + } + } + } + +} diff --git a/Answers/Library3/src/main/java/Main.java b/Answers/Library3/src/main/java/Main.java new file mode 100644 index 0000000..c58af28 --- /dev/null +++ b/Answers/Library3/src/main/java/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + MyApp myApp = new MyApp(); + myApp.start(); + } +} diff --git a/Answers/Library3/src/main/java/MyApp.java b/Answers/Library3/src/main/java/MyApp.java new file mode 100644 index 0000000..366a208 --- /dev/null +++ b/Answers/Library3/src/main/java/MyApp.java @@ -0,0 +1,152 @@ +import java.util.Scanner; +public class MyApp { + static Library library = new Library(); + static Scanner scanner = new Scanner(System.in); + public static void start(){ + if (library.isAdminEmpty()) + library.addAdmin("Arshia mohammadzade","09031241172","1384"); + getROLE(); + } + + public static void getROLE(){ + String role; + while (true){ + System.out.println("Please write your role:"); + System.out.println("lib::Admin::::::"); + System.out.println("lib::User::::"); + System.out.println("Exit"); + role =scanner.nextLine(); + if (role.equalsIgnoreCase("exit")){ + System.out.println("exiting program..."); + break; + } + roleCommand(role); + } + } + public static void roleCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "admin" : + if (library.checkAdmin(parts[2],parts[3],parts[4])){ + AdminsMainMenu(); + }else { + System.out.println("wrong information!"); + } + break; + case "user" : + if (library.checkUser(parts[2],parts[3])) { + UsersMainMenu(); + }else { + System.out.println("wrong information!"); + } + break; + default: + System.out.println("invalid input! please try again."); + } + } + public static void UsersMainMenu(){ + System.out.println("Welcome to" + library.getLibName()); + String input; + while (true) { + System.out.println("Please write your operation:"); + System.out.println("lib::getHour"); + System.out.println("lib::rent::"); + System.out.println("lib::specificRent::::::"); + System.out.println("lib::getAvailableBooks"); + System.out.println("lib::return::"); + System.out.println("back"); + input = scanner.nextLine(); + if ("back".equalsIgnoreCase(input)) { + break; + } + UserprocessCommand(input); + } + } + public static void UserprocessCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "gethour": + System.out.println(library.getOperatinghours()); + break; + case "rent": + library.rentBook(parts[2]); + break; + case "specificrent": + library.rentSpecificBook(parts[2],parts[3],parts[4]); + break; + case "getavailablebooks": + library.getAvailableBooks(); + break; + case "return": + library.returnBook(parts[2]); + break; + default: + System.out.println("Invalid input! Please try again."); + + } + } + public static void AdminsMainMenu(){ + System.out.println("Welcome to" + library.getLibName()); + String input; + while (true) { + System.out.println("Please write your operation:"); + System.out.println("lib::addBook::::<Author>::<Description>"); + System.out.println("lib::getHour"); + System.out.println("lib::rent::<BookName>"); + System.out.println("lib::addMember::<fullName>::<phoneNumber>"); + System.out.println("lib::specificRent::<bookName>::<memberName>::<memberID>"); + System.out.println("lib::getAvailableBooks"); + System.out.println("lib::removeMember::<memberID>"); + System.out.println("lib::return::<bookName>"); + System.out.println("lib::showRents"); + System.out.println("lib::showUsers"); + System.out.println("back"); + input = scanner.nextLine(); + if ("back".equalsIgnoreCase(input)) { + break; + } + AdminsProcessCommand(input); + } + } + public static void AdminsProcessCommand(String command){ + String[] parts = command.split("::"); + String operation = parts[1]; + switch (operation.toLowerCase()){ + case "addbook": + library.addBook(parts[2],parts[3],parts[4]); + break; + case "gethour": + System.out.println(library.getOperatinghours()); + break; + case "rent": + library.rentBook(parts[2]); + break; + case "addmember": + library.addUser(parts[2],parts[3]); + break; + case "specificrent": + library.rentSpecificBook(parts[2],parts[3],parts[4]); + break; + case "getavailablebooks": + library.getAvailableBooks(); + break; + case "removemember": + library.removeUser(parts[2]); + break; + case "return": + library.returnBook(parts[2]); + break; + case "showrents": + library.showRents(); + break; + case "showusers": + library.showUsers(); + break; + default: + System.out.println("Invalid input! Please try again."); + + } + } +} diff --git a/Answers/Library3/src/main/java/Rent.java b/Answers/Library3/src/main/java/Rent.java new file mode 100644 index 0000000..62acf25 --- /dev/null +++ b/Answers/Library3/src/main/java/Rent.java @@ -0,0 +1,67 @@ +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.Period; +import java.util.UUID; + +public class Rent implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + private Book book; + private User user; + private String rentalID; + private String rentalDate; + private String returnDate; + public Rent(Book book,User user){ + this.book = book; + this.user = user; + this.rentalID = UUID.randomUUID().toString(); + this.rentalDate = createRentalDate(); + this.returnDate = createReturnDate(); + } + + public String getRentalID() { + return rentalID; + } + public Book getBook(){ + return book; + } + public User getUser(){ + return user; + } + + public String getRentalDate() { + return rentalDate; + } + + public String getReturnDate() { + return returnDate; + } + + public static String createRentalDate() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return date.format(formatter); + } + public static String createReturnDate() { + LocalDate date = LocalDate.now(); + Period period = Period.ofDays(21); + LocalDate rentalDate = date.plus(period); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return rentalDate.format(formatter); + } + + @Override + public String toString() { + return "Rent{" + + "BookName='" + book.getTitle() + '\'' + + ", UserName='" + user.getFullName() + '\'' + + ", userID='" + user.getID() + '\'' + + ", rentalDate=" + rentalDate + + ", returnDate=" + returnDate + + ", rentalID=" + rentalID + + '}'; + } + +} \ No newline at end of file diff --git a/Answers/Library3/src/main/java/User.java b/Answers/Library3/src/main/java/User.java new file mode 100644 index 0000000..33eb091 --- /dev/null +++ b/Answers/Library3/src/main/java/User.java @@ -0,0 +1,65 @@ +import java.io.Serial; +import java.io.Serializable; +import java.util.UUID; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public class User implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + private String fullName; + private String ID; + private String phoneNumber; + private String date_of_registration; + static int currentID = 0; + + + public User(String fullName, String phoneNumber){ + currentID++; + this.fullName = fullName; + this.ID = String.valueOf(currentID); + this.phoneNumber = phoneNumber; + this.date_of_registration = getFormattedDate(); + } + + public String getFullName() { + return fullName; + } + + public String getID() { + return ID; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public String getDate_of_registration() { + return date_of_registration; + } + + public void setFullName(String completeName) { + this.fullName = completeName; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public static String getFormattedDate() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); + return date.format(formatter); + } + @Override + public String toString() { + return "User{" + + "fullName='" + getFullName() + '\'' + + ", ID='" + getID() + '\'' + + ", phoneNumber='" + getPhoneNumber() + '\'' + + ", date_of_registration='" + getDate_of_registration() + '\'' + + '}'; + } + +} + From 7f27f2e6b19d6426a1f522a2b5e9bb95d246deb6 Mon Sep 17 00:00:00 2001 From: arshiammz <mohammadzade.arshia84@gmail.com> Date: Thu, 16 May 2024 23:58:25 +0330 Subject: [PATCH 16/16] final --- Answers/Library3/src/main/java/Admin.java | 2 +- Answers/Library3/src/main/java/Library.java | 5 +++++ Answers/Library3/src/main/java/MyApp.java | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Answers/Library3/src/main/java/Admin.java b/Answers/Library3/src/main/java/Admin.java index 2191625..795b4d5 100644 --- a/Answers/Library3/src/main/java/Admin.java +++ b/Answers/Library3/src/main/java/Admin.java @@ -51,7 +51,7 @@ public String toString() { "fullName='" + getFullName() + '\'' + ", ID='" + getID() + '\'' + ", phoneNumber='" + getPhoneNumber() + '\'' + - // Do not include the password for security reasons + ", password='" + getPassword() + '\'' + '}'; } } diff --git a/Answers/Library3/src/main/java/Library.java b/Answers/Library3/src/main/java/Library.java index 668e91a..0260814 100644 --- a/Answers/Library3/src/main/java/Library.java +++ b/Answers/Library3/src/main/java/Library.java @@ -217,6 +217,11 @@ public boolean checkAdmin(String fullName,String ID,String Password){ } return found; } + public void showAdmins(){ + for (int i = 0; i < admins.size(); i++) { + System.out.println(admins.get(i).toString()); + } + } private void saveAdmins(){ try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(Admin_FILE_NAME))){ diff --git a/Answers/Library3/src/main/java/MyApp.java b/Answers/Library3/src/main/java/MyApp.java index 366a208..4e0d4ac 100644 --- a/Answers/Library3/src/main/java/MyApp.java +++ b/Answers/Library3/src/main/java/MyApp.java @@ -102,6 +102,7 @@ public static void AdminsMainMenu(){ System.out.println("lib::return::<bookName>"); System.out.println("lib::showRents"); System.out.println("lib::showUsers"); + System.out.println("lib::showAdmins"); System.out.println("back"); input = scanner.nextLine(); if ("back".equalsIgnoreCase(input)) { @@ -144,6 +145,9 @@ public static void AdminsProcessCommand(String command){ case "showusers": library.showUsers(); break; + case "showAdmins": + library.showAdmins(); + break; default: System.out.println("Invalid input! Please try again.");