圖書館管理系統程序設計
代碼地址: https://github.com/yranqiu/tushuguanguanlixitong/tree/master
一. 簡 介
大學為我們提供了自由的學習環境,使我們有更多的時間到圖書館借閱書籍,讓我們可以隨時掌握各方面的知識,不斷提高自我、充實自我,但由於圖書館藏書成千上萬,我們很難一本一本的去查找自己感興趣的書籍,因此我們會經常用到學校為我們提供的圖書管理系統,用時間長了便對此產生了興趣,正好本次課程設計為我們提供了良好的機會,讓我們親自設計並實現了圖書管理系統的部分功能。
現已有的圖書管理系統,其功能已十分強大,為了便於管理員對圖書管理系統進行妥善的管理和讀者的查詢,圖書管理系統為管理員提供了管理日志、管理員添加、管理員切換、讀者添加、讀者修改、讀者查詢、讀者刪除、新書入庫等功能,為讀者提供了書籍查詢、讀者借閱信息查詢、圖書網上續借等很多功能。
在對應的界面與Access數據庫建立連接,並實現對應的SQL語句進行實現將產生的結果顯示出來。並運用捕捉異常的方法,將異常信息顯示出來。
實現SQL語句的時候借助前台開發工具中關於數據處理的控件來完成。對於讀者而言他們的需求是了解圖書的基本情況,自己的借閱情況。總而言之就是實現對各個信息表的查詢。對於圖書管理員而言要實現的功能相對而言比較多,例如實現新書入庫、Access數據庫表的創建、系統的維護等等,這些都需要設計和實現的。
二. 系統功能介紹
2.1系統功能總框圖
圖書館管理系統功能總框圖,如圖2-1所示。

