1. 程式人生 > >Java+MySQL圖書管理系統

Java+MySQL圖書管理系統

正在學習Java就花了兩個星期寫了一個1000行左右的程式碼,仿照大一上學期老師讓我們在控制檯下寫的圖書管理系統系統,用Java容器和資料庫寫一個帶圖形介面的圖書管理系統,一開始以為可以寫個兩三千行,結果寫到1094行就結束了,實訓馬上開始,所以就不對這份程式碼進行擴充。

功能介紹:選單----常用功能----個人中心----系統維護----幫助                         一級選單

                         ----瀏覽圖書    ----我的空間----後臺管理 ----幫助資訊二級選單

 ----查詢圖書    ----登入           -

----註冊

       -

                                                                       -後臺->----圖書管理----賬戶中心 ----幫助

                                                                                   ----增加圖書----註冊新管理員     ----幫助資訊

   ----刪除圖書----刪除管理員

        ----刪除使用者

——————————————————————————————————————————

開始介面的選單:

——————————————————————————————————————————

進入後臺的選單:                                                   

——————————————————————————————————————————

開始介面:

——————————————————————————————————————————

後臺介面:

——————————————————————————————————————————

基本思路是,初始化介面——佈局容器——新增容器——監聽動作——控制動作

這裡只列出部分程式碼,介紹一下我寫Java時遇到的問題和寫程式碼的心得

程式碼框架:

import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.awt.*;
public class menu extends JFrame implements ActionListener {//繼承了JFrame
	//定義各個引數
	public menu(/*傳遞引數*/) {
		init();
		setLocation(250, 70);
		setVisible(true);
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
	}

	public void init() {
	    //初始化引數
	}

	public void actionPerformed(ActionEvent e) {
		try {//implements ActionListener後要重寫actionPerformed
		//根據動作執行相應程式碼

		} catch (Exception ee) {
			ee.printStackTrace();//丟擲異常
		}
	}
}
主介面:menu.java

import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.awt.*;
public class menu extends JFrame implements ActionListener {
	JMenuBar menubar = new JMenuBar();
	JMenu meArray[] = { new JMenu("常用功能"), new JMenu("個人中心"), new JMenu("系統維護"), new JMenu("幫助") };
	JMenuItem item[] = { new JMenuItem("瀏覽圖書",new ImageIcon("image/browse.jpg")), new JMenuItem("查詢圖書",new ImageIcon("image/query.jpg")), new JMenuItem("我的空間",new ImageIcon("image/user.jpg")),new JMenuItem("登入",new ImageIcon("image/login.jpg")), new JMenuItem("註冊",new ImageIcon("image/key.jpg")),
			new JMenuItem("後臺管理",new ImageIcon("image/admin.jpg")), new JMenuItem("幫助資訊",new ImageIcon("image/help.jpg")) };
	gaintb jsp;
	JScrollPane JSP;
	JPanel jpl;
	JLabel bgimg=new JLabel(new ImageIcon("image\\MAIN.jpg"));//開始介面
	String namep=null;
	 CardLayout card=new CardLayout();
	 JPanel cardPanel=new JPanel();
	 JLabel titback=new JLabel("選擇還書名稱");
	 JButton suback=new JButton("還書");
	 JTextField bid=new JTextField();
	 
	 String sql="";
	 connectdt jdbc = new connectdt();//連線資料庫類
		Connection conn = jdbc.conn;
		Statement stmt = jdbc.stmt;
	public menu(String p1) {
		namep=p1;
		init();
		cardPanel.add(bgimg);
		add(cardPanel);
		jsp = new gaintb("books");
		JSP = jsp.rjsp();
		JSP.setBounds(0, 0, 800, 550);
		cardPanel.add(JSP,"browse");
		if(namep!=null){
			zone cp6=new zone(namep);
			jpl=cp6.gainpl();
			suback.setBounds(580, 440, 80, 30);
			titback.setBounds(400, 440, 100, 30);
			bid.setBounds(500, 440, 50, 30);
			jpl.add(suback);
			jpl.add(titback);
			jpl.add(bid);
			suback.addActionListener(this);
			bid.addActionListener(this);
			cardPanel.add(jpl,"zone");
			card.show(cardPanel,"zone");
			if(cp6.gainfine()>0){
				JOptionPane.showMessageDialog(null, "請先交納罰款");
				return;
			}
		}
		setLocation(250, 70);
		setVisible(true);
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
	}

