亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實現(xiàn)迷你圖書管理系統(tǒng)案例全程

 更新時間:2022年12月13日 09:19:05   作者:Java?Fans  
這篇文章主要為大家詳細介紹了如何利用java語言實現(xiàn)簡單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

b872f203ebb24b888cc7e36c41fa60d6.jpeg

?

項目需求

為某圖書館開發(fā)一個迷你圖書管理系統(tǒng),實現(xiàn)圖書的管理,包括如下功能:

(1)新增圖書

(2)查看圖書

(3)刪除圖書

(4)借出圖書

(5)歸還圖書

(6)退出圖書系統(tǒng)

覆蓋知識

程序基本概念、數(shù)據(jù)類型、流程控制、順序、選擇 、循環(huán)、跳轉(zhuǎn)語句、變量、類、方法、數(shù)據(jù)庫、JDBC等相關(guān)知識

掌握數(shù)據(jù)庫、JDBC、三層架構(gòu)等相關(guān)知識。

掌握Druid連接池、Apache的DBUtils使用 。

開發(fā)思路

(1)明確需求

(2)編碼順序

1)、添加需要的jar包到項目中,將lib文件夾中的jar文件通過鼠標右單擊選擇Build Path的方式添加到你設(shè)置的eatJar文件目錄里。

?

2)、創(chuàng)建database.properties文件,用來配置注冊驅(qū)動和數(shù)據(jù)庫連接對象的相關(guān)數(shù)據(jù)。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java221804
username=root
password=huanghuang
initialSize=10
maxActive=30
maxIdle=5
maxWait=3000

3)、添加需要的工具類DBUtils類

package cn.book.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DBUtils {
	private static DruidDataSource druidDataSource;
	static {
		Properties properties = new Properties();
		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static DataSource getDataSource(){
		return druidDataSource;
	}
}

4)、創(chuàng)建數(shù)據(jù)表:book表

CREATE DATABASE IF NOT EXISTS `java221804`;
CREATE TABLE IF NOT EXISTS book(
	`name` VARCHAR(20),
	`state` INT,
	`date` INT,
	`count` INT
);

?

5)、編寫book類,包含get/set方法、有參/無參構(gòu)造、toString方法等

package cn.book.entity;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Book implements Serializable {
	//定義屬性
	private String name;
	private int state;
	private int date;
	private int count;
	//添加無參構(gòu)造
	public Book() {
		super();
	}
	//添加有參構(gòu)造
	public Book(String name, int state, int date, int count) {
		super();
		this.name = name;
		this.state = state;
		this.date = date;
		this.count = count;
	}
	//添加get/set方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public int getDate() {
		return date;
	}
	public void setDate(int date) {
		this.date = date;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public String toString() {
		return "Book [name=" + name + ", state=" + state + ", date=" + date
				+ ", count=" + count + "]";
	}
}

6)、數(shù)據(jù)訪問層DAO層的接口和實現(xiàn)類的增刪改查方法的編寫

7)、服務(wù)層Service層的接口和實現(xiàn)類的增刪改查方法的編寫

8)、最后完成視圖層View層測試類的編寫

開發(fā)步驟

1、數(shù)據(jù)初始化?

2、BookDaoImpl類中的部分重要方法

創(chuàng)建 QueryRunner 對象

private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