圖2-1 系統功能框架圖
2.2 模塊功能介紹
2.2.1 管理員模塊功能介紹
1. 管理員登陸
此模塊主要是利用MenuBar添加菜單條,利用Menu和MenuItem添加菜單和菜單的各個參數,通過事件ActionEvent 可以實現進入各個模塊如管理日志、管理員添加、管理員切
換、讀者添加、讀者修改、讀者查詢、讀者刪除、新書入庫、書籍查詢、借閱書籍、歸還書
籍、借閱超時及退出的功能。
2. 管理日志
此模塊可以清楚的顯示出書籍借閱與歸還的信息,包括書號、書名、圖書證號、借/還、操作日期、已付款額。讀者可以通過此模塊實現的功能清楚的了解圖書被借閱和歸還的詳細信息,從而給讀者帶來了很多方便。
3. 管理員添加功能介紹
此模塊功能是增加新管理員的登陸帳戶。在圖書館管理系統中必須有每一個管理者的帳戶讓其可以正常進行新圖書證的辦理、借閱書籍和歸還書籍等系統管理。所以在管理員功能模塊中增加了管理員添加這個功能。
4. 管理員切換
此模塊的主要功能是進行管理員之間的切換,即單擊管理員菜單下的管理員切換,就會退出當前管理員界面,從而出現管理員切換窗口,而另一管理員就可以在管理員切換窗口中的用戶名和密碼兩欄中通過輸入自己的用戶名和密碼直接進入該系統。
2.2.2 讀者管理
1. 讀者添加
此模塊主要的實現功能是添加新的讀者信息,即當有新的讀者要看查看本圖書館中的書藉,可以通過此功能實現,當數據庫中存在其新信息,即成為本圖書館的新一位讀者。其中信息分別包括圖書證號、學生姓名、性別、系別、班級,同時可有三項功能在此處實現,即添加、重置以及返回。
2.讀者修改
此模塊主要的實現功能對有信息更新的讀者進行即時修改,以隨時更新讀者在數據庫中的信息。本模塊通過圖書證號確定讀者,可對讀者信息的新圖書證號、學短姓名、性別、系別、班級。此處可分別實現對該功能的修改、重置、返回。
3. 讀者查詢
此模塊主要可對所要了解的讀者信息。即把讀者的信息從數據庫調出來,顯示在該窗口中的文字區域。查詢方式分別有按圖書證查詢、按姓名查詢、按班級查詢、按年級查詢,並可通過辦理入相應的關鍵字,更加縮小查詢范圍。此處可實現查詢和返回功能。
4. 讀者刪除
此模塊可以刪除一些不再使用本系統的讀者資料,從而達到對數據庫中的清理,即清除一些不必要資料,此處有四種刪除途徑,分別為按圖書證號刪除、按姓名刪除、按班級刪除、安年級刪除,並可通過所輸入的關鍵字盡快找到所要刪除的資料。此處可分別實現對該功能的修改、重置、返回。
2.2.3書籍管理模塊功能介紹
1. 新書入庫功能介紹
此模塊主要的實現功能是將新來的圖書輸入到圖書館管理系統的書庫當中,其中主要按如下信息往書庫中輸入,這部分的操作主要是便於書庫合理的管理,有利於讀者能夠對新書有
一個更詳細的了解。其中包括如下信息:新書書號、新書名稱、新書出版日期、新書出版社、入庫數量、編寫作者、新書單價。
2. 書籍查詢功能介紹
在圖書館管理系統中書籍查詢是最基本的功能,讀者可以根據自己的需求來查詢想要借閱的書籍。本系統是用Java應用程序和Access數據庫一起開發的其中利用Java來編程實現功能的代碼和布置運行界面。界面是由檢索項、檢索詞和顯示文本區三個部分組成的用戶根據自己的需要在檢索項中選擇自己所要按什么字段進行查詢,其中書籍查詢功能的檢索項中可以按書號查詢、按書名查詢、按作者名查詢、按出版社查詢、按入庫時間查詢等基礎查詢。選擇檢索項后用戶只要在檢索詞中添寫自己所要查詢的內容並確定鍵確認后用戶要查詢的內容就可以在顯示文本區中顯示出來。用戶可以根據顯示的信息得知自己所要借閱書籍的情況。
2.2.4 書籍借閱與歸還功能介紹
1. 借閱書籍功能介紹
此模塊主要實現讀者可憑有效的圖書證號,借閱圖書館內未借出的圖書。
輸入圖書證號后,可顯示了該圖書證持有者的全部信息(包括借書證號、姓名、性別、所在班級、所屬系部、當前可借閱圖書個數),供讀者確認信息。通過輸入有效的圖書編號,查詢該圖書的全部信息(包括書號、書名、作者、出版社、是否借出、價格)。借閱成功后,將該圖書證號、書號、借閱日期、應還日期信息插入到數據庫的表中進行記錄。
2. 歸還書籍功能介紹
此模塊主要實現讀者憑所要歸還圖書的圖書證號歸還圖書。
輸入所要歸還的圖書編號后,可顯示了該圖書證持有者的全部信息(包括借書證號、姓名、性別、所在班級、所屬系部、當前可借閱圖書個數),供讀者確認信息。還書成功后,從數據庫中刪除該書的借出記錄,並修改數據庫中的相應信息。
2.2.5 借閱超時功能介紹
此模塊主要實現顯示過期圖書的信息(包括圖書證號、書號、借閱日期、應還日期)提醒讀者還書。
2.3 組內任務分工
組內分工情況如下表2-1所示。
表2-1 組內分工情況表
| 組長 |
張燕 |
讀者添加、查詢、修改、刪除。 |
|
組員 |
丁從從 |
書籍借閱與歸還模塊、借書超期限子系統。 |
| 初冬瑞 |
管理員添加、新書入庫、按指定條件進行圖書查詢。 |
|
|
|
|
數據庫創建、登陸界面設計、管理員模塊。 |
三. 數據庫設計
在此圖書館管理系統中,使用到了一個重要的連接,即與數據庫Accesss相連。數據庫中存有圖書館中所信息,包括讀者信息、管理員資料、借閱與退還記錄。所有與管理有關的數據皆在其中,是保證系統能夠正常實現各種功能的一架橋。
3.1 數據庫需求分析
⒈ Admi表,即管理員表,記錄了用戶名和密碼。
⒉ Admirz表,即管理日志表,記錄了書號、書名、圖書證號、借/還、操作日期、已付款額。
⒊ book表,即圖書表,記錄了書號、書名、作者、出版社、入庫時間、是否借出、價格。
⒋ borrowbook表,即借閱表,記錄了圖書證號、書號、借閱日期、應還日期。
⒌ person表,即讀者表,記錄了圖書證號、姓名、性別、系別、班級。
3.2 數據庫表的設計
⒈Admi表
表中記錄了可以使管理員進入該系統的用戶名及密碼,如表3-1所示。
表3-1 管理員信息表
| 字段名稱 |
數據類型 |
長 度 |
備 注 |
| 用戶名 |
文 本 |
10 |
|
| 密 碼 |
文 本 |
15 |
|
⒉Admirz表
表中記錄借還書日志,用於存下所有對圖書操作的記錄,以便以后可以翻閱和查找,如表3-2所示。
表3-2 管理日志表
| 字段名稱 |
數據類型 |
長 度 |
備 注 |
| 書號 |
文 本 |
10 |
|
| 書名 |
文 本 |
15 |
|
| 作者 |
文 本 |
15 |
|
| 出版社 |
文 本 |
15 |
|
| 入庫時間 |
DATE |
15 |
|
| 已付款額 |
文 本 |
10 |
|
⒊book表
表中記錄了庫內所有圖書的所有資料,如表3-3。
表3-3 圖書表
| 字段名稱 |
數據類型 |
長 度 |
備 注 |
| 書號 |
文 本 |
10 |
|
| 書名 |
文 本 |
15 |
|
| 作者 |
文 本 |
15 |
|
| 出版社 |
文 本 |
15 |
|
| 入庫時間 |
DATE |
15 |
|
| 是否借出 |
文 本 |
10 |
|
| 價格 |
文 本 |
10 |
|
⒋person表
表中記錄庫中所有讀者的相關信息,如表3-4所示。
表3-4 讀者表
| 字段名稱 |
數據類型 |
長 度 |
備 注 |
| 圖書證號 |
文 本 |
10 |
|
| 姓名 |
文 本 |
15 |
|
| 性別 |
文 本 |
15 |
|
| 系別 |
文 本 |
15 |
|
| 班級 |
文 本 |
15 |
|
⒌borrowbook表
表內記錄了此時圖書的借閱情況,如表3-5所示。
表3-5 借閱表
| 字段名稱 |
數據類型 |
長 度 |
備 注 |
| 圖書證號 |
文 本 |
10 |
|
| 書號 |
文 本 |
15 |
|
| 借閱日期 |
DATE |
15 |
|
| 應還日期 |
DATE |
15 |
|
四. 系統功能實現
4.1 管理員模塊功能實現
4.1.1 管理員登陸
此模塊是整個系統最主要的部分,管理員可以通過此模塊實現進入其余各個模塊如管理日志、管理員添加、管理員切換、讀者添加、讀者修改、讀者查詢、讀者刪除、新書入庫、書籍查詢、借閱書籍、歸還書籍、借閱超時及退出的功能。圖書管理系統管理員界面如圖4-1所示。

