Java開發(fā)實(shí)例之圖書管理系統(tǒng)的實(shí)現(xiàn)
聲明:本項(xiàng)目不涉及web操作,但需要了解java的基本語法和MySQL的基本語句運(yùn)用。
一、項(xiàng)目分布

- db.sql類:SQL語句,在控制臺(tái)執(zhí)行,用于建立圖書管理庫(kù)。
- Book類: 定義了書的一些屬性(書編號(hào),書名,作者,價(jià)格,分類,狀態(tài))并且寫了屬性的get、set、toSting方法。
- User類:定義了用戶的一些屬性(用戶編號(hào),用戶名,密碼和是否為管理員的標(biāo)記),并且寫了屬性的get、set、toSting方法。
- NormalUser類:描述普通用戶,實(shí)現(xiàn)普通用戶的構(gòu)造方法,并打印普通用戶的操作界面。
- Admin類:描述管理員,實(shí)現(xiàn)管理員的構(gòu)造方法并打印管理員的操作界面。
- DBUtil類:封裝與數(shù)據(jù)庫(kù)建立連接的操作(主要用JDBC來編寫)。
- BookDao類:封裝 對(duì)表的增刪查改操作。
- UserDao類:封裝 識(shí)別用戶的操作。

operations包中定義了IOperation(操作)接口,這個(gè)包中的下面這些類都實(shí)現(xiàn)了這個(gè)IOperation接口(完成增刪查改等操作):
- AddOperation類:增加書籍
- BorrowOperation類:借閱書籍
- DeleteOperation類:刪除書籍
- DisplayOperation類:查看書籍列表
- ExitOperation類:退出系統(tǒng)
- FindOperation類:查找書籍
- ReturnOperation類:返還書籍
二、代碼展示
1.SQL語句
在控制臺(tái)執(zhí)行,用于建立圖書管理庫(kù)(設(shè)置“張三”為普通用戶,密碼為321;“admin”為管理員,密碼為123)
create database if not exists bookmanager;
use bookmanager;
-- 創(chuàng)建一個(gè)書籍表
drop table if exists book;
create table book(
bookId int primary key auto_increment,
name varchar(20),
author varchar(20),
-- 為了準(zhǔn)確,價(jià)格以 分 為單位
price int,
type varchar(20),
-- 如果isBorrowed為1,表示已經(jīng)借出,為0,表示未借出
isBorrowed int
);
-- 創(chuàng)建一個(gè)用戶表(用戶有管理員和普通用戶兩種)
drop table if exists user;
create table user(
userId int primary key auto_increment,
username varchar(20) unique,
password varchar(20),
-- 如果isAdmin 為1,表示是管理員,為0,表示是普通用戶
isAdmin int
);
-- 插入一些數(shù)據(jù)
insert into book values(null,'西游記','吳承恩',10000,'古典小說',0);
insert into book values(null, '三國(guó)演義', '羅貫中', 10000, '古典小說', 0);
insert into book values(null, '水滸傳', '施耐庵', 10000, '古典小說', 0);
insert into book values(null, '金瓶梅', '蘭陵笑笑生', 10000, '古典小說', 0);
insert into book values(null,'三體','劉慈欣',10000,'科幻小說',0);
-- 插入一些用戶
insert into user values(null,'admin','123',1);
insert into user values(null,'張三','321',0);
2.Book類
定義了書的一些屬性(書編號(hào),書名,作者,價(jià)格,分類,狀態(tài))并且寫了屬性的get、set、toSting方法
package Java100_1006;
//使用這個(gè)類來表示一本書
// +------------+-------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +------------+-------------+------+-----+---------+----------------+
// | bookId | int(11) | NO | PRI | NULL | auto_increment |
// | name | varchar(20) | YES | | NULL | |
// | author | varchar(20) | YES | | NULL | |
// | price | int(11) | YES | | NULL | |
// | type | varchar(20) | YES | | NULL | |
// | isBorrowed | int(11) | YES | | NULL | |
// +------------+-------------+------+-----+---------+----------------+
public class Book {
private int bookId;
private String name;
private String author;
private int price;
private String type;
private boolean isBorrowed;
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
}
3.User類
定義了用戶的一些屬性(用戶編號(hào),用戶名,密碼和是否為管理員的標(biāo)記),并且寫了屬性的get、set、toSting方法
package Java100_1006;
import Java100_1006.operations.IOperation;
abstract public class User {
// 使用這個(gè) User 類來表示一個(gè)用戶
// +----------+-------------+------+-----+---------+----------------+
// | Field | Type | Null | Key | Default | Extra |
// +----------+-------------+------+-----+---------+----------------+
// | userId | int(11) | NO | PRI | NULL | auto_increment |
// | username | varchar(20) | YES | | NULL | |
// | password | varchar(20) | YES | | NULL | |
// | isAdmin | int(11) | YES | | NULL | |
// +----------+-------------+------+-----+---------+----------------+
// 針對(duì)此處的 isAdmin, 并不是直接使用一個(gè) boolean 變量來區(qū)分, 而是使用兩個(gè)不同的子類.
// 原因是, 管理員和普通用戶支持的方法, 是不一樣的.
private int userId;
private String userName;
private String passWord;
// 包含了一個(gè)數(shù)組, 數(shù)組里面就是該用戶支持的哪些操作.
// 針對(duì)普通用戶, 和管理員, 分別設(shè)置不同的操作.
IOperation[] operations;
//普通用戶和管理員看到的菜單也不同
abstract public int menu();
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
4.用戶分為兩種
普通用戶和管理員,所以應(yīng)該分別建立兩個(gè)類來描述這兩個(gè)用戶。
4.1NormalUser類
**描述普通用戶,實(shí)現(xiàn)普通用戶的構(gòu)造方法,并打印普通用戶的操作界面。
package Java100_1006;
import Java100_1006.operations.*;
import java.util.Scanner;
//普通用戶
public class NormalUser extends User{
//普通用戶的構(gòu)造方法
public NormalUser(){
this.operations = new IOperation[]{
//0.退出
new ExitOperation(),
//1.查看書籍列表
new DisplayOperation(),
//2. 查找指定書籍
new FindOperation(),
//3.借閱書籍
new BorrowOperation(),
//4. 歸還書籍
new ReturnOperation()
};
}
//打印普通用戶的菜單
@Override
public int menu() {
System.out.println("=============================");
System.out.println("歡迎您"+this.getUserName()+"!");
System.out.println("1. 查看書籍列表");
System.out.println("2. 查找指定書籍");
System.out.println("3. 借閱書籍");
System.out.println("4. 歸還書籍");
System.out.println("0. 退出系統(tǒng)");
System.out.println("=============================");
System.out.println("請(qǐng)輸入您的選項(xiàng):");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
4.2Admin類
描述管理員,實(shí)現(xiàn)管理員的構(gòu)造方法并打印管理員的操作界面
package Java100_1006;
import Java100_1006.operations.*;
import java.util.Scanner;
//管理員
public class Admin extends User{
//管理員的構(gòu)造方法
public Admin(){
//初始化operation
//繼承與User類,所以可以使用父類的中的數(shù)組
this.operations = new IOperation[]{
//0. 退出系統(tǒng)
new ExitOperation(),
//1. 查看書籍列表
new DisplayOperation(),
//2. 查找指定書籍
new FindOperation(),
//3. 新增書籍
new AddOperation(),
//4. 刪除書籍
new DeleteOperation()
};
}
//打印管理員的菜單
@Override
public int menu() {
System.out.println("================================");
System.out.println("歡迎您, " + this.getUserName() + "! 您是管理員! ");
System.out.println("1. 查看書籍列表");
System.out.println("2. 查找指定書籍");
System.out.println("3. 新增書籍");
System.out.println("4. 刪除書籍");
System.out.println("0. 退出系統(tǒng)");
System.out.println("================================");
System.out.println("請(qǐng)輸入選項(xiàng): ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
5.DBUtil類
封裝與數(shù)據(jù)庫(kù)建立連接的操作(主要用JDBC來編寫)
package Java100_1006;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//先建立這個(gè)類來 封裝 數(shù)據(jù)庫(kù)建立連接的操作
//具體步驟:
//1.創(chuàng)建DataSouse實(shí)例
//2.根據(jù)DataSouse創(chuàng)建對(duì)應(yīng)的Connection
public class DBUtil {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/bookmanager?characterEncoding=utf8&useSSL=false";
private static final String USERNAME = "root";
private static final String PASSWORD = "1234";
//懶漢模式:
private static DataSource dataSource = null;
//初始情況下,dataSource為null,沒有被實(shí)例化
//首次調(diào)用getDataSource()時(shí)才會(huì)被實(shí)例化
private static DataSource getDataSource(){
if(dataSource == null){
dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl(URL);
((MysqlDataSource)dataSource).setUser(USERNAME);
((MysqlDataSource)dataSource).setPassword(PASSWORD);
}
return dataSource;
}
//提供一個(gè)方法來建立連接
//用static來修飾,那么就無需實(shí)例化DBUtil實(shí)例就能調(diào)用這個(gè)方法,更加方便
public static Connection getConnection() throws SQLException {
return getDataSource().getConnection();
}
//釋放資源
public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
try{
if(resultSet != null){
resultSet.close();
}
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
}catch (SQLException e){
e.printStackTrace();
}
}
}
6.BookDao類
封裝 對(duì)表的增刪查改操作
package Java100_1006;
import Java100_1006.Book;
import Java100_1006.DBUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//封裝 對(duì)Book表的增刪查改操作
public class BookDao {
//1.新增書籍(插入)
public boolean add(Book book){
//把book對(duì)象插入數(shù)據(jù)庫(kù)的書籍表中
Connection connection = null;
PreparedStatement statement = null;
try {
//1.和數(shù)據(jù)庫(kù)建立連接
connection = DBUtil.getConnection();
//2.拼裝sql語句
String sql = "insert into book values(null,?,?,?,?,?)";
statement = connection.prepareStatement(sql);
statement.setString(1,book.getName());
statement.setString(2,book.getAuthor());
statement.setInt(3,book.getPrice());
statement.setString(4,book.getType());
statement.setInt(5,book.isBorrowed()?1:0);
//3.執(zhí)行SQL
int ret = statement.executeUpdate();
if(ret == 1)
return true;
return false;
}catch (SQLException e){
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,null);
}
return false;
}
//2.查找所有書籍(查找)
public List<Book> selectAll() {
List<Book> list = new ArrayList<>();
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
//1.與數(shù)據(jù)庫(kù)建立連接
connection = DBUtil.getConnection();
//2.拼裝SQL
String sql = "select * from book";
statement = connection.prepareStatement(sql);
//3.執(zhí)行SQL
resultSet = statement.executeQuery();
//4.遍歷結(jié)果集合
while(resultSet.next()){
//取出當(dāng)前行的這些列,構(gòu)造一個(gè)Book對(duì)象來
Book book = new Book();
book.setBookId(resultSet.getInt("bookId"));
book.setName(resultSet.getString("name"));
book.setAuthor(resultSet.getString("author"));
book.setPrice(resultSet.getInt("price"));
book.setType(resultSet.getString("type"));
book.setBorrowed(resultSet.getInt("isBorrowed")==1);
//把這個(gè)book對(duì)象添加到鏈表中
list.add(book);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,resultSet);
}
return list;
}
//3.根據(jù)名字查找書籍(查找)
public List<Book> selectByName(String name){
List<Book> list = new ArrayList<>();
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
//1.先與數(shù)據(jù)庫(kù)建立連接
connection = DBUtil.getConnection();
//2.拼裝SQL語句
String sql = "select * from book where name=?";
statement = connection.prepareStatement(sql);
statement.setString(1,name);
//3.執(zhí)行SQL
resultSet = statement.executeQuery();
//4.遍歷結(jié)果集合
while(resultSet.next()){
Book book = new Book();
book.setBookId(resultSet.getInt("bookId"));
book.setName(resultSet.getString("name"));
book.setAuthor(resultSet.getString("author"));
book.setPrice(resultSet.getInt("price"));
book.setType(resultSet.getString("type"));
book.setBorrowed(resultSet.getInt("isBorrowed") == 1);
list.add(book);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,resultSet);
}
return list;
}
//4.刪除書籍(刪除)
public boolean delete(int bookId){
Connection connection = null;
PreparedStatement statement = null;
try {
//1.建立連接
connection = DBUtil.getConnection();
//2.拼裝SQL
String sql = "delete from book where bookId=?";
statement = connection.prepareStatement(sql);
statement.setInt(1,bookId);
//3.執(zhí)行SQL
int ret = statement.executeUpdate();
if(ret != 1){
return false;
}
return true;
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,null);
}
return false;
}
//5.借書(修改)
public boolean borrowBook(int bookId){
Connection connection = null;
//statement1用于查找操作
PreparedStatement statement1 = null;
//statement2用于修改操作
PreparedStatement statement2 = null;
ResultSet resultSet = null;
try {
//1.建立連接
connection = DBUtil.getConnection();
//要借書,就必須知道這本書存不存在,所以我們先查找,再操作
//2.拼裝SQL
String sql = "select * from book where bookId=?";
statement1 = connection.prepareStatement(sql);
statement1.setInt(1,bookId);
//3.執(zhí)行SQL
resultSet = statement1.executeQuery();
//4.遍歷結(jié)果,預(yù)期結(jié)果要么是1條,要么是0條
if(resultSet.next()){
//進(jìn)入if就說明書是存在的
boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
if(isBorrowed) {
//說明書已經(jīng)被借出了,不能再次借閱
System.out.println("書已經(jīng)借出! 無法再次借出! bookId = " + bookId);
return false;
}
}else{
//進(jìn)入else,那么書是不存在的
System.out.println("書不存在! 無法借出! bookId = " + bookId);
return false;
}
//[接下來是開始進(jìn)行借書邏輯]
//5.拼裝SQL
sql = "update book set isBorrowed=1 where bookId=?";
statement2 = connection.prepareStatement(sql);
statement2.setInt(1,bookId);
//6.執(zhí)行SQL
int ret = statement2.executeUpdate();
if(ret != 1){
return false;
}
return true;
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement2 != null){
try {
statement2.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement1 != null){
try {
statement1.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return false;
}
//6.還書(修改)
public boolean returnBook(int bookId){
Connection connection = null;
PreparedStatement statement1 = null;
PreparedStatement statement2 = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
//查詢書是否存在
String sql = "select * from book where bookId=?";
statement1 = connection.prepareStatement(sql);
statement1.setInt(1,bookId);
resultSet = statement1.executeQuery();
if(resultSet.next()){
//進(jìn)入if語句就說明這本書存在于書籍名單中
boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
if(!isBorrowed){
System.out.println("書沒有借出, 沒必要還! bookId = " + bookId);
return false;
}
}else{
//不是圖書系統(tǒng)中的書,不需要還
System.out.println("書不存在, 無法歸還! bookId = " + bookId);
return false;
}
//[還書]
//修改書籍的借出狀態(tài)就可
sql = "update book set isBorrowed=0 where bookId=?";
statement2 = connection.prepareStatement(sql);
statement2.setInt(1,bookId);
int ret = statement2.executeUpdate();
if(ret != 1){
return false;
}
return true;
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement2 != null){
try {
statement2.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement1 != null){
try {
statement1.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return false;
}
}
7.UserDao類
封裝 識(shí)別用戶的操作
package Java100_1006;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
//實(shí)現(xiàn)根據(jù)用戶名找密碼這樣一個(gè)過程(用戶名 唯一)
public User selectByName(String name){
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
String sql = "select * from user where username=?";
statement = connection.prepareStatement(sql);
statement.setString(1,name);
resultSet = statement.executeQuery();
if(resultSet.next()){
//存在這個(gè)用戶,返回一個(gè)User對(duì)象
//判斷這個(gè)用戶是普通用戶還是管理員
boolean isAdmin = (resultSet.getInt("isAdmin"))==1;
User user = null;
if (isAdmin){
user = new Admin();
}else{
user = new NormalUser();
}
user.setUserId(resultSet.getInt("userId"));
user.setUserName(resultSet.getString("username"));
user.setPassWord(resultSet.getString("password"));
return user;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(connection,statement,resultSet);
}
return null;
}
}
8.operations包
創(chuàng)建IOperation接口和實(shí)現(xiàn)這個(gè)接口的其他類
接口:
package Java100_1006.operations;
//后續(xù)的增加 刪除 借書 還書 等操作都要實(shí)現(xiàn)這個(gè)接口
public interface IOperation {
void work();
}
8.1AddOperation類:增加書籍
package Java100_1006.operations;
import Java100_1006.Book;
import Java100_1006.BookDao;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work() {
System.out.println("新增書籍!");
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入書名: ");
String bookName = scanner.next();
System.out.println("請(qǐng)輸入作者: ");
String author = scanner.next();
System.out.println("請(qǐng)輸入價(jià)格:");
int price = scanner.nextInt();
System.out.println("請(qǐng)輸入類別:");
String type = scanner.next();
//假設(shè)新增書籍都是未借出的狀態(tài)
Book book = new Book();
book.setName(bookName);
book.setAuthor(author);
book.setPrice(price);
book.setType(type);
BookDao bookDao = new BookDao();
boolean ret = bookDao.add(book);
if(ret){
System.out.println("新增書籍成功");
}else{
System.out.println("新增書籍失敗!");
}
}
}
8.2BorrowOperation類:借閱書籍
package Java100_1006.operations;
import Java100_1006.BookDao;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work() {
System.out.println("借閱書籍!");
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入要借閱的書籍id:");
int bookId = scanner.nextInt();
BookDao bookDao = new BookDao();
boolean ret = bookDao.borrowBook(bookId);
if (ret) {
System.out.println("借閱書籍成功!");
} else {
System.out.println("借閱書籍失敗!");
}
}
}
8.3DeleteOperation類:刪除書籍
package Java100_1006.operations;
import Java100_1006.BookDao;
import java.util.Scanner;
public class DeleteOperation implements IOperation{
@Override
public void work() {
System.out.println("刪除書籍!");
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入要?jiǎng)h除的書籍id: ");
int bookId = scanner.nextInt();
BookDao bookDao = new BookDao();
boolean ret = bookDao.delete(bookId);
if (ret) {
System.out.println("刪除成功!");
} else {
System.out.println("刪除失敗!");
}
}
}
8.4DisplayOperation類:查看書籍列表
package Java100_1006.operations;
import Java100_1006.Book;
import Java100_1006.BookDao;
import java.util.List;
public class DisplayOperation implements IOperation{
@Override
public void work() {
System.out.println("展示所有書籍!");
BookDao bookDao = new BookDao();
List<Book> books = bookDao.selectAll();
for(Book book:books){
System.out.println(book);
}
System.out.println("展示所有書籍完畢!");
}
}
8.5ExitOperation類:退出系統(tǒng)
package Java100_1006.operations;
//退出操作
public class ExitOperation implements IOperation{
@Override
public void work() {
System.out.println("退出程序");
System.exit(0);
}
}
8.6FindOperation類:查找書籍
package Java100_1006.operations;
import Java100_1006.Book;
import Java100_1006.BookDao;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void work() {
System.out.println("根據(jù)名字查找書籍!");
System.out.println("請(qǐng)輸入要查找的書名: ");
Scanner scanner = new Scanner(System.in);
String bookName = scanner.next();
BookDao bookDao = new BookDao();
List<Book> books = bookDao.selectByName(bookName);
for(Book book:books){
System.out.println(book);
}
System.out.println("根據(jù)名字查找書籍完畢!");
}
}
8.7ReturnOperation類:返還書籍
package Java100_1006.operations;
import Java100_1006.BookDao;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work() {
System.out.println("歸還書籍!");
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入要?dú)w還的書籍id:");
int bookId = scanner.nextInt();
BookDao bookDao = new BookDao();
boolean ret = bookDao.returnBook(bookId);
if (ret) {
System.out.println("歸還書籍成功!");
} else {
System.out.println("歸還書籍失敗!");
}
}
}
9.Main方法實(shí)現(xiàn)
package Java100_1006;
import java.util.Scanner;
//編寫系統(tǒng)的主體邏輯
public class Main {
public static void main(String[] args) {
//通過login方法進(jìn)行登錄
User user = login();
while(true){
int choice = user.menu();
user.doOperation(choice);
}
}
private static User login() {
//1.實(shí)現(xiàn)用戶登錄邏輯
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入用戶名:");
String userName = scanner.next();
System.out.println("請(qǐng)輸入密碼:");
String passWord = scanner.next();
//2.從數(shù)據(jù)庫(kù)根據(jù)用戶名查詢密碼
UserDao userDao = new UserDao();
User user = userDao.selectByName(userName);
if(user == null){
//不存在該用戶
System.out.println("登陸失敗!");
// 直接退出程序
System.exit(0);
}
if(!user.getPassWord().equals(passWord)){
//密碼不正確
System.out.println("登陸失敗");
System.exit(0);
}
return user;
}
}
三、結(jié)果實(shí)現(xiàn)
1.登錄界面


