圖書管理系統(tǒng)java版
本文的目的就是通過圖書管理系統(tǒng)掌握數(shù)據(jù)庫編程技術(shù),能正確連接數(shù)據(jù)庫,能對(duì)數(shù)據(jù)庫中信息進(jìn)行查詢、插入、刪除、修改。
內(nèi)容:在數(shù)據(jù)庫中創(chuàng)建一張書目信息表,包括書名、作者、出版社、出版日期、書號(hào)、價(jià)格字段。設(shè)計(jì)一個(gè)GUI界面進(jìn)行書目管理。在該界面上有四個(gè)選項(xiàng)卡,分別是查詢、插入、刪除、修改。點(diǎn)擊查詢選項(xiàng)卡,出現(xiàn)的界面上有書名、作者、出版社、書號(hào)四個(gè)文本框,一個(gè)按鈕和一個(gè)只讀文本區(qū)。文本框內(nèi)容可以為空,輸入相應(yīng)的查詢信息后(例如根據(jù)書名查詢可以僅輸入書名),點(diǎn)擊界面上的“查詢”按鈕,可以在界面下方的文本區(qū)中顯示出符合條件的書目詳細(xì)信息。點(diǎn)擊插入選項(xiàng)卡,出現(xiàn)的界面上有書名、作者、出版社、出版日期、書號(hào)、價(jià)格文本框,一個(gè)按鈕。在文本框中輸入信息后,點(diǎn)擊“插入”按鈕,該書目信息插入數(shù)據(jù)庫表中。點(diǎn)擊刪除選項(xiàng)卡,出現(xiàn)的界面上有書名文本框和一個(gè)按鈕,輸入書名后點(diǎn)擊“刪除”按鈕,該書目信息從數(shù)據(jù)庫表中刪除。點(diǎn)擊修改選項(xiàng)卡,出現(xiàn)的界面上有書名、作者、出版社、出版日期、書號(hào)、價(jià)格文本框,一個(gè)按鈕。輸入的書名必須是已存在的,否則會(huì)彈出消息框顯示出錯(cuò)信息。輸入信息后,點(diǎn)擊“修改”按鈕,數(shù)據(jù)庫表中的相應(yīng)書目信息被修改為新值。
源碼:
BookInfo.java
* 項(xiàng)目名稱:圖書管理系統(tǒng)
* 版本: 1.0
* 創(chuàng)建者: 張俊強(qiáng)
* 創(chuàng)建時(shí)間:2016/5/26
* */
package librarySystem;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
@SuppressWarnings("serial")
public class BookInfo extends JFrame implements ActionListener{
//主角面上的控件
private JLabel inputLabel;
private JTextField inputText;
private JButton searchBut;
private JTable bookTable;
private JScrollPane bookScroll;
private JButton addBut;
private JButton modifyBut;
private JButton deleteBut;
private JButton refreshBut;
private BookTableModel bookTableModel;
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
BookInfo bookInfo=new BookInfo();
bookInfo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bookInfo.setBounds(350, 150, 600, 400);
bookInfo.setVisible(true);
// bookInfo.importSQL();//導(dǎo)出數(shù)據(jù)
bookInfo.setMinWindowLayout();//設(shè)置數(shù)據(jù)
}
public BookInfo() throws SQLException{
//創(chuàng)建主界面上的控件
inputLabel=new JLabel("請(qǐng)輸入書名:");
inputText=new JTextField(10);
searchBut=new JButton("查詢");
bookTableModel=new BookTableModel();
bookTable=new JTable(bookTableModel);
bookScroll=new JScrollPane(bookTable);
addBut=new JButton("添加");
modifyBut=new JButton("修改");
deleteBut=new JButton("刪除");
refreshBut=new JButton("刷新");
searchBut.addActionListener(this);
addBut.addActionListener(this);
refreshBut.addActionListener(this);
modifyBut.addActionListener(this);
deleteBut.addActionListener(this);
}
void setMinWindowLayout(){
//主界面布局
Container con1=new Container();
con1.setLayout(new FlowLayout());
con1.add(inputLabel);
con1.add(inputText);
con1.add(searchBut);
con1.add(refreshBut);
Container con2=new Container();
con2.setLayout(new FlowLayout());
con2.add(addBut);
con2.add(modifyBut);
con2.add(deleteBut);
this.setLayout(new BorderLayout());
this.add(con1,BorderLayout.NORTH);
this.add(bookScroll,BorderLayout.CENTER);
this.add(con2,BorderLayout.SOUTH);
this.validate();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==searchBut){
if(!this.inputText.getText().equals("")){
String bookName=this.inputText.getText();
String sql="SELECT * FROM book_info WHERE book_name ='"+bookName+"'";
try {
bookTableModel=new BookTableModel(sql);
bookTable.setModel(bookTableModel);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else{
JOptionPane.showMessageDialog(this,"輸入不能為空", "提示",JOptionPane.PLAIN_MESSAGE);
}
}
else if(e.getSource()==addBut){
@SuppressWarnings("unused")
AddBookDialog addWin=new AddBookDialog(this,"添加圖書",true);
this.refreshTable();
}
else if(e.getSource()==refreshBut){
this.refreshTable();
}
else if(e.getSource()==deleteBut){
int rowNum=bookTable.getSelectedRow();
if(rowNum<0||rowNum>bookTable.getRowCount()){
JOptionPane.showMessageDialog(this,"未選中", "提示",JOptionPane.PLAIN_MESSAGE);
}
else{
//System.out.print(bookName);
int n = JOptionPane.showConfirmDialog(null, "確認(rèn)刪除嗎?", "確認(rèn)刪除框", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
String bookNum=(String) bookTable.getValueAt(rowNum, 0);
String sql="DELETE FROM book_info WHERE book_num= '"+bookNum+"'";
bookTableModel.deleteBook(sql);
this.refreshTable();
JOptionPane.showMessageDialog(this,"刪除成功", "提示",JOptionPane.PLAIN_MESSAGE);
} else if (n == JOptionPane.NO_OPTION) {
return;
}
}
}
else if(e.getSource()==modifyBut){
bookTable.setModel(bookTableModel);
int rowNum=bookTable.getSelectedRow();
if(rowNum<0||rowNum>bookTable.getRowCount()){
JOptionPane.showMessageDialog(this,"未選中", "提示",JOptionPane.PLAIN_MESSAGE);
}
else{
@SuppressWarnings("unused")
ModifyBook modifyWin=new ModifyBook(this,"修改信息",true,bookTableModel,rowNum);
this.refreshTable();
}
}
}
public void refreshTable(){
BookTableModel searchBook;
try {
searchBook = new BookTableModel("SELECT * FROM book_info");
bookTable.setModel(searchBook);
bookTableModel=searchBook;
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
BookTableModel.java
package librarySystem;
import java.sql.*;
import java.util.*;
/*
* 圖書表模型
* */
import javax.swing.table.*;
@SuppressWarnings("serial")
public class BookTableModel extends AbstractTableModel{
//表的元素
private Vector<Vector<String>> rowData;
private Vector<String> colName;
// 數(shù)據(jù)庫
private PreparedStatement stmt;
private ResultSet result;
public BookTableModel(String sql) throws SQLException{
this.initData(sql);
}
public BookTableModel() throws SQLException{
this.initData("SELECT * FROM book_info");
}
public void initData(String sql) throws SQLException{
setRowData(new Vector<Vector<String>>());
setColName(new Vector<String>());
getColName().add("書號(hào)");
getColName().add("書名");
getColName().add("作者");
getColName().add("出版社");
getColName().add("出版時(shí)間");
getColName().add("價(jià)格");
/*
* 數(shù)據(jù)庫的導(dǎo)入
* */
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url= "jdbc:mysql://localhost:3306/device";
String user="root";
String password="zjq1314520";
Connection con=DriverManager.getConnection(url,user,password);
stmt = con.prepareStatement(sql);
result=stmt.executeQuery();
importSQL();
}
void importSQL() throws SQLException{
// TODO Auto-generated method stub
@SuppressWarnings("unused")
boolean signNull=true;
while(result.next()){
Vector<String> item=new Vector<String>();
for(int i=1;i<7;i++){
item.add(result.getString(i));
}
getRowData().add(item);
signNull=false;
}
result.close();
}
@Override
public int getColumnCount() {//得到列數(shù)
// TODO Auto-generated method stub
return this.colName.size();
}
@Override
public int getRowCount() {//得到行數(shù)
// TODO Auto-generated method stub
return this.rowData.size();
}
@Override
public Object getValueAt(int row, int col) {//得到某行某列的數(shù)據(jù)
// TODO Auto-generated method stub
return (this.rowData.get(row)).get(col);
}
@Override
public String getColumnName(int column) {
// TODO Auto-generated method stub
return this.colName.get(column);
}
public Vector<Vector<String>> getRowData() {
return rowData;
}
public void setRowData(Vector<Vector<String>> rowData) {
this.rowData = rowData;
}
public Vector<String> getColName() {
return colName;
}
public void setColName(Vector<String> colName) {
this.colName = colName;
}
public void addBook(String sql){
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// initData("SELECT * FROM book_info");
}
public void deleteBook(String sql){
try {
stmt.executeUpdate(sql);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
AddBookDialog.java
package librarySystem;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
@SuppressWarnings("serial")
public class AddBookDialog extends JDialog implements ActionListener{
private JLabel bookNumLabel;
private JLabel bookNameLabel;
private JLabel bookWriterLabel;
private JLabel bookPublishLabel;
private JLabel bookPriceLabel;
private JLabel bookTimeLabel;
private JTextField bookNumText;
private JTextField bookNameText;
private JTextField bookWriterText;
private JTextField bookPublishText;
private JTextField bookPriceText;
private JTextField bookTimeText;
private JButton submitBut;
private JButton cancelBut;
public AddBookDialog(Frame owner,String title,boolean model){
//父窗口,窗口名,是否是模式窗口
super(owner,title,model);
bookNumLabel=new JLabel("書 號(hào):");
bookNameLabel=new JLabel("書 名:");
bookWriterLabel=new JLabel("作 者:");
bookPublishLabel=new JLabel("出版社:");
bookPriceLabel=new JLabel("價(jià) 格:");
bookTimeLabel=new JLabel("出版時(shí)間:");
bookNumText=new JTextField(10);
bookNameText=new JTextField(10);
bookWriterText=new JTextField(10);
bookPublishText=new JTextField(10);
bookPriceText=new JTextField(10);
bookTimeText=new JTextField(9);
submitBut=new JButton("確認(rèn)");
cancelBut=new JButton("取消");
submitBut.addActionListener(this);
cancelBut.addActionListener(this);
this.setBounds(350,150,400,260);
this.setResizable(false);
this.setLayout(new BorderLayout());
initLayout();
}
public void initLayout(){
Container[] con1=new Container[6];
for(int i=0;i<6;i++) con1[i]=new Container();
con1[0].setLayout(new FlowLayout());
con1[0].add(bookNumLabel);
con1[0].add(bookNumText);
con1[1].setLayout(new FlowLayout());
con1[1].add(bookNameLabel);
con1[1].add(bookNameText);
con1[2].setLayout(new FlowLayout());
con1[2].add(bookWriterLabel);
con1[2].add(bookWriterText);
con1[3].setLayout(new FlowLayout());
con1[3].add(bookPublishLabel);
con1[3].add(bookPublishText);
con1[4].setLayout(new FlowLayout());
con1[4].add(bookPriceLabel);
con1[4].add(bookPriceText);
con1[5].setLayout(new FlowLayout());
con1[5].add(bookTimeLabel);
con1[5].add(bookTimeText);
Container con2=new Container();
con2.setLayout(new BorderLayout());
con2.add(con1[0],BorderLayout.NORTH);
con2.add(con1[1],BorderLayout.CENTER);
con2.add(con1[2],BorderLayout.SOUTH);
Container con3=new Container();
con3.setLayout(new BorderLayout());
con3.add(con1[3],BorderLayout.NORTH);
con3.add(con1[4],BorderLayout.CENTER);
con3.add(con1[5],BorderLayout.SOUTH);
Container con4=new Container();
con4.setLayout(new FlowLayout());
con4.add(submitBut);
con4.add(cancelBut);
Container con5=new Container();
con5.setLayout(new BorderLayout());
con5.add(con2,BorderLayout.NORTH);
con5.add(con3,BorderLayout.CENTER);
con5.add(con4,BorderLayout.SOUTH);
this.add(con5,BorderLayout.CENTER);
this.validate();
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==submitBut){
if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
//System.out.println("輸入失敗");
JOptionPane.showMessageDialog(this,"輸入不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
}
else{
//System.out.println("輸入成功");
String sql="insert into "
+ "book_info(book_num,book_name,book_writer,publish_house,book_price,publish_time)"
+ "values('"+bookNumText.getText()+"','"+bookNameText.getText()+"','"+bookWriterText.getText()+"','"+bookPublishText.getText()+"','"+bookPriceText.getText()+"','"+bookTimeText.getText()+"')";
try {
BookTableModel book=new BookTableModel();
book.addBook(sql);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
JOptionPane.showMessageDialog(this,"添加成功", "提示",JOptionPane.PLAIN_MESSAGE);
this.setVisible(false);
}
}
if(e.getSource()==cancelBut){
this.setVisible(false);
}
}
}
ModifyBook.java
package librarySystem;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
@SuppressWarnings("serial")
public class ModifyBook extends JDialog implements ActionListener{
private JLabel bookNumLabel;
private JLabel bookNameLabel;
private JLabel bookWriterLabel;
private JLabel bookPublishLabel;
private JLabel bookPriceLabel;
private JLabel bookTimeLabel;
private JTextField bookNumText;
private JTextField bookNameText;
private JTextField bookWriterText;
private JTextField bookPublishText;
private JTextField bookPriceText;
private JTextField bookTimeText;
private JButton submitBut;
private JButton cancelBut;
private BookTableModel bookModel;
private int rowNum;
public ModifyBook(Frame owner,String title,boolean type,BookTableModel model,int row){
super(owner,title,type);
bookModel=model;
rowNum=row;
bookNumLabel=new JLabel("書 號(hào):");
bookNameLabel=new JLabel("書 名:");
bookWriterLabel=new JLabel("作 者:");
bookPublishLabel=new JLabel("出版社:");
bookPriceLabel=new JLabel("價(jià) 格:");
bookTimeLabel=new JLabel("出版時(shí)間:");
bookNumText=new JTextField(10);
bookNameText=new JTextField(10);
bookWriterText=new JTextField(10);
bookPublishText=new JTextField(10);
bookPriceText=new JTextField(10);
bookTimeText=new JTextField(9);
submitBut=new JButton("確認(rèn)修改");
cancelBut=new JButton("取消");
submitBut.addActionListener(this);
cancelBut.addActionListener(this);
this.setBounds(350,150,400,260);
this.setResizable(false);
this.setLayout(new BorderLayout());
this.setValue();
this.initLayout();
}
public void initLayout(){
Container[] con1=new Container[6];
for(int i=0;i<6;i++) con1[i]=new Container();
con1[0].setLayout(new FlowLayout());
con1[0].add(bookNumLabel);
con1[0].add(bookNumText);
con1[1].setLayout(new FlowLayout());
con1[1].add(bookNameLabel);
con1[1].add(bookNameText);
con1[2].setLayout(new FlowLayout());
con1[2].add(bookWriterLabel);
con1[2].add(bookWriterText);
con1[3].setLayout(new FlowLayout());
con1[3].add(bookPublishLabel);
con1[3].add(bookPublishText);
con1[4].setLayout(new FlowLayout());
con1[4].add(bookPriceLabel);
con1[4].add(bookPriceText);
con1[5].setLayout(new FlowLayout());
con1[5].add(bookTimeLabel);
con1[5].add(bookTimeText);
Container con2=new Container();
con2.setLayout(new BorderLayout());
con2.add(con1[0],BorderLayout.NORTH);
con2.add(con1[1],BorderLayout.CENTER);
con2.add(con1[2],BorderLayout.SOUTH);
Container con3=new Container();
con3.setLayout(new BorderLayout());
con3.add(con1[3],BorderLayout.NORTH);
con3.add(con1[4],BorderLayout.CENTER);
con3.add(con1[5],BorderLayout.SOUTH);
Container con4=new Container();
con4.setLayout(new FlowLayout());
con4.add(submitBut);
con4.add(cancelBut);
Container con5=new Container();
con5.setLayout(new BorderLayout());
con5.add(con2,BorderLayout.NORTH);
con5.add(con3,BorderLayout.CENTER);
con5.add(con4,BorderLayout.SOUTH);
this.add(con5,BorderLayout.CENTER);
this.validate();
this.setVisible(true);
}
public void setValue(){
this.bookNumText.setText((String) bookModel.getValueAt(rowNum, 0));
this.bookNumText.setEditable(false);
this.bookNameText.setText((String) bookModel.getValueAt(rowNum, 1));
this.bookWriterText.setText((String) bookModel.getValueAt(rowNum, 2));
this.bookPublishText.setText((String) bookModel.getValueAt(rowNum, 3));
this.bookTimeText.setText((String) bookModel.getValueAt(rowNum, 4));
this.bookPriceText.setText((String) bookModel.getValueAt(rowNum, 5));
this.validate();
}
@Override
public void actionPerformed(ActionEvent e) {
// System.out.println(bookPriceText.getText());
// TODO Auto-generated method stub
if(e.getSource()==submitBut){
if(bookNumText.getText().equals("")||bookNameText.getText().equals("")||
bookWriterText.getText().equals("")||bookPublishText.getText().equals("")||
bookPriceText.getText().equals("")||bookTimeText.getText().equals("")){
//System.out.println("輸入失敗");
JOptionPane.showMessageDialog(this,"修改不能有空", "提示",JOptionPane.PLAIN_MESSAGE);
}
else{
int n = JOptionPane.showConfirmDialog(null, "確認(rèn)修改嗎?", "確認(rèn)修改框", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
String sql="UPDATE book_info SET book_name ='"+bookNameText.getText()+"', book_writer= '"+bookWriterText.getText()+"',publish_house='"+bookPublishText.getText()+"',book_price='"+bookPriceText.getText()+"',publish_time='"+bookTimeText.getText()+"' WHERE book_num = '"+bookNumText.getText()+"' ";
try {
BookTableModel book=new BookTableModel();
book.addBook(sql);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
JOptionPane.showMessageDialog(this,"修改成功", "提示",JOptionPane.PLAIN_MESSAGE);
this.setVisible(false);
} else if (n == JOptionPane.NO_OPTION) {
return;
}
}
}
if(e.getSource()==cancelBut){
this.setVisible(false);
}
}
}
程序運(yùn)行結(jié)果:主界面:

查詢界面:

添加圖書界面:


修改界面:


刪除操作:


數(shù)據(jù)庫界面:

關(guān)于管理系統(tǒng)的更多內(nèi)容請(qǐng)點(diǎn)擊《管理系統(tǒng)專題》進(jìn)行學(xué)習(xí)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 一個(gè)簡陋的java圖書管理系統(tǒng)
- 圖書管理系統(tǒng)java代碼實(shí)現(xiàn)
- JAVA初級(jí)項(xiàng)目——實(shí)現(xiàn)圖書管理系統(tǒng)
- java實(shí)現(xiàn)圖書管理系統(tǒng)
- java實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
- JAVA實(shí)現(xiàn)圖書管理系統(tǒng)項(xiàng)目
- Java圖書管理系統(tǒng)課程設(shè)計(jì)
- java實(shí)現(xiàn)簡單圖書管理系統(tǒng)
- 配置idea將Java與數(shù)據(jù)庫連接起來實(shí)現(xiàn)一個(gè)簡單的圖書管理系統(tǒng)
相關(guān)文章
使用GSON庫將Java中的map鍵值對(duì)應(yīng)結(jié)構(gòu)對(duì)象轉(zhuǎn)換為JSON
GSON是由Google開發(fā)并開源的實(shí)現(xiàn)Java對(duì)象與JSON之間相互轉(zhuǎn)換功能的類庫,這里我們來看一下使用GSON庫將Java中的map鍵值對(duì)應(yīng)結(jié)構(gòu)對(duì)象轉(zhuǎn)換為JSON的示例:2016-06-06
使用java實(shí)現(xiàn)“釘釘微應(yīng)用免登進(jìn)入某H5系統(tǒng)首頁“功能”
這篇文章主要介紹了用java實(shí)現(xiàn)“釘釘微應(yīng)用,免登進(jìn)入某H5系統(tǒng)首頁“功能”,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
使用Java通過OAuth協(xié)議驗(yàn)證發(fā)送微博的教程
這篇文章主要介紹了使用Java通過OAuth協(xié)議驗(yàn)證發(fā)送微博的教程,使用到了新浪微博為Java開放的API weibo4j,需要的朋友可以參考下2016-02-02
SpringBoot修改子模塊Module的jdk版本的方法 附修改原因
這篇文章主要介紹了SpringBoot修改子模塊Module的jdk版本的方法 附修改原因,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
java8?Stream大數(shù)據(jù)量List分批處理切割方式
這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制
這篇文章主要介紹了Spring如何基于xml實(shí)現(xiàn)聲明式事務(wù)控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