圖4-1 圖書管理系統管理員
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==itemAdmiqh)
{
this.dispose();
In winin=new In("系統登陸");
}
if(e.getSource()==itemtc)
{
System.exit(0);
}
if(e.getSource()==itemAdmixj)
{
CreatAdmi creatAdmi=new CreatAdmi("管理員添加");
}
if(e.getSource()==itemAdmirz)
{
WinTable wintable=new WinTable("管理日志");
}
if(e.getSource()==itemBookrk)
{
AddInfy addInfy=new AddInfy();
}
if(e.getSource()==itemPersonlr)
{
Winpersonadd winperson=new Winpersonadd("讀者添加");
}
if(e.getSource()==itemPersoncx)
{
Winpersonsearch winperson=new Winpersonsearch("讀者信息查詢");
}
if(e.getSource()==itemPersonxg)
{
Winpersonmodify winperson=new Winpersonmodify("讀者信息修改");
}
if(e.getSource()==itemPersonsc)
{
Winpersondelete winperson=new Winpersondelete("讀者刪除");
}
if(e.getSource()==itemBookcx)
{
Windowjj ok=new Windowjj();
}
if(e.getSource()==itemchaoshi)
{
day win=new day();
}
if(e.getSource()==itemBorrowjs)
{
Borrowbook win=new Borrowbook();
}
if(e.getSource()==itemBorrowhs)
{
Returnbook win=new Returnbook();
}
}
4.1.2 管理日志
此模塊通過定義類WinTable繼承頂層容器JFrame,再添加普通容器 JScrollPane、Jpanel,然后通過BorderLayout布局創建界面,最后主要通過數組利用while循環在連接好的數據庫中查找表Admirz中的內容,從而實現了可以清楚的顯示出書籍借閱與歸還信息的功能。管理日志界面如圖4-2所示。

