Skip to content

Commit 926dc03

Browse files
committed
도서 찾기 도서열람후 필터링 최신화, 리뷰 작성뒤 바로 도서 평점 및 리뷰 최신화
1 parent 9b7ce7a commit 926dc03

File tree

5 files changed

+152
-9
lines changed

5 files changed

+152
-9
lines changed

src/view/AddBook.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.awt.SystemColor;
2424
import java.awt.event.ActionEvent;
2525
import java.awt.event.ActionListener;
26+
import java.awt.event.KeyAdapter;
27+
import java.awt.event.KeyEvent;
2628
import java.awt.event.MouseAdapter;
2729
import java.awt.event.MouseEvent;
2830
import java.io.File;
@@ -283,6 +285,20 @@ public void changed() {
283285
bookPriceTextField.setColumns(10);
284286
bookPriceTextField.setBounds(92, 118, 407, 26);
285287
panel_1.add(bookPriceTextField);
288+
bookPriceTextField.addKeyListener(new KeyAdapter() {
289+
public void keyPressed(KeyEvent ke) {
290+
String value = bookPriceTextField.getText();
291+
int l = value.length();
292+
if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9' || ke.getKeyChar() == KeyEvent.VK_BACK_SPACE) {
293+
bookPriceTextField.setEditable(true);
294+
lblNewLabel_1.setText("");
295+
} else {
296+
bookPriceTextField.setEditable(false);
297+
lblNewLabel_1.setText("가격은 숫자만 가능합니다.");
298+
}
299+
}
300+
});
301+
286302
bookPriceTextField.getDocument().addDocumentListener(new DocumentListener() {
287303
public void changedUpdate(DocumentEvent e) {
288304

src/view/BookInfo.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.awt.SystemColor;
1919
import java.awt.event.MouseAdapter;
2020
import java.awt.event.MouseEvent;
21+
import java.awt.event.WindowAdapter;
2122
import java.awt.event.WindowEvent;
2223
import java.io.FileInputStream;
2324
import java.io.IOException;
@@ -56,6 +57,7 @@ public class BookInfo extends JFrame {
5657
boolean userSus = false;
5758
long diffDays = 0; // 연체일을 나타내는 변수
5859
ReviewPanel[] review;
60+
JLabel bookGradeLabel;
5961

6062
/**
6163
* Launch the application.
@@ -143,6 +145,18 @@ public void mouseClicked(MouseEvent e) {
143145
JOptionPane.INFORMATION_MESSAGE);
144146
// 리뷰 작성창 띄움
145147
WriteReview writereview = new WriteReview(book_ISBN, user_phone);
148+
writereview.addWindowListener(new WindowAdapter() {
149+
@Override
150+
public void windowClosed(WindowEvent e) {
151+
try {
152+
recentlyReview();
153+
} catch (NumberFormatException | SQLException e1) {
154+
// TODO Auto-generated catch block
155+
e1.printStackTrace();
156+
}
157+
158+
}
159+
});
146160
writereview.setVisible(true);
147161
updateBookReturn(); // 반납 업뎃함수
148162
bookBorrowButton.setText("대출하기"); // 대출하기 버튼으로 변경
@@ -190,7 +204,7 @@ public void mouseClicked(MouseEvent e) {
190204
panel_1.add(bookLinkLabel);
191205

192206
// 책 평점 라벨
193-
JLabel bookGradeLabel = new JLabel("\uD3C9\uC810 : \u2605\u2605\u2605\u2605\u2606");
207+
bookGradeLabel = new JLabel("\uD3C9\uC810 : \u2605\u2605\u2605\u2605\u2606");
194208
bookGradeLabel.setFont(new Font("한컴산뜻돋움", Font.PLAIN, 16));
195209
bookGradeLabel.setBounds(12, 92, 193, 26);
196210
panel_1.add(bookGradeLabel);
@@ -244,6 +258,7 @@ public void mouseClicked(MouseEvent e) {
244258

245259
JTextArea bookDescriptionLabel = new JTextArea();
246260
bookDescriptionLabel.setBackground(new Color(255, 255, 255));
261+
247262
scrollPane.setViewportView(bookDescriptionLabel);
248263
bookDescriptionLabel.setText(
249264
"\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC\uC904\uAC70\uB9AC");
@@ -301,6 +316,9 @@ public void mouseClicked(MouseEvent e) {
301316
rs = dbConn.executeQuery(
302317
"SELECT BOOK_TITLE, BOOK_AUTHOR, BOOK_PUB, BOOK_PRICE, BOOK_ISBN, BOOK_LINK, BOOK_DESCRIPTION, BOOK_IMAGE, BOOK_GRADE\r\n"
303318
+ "FROM BOOK\r\n" + "WHERE BOOK_ISBN = '" + book_ISBN + "' AND BOOK_PRE = TRUE;");
319+
320+
321+
304322
while (rs.next()) {
305323

306324
bookNameLabel.setText(rs.getString("BOOK_TITLE")); // 책 제목 설정
@@ -595,5 +613,46 @@ public void getUserReview() {
595613
e.printStackTrace();
596614
}
597615
}
616+
617+
//리뷰 작성뒤 도서 평점 및 리뷰 최신화 함수
618+
public void recentlyReview() throws NumberFormatException, SQLException {
619+
620+
ResultSet rs = dbConn.executeQuery("SELECT BOOK_GRADE FROM BOOK WHERE BOOK_ISBN = '" + book_ISBN + "' AND BOOK_PRE = TRUE;");
621+
while(rs.next()) {
622+
bookReviewGrade = Integer.parseInt(rs.getString("BOOK_GRADE")); // 책 평점
623+
}
624+
625+
rs = dbConn.executeQuery("SELECT COUNT(*) FROM REVIEW WHERE BOOK_ISBN = '" + book_ISBN + "';");
626+
if (rs.next()) {
627+
bookReviewCnt = rs.getInt(1);
628+
}
629+
630+
int bookScore = 0;
631+
if (bookReviewCnt != 0) {
632+
bookScore = bookReviewGrade / bookReviewCnt;
633+
}
634+
635+
switch (bookScore) {
636+
case 0:
637+
bookGradeLabel.setText("☆☆☆☆☆");
638+
break;
639+
case 1:
640+
bookGradeLabel.setText("★☆☆☆☆");
641+
break;
642+
case 2:
643+
bookGradeLabel.setText("★★☆☆☆");
644+
break;
645+
case 3:
646+
bookGradeLabel.setText("★★★☆☆");
647+
break;
648+
case 4:
649+
bookGradeLabel.setText("★★★★☆");
650+
break;
651+
case 5:
652+
bookGradeLabel.setText("★★★★★");
653+
break;
654+
}
655+
getUserReview();
656+
}
598657

599658
}

src/view/EditBook.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.awt.SystemColor;
2424
import java.awt.event.ActionEvent;
2525
import java.awt.event.ActionListener;
26+
import java.awt.event.KeyAdapter;
27+
import java.awt.event.KeyEvent;
2628
import java.awt.event.MouseAdapter;
2729
import java.awt.event.MouseEvent;
2830
import java.io.File;
@@ -293,6 +295,19 @@ public void changed() {
293295
bookPriceTextField.setColumns(10);
294296
bookPriceTextField.setBounds(93, 99, 366, 26);
295297
panel_1.add(bookPriceTextField);
298+
bookPriceTextField.addKeyListener(new KeyAdapter() {
299+
public void keyPressed(KeyEvent ke) {
300+
String value = bookPriceTextField.getText();
301+
int l = value.length();
302+
if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9' || ke.getKeyChar() == KeyEvent.VK_BACK_SPACE) {
303+
bookPriceTextField.setEditable(true);
304+
lblNewLabel_1.setText("");
305+
} else {
306+
bookPriceTextField.setEditable(false);
307+
lblNewLabel_1.setText("가격은 숫자만 가능합니다.");
308+
}
309+
}
310+
});
296311
bookPriceTextField.getDocument().addDocumentListener(new DocumentListener() {
297312
public void changedUpdate(DocumentEvent e) {
298313
changed();
@@ -332,6 +347,7 @@ public void changed() {
332347

333348
// 책 ISBN 텍스트필드
334349
bookISBNTextField = new JTextField();
350+
bookISBNTextField.setEditable(false);
335351
bookISBNTextField.setFont(new Font("한컴산뜻돋움", Font.PLAIN, 16));
336352
bookISBNTextField.setColumns(10);
337353
bookISBNTextField.setBounds(93, 156, 366, 26);

src/view/SearchBook.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@ public class SearchBook extends JFrame {
7272
JCheckBox[] jcb = new JCheckBox[10];
7373
private final ButtonGroup buttonGroup_1 = new ButtonGroup();
7474
private final ButtonGroup buttonGroup_2 = new ButtonGroup();
75+
JRadioButton headerRadioButton;
76+
JRadioButton recentRadioButton ;
77+
JRadioButton gradeRadioButton;
78+
JRadioButton popularityRadioButton;
79+
JRadioButton canborrowRadioButton ;
80+
JRadioButton borrowingNewRadioButton;
81+
List<RowSorter.SortKey> sortKeys;
7582
private int t = 0;
7683
private Main mainFrame;
7784
private UserInfo userInfoFrame;
@@ -278,6 +285,7 @@ public void windowClosing(WindowEvent e) {
278285
"SELECT BOOK_TITLE, BOOK_AUTHOR, BOOK_PUB, BOOK_CATEGORY, BOOK_ISBN, BOOK_GRADE, BOOK_RENT_COUNT, BOOK_APPEND_DATE FROM BOOK WHERE BOOK_PRE = TRUE;");
279286
set_table(rs);
280287
setTrs();
288+
setFilter();
281289
} catch (SQLException e1) {
282290
e1.printStackTrace();
283291
System.out.println("도서 검색창 테이블 구성중 SQL 실행 에러");
@@ -300,6 +308,7 @@ public void windowClosing(WindowEvent e) {
300308
"SELECT BOOK_TITLE, BOOK_AUTHOR, BOOK_PUB, BOOK_CATEGORY, BOOK_ISBN, BOOK_GRADE, BOOK_RENT_COUNT, BOOK_APPEND_DATE FROM BOOK WHERE BOOK_PRE = TRUE;");
301309
set_table(rs);
302310
setTrs();
311+
setFilter();
303312
} catch (SQLException e1) {
304313
e1.printStackTrace();
305314
System.out.println("도서 검색창 테이블 구성중 SQL 실행 에러");
@@ -420,6 +429,8 @@ public void windowClosing(WindowEvent e) {
420429
jcb[7].setFont(new Font("한컴산뜻돋움", Font.PLAIN, 12));
421430
jcb[7].setBounds(8, 204, 107, 23);
422431
panel_2.add(jcb[7]);
432+
433+
423434

424435

425436

@@ -458,10 +469,10 @@ public void windowClosing(WindowEvent e) {
458469

459470

460471

461-
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
472+
sortKeys = new ArrayList<>();
462473

463474
//제목순 라디오버튼
464-
JRadioButton headerRadioButton = new JRadioButton("\uC81C\uBAA9\uC21C");
475+
headerRadioButton = new JRadioButton("\uC81C\uBAA9\uC21C");
465476

466477
buttonGroup_1.add(headerRadioButton);
467478
headerRadioButton.addItemListener(new ItemListener() {
@@ -484,7 +495,7 @@ public void itemStateChanged(ItemEvent e) {
484495
panel_2.add(headerRadioButton);
485496

486497
// 최신순 라디오버튼
487-
JRadioButton recentRadioButton = new JRadioButton("\uCD5C\uC2E0\uC21C");
498+
recentRadioButton = new JRadioButton("\uCD5C\uC2E0\uC21C");
488499
recentRadioButton.addItemListener(new ItemListener() {
489500
public void itemStateChanged(ItemEvent e) {
490501
if(e.getStateChange() == ItemEvent.SELECTED) {
@@ -504,7 +515,7 @@ public void itemStateChanged(ItemEvent e) {
504515
panel_2.add(recentRadioButton);
505516

506517
// 인기순 라디오버튼
507-
JRadioButton popularityRadioButton = new JRadioButton("\uC778\uAE30\uC21C");
518+
popularityRadioButton = new JRadioButton("\uC778\uAE30\uC21C");
508519
popularityRadioButton.addItemListener(new ItemListener() {
509520
public void itemStateChanged(ItemEvent e) {
510521
if(e.getStateChange() == ItemEvent.SELECTED) {
@@ -521,9 +532,11 @@ public void itemStateChanged(ItemEvent e) {
521532
popularityRadioButton.setFont(new Font("한컴산뜻돋움", Font.PLAIN, 12));
522533
popularityRadioButton.setBounds(12, 316, 113, 23);
523534
panel_2.add(popularityRadioButton);
535+
536+
524537

525538
// 평점순 라디오 버튼
526-
JRadioButton gradeRadioButton = new JRadioButton("\uD3C9\uC810\uC21C");
539+
gradeRadioButton = new JRadioButton("\uD3C9\uC810\uC21C");
527540
gradeRadioButton.addItemListener(new ItemListener() {
528541
public void itemStateChanged(ItemEvent e) {
529542
if(e.getStateChange() == ItemEvent.SELECTED) {
@@ -548,7 +561,7 @@ public void itemStateChanged(ItemEvent e) {
548561
panel_2.add(canBorrowLabel);
549562

550563
// 대출가능 라디오버튼
551-
JRadioButton canborrowRadioButton = new JRadioButton("\uB300\uCD9C\uAC00\uB2A5");
564+
canborrowRadioButton = new JRadioButton("\uB300\uCD9C\uAC00\uB2A5");
552565

553566
//대출 가능 필터링 이벤트
554567
canborrowRadioButton.addItemListener(new ItemListener() {
@@ -564,14 +577,18 @@ public void itemStateChanged(ItemEvent e) {
564577
combineOrAndFilters();
565578
}
566579
});
580+
581+
582+
583+
567584
canborrowRadioButton.setBackground(Color.WHITE);
568585
buttonGroup_2.add(canborrowRadioButton);
569586
canborrowRadioButton.setFont(new Font("한컴산뜻돋움", Font.PLAIN, 12));
570587
canborrowRadioButton.setBounds(12, 428, 113, 23);
571588
panel_2.add(canborrowRadioButton);
572589

573590
// 대출중 라디오버튼
574-
JRadioButton borrowingNewRadioButton = new JRadioButton("\uB300\uCD9C\uC911");
591+
borrowingNewRadioButton = new JRadioButton("\uB300\uCD9C\uC911");
575592
borrowingNewRadioButton.addItemListener(new ItemListener() {
576593
public void itemStateChanged(ItemEvent e) {
577594
if(e.getStateChange() == ItemEvent.SELECTED) {
@@ -686,6 +703,39 @@ public void search_event() {
686703
System.out.println("SQL 실행 에러");
687704
}
688705
}
706+
707+
708+
public void setFilter() {
709+
if(canborrowRadioButton.isSelected()) {
710+
borrowFilter.put(canborrowRadioButton.getText(), RowFilter.regexFilter(canborrowRadioButton.getText(), 4)); //테이블 5행에 있는 대출여부명을 필터항목에 추가시켜 해시맵에 삽입
711+
}else if(borrowingNewRadioButton.isSelected()) {
712+
borrowFilter.put(borrowingNewRadioButton.getText(), RowFilter.regexFilter(borrowingNewRadioButton.getText(), 4)); //테이블 5행에 있는 대출여부명을 필터항목에 추가시켜 해시맵에 삽입
713+
}
714+
715+
for(int i = 0; i < 8; i++) {
716+
if(jcb[i].isSelected()) {
717+
categoryFilter.put(jcb[i].getText(), RowFilter.regexFilter(jcb[i].getText(), 3)); //테이블 3행에 있는 카테고리명을 필터항목에 추가시켜 해시맵에 삽입
718+
checkNum++;
719+
}
720+
combineOrAndFilters();
721+
722+
if(headerRadioButton.isSelected()) {
723+
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
724+
}
725+
else if(recentRadioButton.isSelected()) {
726+
sortKeys.add(new RowSorter.SortKey(7, SortOrder.DESCENDING));
727+
}else if(popularityRadioButton.isSelected()) {
728+
sortKeys.add(new RowSorter.SortKey(6, SortOrder.DESCENDING));
729+
}else if(gradeRadioButton.isSelected()) {
730+
sortKeys.add(new RowSorter.SortKey(5, SortOrder.DESCENDING));
731+
}
732+
733+
trs.setSortKeys(sortKeys);
734+
735+
736+
737+
}
738+
}
689739

690740
// ResultSet을 받아 테이블 재구성하는 함수
691741
public void set_table(ResultSet rs) throws SQLException {

src/view/WriteReview.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class WriteReview extends JFrame {
3232
public WriteReview(String book_ISBN, String user_phone) {
3333
this.user_phone = user_phone;
3434
this.book_ISBN = book_ISBN;
35+
3536
setTitle("\uD55C\uC904\uD3C9 \uC791\uC131");
3637
setBounds(100, 100, 450, 300);
3738
contentPane = new JPanel();
@@ -216,8 +217,9 @@ public void mouseClicked(MouseEvent e) {
216217
JOptionPane.showMessageDialog(null, "리뷰 등록실패", "리뷰등록실패", JOptionPane.ERROR_MESSAGE);
217218
}
218219
else {
219-
JOptionPane.showMessageDialog(null, "리뷰 감사합니다", "리뷰등록성공",JOptionPane.NO_OPTION);
220220
updateBookGrade();
221+
JOptionPane.showMessageDialog(null, "리뷰 감사합니다", "리뷰등록성공",JOptionPane.NO_OPTION);
222+
221223
}
222224
}catch(SQLException e1) {
223225
e1.printStackTrace();

0 commit comments

Comments
 (0)