	public void init() {
	    cardPanel.setLayout(card);
		setTitle("圖書管理系統");
		meArray[0].add(item[0]);
		meArray[0].add(item[1]);
		meArray[1].add(item[2]);
		meArray[1].add(item[3]);
		meArray[1].add(item[4]);
		meArray[2].add(item[5]);
		meArray[3].add(item[6]);
		for (int i = 0; i < item.length; i++) {
			item[i].addActionListener(this);
		}

		for (int i = 0; i < meArray.length; i++) {
			menubar.add(meArray[i]);
		}
		setJMenuBar(menubar);
	}

	public void actionPerformed(ActionEvent e) {
		try {
			if (e.getSource() == item[0]) {//瀏覽圖書
				card.show(cardPanel,"browse");
				
			} else if (e.getSource() == item[1]) {//查詢圖書
				new select_borrow(namep);
			} else if (e.getSource() == item[2]) {//空間
				if(namep==null){
					JOptionPane.showMessageDialog(null, "您還未登入呢");
					return;
				}else{
					card.show(cardPanel,"zone");
				}
			} else if (e.getSource() == item[3]) {//登入
				new login("readers","name","code","使用者登入");
				dispose();
			}else if(e.getSource()==item[4]){//註冊
				new user_regist();
			}else if(e.getSource()==item[5]){//後臺
				new login("admindt","username","password","管理員登入");
				dispose();
			}
			else if(e.getSource()==item[6]){//幫助
				new menu_help();
			}else if(e.getSource()==suback){//還書
				
				String temp=bid.getText();
				if(temp.equals("")){
					JOptionPane.showMessageDialog(null, "輸入不能為空");
					return;
				}
				sql="select * from borrow where book='"+temp+"'";
				ResultSet rs = stmt.executeQuery(sql);
				if(!rs.next()){
					JOptionPane.showMessageDialog(null, "輸入不存在");
					return;
				}
				sql="delete from borrow where book='"+temp+"'";
				stmt.executeUpdate(sql);
				sql="update books set STOCK=STOCK+1 where TITLE='"+temp+"';";
				stmt.executeUpdate(sql);
				sql="";
				JOptionPane.showMessageDialog(null, "還書成功");
			}

		} catch (Exception ee) {
			ee.printStackTrace();
		}
	}
}

上面是主選單的完整的程式碼著重介紹佈局思想和動作監聽

在public menu(){ }裡面

setLocation(250, 70);//設定位置,250是從螢幕左邊開始向右移動250畫素,70是從上往下移動70畫素
setVisible(true);//設定視窗可見
setSize(800, 600);//設定視窗大小為800寬600高
setDefaultCloseOperation(EXIT_ON_CLOSE);//設定關閉視窗為關閉所有
setResizable(false);//不可調整視窗大小
init();為初始化函式,用來設定佈局設定個部件在容器的位置,然後將各個部件新增到容器裡。瞭解佈局很重要,佈局格式有FlowLayout(流式佈局),BorderLayout(邊界佈局),GridLayout(網格佈局),CardLayout(卡片佈局)和空佈局,我這裡用到的是空佈局和卡片式佈局,空佈局的特點是可以將各個部件精確定位,以一定格式排列在容器內,佈局方便,容易控制,卡片式佈局特點是每一張卡片互不干擾,我利用這個特點設定了“瀏覽圖書”和“我的空間”,當用戶點選瀏覽圖書時,顯示“browse”這張卡片,當用戶點選我的空間時,顯示“zone”這張卡片。

重寫的actionPerformed函式,裡ActionEvent e引數用來響應使用者點選了哪一個子選單,這裡為什麼說子選單?因為主選單無法響應,我第一次寫監聽的時候就監聽了“個人中心”,結果滑鼠點選時毫無反應,後來才只監聽了子選單。接下來就是連線資料庫獲取表格,因為我寫的13個java檔案裡差不多都用到了資料庫的連線,為了增加程式碼的重用率我將資料的連線單獨寫成了一個類,叫connentdt.java,在使用連線程式碼前,還需要給工程新增額外的jar包(mysql-connector-java-5.1.38-bin.jar)。

連線資料庫類connentdt.java

import java.sql.*;
public class connectdt {//此類為連線資料庫的類
	static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
	static final String DB_URL = "jdbc:mysql://localhost/database";
	static final String USER = "username";
	static final String PASS = "123456";
	String struser = "username", strpass = "password", strtable1 = "admindt", strtable2 = "books",ID="id";
	Connection conn = null;
	Statement stmt = null;