圖4-2 管理日志
主要程序代碼如下:
WinTable(String s)
{
super(s);
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{ System.out.println(""+e);
}
try { con=DriverManager.getConnection("jdbc:odbc:sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM Admirz");
while(rs.next())
{
k++;
}
}
catch(SQLException e)
{ System.out.println(""+e);
}
try { con=DriverManager.getConnection("jdbc:odbc:sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM Admirz");
a=new Object[k][6];
while(rs.next())
{
for(int j=0;j<6;j++)
{
if(j<5)
a[i][j]=rs.getString(j+1);
else
{
a[i][j]=rs.getDouble(j+1);
i++;
}
}
}
con.close();
}
catch(SQLException e)
{ System.out.println(""+e);
}
table=new JTable(a,name);
Container con=getContentPane();
getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
setBounds(120,125,700,500);
setVisible(true);
validate();
addWindowListener(new DisposeListener());
}
}
4.1.3 管理員添加功能實現
功能介紹:該程序主要實現管理員的添加,以便於讓實行對圖書管理員的管理。按照標
簽提示輸入信息,然后點擊確定按鈕。首先判斷管理員名文本框中輸入的文本信息是否符合大於3個字符並小於10個字符的規則,如果不符合規則,則提示錯誤,如果符合規則,再到Admi表中進行查詢,如果相同則用提示框提示錯誤。若無相同則可注冊。但還需要保證前后兩次的密碼相同,才能成功注冊,管理員登陸窗口如圖4-3所示。


圖4-3 管理員添加成功界面
主要程序代碼如下:
public void actionPerformed(ActionEvent c)
{
String b=textUser.getText();
String d=textPassword1.getText();
String g=textPassword2.getText();
if(c.getSource()==buttonqk)
{ textUser.setText(null);
textPassword1.setText(null);
textPassword2.setText(null);
}
if(c.getSource()==buttonEnter||c.getSource()==textPassword2)
{
if(b.length()<3||b.length()>10)
{
JOptionPane.showMessageDialog(null,"用戶名應在3~10個字符之間");
textUser.setText(null);
}
else
{
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{ System.out.println(""+e);
}
try { con=DriverManager.getConnection("jdbc:odbc:sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM Admi WHERE 用戶名="+"'"+b+"'");
if(rs.next())
{
String user=rs.getString(1);
if(b.equals(user))
{
JOptionPane.showMessageDialog(null,"此管理員已被注冊","警告",JOptionPane.WARNING_MESSAGE);
}
}
else
{
if(d.equals(g))
{
sql.executeUpdate("INSERTINTOAdmi VALUES"+"("+"'"+b+"'"+","+"'"+d+"'"+")");
this.dispose();
JOptionPane.showMessageDialog(null,"管理員注冊成功");
}
else JOptionPane.showMessageDialog(null,"兩次輸入密碼不一致","警告",JOptionPane.ERROR_MESSAGE);
}
con.close();
}
catch(SQLException e)
{ System.out.println(""+e);
}
}}
}
4.1.4 管理員切換
此模塊功能是退出當前管理員界面,進入管理員切換窗口,另一用戶可以通過輸入自己的用戶名和密碼直接進入該系統。但此用戶名和密碼都必須與已經連接好的數據庫中表Admi中的用戶名和密碼相吻合。管理員切換界面如圖4-4所示。

