📄 bookbackiframe.java
字号:
package com.lishan.iframe;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.Timer;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import com.lishan.JComPz.MapPz;
import com.lishan.dao.Dao;
import com.lishan.model.Back;
import com.lishan.model.BookType;
import com.lishan.model.Operater;
import com.lishan.util.MyDocument;
public class BookBackIFrame extends JInternalFrame {// 还书控制面板
private Operater user = BookLoginIFrame.getUser();
private JTable table, tableByBookISBN; // 用来显示和编辑规则的二维单元表
private JTextField operator; // 输入操作人员
private JTextField todaydate; // 输入归还日期
private JTextField fkmoney; // 罚款金额
private JTextField ccdays; // 超出天数
private JTextField realdays; // 实际天数
private JTextField borrowdays; // 可以借阅天数
private JTextField borrowDate; // 结束日期
private JTextField readerISBN; // 读者条形码
private String[] columnNames = { "图书名称", "图书条形码", "图书类别", "读者姓名", "读者条形码",
"借书时间", "归还时间", "ID" };
DefaultTableModel model = new DefaultTableModel();// 默认的表类型
DefaultTableModel modelBook = new DefaultTableModel();
SimpleDateFormat myfmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private String bookISBNs = null;
private String readerISBNs = null;
private JTextField bookISBN;
private int id;
public final void add() { // 添加指定读者借书信息到表格中
readerISBNs = readerISBN.getText().trim();
if (!"".equals(bookISBN.getText().trim())) {
List list = Dao.selectBookBackByBookISBN(bookISBN.getText()
.toString().trim());
for (int i = 0; i < list.size(); i++) {
Back back = (Back) list.get(i);
String str[] = new String[8];
str[0] = back.getBookName();
str[1] = back.getBookISBN();
str[2] = String.valueOf(MapPz.getMap().get(
back.getTypeId() + ""));
str[3] = back.getReaderName();
str[4] = back.getReaderISBN();
str[5] = back.getBorrowDate();
str[6] = back.getBackDate();
str[7] = back.getId() + "";
modelBook.addRow(str);
}
} else if (!"".equals(readerISBNs)) {
List list = Dao.selectBookBack(readerISBNs);
if (list.size() == 0) {
JOptionPane.showMessageDialog(null, "编号为" + readerISBNs
+ "的读者,没有借书记录");
return;
}
for (int i = 0; i < list.size(); i++) {
Back back = (Back) list.get(i);
// id = back.getId();
String str[] = new String[8];
str[0] = back.getBookName();
str[1] = back.getBookISBN();
str[2] = String.valueOf(MapPz.getMap().get(
back.getTypeId() + ""));
str[3] = back.getReaderName();
str[4] = back.getReaderISBN();
str[5] = back.getBorrowDate();
str[6] = back.getBackDate();
str[7] = back.getId() + "";
model.addRow(str);
}
}
}
/**
* Create the frame
*/
public BookBackIFrame() {
super();
setIconifiable(true); // 设置窗体可最小化---必须
setClosable(true); // 设置窗体可关闭---必须
setTitle("图书归还管理");
setBounds(100, 100, 550, 480);
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.setPreferredSize(new Dimension(0, 60));
getContentPane().add(tabbedPane);
final JPanel panel_totle1 = new JPanel();
panel_totle1.setLayout(new BorderLayout());
tabbedPane.addTab("输入学生编号", null, panel_totle1, null);
final JPanel panel = new JPanel();
// 在指定位置以指定对齐方式显示字符串标题的边框
panel.setBorder(new TitledBorder(null, "基本信息",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));
panel.setPreferredSize(new Dimension(0, 200));
panel_totle1.add(panel, BorderLayout.NORTH);
final JPanel panel_5 = new JPanel();
final GridLayout gridLayout_1 = new GridLayout(0, 2);
gridLayout_1.setVgap(5); // 设置垂直间隙
panel_5.setLayout(gridLayout_1);
panel_5.setPreferredSize(new Dimension(400, 20));
panel.add(panel_5);
final JLabel label_4 = new JLabel();
label_4.setText("读者编号:");
panel_5.add(label_4);
readerISBN = new JTextField();
readerISBN.setDocument(new MyDocument(13));
readerISBN.addKeyListener(new readerISBNListenerlostFocus()); // 注册键盘对象监听事件
panel_5.add(readerISBN);
final JPanel panel_4 = new JPanel();
panel_4.setLayout(new FlowLayout());
panel_4.setPreferredSize(new Dimension(450, 130));
panel.add(panel_4);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(450, 120));
panel_4.add(scrollPane);
table = new JTable();
scrollPane.setViewportView(table);
model.setColumnIdentifiers(columnNames);
table.setModel(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.addMouseListener(new TableListener()); // 注册鼠标对象监听事件
final JPanel panel_1 = new JPanel();
panel_1.setLayout(new BorderLayout());
panel_totle1.add(panel_1);
final JPanel panel_2 = new JPanel();
final GridLayout gridLayout_2 = new GridLayout(0, 2);
gridLayout_2.setVgap(20);
panel_2.setLayout(gridLayout_2);
panel_2.setBorder(new TitledBorder(null, "罚款信息",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));
panel_2.setPreferredSize(new Dimension(250, 230));
panel_1.add(panel_2, BorderLayout.WEST);
final JLabel label_11 = new JLabel("借书日期:");
panel_2.add(label_11);
borrowDate = new JTextField();
borrowDate.setEditable(false);// 设置为不可编辑的
panel_2.add(borrowDate);
final JLabel label_12 = new JLabel("规定天数:");
panel_2.add(label_12);
borrowdays = new JTextField();
borrowdays.setEditable(false);
panel_2.add(borrowdays);
final JLabel label_13 = new JLabel("实际天数:");
panel_2.add(label_13);
realdays = new JTextField();
realdays.setEditable(false);
panel_2.add(realdays);
final JLabel label_14 = new JLabel("超出天数:");
panel_2.add(label_14);
ccdays = new JTextField();
ccdays.setEditable(false);
panel_2.add(ccdays);
final JLabel label_15 = new JLabel("罚款金额:");
panel_2.add(label_15);
fkmoney = new JTextField();
fkmoney.setEditable(false);
panel_2.add(fkmoney);
final JPanel panel_3 = new JPanel();
panel_3.setBorder(new TitledBorder(null, "系统信息",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));
panel_3.setPreferredSize(new Dimension(280, 230));
panel_1.add(panel_3);
final JPanel panel_7 = new JPanel();
final GridLayout gridLayout_3 = new GridLayout(0, 2);
gridLayout_3.setVgap(35);
panel_7.setLayout(gridLayout_3);
panel_7.setPreferredSize(new Dimension(260, 90));
panel_3.add(panel_7);
final JLabel label_10_1 = new JLabel("当前时间:");
panel_7.add(label_10_1);
todaydate = new JTextField();
todaydate.setEditable(false);
todaydate.setPreferredSize(new Dimension(0, 0));
todaydate.addActionListener(new TimeActionListener());// 注册监听对象
todaydate.setFocusable(false);
panel_7.add(todaydate);
final JLabel label_11_1 = new JLabel("操作员:");
panel_7.add(label_11_1);
operator = new JTextField(user.getName());
operator.setEditable(false);
panel_7.add(operator);
final JButton buttonback = new JButton("图书归还");
buttonback.addActionListener(new BookBackActionListener(model));
panel_3.add(buttonback);
final JButton buttonExit = new JButton();
buttonExit.setText("退出");
buttonExit.addActionListener(new CloseActionListener());
panel_3.add(buttonExit);
setVisible(true);
//
final JPanel panel_totle2 = new JPanel();
panel_totle2.setLayout(new BorderLayout());
tabbedPane.addTab("输入图书编号", null, panel_totle2, null);
final JPanel panel_2_1 = new JPanel();
panel_2_1.setBorder(new TitledBorder(null, "相关图书信息",
TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, null, null));
panel_2_1.setPreferredSize(new Dimension(250, 230));
panel_totle2.add(panel_2_1);
final JLabel label = new JLabel("图书编号 ");
panel_2_1.add(label);
bookISBN = new JTextField(20);
bookISBN.setDocument(new MyDocument(20));
bookISBN.addKeyListener(new bookISBNListener());
panel_2_1.add(bookISBN);
final JScrollPane scrollPaneBook = new JScrollPane();
scrollPaneBook.setPreferredSize(new Dimension(500, 250));
panel_2_1.add(scrollPaneBook);
tableByBookISBN = new JTable();
scrollPaneBook.setViewportView(tableByBookISBN);
modelBook.setColumnIdentifiers(columnNames);
tableByBookISBN.setModel(modelBook);
tableByBookISBN.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
final JPanel panel_2_2 = new JPanel();
JButton buttonbookback = new JButton("图书归还");
JButton buttonbookexit = new JButton("退出");
buttonbookexit.addActionListener(new CloseActionListener());
panel_2_2.add(buttonbookback);
panel_2_2.add(buttonbookexit);
panel_totle2.add(panel_2_2, BorderLayout.SOUTH);
}
class readerISBNListenerlostFocus extends KeyAdapter {
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == '\n') {// 判断在文本框是否输入回车
int rowCount = table.getRowCount();
// System.out.println("selRow = " + rowCount);
if (rowCount != 0) {
for (int i = rowCount - 1; i >= 0; i--) {
// System.out.println("remove i = " + i);
model.removeRow(i);
}
}
add(); // 添加该读者借书信息到table中
}
}
}
class bookISBNListener extends KeyAdapter {
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == '\n') {
add();
}
}
}
class TableListener extends MouseAdapter {
public void mouseClicked(final MouseEvent e) {
java.util.Date date = new java.util.Date(); // 当前时间
String fk = "";
String days1 = "";
int selRow = table.getSelectedRow(); // 获取选中表格中借书记录的行数
List list = Dao.selectBookTypeFk(table.getValueAt(selRow, 2)
.toString().trim()); // 取得各类书的罚款金额
for (int i = 0; i < list.size(); i++) {
BookType booktype = (BookType) list.get(i);
fk = booktype.getFakuan(); // 取出图书类型的罚款金额
days1 = booktype.getDays();// 可借天数
}
borrowDate.setText(table.getValueAt(selRow, 5).toString().trim());
int days2, days3;// days2实际借阅天数 days3超出借阅天数
borrowdays.setText(days1 + "");
// 计算实际借阅时间 = 当前时间 - 时间借阅时间
days2 = date.getDate()
- java.sql.Timestamp.valueOf(
table.getValueAt(selRow, 5).toString().trim())
.getDate();
//System.out.println("table.getValueAt(selRow, 5).toString().trim()是"+table.getValueAt(selRow, 5).toString().trim());
realdays.setText(days2 + "");
// 计算超出借阅多少天 = 实际借阅天数 - 可借阅天数
days3 = days2 - Integer.parseInt(days1);
if (days3 > 0) {
ccdays.setText(days3 + "");
Double zfk = Double.valueOf(fk) * days3;
fkmoney.setText(zfk + "元");
} else {
ccdays.setText("没有超过规定天数");
fkmoney.setText("0");
}
bookISBNs = table.getValueAt(selRow, 1).toString().trim();
id = new Integer(table.getValueAt(selRow, 7).toString().trim());
}
}
class TimeActionListener implements ActionListener {
public TimeActionListener() {
Timer t = new Timer(1000, this);// 创建一个每1000毫秒将通知其侦听器的 Timer
t.start();// 启动该 Timer,以使它开始向其侦听器发送操作事件。
}
public void actionPerformed(ActionEvent e) {
todaydate.setText(myfmt.format(new java.util.Date()).toString());
}
}
class BookBackActionListener implements ActionListener { // 添加图书归还按钮的事件监听器
private final DefaultTableModel model;
public BookBackActionListener(DefaultTableModel model) {
this.model = model;
}
public void actionPerformed(ActionEvent e) {
// 自动生成方法存根
if (readerISBNs == null) {
JOptionPane.showMessageDialog(null, "请输入读者编号!");
} else {
// System.out.print(bookISBNs == null);
if (table.getSelectedRow() == -1) {
JOptionPane.showMessageDialog(null, "请选择要归还的图书");
return;
}
int i = Dao.updateBookBack(bookISBNs, readerISBNs, id);
System.out.println("i = " + i);
if (i == 1) {
int j = Dao.updateReaderBackBook(readerISBNs);
System.out.println("j = " + j);
if (j == 1) {
int selectedRow = table.getSelectedRow();
model.removeRow(selectedRow);
JOptionPane.showMessageDialog(null, "还书操作完成!");
} else {
Dao.updateBookBackRollBack(bookISBNs, readerISBNs, id);
JOptionPane.showMessageDialog(null,
"图书归还失败!请重新登入!在进行操作!");
}
} else {
JOptionPane.showMessageDialog(null, "图书归还失败!请重新登入!在进行操作!");
}
}
}
}
class CloseActionListener implements ActionListener { // 添加关闭按钮的事件监听器
public void actionPerformed(ActionEvent e) {
doDefaultCloseAction();
}
}
}