	public connectdt() {
		try {
			Class.forName(JDBC_DRIVER);// 工程要連線額外的jar包
			conn = DriverManager.getConnection(DB_URL, USER, PASS);
			stmt = conn.createStatement();
		} catch (Exception ee) {
			ee.printStackTrace();
		}
	}
}
連線資料庫後,就開始獲取表格,這裡我將圖書內容放在books表裡,那麼如何從資料庫裡獲取表格呢?看如下程式碼,就是從資料庫裡獲取表格的各個資訊
<span style="white-space:pre">			</span>String sql = "select * from " + tb1;
			ResultSet rs = stmt.executeQuery(sql);//執行查詢語句,返回值只能用rs.next()判斷
			ResultSetMetaData rsmd = rs.getMetaData();//結果集的具體資訊
			int column = rs.getMetaData().getColumnCount();//表格列數
			Vector<Object> columnNames = new Vector<Object>(1);
			while (rs.next()) {
				for (int i = 0; i < column; i++) {//獲取除表頭的每一行
					coldata.addElement(rs.getString(i + 1));
					//System.out.println(coldata.get(i));
					//輸出獲取內容,用來除錯
				}
				rowdata.addElement(coldata);//將獲取的每一行新增到另一個數組裡實現二維陣列
				coldata = new Vector<Object>(1);//清空原來的陣列
			}
			

			for (int i = 0; i < column; i++) {//獲取表頭
				columnNames.add(rsmd.getColumnName(i + 1));
				//System.out.println(columnNames.get(i));
			}
			jtable = new JTable(rowdata, columnNames) {//建立表格
				public boolean isCellEditable(int row, int column) {
					return false;/* 表格不允許被編輯 */}
			};
			JSP = new JScrollPane(jtable);
			return JSP;

再介紹一個遇到的問題,我這個系統有個查詢功能,根據輸入資訊查詢相應圖書然後輸出,在輸出的時候,遇到一點小問題,就是動作重複執行時容器會有“殘留”,什麼是殘留呢?看圖吧,第一次我查詢編號為1的圖書


第二次點選查詢編號為1的圖書


第三次在模糊查詢裡查詢出版社關鍵詞裡有“中國”字樣的圖書


不僅僅是“殘留”,整個輸出表的地方像是被糊上一層看不見的“膠”,無法點選選中表格,所以,表格輸出是不可考慮使用的,我立刻想到用卡片式佈局來解決問題,可是我失敗了,因為我無法實現動態增加容器,就是每點選查詢按鈕一次就為容器新增一張卡片,這個我做不到,所以我就想到了使用JTextArea控制元件,在每一次輸出時通過置空內容,我就解決了這個問題。

其他程式碼都和框架類似,所以我不再贅述,幫助部分是用JTree做的,重寫了滑鼠監聽,附圖兩張。


相關推薦

Java+MySQL圖書管理系統

正在學習Java就花了兩個星期寫了一個1000行左右的程式碼,仿照大一上學期老師讓我們在控制檯下寫的圖書管理系統系統,用Java容器和資料庫寫一個帶圖形介面的圖書管理系統,一開始以為可以寫個兩三千行,結果寫到1094行就結束了,實訓馬上開始,所以就不對這份程式碼進行擴充。

基於JAVA圖書管理系統(jsp+mysql+tomcat)

這裡分享一個java web 專案,是一個基於JAVA 的圖書管理系統 本系統使用JSP+MySQL+Tomcat開發完成,由於開發時間過短,功能不甚完善,前臺頁面也不怎麼美觀,但是麻雀雖小,五臟俱全

java簡易圖書管理系統

