圖書館管理系統程式設計
程式碼地址: 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”按Enter鍵,可顯示該圖書資訊,若輸入圖書編號錯誤,按Enter鍵則會彈出圖書編號錯誤對話方塊,如圖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”點選Enter鍵,則該介面右側會顯示借書者的資訊,若圖書編號錯誤則會彈出圖書編號錯告對話方塊,如圖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課程設計已經結束了,在這次課程設計中我組成員共同努力完成了任務,共同學習知識。雖然只是短短的兩週時間,可是在這兩週我們把課堂里老師講的知識用到實踐中去了,感到非常高興。在這次課設中我們不僅學到了知識,還鍛練了團體合作的能力,在這次課設中我們真正體會到了小組合作精神的重要性,就如古語所說的“萬眾同心,齊力斷金”,這對我們以後的工作有很大的幫助。
這次的課程設計可以看作是一次理論與實踐相結合的橋樑,通過這次的課程設計,我們學習到了許多的知識,也認識到了自己目前的不足,那就是缺乏相應的知識與經驗,所以在運用和操作方面都不是那麼的得心應手。但是,經過這段時間對相關書籍的閱讀和分析,我們組順利的完成了設計,我還明白了在編寫程式的時候,應該儘量使介面簡潔大方,佈局統一。變數型別的定義,一定要夠用就好,這樣程式就可以儘可能的減少對系統資源的佔用。在設計時也免不了存在著一些不足,所以在今後的學習中我們會努力取得更大的進步,對於我們不足的地方希望老師能夠及時給予批評,以便我們在今後的學習或工作中能夠及時的改正。