2.普通用戶操作




3.管理員操作




到此這篇關(guān)于Java開發(fā)實(shí)例之圖書管理系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 圖書管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java導(dǎo)出數(shù)據(jù)庫(kù)中Excel表格數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出數(shù)據(jù)庫(kù)中Excel表格數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
SpringBoot 關(guān)于Feign的超時(shí)時(shí)間配置操作
這篇文章主要介紹了SpringBoot 關(guān)于Feign的超時(shí)時(shí)間配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
基于java實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)停車場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
java循環(huán)練習(xí)的簡(jiǎn)單代碼實(shí)例
本篇文章介紹了,java中循環(huán)練習(xí)的一些簡(jiǎn)單代碼實(shí)例。需要的朋友參考下2013-04-04
eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議
這篇文章主要介紹了eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
通過Java來測(cè)試JSON和Protocol Buffer的傳輸文件大小
這篇文章主要介紹了通過Java來測(cè)試JSON和Protocol Buffer的傳輸文件大小,Protocol Buffer(文中簡(jiǎn)稱Protobuffer)是谷歌開發(fā)的新的文件傳輸格式,需要的朋友可以參考下2015-12-12
java+mysql實(shí)現(xiàn)商品搶購(gòu)功能
這篇文章主要為大家詳細(xì)介紹了java+mysql實(shí)現(xiàn)商品搶購(gòu)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