圖4-4 管理員切換
主要程序代碼如下:
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
}
4.2 讀者管理模塊功能實現
4.2.1 讀者添加
功能介紹:添加新的讀者,使其能夠進入圖書系統閱覽圖書,讀者添加如圖4-5所示。

圖4-5 讀者添加
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1) // 添加
{
String ch=text1.getText();
if(ch.length()!=5){
JOptionPane.showMessageDialog(null,"請輸入5位圖書證號!");
text1.setText(null);
}
else{
……//連接數據庫
String number,name,sex,dept,classes,record,insertStr;
number=text1.getText();
name=text2.getText();
if(box1.getState()==true)
{
sex=box1.getLabel();
}
else
{
sex=box2.getLabel();
}
dept=text3.getText();
classes=text4.getText();
rs=sql.executeQuery("SELECT * FROM person WHERE 圖書證號="+"'"+number+"'");
if(rs.next()){
JOptionPane.showMessageDialog(null,"此圖書證號已存在","警告",JOptionPane.WARNING_MESSAGE);
text1.setText(null);
}
record="("+"'"+number+"'"+","+"'"+name+"'"+","+"'"+sex+"'"+","+"'"+dept+"'"+","+"'"+classes+"'"+")";
insertStr="INSERT INTO person VALUES"+record;
sql.executeUpdate(insertStr);
JOptionPane.showMessageDialog(null,"添加成功!");
con.close();
}
4.2.2 讀者修改
功能介紹:對讀者需要修改的資料進行重定義,讀者信息修改如圖4-6所示。

圖4-6 讀者信息修改
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1) //修改
{
String ch=text1.getText();
if(ch.length()!=5){
JOptionPane.showMessageDialog(null,"請輸入5位圖書證號!");
text1.setText(null);
}else{
try
{
……//連接數據庫
String number,name,sex,dept,classes,newnum,record,updateStr;
newnum=text5.getText();
number=text1.getText();
name=text2.getText();
if(box1.getState()==true)
{
sex=box1.getLabel();
}
else
{
sex=box2.getLabel();
}
dept=text3.getText();
classes=text4.getText();
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM person where 圖書證號="+"'"+newnum+"'");
if(rs.next()){
rs1=sql.executeQuery("SELECT * FROM person where 圖書證號="+"'"+number+"'");
if(rs1.next()){
JOptionPane.showMessageDialog(null,"此圖書證號已存在","警告",JOptionPane.WARNING_MESSAGE);
text1.setText(null);
}else
{
updateStr="UPDATE person SET 圖書證號="+"'"+number+"'"+","+"姓名="+"'"+name+"'"+","+"性別="+"'"+sex+"'"+","+"系別="+"'"+dept+"'"+","+"班級="+"'"+classes+"'"+"WHERE 圖書證號="+"'"+newnum+"'";
sql.executeUpdate(updateStr);
JOptionPane.showMessageDialog(null,"修改成功!");
}
}
else
{
JOptionPane.showMessageDialog(null,"查無此人!");
}
……//連接數據庫
con.close();
}
4.2.3 讀者查詢
功能介紹:可以對數據庫中已有的讀者信息進行查詢。讀者查詢如圖4-7。

圖4-7 讀者信息查詢
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button1 || e.getSource()==text){ // 查詢
area.setText(null);
if((str=="按圖書證號查詢" || str==null) && text.getText()!=null)
{
boolean flag=true,f=true;
String num=text.getText();
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM person where 圖書證號="+"'"+num+"'");
while(rs.next())
{
f=false;
String number=rs.getString("圖書證號");
String name=rs.getString("姓名");
String sex=rs.getString("性別");
String dept=rs.getString("系別");
String classes=rs.getString("班級");
if(flag){
area.append("圖書證號為"+num+"的學生信息如下:");
flag=false;
}
area.append("\n姓名:"+name+" 性別:"+sex+" 系別:"+dept+" 班級:"+classes+"\n");
}
if(f){area.append("查無此人!");}
}
catch(SQLException c)
{
System.out.println(c);
}
}
4.2.4 讀者刪除
功能介紹:刪除數據庫中已有信息。讀者刪除如圖4-8所示。

圖4-8 讀者刪除
主要程序代碼如下:
if(e.getSource()==button1){ // 刪除
area.setText(null);
if((str=="按圖書證號刪除" || str==null) && text.getText()!=null) {
String num=text.getText();
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException c)
{
System.out.println(""+c);
}
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM person where 圖書證號="+"'"+num+"'");
if(rs.next()){
area.append("該信息已刪除!");
}
String delStr="DELETE FROM person WHERE 圖書證號="+"'"+num+"'";
sql.executeQuery(delStr);
con.close();
}
catch(SQLException c)
{
System.out.println(c);
}
}
4.3 書籍管理模塊功能實現
4.3.1 新書入庫實現
功能介紹:此界面主要完成的功能是往數據庫book表中添加新書的記錄,在book表中可查看最新的記錄。在新書信息輸入的過程中,會出現一些異常處理,如某個字段的信息沒有填寫;新書信息輸入字段的過程中,輸入的字段類型與給定的字段類型與輸入不匹配(如:貨幣、日期);輸入的信息長度超過給定的字段長度等。如果填寫的內容正確則可以成功將新書添加入庫,新書入庫窗口如圖4-9所示。

