Java開(kāi)發(fā)實(shí)例之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)
聲明:本項(xiàng)目不涉及web操作,但需要了解java的基本語(yǔ)法和MySQL的基本語(yǔ)句運(yùn)用。
一、項(xiàng)目分布
- db.sql類:SQL語(yǔ)句,在控制臺(tái)執(zhí)行,用于建立圖書(shū)管理庫(kù)。
- Book類: 定義了書(shū)的一些屬性(書(shū)編號(hào),書(shū)名,作者,價(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來(lái)編寫)。
- BookDao類:封裝 對(duì)表的增刪查改操作。
- UserDao類:封裝 識(shí)別用戶的操作。
operations包中定義了IOperation(操作)接口,這個(gè)包中的下面這些類都實(shí)現(xiàn)了這個(gè)IOperation接口(完成增刪查改等操作):
- AddOperation類:增加書(shū)籍
- BorrowOperation類:借閱書(shū)籍
- DeleteOperation類:刪除書(shū)籍
- DisplayOperation類:查看書(shū)籍列表
- ExitOperation類:退出系統(tǒng)
- FindOperation類:查找書(shū)籍
- ReturnOperation類:返還書(shū)籍
二、代碼展示
1.SQL語(yǔ)句
在控制臺(tái)執(zhí)行,用于建立圖書(shū)管理庫(kù)(設(shè)置“張三”為普通用戶,密碼為321;“admin”為管理員,密碼為123)
create database if not exists bookmanager; use bookmanager; -- 創(chuàng)建一個(gè)書(shū)籍表 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,'古典小說(shuō)',0); insert into book values(null, '三國(guó)演義', '羅貫中', 10000, '古典小說(shuō)', 0); insert into book values(null, '水滸傳', '施耐庵', 10000, '古典小說(shuō)', 0); insert into book values(null, '金瓶梅', '蘭陵笑笑生', 10000, '古典小說(shuō)', 0); insert into book values(null,'三體','劉慈欣',10000,'科幻小說(shuō)',0); -- 插入一些用戶 insert into user values(null,'admin','123',1); insert into user values(null,'張三','321',0);
2.Book類
定義了書(shū)的一些屬性(書(shū)編號(hào),書(shū)名,作者,價(jià)格,分類,狀態(tài))并且寫了屬性的get、set、toSting方法
package Java100_1006; //使用這個(gè)類來(lái)表示一本書(shū) // +------------+-------------+------+-----+---------+----------------+ // | 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 類來(lái)表示一個(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 變量來(lái)區(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è)類來(lái)描述這兩個(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.查看書(shū)籍列表 new DisplayOperation(), //2. 查找指定書(shū)籍 new FindOperation(), //3.借閱書(shū)籍 new BorrowOperation(), //4. 歸還書(shū)籍 new ReturnOperation() }; } //打印普通用戶的菜單 @Override public int menu() { System.out.println("============================="); System.out.println("歡迎您"+this.getUserName()+"!"); System.out.println("1. 查看書(shū)籍列表"); System.out.println("2. 查找指定書(shū)籍"); System.out.println("3. 借閱書(shū)籍"); System.out.println("4. 歸還書(shū)籍"); 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. 查看書(shū)籍列表 new DisplayOperation(), //2. 查找指定書(shū)籍 new FindOperation(), //3. 新增書(shū)籍 new AddOperation(), //4. 刪除書(shū)籍 new DeleteOperation() }; } //打印管理員的菜單 @Override public int menu() { System.out.println("================================"); System.out.println("歡迎您, " + this.getUserName() + "! 您是管理員! "); System.out.println("1. 查看書(shū)籍列表"); System.out.println("2. 查找指定書(shū)籍"); System.out.println("3. 新增書(shū)籍"); System.out.println("4. 刪除書(shū)籍"); 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來(lái)編寫)
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è)類來(lái) 封裝 數(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,沒(méi)有被實(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è)方法來(lái)建立連接 //用static來(lái)修飾,那么就無(wú)需實(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.新增書(shū)籍(插入) public boolean add(Book book){ //把book對(duì)象插入數(shù)據(jù)庫(kù)的書(shū)籍表中 Connection connection = null; PreparedStatement statement = null; try { //1.和數(shù)據(jù)庫(kù)建立連接 connection = DBUtil.getConnection(); //2.拼裝sql語(yǔ)句 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.查找所有書(shū)籍(查找) 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ì)象來(lái) 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ù)名字查找書(shū)籍(查找) 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語(yǔ)句 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.刪除書(shū)籍(刪除) 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.借書(shū)(修改) public boolean borrowBook(int bookId){ Connection connection = null; //statement1用于查找操作 PreparedStatement statement1 = null; //statement2用于修改操作 PreparedStatement statement2 = null; ResultSet resultSet = null; try { //1.建立連接 connection = DBUtil.getConnection(); //要借書(shū),就必須知道這本書(shū)存不存在,所以我們先查找,再操作 //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就說(shuō)明書(shū)是存在的 boolean isBorrowed = (resultSet.getInt("isBorrowed")==1); if(isBorrowed) { //說(shuō)明書(shū)已經(jīng)被借出了,不能再次借閱 System.out.println("書(shū)已經(jīng)借出! 無(wú)法再次借出! bookId = " + bookId); return false; } }else{ //進(jìn)入else,那么書(shū)是不存在的 System.out.println("書(shū)不存在! 無(wú)法借出! bookId = " + bookId); return false; } //[接下來(lái)是開(kāi)始進(jìn)行借書(shū)邏輯] //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.還書(shū)(修改) public boolean returnBook(int bookId){ Connection connection = null; PreparedStatement statement1 = null; PreparedStatement statement2 = null; ResultSet resultSet = null; try { connection = DBUtil.getConnection(); //查詢書(shū)是否存在 String sql = "select * from book where bookId=?"; statement1 = connection.prepareStatement(sql); statement1.setInt(1,bookId); resultSet = statement1.executeQuery(); if(resultSet.next()){ //進(jìn)入if語(yǔ)句就說(shuō)明這本書(shū)存在于書(shū)籍名單中 boolean isBorrowed = (resultSet.getInt("isBorrowed")==1); if(!isBorrowed){ System.out.println("書(shū)沒(méi)有借出, 沒(méi)必要還! bookId = " + bookId); return false; } }else{ //不是圖書(shū)系統(tǒng)中的書(shū),不需要還 System.out.println("書(shū)不存在, 無(wú)法歸還! bookId = " + bookId); return false; } //[還書(shū)] //修改書(shū)籍的借出狀態(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è)過(guò)程(用戶名 唯一) 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ū) 還書(shū) 等操作都要實(shí)現(xiàn)這個(gè)接口 public interface IOperation { void work(); }
8.1AddOperation類:增加書(shū)籍
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("新增書(shū)籍!"); Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入書(shū)名: "); 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è)新增書(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("新增書(shū)籍成功"); }else{ System.out.println("新增書(shū)籍失敗!"); } } }
8.2BorrowOperation類:借閱書(shū)籍
package Java100_1006.operations; import Java100_1006.BookDao; import java.util.Scanner; public class BorrowOperation implements IOperation{ @Override public void work() { System.out.println("借閱書(shū)籍!"); Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入要借閱的書(shū)籍id:"); int bookId = scanner.nextInt(); BookDao bookDao = new BookDao(); boolean ret = bookDao.borrowBook(bookId); if (ret) { System.out.println("借閱書(shū)籍成功!"); } else { System.out.println("借閱書(shū)籍失敗!"); } } }
8.3DeleteOperation類:刪除書(shū)籍
package Java100_1006.operations; import Java100_1006.BookDao; import java.util.Scanner; public class DeleteOperation implements IOperation{ @Override public void work() { System.out.println("刪除書(shū)籍!"); Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入要?jiǎng)h除的書(shū)籍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類:查看書(shū)籍列表
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("展示所有書(shū)籍!"); BookDao bookDao = new BookDao(); List<Book> books = bookDao.selectAll(); for(Book book:books){ System.out.println(book); } System.out.println("展示所有書(shū)籍完畢!"); } }
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類:查找書(shū)籍
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ù)名字查找書(shū)籍!"); System.out.println("請(qǐng)輸入要查找的書(shū)名: "); 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ù)名字查找書(shū)籍完畢!"); } }
8.7ReturnOperation類:返還書(shū)籍
package Java100_1006.operations; import Java100_1006.BookDao; import java.util.Scanner; public class ReturnOperation implements IOperation{ @Override public void work() { System.out.println("歸還書(shū)籍!"); Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入要?dú)w還的書(shū)籍id:"); int bookId = scanner.nextInt(); BookDao bookDao = new BookDao(); boolean ret = bookDao.returnBook(bookId); if (ret) { System.out.println("歸還書(shū)籍成功!"); } else { System.out.println("歸還書(shū)籍失敗!"); } } }
9.Main方法實(shí)現(xiàn)
package Java100_1006; import java.util.Scanner; //編寫系統(tǒng)的主體邏輯 public class Main { public static void main(String[] args) { //通過(guò)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開(kāi)發(fā)實(shí)例之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 圖書(shū)管理內(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-08SpringBoot 關(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-11java循環(huán)練習(xí)的簡(jiǎn)單代碼實(shí)例
本篇文章介紹了,java中循環(huán)練習(xí)的一些簡(jiǎn)單代碼實(shí)例。需要的朋友參考下2013-04-04eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議
這篇文章主要介紹了eclipse實(shí)現(xiàn)可認(rèn)證的DH密鑰交換協(xié)議,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06通過(guò)Java來(lái)測(cè)試JSON和Protocol Buffer的傳輸文件大小
這篇文章主要介紹了通過(guò)Java來(lái)測(cè)試JSON和Protocol Buffer的傳輸文件大小,Protocol Buffer(文中簡(jiǎn)稱Protobuffer)是谷歌開(kāi)發(fā)的新的文件傳輸格式,需要的朋友可以參考下2015-12-12java+mysql實(shí)現(xiàn)商品搶購(gòu)功能
這篇文章主要為大家詳細(xì)介紹了java+mysql實(shí)現(xiàn)商品搶購(gòu)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02