增加圖書的方法

	public int insert(Book book) {
		String sql = "insert into book(name,state,date,count) values(?,?,?,?);";
		Object[] args = { book.getName(), book.getState(), book.getDate(),
				book.getCount() };
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

更改圖書信息的方法

	public int update(Book book) {
		String sql="update book set state=?,date=?,count=? where name=?; ";
		Object[] args={book.getState(),book.getDate(),book.getCount(),book.getName()};
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

查詢?nèi)繄D書的方法

	public List<Book> selectAll() {
		String sql = "SELECT * FROM book;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Book>(Book.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

歡迎使用迷你圖書管理器方法

新增圖書方法

查看圖書方法

刪除圖書方法

借出圖書方法

歸還圖書方法

退出圖書方法

歡迎首界面:

	public static void useBookSystem() {
		// 輸出歡迎菜單
		System.out.println("歡迎使用迷你圖書管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增圖書");
		System.out.println("2.查看圖書");
		System.out.println("3.刪除圖書");
		System.out.println("4.借出圖書");
		System.out.println("5.歸還圖書");
		System.out.println("6.退出圖書");
		System.out.println("-------------------------");
	}

全部代碼展示

1、Book類

package cn.book.entity;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Book implements Serializable {
	//定義屬性
	private String name;
	private int state;
	private int date;
	private int count;
	//添加無參構(gòu)造
	public Book() {
		super();
	}
	//添加有參構(gòu)造
	public Book(String name, int state, int date, int count) {
		super();
		this.name = name;
		this.state = state;
		this.date = date;
		this.count = count;
	}
	//添加get/set方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getState() {
		return state;
	}
	public void setState(int state) {
		this.state = state;
	}
	public int getDate() {
		return date;
	}
	public void setDate(int date) {
		this.date = date;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public String toString() {
		return "Book [name=" + name + ", state=" + state + ", date=" + date
				+ ", count=" + count + "]";
	}
}

2、DBUtils類

(使用連接池DruidDataSource、Apache的知識)

package cn.book.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class DBUtils {
	private static DruidDataSource druidDataSource;
	static {
		Properties properties = new Properties();
		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static DataSource getDataSource(){
		return druidDataSource;
	}
}

3、數(shù)據(jù)訪問層的BookDao接口

package cn.book.dao;
import java.util.List;
import cn.book.entity.Book;
public interface BookDao {
	// 增
	public int insert(Book book);
	// 刪
	public int delete(String name);
	// 改
	public int update(Book book);
	// 查一個
	public Book select(String name);
	// 查全部
	public List<Book> selectAll();
}

4、數(shù)據(jù)訪問層的BookDaoImpl類

package cn.book.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import cn.book.dao.BookDao;
import cn.book.entity.Book;
import cn.book.utils.DBUtils;
public class BookDaoImpl implements BookDao {
	private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());
	@Override
	public int insert(Book book) {
		String sql = "insert into book(name,state,date,count) values(?,?,?,?);";
		Object[] args = { book.getName(), book.getState(), book.getDate(),
				book.getCount() };
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
	@Override
	public int delete(String name) {
		String sql="delete from book where name=?;";
		try {
			return queryRunner.update(sql, name);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
	@Override
	public int update(Book book) {
		String sql="update book set state=?,date=?,count=? where name=?; ";
		Object[] args={book.getState(),book.getDate(),book.getCount(),book.getName()};
		try {
			return queryRunner.update(sql, args);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
	@Override
	public Book select(String name) {
		String sql = "select * from book where name=?;";
		try {
			return queryRunner.query(sql,new BeanHandler<Book>(Book.class), name);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	@Override
	public List<Book> selectAll() {
		String sql = "SELECT * FROM book;";
		try {
			return queryRunner.query(sql, new BeanListHandler<Book>(Book.class) );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

5、服務(wù)層的BookService接口

package cn.book.service;
import java.util.List;
import cn.book.entity.Book;
public interface BookService {
	// 增
	public int insertBook(Book book);
	// 刪
	public int deleteBook(String name);
	// 改
	public int updateBook(Book book);
	// 查一個
	public Book selectBook(String name);
	// 查全部
	public List<Book> selectAllBooks();
}

6、服務(wù)層的BookServiceImpl類

package cn.book.service.impl;
import java.util.List;
import cn.book.dao.impl.BookDaoImpl;
import cn.book.entity.Book;
import cn.book.service.BookService;
public class BookServiceImpl implements BookService {
	BookDaoImpl bookDaoImpl = new BookDaoImpl();
	@Override
	public int insertBook(Book book) {
		if (bookDaoImpl.select(book.getName()) == null) {
			return bookDaoImpl.insert(book);
		}
		return 0;
	}
	@Override
	public int deleteBook(String name) {
		if (bookDaoImpl.select(name) != null) {
			return bookDaoImpl.delete(name);
		}
		return 0;
	}
	@Override
	public int updateBook(Book book) {
		if (bookDaoImpl.select(book.getName()) != null) {
			return bookDaoImpl.update(book);
		}
		return 0;
	}
	@Override
	public Book selectBook(String name) {
		bookDaoImpl.select(name);
		return null;
	}
	@Override
	public List<Book> selectAllBooks() {
		List<Book> listBooks = bookDaoImpl.selectAll();
		return listBooks;
	}
}

7、視圖層BookMgr測試類

package cn.book.view;
import java.util.List;
import java.util.Scanner;
import cn.book.entity.Book;
import cn.book.service.impl.BookServiceImpl;
public class BookMgr {
	// 定義一個靜態(tài)的Scanner
	static Scanner inputsc = new Scanner(System.in);
	// 是否退出系統(tǒng),false代表退出系統(tǒng)
	static boolean flag = true;
	static int num = -1;
	static BookServiceImpl bookServiceImpl = new BookServiceImpl();
	// 歡迎使用迷你圖書管理器方法
	public static void useBookSystem() {
		// 輸出歡迎菜單
		System.out.println("歡迎使用迷你圖書管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增圖書");
		System.out.println("2.查看圖書");
		System.out.println("3.刪除圖書");
		System.out.println("4.借出圖書");
		System.out.println("5.歸還圖書");
		System.out.println("6.退出圖書");
		System.out.println("-------------------------");
	}
	// 新增圖書方法
	public static void addBook() {
		System.out.println("-->新增圖書\n");
		System.out.println("請輸入圖書名稱:");
		String bookName = inputsc.next();
		Book book = new Book(bookName, 0, 0, 0);
		// 向數(shù)據(jù)庫添加圖書
		int num = bookServiceImpl.insertBook(book);
		System.out.println();
		if (num != 0) {
			System.out.println("新增《" + bookName + "》成功!");
		} else {
			System.out.println("新增《" + bookName + "》失敗!");
		}
		System.out.println("*****************************************");
	}
	// 查看圖書方法
	public static void lookBook() {
		System.out.println("-->查看圖書\n");
		System.out.println("序號\t狀態(tài)\t名稱\t借出日期\t借出次數(shù)");
		// 獲取數(shù)據(jù)庫全部圖書
		List<Book> books = bookServiceImpl.selectAllBooks();
		for (int i = 0; i < books.size(); i++) {
			String BookState = (books.get(i).getState() == 0) ? "可借閱" : "已借出";
			String dateStr = (books.get(i).getDate() == 0) ? "" : (books.get(i)
					.getDate() + "日");
			System.out.println((i + 1) + "\t" + BookState + "\t"
					+ books.get(i).getName() + "\t" + dateStr + "\t"
					+ books.get(i).getCount() + "次");
		}
		System.out.println("*****************************************");
	}
	// 刪除圖書方法
	public static void delBook() {
		System.out.println("-->刪除圖書\n");
		System.out.println("請輸入要刪除圖書的名稱:");
		String deleteBook = inputsc.next();
		// 從數(shù)據(jù)庫中查找此圖書
		Book delBook = bookServiceImpl.selectBook(deleteBook);
		boolean flag3 = false;
		// 刪除的圖書存在、狀態(tài)處于可借閱狀態(tài)
		if (delBook.getName() != null && deleteBook.equals(delBook.getName())
				&& delBook.getState() == 0) {
			flag3 = true;
			int num = bookServiceImpl.deleteBook(delBook.getName());
			if (num != 0) {
				System.out.println("圖書刪除成功!");
			} else {
				System.out.println("圖書刪除失?。?);
			}
		} else if (delBook.getName() != null
				&& deleteBook.equals(delBook.getName())
				&& delBook.getState() == 1) {
			flag3 = true;
			System.out.println("該圖書已被借出,目前無法刪除!");
		}
		if (!flag3) {
			System.out.println("沒有找到匹配信息!");
		}
		System.out.println("*****************************************");
	}
	// 借出圖書方法
	public static void lendBook() {
		System.out.println("-->借出圖書\n");
		System.out.print("請輸入圖書名稱:");
		String want = inputsc.next(); // 要借出的圖書名稱
		// 從數(shù)據(jù)庫中查找此圖書
		Book wantBook = bookServiceImpl.selectBook(want);
		if (wantBook == null) {
			System.out.println("沒有找到匹配信息!");
		} else {
			if (want.equals(wantBook.getName()) && wantBook.getState() == 0) { // 找到匹配可借
				wantBook.setState(1); // 將此圖書置于借出狀態(tài)
				System.out.print("請輸入借出日期:");
				int inputscData = inputsc.nextInt();
				wantBook.setDate(inputscData);
				while (wantBook.getDate() < 1 || wantBook.getDate() > 31) { // 當輸入借出的日期不滿足1-31時
					System.out.println("必須輸入大于等于1且小于等于31的數(shù)字,請重新輸入:");
					inputscData = inputsc.nextInt();
					wantBook.setDate(inputscData);
				}
				wantBook.setCount(wantBook.getCount() + 1);
				// 更新書本最新信息
				int num = bookServiceImpl.updateBook(wantBook);
				if (num != 0) {
					System.out.println("借出《" + want + "》成功!");
				} else {
					System.out.println("借出《" + want + "》失??!");
				}
			} else if (want.equals(wantBook.getName())
					&& wantBook.getState() == 1) { // 找到匹配已被借出
				System.out.println("《" + want + "》已被借出!");
			}
		}
		System.out.println("*****************************************");
	}
	// 歸還圖書方法
	public static void returnBook() {
		System.out.println("-->歸還圖書\n");
		int charge = 0; // 租金
		System.out.print("請輸入歸還圖書名稱:");
		String back = inputsc.next();
		// 從數(shù)據(jù)庫中查找此圖書
		Book backBook = bookServiceImpl.selectBook(back);
		if (backBook == null) {
			System.out.println("沒有找到匹配信息!");
		} else {
			if (back.equals(backBook.getName()) && backBook.getDate() == 1) {// 找到匹配
				backBook.setDate(0); // 將借閱狀態(tài)修改為可借閱
				System.out.print("請輸入歸還日期:");
				int redate = inputsc.nextInt();
				while (redate < backBook.getDate() || redate > 31) { //
					// 歸還日期不能小于借出日期,也不能大于31
					if (redate < backBook.getDate()) {
						System.out.println("歸還日期不能小于借出日期,請重新輸入:");
					} else {
						System.out.println("一個月只有31天,請重新輸入:");
					}
					redate = inputsc.nextInt();
				}
				charge = redate - backBook.getDate();
				// 更新書本最新信息
				int num = bookServiceImpl.updateBook(backBook);
				if (num != 0) {
					System.out.println("\n歸還《" + back + "》成功!");
					System.out.println("借出日期為:" + (backBook.getDate() + 1)
							+ "日");
					System.out.println("歸還日期為:" + redate + "日");
					System.out.println("應(yīng)付租金(元):" + charge);
					backBook.setDate(0);
				} else {
					System.out.println("借出《" + back + "》失敗!");
				}
			} else if (back.equals(backBook.getName())
					&& backBook.getState() == 0) {// 找到匹配但沒有借出
				System.out.println("該圖書沒有被借出!無法進行歸還操作。");
			}
		}
		System.out.println("*****************************************");
	}
	// 操作
	public static void runTest() {
		// 循環(huán)操作
		do {
			// 定義一個BookMethod操作類,將操作方法定義在BookMethod類中,然后調(diào)用
			// 歡迎菜單方法
			BookMgr.useBookSystem();
			System.out.println("請選擇:");
			int choose = inputsc.nextInt();
			switch (choose) {
			case 1:
				// 新增圖書
				BookMgr.addBook();
				break;
			case 2:
				// 查看圖書
				BookMgr.lookBook();
				break;
			case 3:
				// 刪除圖書
				BookMgr.delBook();
				break;
			case 4:
				// 借出圖書
				BookMgr.lendBook();
				break;
			case 5:
				// 歸還圖書
				BookMgr.returnBook();
				break;
			case 6:
				// 退出圖書
				flag = false;
				break;
			default:
				flag = false;
				break;
			}
			if (flag) {
				System.out.println("輸入0返回:");
				num = inputsc.nextInt();
			} else {
				break;
			}
		} while (num == 0);
		System.out.println("謝謝使用!");
	}
	public static void main(String[] args) {
		BookMgr.runTest();
	}
}

到此這篇關(guān)于Java實現(xiàn)迷你圖書管理系統(tǒng)案例全程的文章就介紹到這了,更多相關(guān)Java圖書管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合mybatis使用Druid做連接池的方式

    SpringBoot整合mybatis使用Druid做連接池的方式

    這篇文章主要介紹了SpringBoot整合mybatis使用Druid做連接池的方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java?Stream流常見操作方法(反射,類加載器,類加載,反射)

    java?Stream流常見操作方法(反射,類加載器,類加載,反射)

    這篇文章主要介紹了java?Stream流常見操作方法(反射,類加載器,類加載,反射),文章圍繞主題展開詳細的內(nèi)容介紹,展開詳細的內(nèi)容介紹,具有一定參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java png圖片修改像素rgba值的操作

    Java png圖片修改像素rgba值的操作

    這篇文章主要介紹了Java png圖片修改像素rgba值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    JAVA面試題之緩存擊穿、緩存穿透、緩存雪崩的三者區(qū)別

    當服務(wù)器QPS比較高,并且對數(shù)據(jù)的實時性要求不高時,往往會接入緩存以達到快速Response、降低數(shù)據(jù)庫壓力的作用,常用來做緩存的中間件如Redis等。本文主要介紹了JAVA面試時??嫉木彺鎿舸?、穿透、雪崩場景三者區(qū)別,有興趣的小伙伴可以看一下
    2021-11-11
  • Spring項目里將SQL語句寫在.sql文件中的方法

    Spring項目里將SQL語句寫在.sql文件中的方法

    這篇文章主要介紹了Spring項目里如何將SQL語句寫在.sql文件中的方法,文中給出了詳細的介紹和示例代碼,相信對大家的學習或者工作具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Java enum實現(xiàn)自增賦值方式

    Java enum實現(xiàn)自增賦值方式

    這篇文章主要介紹了Java enum實現(xiàn)自增賦值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解

    通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解

    這篇文章主要介紹了通過idea創(chuàng)建Spring Boot項目并配置啟動過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • 解決javaBean規(guī)范導(dǎo)致json傳參首字母大寫將永遠獲取不到問題

    解決javaBean規(guī)范導(dǎo)致json傳參首字母大寫將永遠獲取不到問題

    這篇文章主要介紹了解決javaBean規(guī)范導(dǎo)致json傳參首字母大寫將永遠獲取不到問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能

    MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能

    這篇文章主要介紹了MyBatis實現(xiàn)動態(tài)查詢、模糊查詢功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • java random.nextInt的坑及解決

    java random.nextInt的坑及解決

    這篇文章主要介紹了java random.nextInt的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論