圖4-9添加新書入庫界面
主要程序代碼如下:
public void actionPerformed(ActionEvent c)
{ if (c.getSource()==button2)
{ this.dispose();}
if (c.getSource()==button1)
{
……//連接數據庫
rs=stm.executeQuery("select 書號 from book where 書號='" +textField1.getText() + "'");
if (rs.next())
{
JOptionPane.showMessageDialog(null, "此書號已存在!", "警告",JOptionPane.WARNING_MESSAGE);
return;
}
float m;
String str1,str2,str3,str4,str6,str7,str8,str9,str10;
str1=textField1.getText();
……
str10="未借出";
m=Float.parseFloat(str9);
str="("+"'"+str1+"','"+str3+"','"+str8+"','"+str6+"','"+str7+"','"+str10+"',"+m+")";
String insert="INSERT INTO book(書號,書名,作者,出版社,入庫時間,是否借出,價格) VALUES"+str;
stm.executeUpdate(insert);
textField1.setText("");
……
JOptionPane.showMessageDialog(null, "增加信息成功!");
con.close();
}
catch (Exception e){JOptionPane.showMessageDialog(null, "請認真檢查各項!
然后重試.", "異常警告",
JOptionPane.WARNING_MESSAGE);
}
}
4.3.2查詢功能實現
功能介紹:本系統包含兩項一是檢索項令一個是檢索詞,在檢索項中用戶可以根據自己
的需求來選擇所要查詢的項目並在檢索詞中添寫自己所要查詢的內容。本系統副帶四個按鈕:確定、取消、查看全庫,該圖書館管理系統的查詢界面如圖4-10所示。

圖4-10 查詢系統界面
在該系統中為了用戶使用方便還設有查看全庫一項,用戶可以通過這一功能來查看全庫的圖書,所查詢的內容將在下方的文本區中顯示,其界面4-11所示。

圖4-11 查看全庫信息
使用檢索詞必須得滿足一定的查詢條件才可以執行,用戶必須得在檢索項中選擇查詢方式並添好檢索詞才可查詢否則系統會顯示未找到您要查找的內容並給以提示,如圖4-12所示。

