0

i am making a program that reads input from a user, allows them to view the books available in my library (which is imported from an excel sheet), picking an item and choosing to borrow it, but the thing is that i want to put borrowing and return dates, how do i do that exactly? for example: if a user confirms the borrowing of a book, after the operation happens the date of borrowing should be added in the excel sheet, and also a little side request with this; if it is possible to somehow neglect the first row in a for loop that is looping across an array of loops and proceed with other rows then please help me out with that as well (this loop is at line 111 in the code, the one after the list "filteredBooks") here is my code so far: `public class BookStudentMerge {

 public static List<Row> getStudentInfo(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
      List<Row> result = new ArrayList<Row>();
      String cellValue = "";
      String searchV = searchValue.toLowerCase();
      for (Row row : sheet) {
       for (Cell cell : row) {
        cellValue = formatter.formatCellValue(cell, evaluator);
        String cellV = cellValue.toLowerCase();
        if (cellV.contains(searchV)) {
         result.add(row);
         break;
        }
       }
      }
      return result;
     }
 public static List<Row> bookSearch(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator, String searchValue) {
     List<Row> none = new ArrayList<Row>();
     String searchM = searchValue.toLowerCase(); 
     List<Row> result = new ArrayList<Row>();
      String cellValue = "";
      for (Row row : sheet) {
       for (Cell cell : row) {
        cellValue = formatter.formatCellValue(cell, evaluator);
        String cellM = cellValue.toLowerCase();
        if (cellM.contains(searchM)) {
            result.add(row);
         break;
        }
       }
      }
      return result;
 }
 public static boolean checkAvailability (Row r, DataFormatter formatter, FormulaEvaluator evaluator) {
     String cellValue = "";
     for (Cell c : r) {
         cellValue = formatter.formatCellValue(c, evaluator);
         String cellM = cellValue.toLowerCase();
         if (cellM.equalsIgnoreCase("Available")) {
             return true; 
     }
    }
     return false;
 }
 public static void changeStatus (Row r, DataFormatter formatter, FormulaEvaluator evaluator) {
     String cellValue = "";
     for (Cell c : r) {
         cellValue = formatter.formatCellValue(c, evaluator);
         String cellM = cellValue.toLowerCase();
     if (cellM.equalsIgnoreCase("Available")) {
         c.setCellValue("Unavailable");
     }
     else if (cellM.equalsIgnoreCase("Unavailable")) {
         c.setCellValue("Available"); 
     }
     }
 }

public static void main(String[] args) throws IOException, InvalidFormatException {





    Workbook Books = WorkbookFactory.create(new FileInputStream("C:\\Users\\abdul\\Desktop\\University Files\\Object-Oriented Programming\\Project files\\Book class\\Books & DDC.xlsx"));
    Sheet SB = Books.getSheetAt(0);
    Workbook Students = WorkbookFactory.create(new FileInputStream("C:\\Users\\abdul\\Desktop\\University Files\\Object-Oriented Programming\\Project files\\Book class\\StudentsInfo.xlsx"));
    Sheet SS = Students.getSheetAt(0);
    DataFormatter FB = new DataFormatter();
    FormulaEvaluator EB =  Books.getCreationHelper().createFormulaEvaluator();      
    DataFormatter FS = new DataFormatter();
    FormulaEvaluator ES =  Students.getCreationHelper().createFormulaEvaluator();
    Scanner s = new Scanner (System.in);




         System.out.println("Welcome to our BiblioTheque library program!");
         System.out.println("Enter a valid student ID number: ");
         String inp = s.nextLine();
          Row headers = SS.getRow(0);
          for (Cell HS : headers) {
              System.out.print(HS.getStringCellValue() + "\t\t  ");
          }
         System.out.println();
         List<Row> filteredStudents = getStudentInfo(SS, FS, ES, inp);
         for (Row row : filteredStudents) {
               for (Cell cell : row) {
                   System.out.print(FS.formatCellValue(cell, ES));
                   System.out.print("\t     ");
               }
               System.out.println();
         }
         System.out.println();
         System.out.println("Search for a book by title, author, DDC, or ISBN: ");
         System.out.println("enter the name, author, ddc, isbn of your book: ");
         String search = s.nextLine();
          List<Row> filteredBooks = bookSearch(SB, FB, EB, search);
          Row HB = SB.getRow(0);
          for (Cell CB : HB) {
              System.out.print(CB.getStringCellValue() + "\t\t\t");
          }
          System.out.println();
          for (Row row : filteredBooks) {
              for (Cell cell : row) {
            System.out.print(FB.formatCellValue(cell, EB));
            System.out.print("\t\t");
           }
              System.out.println();
          }
          if (filteredBooks.isEmpty()) {
              System.out.println("no results found for the entered keyword/number");
          }
          else {
              System.out.println("do you wish to borrow any of the displayed books?");
          }
          String ans = s.nextLine();
          if (ans.equalsIgnoreCase("yes")) {
              System.out.println("choose the desired book by typing the item's list number: ");
          }
          int borrow = s.nextInt() - 1;
          Row Result = filteredBooks.get(borrow);
          if (checkAvailability(Result, FB, EB)) {
              System.out.println("You are going to borrow the book " + Result.getCell(0) + ", please proceed to the help desk to complete the operation.");
              changeStatus(Result, FB, EB);
          }
}

}`

1 Answers1

1

One possibility is java.time.LocalDateTime:

import java.time.LocalDateTime;    

public class Time {    
  public static void main(String[] args) {    
   LocalDateTime time = LocalDateTime.now();  
   System.out.println(time);  
  }    
}    

This will give an output like this: 2020-05-30T13:29:14.566.

If you want to change the format, you will have to use a DateTimeFormatter:

import java.time.LocalDateTime; 
import java.time.format.DateTimeFormatter;  

public class Time {    
  public static void main(String[] args) {    
   LocalDateTime time = LocalDateTime.now();

   DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
   String timeDate = time.format(formatter);
   System.out.println(timeDate);  
  }    
}      

This will give an output like 30-05-2020 13:59:13.

So now we have a String with the wanted date. We now just have to write this to a csv-file (my recommendation is to use a csv and not a excel-file!). One example on how this is possible is provided in this answer. If you really want to use excel, I suggest reading this question and its answers.

More information can be found here and here.

With the information and examples provided above, you should be able to implement it by yourself in your code.

  • Thank you so much, i managed to merge this with what i was working on and it worked out for borrowing, but when i want to record the time at which i returned a book it gives me the same time that i borrowed it at, is this because now() method in the LocalDateTime class only records the time that you run your program at? and if so, is there a work around for this? – Abdul Munem May 30 '20 at 14:30
  • now() returns the current date. So if you borrow the book today and give it back tomorrow, the date will not be the same anymore. You will also have to call the method now() again, when returning the book. Otherwise the variable will just stay the same. Does this make it clear? –  May 30 '20 at 14:32