1.自己做的 package BOOk; public class Book { private String name; private String author; private double price; private int store; private St

基於java圖書管理系統(英文)

OOD大作業 完全按照軟體工程思路製作文件:需求分析-詳細設計-測試-使用者手冊 僅實現基本功能,詳情介紹可以見文件 由於時間很短,這個工程只是個demo,系統和文件都有需要改進的地方(尤其是測試部分),不過可以提供課程完成思路。

Java xml 圖書管理系統-Book類

返回目錄 import java.util.Date; public class Book { private String bookId;//書籍編號 private

php+MySQL圖書管理系統(一)

第一 用到的技術 技術和語言:php + MySQL 開發環境:windows 8.1 開發工具:wampsever + sublime2 開源類庫:PHPExcel 下載地址 第二 需求分析 模組名稱 功能描述 管理員登陸 輸入管理員ID, 密碼; 登

基於java+mysql學生管理系統的實現

前言:因為也不完全是自己做的   我只是在前人的基礎上修改了部分程式碼   添加了資料庫  實現了介面而已   希望對諸位能有所幫助   最後想說一句 ,借鑑就行 但別完全照搬,CSDN賬號只是不定期上而已  好了 不廢話,原始碼和部分實現效果附上: package Fir

圖書管理系統Java + MySQL

(完整程式碼+實訓報告): https://download.csdn.net/download/qq_35793285/10896342 (完整程式碼):   https://pan.baidu.com/s/1B0kV-_nCQ4MkRmPclqaK7A 提取碼

jsp497(CS)小型書店圖書管理系統mysql

jsp 圖書 畢業設計 轉載於www.xmqbysj.com 作者 QQ 97095639 技術實現 開發語言:jsp.框架:MVC.模式:C/S.數據庫:mysql.開發工具:myeclipse eclipse.論文字數:1萬左右. 畢業設

c語言小項目-使用mysql數據庫的圖書管理系統

ble n) 工具 author 是否 錄取 sql mysql window 行數據 VS2013通過MySQL方式連接到MySQL MySQL官網上C++的API有兩個。一個是很成熟的mysql++,另一個是MySQL Connector/C++,近兩年才出的,

java圖書管理系統實現

題目:編寫java程式碼,實現對圖書的管理,包括增刪改查、借閱及歸還。 實現程式碼如下: import java.util.Scanner; public class BookTest { public static void main(String[] args) { Sca

關於Java如何獲取系統時間,並用它來做一個圖書管理系統

首先,這個圖書管理系統自定義一個final常量不能更改,用作圖書館借閱歸還的最晚時間,也可以自定義歸還時間。 然後,先獲取使用者借閱時間,再用SimpleDataFormata元件來格式化日期(yyyy-MM-dd),再將獲取的時間加在系統的時間上得到使用者自定義的歸還時間。 最後,再通過方

java --圖書管理系統 增刪改查

import java.util.Scanner; public class Task1 { public static void main(String[] args) { int id=0;//初始化id。 String[][] books = new String[3][5

Java 圖書管理系統

剛開始接觸Java,寫一個圖書管理系統熟悉熟悉介面和資料庫的操作。剛開始寫介面的時候感覺介面這塊比較雜,好多都不會。比如給容器新增背景圖片,新增到容器中,再將容器加入面板後老是變成很小的一個圖片,在網上找了好多部落格都沒能解決,後來無意中才解決了這個問題。資料庫也遇到過問題,最後用exe

手把手教你做jsp servlet mysql實現的圖書管理系統附帶視訊開發教程和完整原始碼

上一個教程我們做的是對資料庫框架底層原理的講解,然後教大家做了一個自己的資料庫框架,這次我們做的這個圖書管理系統就是用我們上個教程自己寫的資料庫框架,整個專案做完框架執行的很穩定,沒有出現任何問題。如果你還沒有學習我們的那個資料庫框架教程的話我建議你還是先去學習那個資料庫框架的教程,地址是:ht

Qt Project Qt+MySQL實現圖書管理系統

做這個專案之前我沒接觸過Qt 我也沒做過專案,如果貪吃蛇算專案的話。。我只是粗略的看完了C++ Primer。。 我是照著一篇SQL+JAVA的思路合著Qt快速上手完成的專案合著老師的要求 1.需求分析 1.1使用者需求 面向三類使用者:超級管理員、管理員、學生 超級管理員可對學生、

Java圖書管理系統

Java圖書管理系統 設計人:wangyunpeng_bio 專案需求 隨著計算機的普及和應用水平的提高,經過考察比較,決定利用自己的Java知識開發小型的圖書管理系統,方便圖書的管理。 圖書管理系統是典型的資訊管理系統。本次作業利用JAVA開發工具Eclipse和MySQ

Java圖書管理系統練習程式(六)

本部分內容,主要實現對資料庫的基本操作,並更換資料訪問部分,將原來的使用檔案儲存更換為資料庫進行資料的儲存 在專案中,要引入mysql的驅動程式 在專案根目錄下,建立lib資料夾,將mysql的驅動程式複製到lib目錄下,然後在專案中引用 一、建立資料庫與資料表 資料庫名稱:d

Java圖書管理系統練習程式(五)

Java圖書管理系統練習程式(五) 本部分內容,主要實現對檔案讀寫操作的修改,使用泛型類的方式,實現對不同檔案進行相同的讀寫操作。 一.建立書籍資訊類 1.首先在bean包中,建立Book類,描述書籍的相關資訊,程式碼如下: package sky.book.bean; imp

Java圖書管理系統練習程式(四)

Java圖書管理系統練習程式(四) 本部分主要介紹List的基本操作與Java中泛型的使用。 一、Java中泛型的使用 泛型,即“引數化型別”。一提到引數,最熟悉的就是定義方法時有形參,然後呼叫此方法時傳遞實參。那麼引數化型別怎麼理解呢?顧名思義,就是將型別由原來的具體的型別引數化,類似