Part3. 대여 프로그램에서는 대여 프로그램 관련해 설명하겠습니다.
Borrowing DTO
package BorrowingData_p;
public class BorrowingData { //MemberID 회원정보, Book 도서이름, num 도서번호, RetalDate 대여날짜, ReturnDate 반납날짜
private String MemberID;
private String Book;
private int num;
private String RetalDate;
private String ReturnDate;
public BorrowingData() {}
public BorrowingData(String MemberID, int num, String Book, String RetalDate, String ReturnDate){
this.MemberID = MemberID;
this.Book = Book;
this.num = num;
this.RetalDate = RetalDate;
this.ReturnDate = ReturnDate;
}
public int GetNum(){
return num;
}
public void SetNum(int num){
this.num = num;
}
public String GetMemberID() {
return MemberID;
}
public void SetMenberID(String MemberID) {
this.MemberID = MemberID;
}
public String GetBookD() {
return Book;
}
public void SetBook(String Book) {
this.Book = Book;
}
public String GetRetalDate() {
return RetalDate;
}
public void SetRetalDate(String RetalDate) {
this.RetalDate = RetalDate;
}
public String GetReturnDate() {
return ReturnDate;
}
public void SetReturnDate(String ReturnDate) {
this.ReturnDate = ReturnDate;
}
}
Borrowing DAO
package BorrowingDB_p;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import BorrowingData_p.BorrowingData;
import BookData_p.BookData;
import BookDataDB_p.BookDataDB;
public class BorrowingDB{
private Connection conn = null;
private ResultSet rs = null;
private Statement st = null;
private PreparedStatement ps = null;
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy년 MM월 dd일 "); // 날짜 포맷
BookDataDB mb = new BookDataDB();
public BorrowingDB() { // 생성자로 데이터베이스 연결
try {
final String url = "jdbc:mariadb://localhost:3306/bookdb";
final String id = "root";
final String pw = "1234";
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(url, id, pw);
}catch(ClassNotFoundException cnfe) {
System.out.println("DB 드라이버 로딩 실패:"+ cnfe.toString());
}catch(SQLException sqle){
System.out.println("DB 접속실패"+ sqle.toString());
}catch(Exception e){
System.out.println("Unkown error");
e.printStackTrace();
}
}
public void DBClose() { // 커넥션 연결 종료
try {
if(rs != null) rs.close();
if(st != null) st.close();
if(ps != null) ps.close();
} catch (Exception e) {
System.out.println(e + " => DBClose fail");
}
}
SimpleDateFormat클래스를 이용하여 yyyy년 mm월 dd일로 출력 되게끔 포맷하였습니다.
// 도서대여 정보 저장
public void InsertBorrowing(BorrowingData borrowingdata) { // borrowing_management -> borrowing book data insert
BookData bookdata = new BookData();
Calendar cal = Calendar.getInstance();
Date t1 = new Date(); // 현재 날짜
String time1 = sdf.format(t1); // 현재 날짜 포멧
cal.add(Calendar.DAY_OF_MONTH,+14); // 현재 날짜 + 14일 (반납 날짜)
try {
String sql = "insert into borrowing_management values(?, ?, ?, ?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, borrowingdata.GetMemberID());
ps.setInt(2, borrowingdata.GetNum());
ps.setString(3, mb.Bringbookname(new BookData(borrowingdata.GetNum(), ""))); // DB의 도서 테이블의 도서명 확인
ps.setString(4, time1);
ps.setString(5, sdf.format(cal.getTime()));
mb.BorrowingInsert(new BookData(borrowingdata.GetNum(),"대여 불가")); // DB의 도서 테이블의 대여정보 B 대여 불가로 변경
ps.executeUpdate();
} catch(SQLException e) {
e.printStackTrace();
} finally {
DBClose();
}
}
// 도서대여 정보 목록
public Vector<BorrowingData> Booklist() // borrowing_management -> borrowing book data list
{
Vector<BorrowingData> Ar = new Vector<BorrowingData>();
try{
st = conn.createStatement();
String sql = "Select * From borrowing_management order by MemberID*1";
rs = st.executeQuery(sql);
while (rs.next())
{
Ar.add(new BorrowingData(rs.getString("MemberID"), rs.getInt("Number") ,rs.getString("Book") ,rs.getString("RentalDate"), rs.getString("ReturnDate")));
}
}catch (SQLException e) {
e.printStackTrace();
} finally {
DBClose();
}
return Ar;
}
Vector 사용하여 데이터형을 BorrowingData(DTO)로 정하였고, DB에 있는 도서 정보를 불러와 저장하는 메소드입니다.
// 도서 반납
public void ReturnBook(int num){ // borrowing_management -> borrowing book data delete
String Del = "delete from borrowing_management where Number = ?";
try{
ps = conn.prepareStatement(Del);
ps.setInt(1, num);
mb.BorrowingInsert(new BookData(num,"","","","","대여 가능")); // DB 도서 테이블 도서 반납 시 B 대여 가능으로 변경
System.out.println(num);
ps.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}finally {
DBClose();
}
}
}
도서 반납하는 메소드이다. 도서 반납 시 DB의 도서테이블에 있는 B 변수를 대여 가능으로 수정합니다.
Borrowing_management WindowBulder
package borrowing_management;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import BorrowingData_p.BorrowingData;
import BookData_p.BookData;
import BorrowingDB_p.BorrowingDB;
import LoginDB_p.LoginDB;
import LoginData_p.LoginData;
import Login_WindowBuilder.WindowBuilder_Login;
import BookDataDB_p.BookDataDB;
public class Borrowing_ {
public JFrame frame;
private JTable table;
private JTextField IDtext;
private JTextField Numtext;
String colNames[] = {"회원 ID","도서 번호","도서명","대여 날짜","반납 날짜"};
private DefaultTableModel model = new DefaultTableModel(colNames, 0);
public Borrowing_() {
initialize();
select();
}
BorrowingDB BorrowingDB = new BorrowingDB();
LoginDB LoginDB = new LoginDB();
BookDataDB BookDB = new BookDataDB();
public void select() { // 대여 목록 출력
Vector<BorrowingData> Ar = new Vector<BorrowingData>();
Ar = BorrowingDB.Booklist();
for(int i=0; i< Ar.size();i++)
{
model.addRow(new Object[]{Ar.get(i).GetMemberID(),Ar.get(i).GetNum(),Ar.get(i).GetBookD(),Ar.get(i).GetRetalDate(),Ar.get(i).GetReturnDate()});
}
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 1091, 491);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.setBounds(0, 0, 1075, 452);
frame.getContentPane().add(panel);
panel.setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setFont(new Font("함초롱바탕", Font.PLAIN, 18));
scrollPane.setBounds(306, 106, 757, 329);
panel.add(scrollPane);
table = new JTable(model){
public boolean isCellEditable(int row, int column) { // 클릭 비활성화
return false;
}
};
table.setFillsViewportHeight(true);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) { // 테이블 마우스 더블 클릭 시 대여정보 입력칸에 값이 나타남
DefaultTableModel model2 = (DefaultTableModel)table.getModel();
int row = table.getSelectedRow();
IDtext.setText(String.valueOf(model2.getValueAt(row, 0)));
Numtext.setText(String.valueOf(model2.getValueAt(row, 1)));
}
});
table.setBackground(Color.WHITE);
table.setFont(new Font("함초롱바탕", Font.PLAIN, 16));
//테이블 가운데 정렬
DefaultTableCellRenderer cell = new DefaultTableCellRenderer();
cell.setHorizontalAlignment(SwingConstants.CENTER);
TableColumnModel centerModel = table.getColumnModel();
for(int i=0;i < centerModel.getColumnCount(); i++) centerModel.getColumn(i).setCellRenderer(cell);
//테이블 컬럼의 이동을 방지
table.getTableHeader().setReorderingAllowed(false);
table.getColumnModel().getColumn(0).setPreferredWidth(20);
table.getColumnModel().getColumn(0).setResizable(false);
table.getColumnModel().getColumn(1).setPreferredWidth(162);
table.getColumnModel().getColumn(3).setPreferredWidth(40);
scrollPane.setViewportView(table);
JButton BorrowingBookButton = new JButton("도서 대여");
BorrowingBookButton.setFont(new Font("맑은 고딕", Font.PLAIN, 12));
BorrowingBookButton.addActionListener(new ActionListener() { // 도서 대여 버튼 클릭 시 동작
public void actionPerformed(ActionEvent arg0) {
int confirmborrowing = BookDB.ConfirmBorrowing((new BookData(Integer.parseInt(Numtext.getText()),"대여 불가"))); // 대여도서인지 확인
int confirmbook = BookDB.ConfirmBook(new BookData(Integer.parseInt(Numtext.getText()),"")); // 도서번호 확인
int loginox = LoginDB.LoginOX(new LoginData(IDtext.getText(),"")); // 회원 ID 확인
if(confirmborrowing == 1) {
JOptionPane.showMessageDialog(null, "대여중인 도서 입니다.");
return;
}
if(confirmbook != 1) {
JOptionPane.showMessageDialog(null, "도서번호 입력이 잘못 되었습니다.");
return;
}
if(loginox != 1) {
JOptionPane.showMessageDialog(null, "회원 ID 가 맞지 않습니다.");
return;
}
BorrowingDB.InsertBorrowing((new BorrowingData(IDtext.getText(), Integer.parseInt(Numtext.getText()),"","","")));
model.setRowCount(0);
JOptionPane.showMessageDialog(null, "등록 완료");
IDtext.setText(""); Numtext.setText("");
select();
}
});
BorrowingBookButton.setBounds(473, 11, 107, 33);
panel.add(BorrowingBookButton);
JButton BooklistButton = new JButton("새로고침");
BooklistButton.setFont(new Font("맑은 고딕", Font.PLAIN, 12));
BooklistButton.addActionListener(new ActionListener() { // 새로고침 버튼 클릭 시 동작
public void actionPerformed(ActionEvent arg0) {
model.setRowCount(0);
select();
}
});
BooklistButton.setBounds(136, 10, 107, 35);
panel.add(BooklistButton);
JButton ReturnBookButton = new JButton("도서 반납");
ReturnBookButton.setFont(new Font("맑은 고딕", Font.PLAIN, 12));
ReturnBookButton.addActionListener(new ActionListener() { // 도서 반납 클릭 시 동작
public void actionPerformed(ActionEvent e) {
int result = JOptionPane.showConfirmDialog(null, "반납 하시겠습니까?", "확인", JOptionPane.YES_NO_OPTION); // 팝업
if(result == JOptionPane.CANCEL_OPTION) { // 팝업 취소 버튼 클릭
return;
}
else if(result == JOptionPane.YES_NO_OPTION){
System.out.println(e.getActionCommand());
DefaultTableModel model2 = (DefaultTableModel)table.getModel();
BorrowingDB.ReturnBook((int)model2.getValueAt(table.getSelectedRow(), 1));
System.out.println((int)model2.getValueAt(table.getSelectedRow(), 1));
model2.removeRow(table.getSelectedRow());
model.setRowCount(0);
IDtext.setText(""); Numtext.setText("");
JOptionPane.showMessageDialog(null, "반납 완료");
select();
}
else {
JOptionPane.showMessageDialog(null, "취소");
}
}
});
ReturnBookButton.setBounds(602, 10, 107, 35);
panel.add(ReturnBookButton);
JButton exitButton = new JButton("종료");
exitButton.setFont(new Font("맑은 고딕", Font.PLAIN, 12));
exitButton.addActionListener(new ActionListener() { // // 종료 버튼 클릭 시 동작
public void actionPerformed(ActionEvent e) {
int result = JOptionPane.showConfirmDialog(null, "정말 종료 하시겠습니까?", "확인", JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.CANCEL_OPTION) {
return;
}
else if(result == JOptionPane.YES_NO_OPTION){
frame.dispose();
}
else {
return;
}
}
});
exitButton.setBounds(966, 10, 97, 35);
panel.add(exitButton);
JButton textFieldResetButton = new JButton("입력 초기화");
textFieldResetButton.setFont(new Font("맑은 고딕", Font.PLAIN, 12));
textFieldResetButton.addActionListener(new ActionListener() { // 입력 초기화 버튼 클릭 시 동작
public void actionPerformed(ActionEvent e) {
IDtext.setText(""); Numtext.setText("");
}
});
textFieldResetButton.setBounds(17, 10, 107, 35);
panel.add(textFieldResetButton);
JLabel IDlabe = new JLabel("회원 ID");
IDlabe.setHorizontalAlignment(SwingConstants.CENTER);
IDlabe.setFont(new Font("맑은 고딕", Font.BOLD, 20));
IDlabe.setBounds(12, 202, 93, 23);
panel.add(IDlabe);
JLabel Namelabel = new JLabel("도서번호");
Namelabel.setFont(new Font("맑은 고딕", Font.BOLD, 20));
Namelabel.setBounds(17, 254, 81, 23);
panel.add(Namelabel);
IDtext = new JTextField();
IDtext.setToolTipText("도서 번호 입력");
IDtext.setFont(new Font("맑은 고딕", Font.PLAIN, 17));
IDtext.setColumns(10);
IDtext.setBounds(105, 199, 186, 30);
panel.add(IDtext);
Numtext = new JTextField();
Numtext.setToolTipText("도서번호 입력");
Numtext.setFont(new Font("맑은 고딕", Font.PLAIN, 17));
Numtext.setColumns(10);
Numtext.setBounds(105, 252, 186, 30);
panel.add(Numtext);
}
}
실행결과
Part1. 로그인 바로가기
Part2. 도서관리 바로가기
전체 소스 코드 바로가기
'Java > 도서관리 프로그램' 카테고리의 다른 글
도서관리 프로그램 Part 2. 도서관리 (0) | 2022.07.28 |
---|---|
도서관리 프로그램 Part 1. 로그인 (0) | 2022.07.28 |