大學爲咱們提供了自由的學習環境,使咱們有更多的時間到圖書館借閱書籍,讓咱們能夠隨時掌握各方面的知識,不斷提升自我、充實自我,但因爲圖書館藏書成千上萬,咱們很難一本一本的去查找本身感興趣的書籍,所以咱們會常常用到學校爲咱們提供的圖書管理系統,用時間長了便對此產生了興趣,正好本次課程設計爲咱們提供了良好的機會,讓咱們親自設計並實現了圖書管理系統的部分功能。java
現已有的圖書管理系統,其功能已十分強大,爲了便於管理員對圖書管理系統進行妥善的管理和讀者的查詢,圖書管理系統爲管理員提供了管理日誌、管理員添加、管理員切換、讀者添加、讀者修改、讀者查詢、讀者刪除、新書入庫等功能,爲讀者提供了書籍查詢、讀者借閱信息查詢、圖書網上續借等不少功能。git
在對應的界面與Access數據庫創建鏈接,並實現對應的SQL語句進行實現將產生的結果顯示出來。並運用捕捉異常的方法,將異常信息顯示出來。github
實現SQL語句的時候藉助前臺開發工具中關於數據處理的控件來完成。對於讀者而言他們的需求是瞭解圖書的基本狀況,本身的借閱狀況。總而言之就是實現對各個信息表的查詢。對於圖書管理員而言要實現的功能相對而言比較多,例如實現新書入庫、Access數據庫表的建立、系統的維護等等,這些都須要設計和實現的。sql
圖書館管理系統功能總框圖,如圖2-1所示。數據庫
圖2-1 系統功能框架圖編程
1. 管理員登錄數組
此模塊主要是利用MenuBar添加菜單條,利用Menu和MenuItem添加菜單和菜單的各個參數,經過事件ActionEvent 能夠實現進入各個模塊如管理日誌、管理員添加、管理員切app
換、讀者添加、讀者修改、讀者查詢、讀者刪除、新書入庫、書籍查詢、借閱書籍、歸還書框架
籍、借閱超時及退出的功能。數據庫設計
2. 管理日誌
此模塊能夠清楚的顯示出書籍借閱與歸還的信息,包括書號、書名、圖書證號、借/還、操做日期、已付款額。讀者能夠經過此模塊實現的功能清楚的瞭解圖書被借閱和歸還的詳細信息,從而給讀者帶來了不少方便。
3. 管理員添加功能介紹
此模塊功能是增長新管理員的登錄賬戶。在圖書館管理系統中必須有每個管理者的賬戶讓其能夠正常進行新圖書證的辦理、借閱書籍和歸還書籍等系統管理。因此在管理員功能模塊中增長了管理員添加這個功能。
4. 管理員切換
此模塊的主要功能是進行管理員之間的切換,即單擊管理員菜單下的管理員切換,就會退出當前管理員界面,從而出現管理員切換窗口,而另外一管理員就能夠在管理員切換窗口中的用戶名和密碼兩欄中經過輸入本身的用戶名和密碼直接進入該系統。
1. 讀者添加
此模塊主要的實現功能是添加新的讀者信息,即當有新的讀者要看查看本圖書館中的書藉,能夠經過此功能實現,當數據庫中存在其新信息,即成爲本圖書館的新一位讀者。其中信息分別包括圖書證號、學生姓名、性別、系別、班級,同時可有三項功能在此處實現,即添加、重置以及返回。
2.讀者修改
此模塊主要的實現功能對有信息更新的讀者進行即時修改,以隨時更新讀者在數據庫中的信息。本模塊經過圖書證號肯定讀者,可對讀者信息的新圖書證號、學短姓名、性別、系別、班級。此處可分別實現對該功能的修改、重置、返回。
3. 讀者查詢
此模塊主要可對所要了解的讀者信息。即把讀者的信息從數據庫調出來,顯示在該窗口中的文字區域。查詢方式分別有按圖書證查詢、按姓名查詢、按班級查詢、按年級查詢,並可經過辦理入相應的關鍵字,更加縮小查詢範圍。此處可實現查詢和返回功能。
4. 讀者刪除
此模塊能夠刪除一些再也不使用本系統的讀者資料,從而達到對數據庫中的清理,即清除一些沒必要要資料,此處有四種刪除途徑,分別爲按圖書證號刪除、按姓名刪除、按班級刪除、安年級刪除,並可經過所輸入的關鍵字儘快找到所要刪除的資料。此處可分別實現對該功能的修改、重置、返回。
1. 新書入庫功能介紹
此模塊主要的實現功能是將新來的圖書輸入到圖書館管理系統的書庫當中,其中主要按以下信息往書庫中輸入,這部分的操做主要是便於書庫合理的管理,有利於讀者可以對新書有
一個更詳細的瞭解。其中包括以下信息:新書書號、新書名稱、新書出版日期、新書出版社、入庫數量、編寫做者、新書單價。
2. 書籍查詢功能介紹
在圖書館管理系統中書籍查詢是最基本的功能,讀者能夠根據本身的需求來查詢想要借閱的書籍。本系統是用Java應用程序和Access數據庫一塊兒開發的其中利用Java來編程實現功能的代碼和佈置運行界面。界面是由檢索項、檢索詞和顯示文本區三個部分組成的用戶根據本身的須要在檢索項中選擇本身所要按什麼字段進行查詢,其中書籍查詢功能的檢索項中能夠按書號查詢、按書名查詢、按做者名查詢、按出版社查詢、按入庫時間查詢等基礎查詢。選擇檢索項後用戶只要在檢索詞中添寫本身所要查詢的內容並肯定鍵確認後用戶要查詢的內容就能夠在顯示文本區中顯示出來。用戶能夠根據顯示的信息得知本身所要借閱書籍的狀況。
1. 借閱書籍功能介紹
此模塊主要實現讀者可憑有效的圖書證號,借閱圖書館內未借出的圖書。
輸入圖書證號後,可顯示了該圖書證持有者的所有信息(包括借書證號、姓名、性別、所在班級、所屬系部、當前可借閱圖書個數),供讀者確認信息。經過輸入有效的圖書編號,查詢該圖書的所有信息(包括書號、書名、做者、出版社、是否借出、價格)。借閱成功後,將該圖書證號、書號、借閱日期、應還日期信息插入到數據庫的表中進行記錄。
2. 歸還書籍功能介紹
此模塊主要實現讀者憑所要歸還圖書的圖書證號歸還圖書。
輸入所要歸還的圖書編號後,可顯示了該圖書證持有者的所有信息(包括借書證號、姓名、性別、所在班級、所屬系部、當前可借閱圖書個數),供讀者確認信息。還書成功後,從數據庫中刪除該書的借出記錄,並修改數據庫中的相應信息。
此模塊主要實現顯示過時圖書的信息(包括圖書證號、書號、借閱日期、應還日期)提醒讀者還書。
組內分工狀況以下表2-1所示。
表2-1 組內分工狀況表
組長 |
張燕 |
讀者添加、查詢、修改、刪除。 |
組員 |
丁從從 |
書籍借閱與歸還模塊、借書超期限子系統。 |
初冬瑞 |
管理員添加、新書入庫、按指定條件進行圖書查詢。 |
|
|
|
數據庫建立、登錄界面設計、管理員模塊。 |
在此圖書館管理系統中,使用到了一個重要的鏈接,即與數據庫Accesss相連。數據庫中存有圖書館中所信息,包括讀者信息、管理員資料、借閱與退還記錄。全部與管理有關的數據皆在其中,是保證系統可以正常實現各類功能的一架橋。
⒈ Admi表,即管理員表,記錄了用戶名和密碼。
⒉ Admirz表,即管理日誌表,記錄了書號、書名、圖書證號、借/還、操做日期、已付款額。
⒊ book表,即圖書表,記錄了書號、書名、做者、出版社、入庫時間、是否借出、價格。
⒋ borrowbook表,即借閱表,記錄了圖書證號、書號、借閱日期、應還日期。
⒌ person表,即讀者表,記錄了圖書證號、姓名、性別、系別、班級。
⒈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 圖書管理系統管理員
主要程序代碼以下:
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();
}
}
此模塊經過定義類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());
}
}
功能介紹:該程序主要實現管理員的添加,以便於讓實行對圖書管理員的管理。按照標
籤提示輸入信息,而後點擊肯定按鈕。首先判斷管理員名文本框中輸入的文本信息是否符合大於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);
}
}}
}
此模塊功能是退出當前管理員界面,進入管理員切換窗口,另外一用戶能夠經過輸入本身的用戶名和密碼直接進入該系統。但此用戶名和密碼都必須與已經鏈接好的數據庫中表Admi中的用戶名和密碼相吻合。管理員切換界面如圖4-4所示。
圖4-4 管理員切換
主要程序代碼以下:
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
}
功能介紹:添加新的讀者,使其可以進入圖書系統閱覽圖書,讀者添加如圖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-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-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-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);
}
}
功能介紹:此界面主要完成的功能是往數據庫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-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);}
}
輸入圖書證號「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);
}
輸入圖書編號「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);
}
}
數據庫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課程設計已經結束了,在此次課程設計中我組成員共同努力完成了任務,共同窗習知識。雖然只是短短的兩週時間,但是在這兩週咱們把課堂里老師講的知識用到實踐中去了,感到很是高興。在此次課設中咱們不只學到了知識,還鍛練了團體合做的能力,在此次課設中咱們真正體會到了小組合做精神的重要性,就如古語所說的「萬衆同心,齊力斷金」,這對咱們之後的工做有很大的幫助。
此次的課程設計能夠看做是一次理論與實踐相結合的橋樑,經過此次的課程設計,咱們學習到了許多的知識,也認識到了本身目前的不足,那就是缺少相應的知識與經驗,因此在運用和操做方面都不是那麼的駕輕就熟。可是,通過這段時間對相關書籍的閱讀和分析,咱們組順利的完成了設計,我還明白了在編寫程序的時候,應該儘可能使界面簡潔大方,佈局統一。變量類型的定義,必定要夠用就好,這樣程序就能夠儘量的減小對系統資源的佔用。在設計時也免不了存在着一些不足,因此在從此的學習中咱們會努力取得更大的進步,對於咱們不足的地方但願老師可以及時給予批評,以便咱們在從此的學習或工做中可以及時的改正。