圖4-12 檢索項按書號查詢
主要程序代碼如下:
public void itemStateChanged(ItemEvent e)
{
area.setText(null) ;
String name=choice1.getSelectedItem();
area.append( " 請您在檢索項中輸入您要查找的內容 : ");
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource()==button2) //取消鍵
{ text1.setText(null);}
else if (e.getSource()==button3) //返回鍵
{ this.dispose(); }
else if (e.getSource()==button4) // 查看全庫
{ Connection con;
Statement sql;
ResultSet rs;
try //建立數據源
{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException c)
{System.out.println(""+c);}
try
{
con=DriverManager.getConnection("jdbc:odbc:sun","","");
sql=con.createStatement();
rs=sql.executeQuery("select * from book ");
while (rs.next())
{
String bookname=rs.getString("書名");
String auther=rs.getString("作者");
String chubanshe=rs.getString("出版社");
String bookno=rs.getString("書號");
String data=rs.getString("入庫時間");
String yesorno=rs.getString("是否借出"); area.append("\n書號:"+bookno);
area.append(" 書名:"+bookname); area.append(" 作者:"+auther);
area.append(" 出版社:"+chubanshe);
area.append(" \n入庫時間:"+data); area.append(" 是否借出:"+yesorno); }
con.close();
}
catch(SQLException c)
{ System.out.println(""+c);}
}
4.4 書籍借閱與歸還功能實現
4.4.1 借閱書籍功能實現
輸入圖書證號“0001”后點擊查看按鈕,可顯示該讀者信息,若輸入圖書證號錯誤,點擊查看按鈕則會彈出借書證錯誤對話框,如圖4-13所示。輸入圖書編號“0000003”按回車鍵,可顯示該圖書信息,若輸入圖書編號錯誤,按回車鍵則會彈出圖書編號錯誤對話框,如圖4-14所示。點擊借閱按鈕則會彈出圖書借閱成功對話框。借閱書籍功能的具體實現如圖4-15所示。

圖4-13 借書證錯誤

圖4-14 圖書編號錯誤

