GuaShi.java
~~~
package zyw.student;
import zyw.tools.DataBase;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Vector;
public class GuaShi extends JPanel implements ActionListener
{
DataBase db;
String sql;
String str;
//創建分割方向為上下的JSplitePane對象
private JSplitPane jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);
//創建JPanel對象
private JPanel jpt=new JPanel();
private JPanel jpb=new JPanel();
//創建按鈕數組
private JButton[] jbArray=new JButton[]
{
new JButton ("掛失"),
new JButton ("確定")
};
private JLabel jl=new JLabel("請輸入你的學號:");
private JTextField jtxt=new JTextField();
//創建標題
Vector<String> head = new Vector<String>();
{
head.add("書號");
head.add("學號");
head.add("借閱時間");
head.add("還書時間");
head.add("是否過期");
head.add("是否預約");
}
//
Vector<Vector> data=new Vector<Vector>();
//創建表格模型
DefaultTableModel dtm=new DefaultTableModel(data,head);
//創建Jtable對象
JTable jt=new JTable(dtm);
//將JTable封裝到滾動窗格
JScrollPane jspn=new JScrollPane(jt);
public GuaShi()
{
this.setLayout(new GridLayout(1,1));
//設置整個RetrunBook界面上下部分均為空布局管理器
jpt.setLayout(null);
jpb.setLayout(null);
//設置Label的大小及位置
jl.setBounds(5,15,100,20);
//將Jlabel添加到jpt面板上
jpt.add(jl);
//為JTextField設置大小及位置
jtxt.setBounds(105,15,300,20);
//把JTextField添加到jpt
jpt.add(jtxt);
//設置JBuuton的大小及位置
jbArray[0].setBounds(5,50,100,20);
jbArray[1].setBounds(150,50,100,20);
//添加JButton并給其添加事件監聽器
for(int i=0;i<jbArray.length;i++)
{
jpt.add(jbArray[i]);
jbArray[i].addActionListener(this);
}
//把jpt設置到jsp的上部窗格
jsp.setTopComponent(jpt);
jsp.setBottomComponent(jspn);
jsp.setDividerSize(4);
this.add(jsp);
//設置jsp中分割條的初始位置
jsp.setDividerLocation(80);
//設置窗體的大小位置及可見性
this.setBounds(10,10,800,600);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbArray[1]){//事件源為"確定"按鈕
if(jtxt.getText().trim().equals("")){//學號輸入為空,提示
JOptionPane.showMessageDialog(this,"請輸入學號",
"消息",JOptionPane.INFORMATION_MESSAGE);
return;
}
else{//根據學號進行查詢
sql="select * from RECORD where StuNO="+jtxt.getText().trim();
db=new DataBase();
Vector<Vector> vtemp = new Vector<Vector>();
try{//結果集進行異常處理
int k=0;
if(k==0){//提示
JOptionPane.showMessageDialog(this,"輸入了錯誤的學號或該學生沒有借書記錄",
"消息",JOptionPane.INFORMATION_MESSAGE);
return;
}
}
catch(Exception ea){ea.printStackTrace();}
}
}
if(e.getSource()==jbArray[0]){//需要掛失圖書
int row=jt.getSelectedRow();
if(row<0){
JOptionPane.showMessageDialog(this,"請選擇要掛失的書!!!","消息",
JOptionPane.INFORMATION_MESSAGE);
return;
}
loseBook(row);
updateTable();
}
}
public void loseBook(int row){
String bname="";
int lbno=0;
int bno=Integer.parseInt((String)jt.getValueAt(row,0));//得到丟失書的書號
String sno=(String)jt.getValueAt(row,1);//得到丟失書的人學號
sql="select BookName from BOOK where BookNO="+bno;
db=new DataBase();
//找到最大的丟失記錄號
sql="select MAX(LbNO) from LoseBook";
sql="insert into LOSEBOOK values("+lbno+","+sno+","+bno+",'"+bname+"')";//向丟書記錄表中插入記錄
sql="select BookNo from ORDERREPORT where BookNO="+bno;//檢查預約表中是否預約該書,若有,刪除
sql="select BookNo from EXCEEDTIME where BookNO="+bno;//檢查超期表中是否有該書,若有,刪除
sql="delete from RECORD where BookNO="+bno;//從借書表中將丟失圖書的記錄刪除
sql="delete from BooK where BookNo="+bno;//從圖書表中將丟失的書刪除
int i=0;
if(i>0){//提示掛失成功
JOptionPane.showMessageDialog(this,"恭喜你,掛失成功!!!","消息",
JOptionPane.INFORMATION_MESSAGE);
return;
}
else{//提示掛失失敗
JOptionPane.showMessageDialog(this,"對不起,掛失失敗!!!",
"信息",JOptionPane.INFORMATION_MESSAGE);
return;
}
}
public void updateTable(){//實現界面下部表格的更新
sql="select * from RECORD where StuNO="+jtxt.getText().trim();
db=new DataBase();
Vector<Vector> vtemp = new Vector<Vector>();
jt.clearSelection();
dtm.setDataVector(vtemp,head);//更新table
jt.updateUI();
jt.repaint();
}
public int checkTime(int sno,int bno)
{//-1 代表超期沒交罰款 0代表當天借的書 1代表正常還的書 -2表示超期交罰款
int day=0;
int flag=0;
String bname="";
Date now=new Date();
String returntime="";
sql="select ReturnTime from RECORD where StuNO="+sno+" and BookNO="+bno;
db=new DataBase();
String[] strday=returntime.split("\\.");//這里使用了簡單的正則式,規定了時間的格式
int ryear=Integer.parseInt(strday[0].trim());
int rmonth=Integer.parseInt(strday[1].trim());
int rday=Integer.parseInt(strday[2].trim());
day=(now.getYear()+1900-ryear)*365+(now.getMonth()+1-rmonth)*30+(now.getDate()-rday);
if(day==-30)
{//表示當天借的書
JOptionPane.showMessageDialog(this,"今天借的書不能還!!!",
"消息",JOptionPane.INFORMATION_MESSAGE);
flag=0;
}
else if(day>0)
{//代表超期了
int i=JOptionPane.showConfirmDialog(this,"該書已過期,應交罰款為"
+day*0.1+"元,是否繳納罰款?","消息",JOptionPane.YES_NO_OPTION);
if(i==JOptionPane.YES_OPTION){
JOptionPane.showMessageDialog(this,"你已成功交費"+day*0.1+"元",
"消息",JOptionPane.INFORMATION_MESSAGE);
flag=-2;
}
else
{//超期且沒交費
flag=-1;
sql="select BookName from BOOK where BookNO="+bno;
sql="insert into EXCEEDTIME(StuNO,BookNO,BookName,DelayTime) values("+sno+","+bno+",'"+bname+"',"+day+")";
}
}
else
{//表示可以正常歸還的書
flag=1;
}
return flag;
}
}
~~~