圖4-15 借閱書籍
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==tj)
{
if(!tscard.getText().equals(null)&&!tsid.getText().equals(null))
{
String str1,str2;
str1=tsid.getText();
str2=tscard.getText();
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException c)
{
System.out.println(""+c);
}
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM person where 圖書證號="+"'"+str2+"'");
String ls1=null,ls2=null,ls3=null;
int is1=0;
if(rs.next())
{
ls2=str2;
}
con.close();
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM book where 書號="+"'"+str1+"'");
if(rs.next())
{
if(rs.getString("是否借出").equals("未借出"))
ls1=str1;
ls3=rs.getString("書名");
}
con.close();
……//連接數據庫
rs=sql.executeQuery("SELECT count(書號) FROM borrowbook where 圖書
證號="+"'"+str1+"'");
rs.next();
is1=rs.getInt(1);
con.close();
……//連接數據庫
if(ls1==str1&&ls2==str2&&is1<5)
{ Date da=new Date();
int y=da.getYear()+1900;
int m=da.getMonth()+1;
int d=da.getDate();
String jyrq=String.valueOf(y)+"-"+String.valueOf(m)+"-"+String.valueOf(d);
……//計算借閱時間
String yhrq=String.valueOf(y)+"-"+String.valueOf(m)+"-"+String.valueOf(d);
String insertstr="INSERT INTO borrowbook VALUES ('"+ls2+"','"+ls1+"','"+jyrq+"','"+yhrq+"')";
String updatestr="UPDATE book SET 是否借出='借出' WHERE 書號="+"'"+str1+"'";
String insertstr2="INSERT INTO Admirz VALUES('"+ls1+"','"+ls3+"','"+ls2+"','借書','"+jyrq+"',0)";
sql.executeUpdate(insertstr);
sql.executeUpdate(insertstr2);
sql.executeUpdate(updatestr);
JOptionPane.showMessageDialog(this,"借閱成功請在"+yhrq+"之前退還,否則將支付滯納金","圖書借閱成功 ",JOptionPane.WARNING_MESSAGE);
tsid.setText(null);
tscard.setText(null);
}
4.4.2 歸還書籍功能實現
輸入圖書編號“0000003”點擊回車鍵,則該界面右側會顯示借書者的信息,若圖書編號錯誤則會彈出圖書編號錯告對話框,如圖4-16所示。點擊還書按鈕會彈出歸還成功對話框。歸還書籍功能的具體實現,如圖4-17所示。

4-16 圖書編號錯誤

4-17 歸還書籍
主要程序代碼如下:
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==tj)
{
String num=tsid.getText();
int jc;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException c)
{
System.out.println(""+c);
}
try
{ String tsz=null;
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM person where 圖書證號=(SELECT 圖書證號 FROM borrowbook where 書號="+"'"+num+"')");
if(rs.next())
{
tsz=rs.getString("圖書證號");
}
con.close();
……//連接數據庫
rs=sql.executeQuery("SELECT * FROM vbbook where 書號="+"'"+num+"'");
Date da=new Date();
int y=da.getYear()+1900;
int m=da.getMonth()+1;
int d=da.getDate();
String czrq=String.valueOf(y)+"-"+String.valueOf(m)+"-"+String.valueOf(d);
float money;
String sm=null;
int day=0;
if(rs.next())
{
sm=rs.getString("書名");
String yhrq=rs.getString("應還日期");
y=(y-Integer.parseInt(yhrq.substring(0,4)));
int mm=Integer.parseInt(yhrq.substring(5,7));
day=y;
d=Integer.parseInt(yhrq.substring(8,10))-d;
if(y!=0)
mm=mm+12;
while(m>mm)
{
…//計算還書時間
}
day=day+d;
if(day>0)
{
JOptionPane.showMessageDialog(this,"您比應還日期晚了"+String.valueOf(day)+"天歸還,請交付相應滯納金","延期還書",JOptionPane.WARNING_MESSAGE);
money=day/10;
tsid.setText(null);
}
}
4.5 借閱超時功能實現
數據庫borrowbook(借書表)表中的“應還日期”字段中的時間與當前時間相比較,若比當前時間早則說明該書借閱超時,那么該條記錄將在此被顯示出來。借閱超時功能具體實現如圖4-18所示。

圖4-18 借閱超時
主要程序代碼如下:
……//連接數據庫
Date nowtime=new Date();//當前日期
SimpleDateFormat matter1=new SimpleDateFormat("yyyy-MM-dd");
String stime=matter1.format(nowtime);
String dyear=stime.substring(0,4);
year2=Integer.parseInt(dyear);//年
String dmoon=stime.substring(5,7);
moon2=Integer.parseInt(dmoon);//月
String dday=stime.substring(8,10);
day2=Integer.parseInt(dday);//日
rs=sql.executeQuery("SELECT * FROM borrowbook");
while(rs.next()){x=x+1;}
rs.beforeFirst();
a=new Object[x][4];
while(rs.next())
{
……//計算還書超過的天數
table=new JTable(a,name);
sPanel.add(new JScrollPane(table),BorderLayout.CENTER);
sPanel.setEnabled(false);
setBounds(0,0,700,400);
setVisible(true);
validate();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{dispose();
}
}
}
五.總結
一周的java課程設計已經結束了,在這次課程設計中我組成員共同努力完成了任務,共同學習知識。雖然只是短短的兩周時間,可是在這兩周我們把課堂里老師講的知識用到實踐中去了,感到非常高興。在這次課設中我們不僅學到了知識,還鍛練了團體合作的能力,在這次課設中我們真正體會到了小組合作精神的重要性,就如古語所說的“萬眾同心,齊力斷金”,這對我們以后的工作有很大的幫助。
這次的課程設計可以看作是一次理論與實踐相結合的橋梁,通過這次的課程設計,我們學習到了許多的知識,也認識到了自己目前的不足,那就是缺乏相應的知識與經驗,所以在運用和操作方面都不是那么的得心應手。但是,經過這段時間對相關書籍的閱讀和分析,我們組順利的完成了設計,我還明白了在編寫程序的時候,應該盡量使界面簡潔大方,布局統一。變量類型的定義,一定要夠用就好,這樣程序就可以盡可能的減少對系統資源的占用。在設計時也免不了存在着一些不足,所以在今后的學習中我們會努力取得更大的進步,對於我們不足的地方希望老師能夠及時給予批評,以便我們在今后的學習或工作中能夠及時的改正。
