Java初学者也可以实现的图书系统小练习
? ? ? ?大家好呀,我是小戴🙌🙌🙌
? ? ? ?最近大家不是快期末了嘛,有沒有泡圖書館呀?今天的學習內容跟圖書館有關,沒錯,就是圖書管理系統,但是目前所學知識水平有限,這是一個很簡單的圖書系統小練習。不要急,我們的目的是在于如何使用已知學過的知識進行實踐,這里將帶大家用基本的Java語法和面向對象的思想來實現這個小程序~沖沖沖🥳🥳🥳?
下面是我們今天要學習的內容🥳🥳🥳
🌕一、需求分析
🌕二、具體實現過程
🥝2.1 代碼目錄
🥝2.2 book包
🍊1.Book類
🍊2.BookList類
?🥝2.3 operation包
🍊1.接口IOperation
🍊2.AddOperation類
🍊3.BorrowOperation類
🍊4. DelOperation類
🍊5. DisplayOperation類
🍊6. ExitOperation類
🍊7.FindOperation類
?🍊8.ReturnOperation類
🥝2.4 user包
🍊1. User類
🍊2. AdminUser類
🍊3.?NormalUser類
🥝2.4?Main類
🌕?三、效果展示
🥝示例一
?🥝示例二
🌕四、小戴想說的話
🌕一、需求分析
圖書館書籍系統的用戶分為管理員和普通用戶兩種,兩種用戶之間所能實現的功能是不同的。例如我理解想要實現的業務是這樣子的:
管理員:
普通用戶:
?業務實現內容不是重點,大家可以根據自己的喜好去進一步完善~
🌕二、具體實現過程
🥝2.1 代碼目錄
?建立一個叫booktest的項目,在src下新建book、operation、user 三個包,分別將跟書有關的類、跟操作有關的類、跟用戶有關的類存儲起來。即很好地應用了包的作用。
包的作用:
1.提供了類似于操作系統樹狀文件夾的組織形式,能分門別類地存儲、管理類,易于查找并使用類;
2.解決了類命名時相同的沖突。在Java中,不能在一個同一個包中定義兩個類名相同的類,但在不同包中可以;
3.保護類中成員變量和方法。該成員變量和方法的使用范圍取決于訪問修飾符。
在src下還新建了一個叫Main的類,這個類有一個main方法,并且該類將所有東西進行整合,來實現我們想要完成的功能。?
在Java中,main方法是Java應用程序的入口方法。
程序運行時,要執行的第一個方法是main()方法。??
🥝2.2 book包
🍊1.Book類
Book類用來具體存放圖書信息,
包括書名、作者、價格、類型、是否被借出這些基本信息
由于這些屬性是用private修飾的,這不就體現了Java語言面向對象封裝的特點嗎?除了設置帶參的構造方法、重寫toString()方法,要想在其他類中調用圖書屬性,需要為每個屬性設置Getter和Setter方法
封裝:
將一些細節信息隱藏- CSDN搜索起來,對外界不可見
用private修飾的屬性,只能在本類中隨意訪問,要想在其他類中調用,需要在類中設置賦值或獲取的成員方法。
package book;public class Book {private String name;//書名private String author;//作者private double price;//價格private String type;//類型private boolean isBorrowed;//是否被借出//Getter Setter方法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 double getPrice() {return price;}public void setPrice(double 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;}//提供一個4個參數的構造方法public Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", "+((isBorrowed==true)?"已借出":"未借出") +'}';} }🍊2.BookList類
存放書的地方,是魔幻小書架,書架上的書可不止只有一本哦~
創建一個Book類型的數組,并實時記錄當前數組存放了多少本書,
設置一個構造方法,將一些書先存放進去
getBook()和setBook()方法分別相當于從書架上拿書和放書在書架上
package book;public class BookList {//書架容量為10本private Book[] books = new Book[10];private int usedSize;//實時記錄 當前Books這個數組放了多少本書//構造方法public BookList(){books[0] = new Book("把時間當做朋友","李笑來",59,"勵志");books[1] = new Book("云邊有個小賣部","張嘉佳",46,"青春、成長");books[2] = new Book("山茶文具店","小川糸",52,"治愈");usedSize = 3;}/**** @param pos 此時 pos位置一定是合法的* @return 是你想要借的一本書*/public Book getBook(int pos){return books[pos];}/**** @param pos 此時 pos位置一定是合法的* @param book 是你想要放的一本書*/public void setBooks(int pos,Book book){books[pos] = book;}/*** 實時獲取當前書架上 書的個數* @return*/public int getUsedSize(){return usedSize;}/*** 實時修改當前書架上 書的個數* @param size*/public void setUsedSize(int size){usedSize = size;} }?🥝2.3 operation包
跟操作有關的類都在這里啦~
🍊1.接口IOperation
這個接口中的抽象方法都會在后面實現該接口的類中進行重寫
package operation;import book.BookList;public interface IOperation {void work(BookList bookList);//抽象方法 }🍊2.AddOperation類
實現新增圖書
package operation;import book.Book; import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("新增圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入圖書的名字:");String name = sc.nextLine();System.out.println("請輸入圖書的作者:");String author = sc.nextLine();System.out.println("請輸入圖書的價格:");double price = sc.nextDouble();sc.nextLine();//使用nextLine()接收上面鍵盤輸入的'\n'System.out.println("請輸入圖書的類型:");String type = sc.nextLine();Book book = new Book(name,author,price,type);int currentSize = bookList.getUsedSize();bookList.setBooks(currentSize,book);bookList.setUsedSize(currentSize+1);System.out.println("《"+name+"》"+"已新增!");} }🍊3.BorrowOperation類
實現借閱圖書
package operation;import book.Book; import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("借閱圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你想要借閱書的名字:");String name = sc.nextLine();int currentSize = bookList.getUsedSize();int i=0;for(i=0;i<currentSize;i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){book.setBorrowed(true);System.out.println("《"+name+"》借閱成功,祝暢游閱讀世界!");return;}}if(i>=currentSize){System.out.println("抱歉,本書架中沒有此書,我們會盡快聯系圖書管理員新增此書!");}} }🍊4. DelOperation類
實現刪除圖書
package operation;import book.Book; import book.BookList;import java.util.Scanner;public class DelOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("刪除圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你想要刪除書的名字:");String name = sc.nextLine();int i=0;int index = 0;int currentSize = bookList.getUsedSize();for (i=0;i<currentSize;i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){index = i;break;}}if(i>=currentSize){System.out.println("沒有你想要刪除的這本書");return;}for(i=index;i<currentSize-1;i++){Book book = bookList.getBook(i+1);bookList.setBooks(i,book);}bookList.setBooks(currentSize,null);bookList.setUsedSize(currentSize-1);System.out.println("《"+name+"》"+"已刪除");} }🍊5. DisplayOperation類
實現顯示圖書
package operation;import book.Book; import book.BookList;public class DisplayOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("顯示圖書!");int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book = bookList.getBook(i);System.out.println(book);}} }🍊6. ExitOperation類
實現退出系統
package operation;import book.BookList;public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系統!");System.exit(0);} }🍊7.FindOperation類
實現查找圖書
package operation;import book.Book; import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入書名:");String name = sc.nextLine();int currentSize = bookList.getUsedSize();int i=0;for(i=0;i<currentSize;i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){System.out.println("找到這本書了!");System.out.println(book);return;//找到這本書,查找程序提前結束}}if(i>=currentSize) {//說明沒有找到System.out.println("沒有你要找的這本書!");}} }?🍊8.ReturnOperation類
實現歸還圖書
package operation;import book.Book; import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("歸還圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你想要歸還書的名字:");String name = sc.nextLine();int currentSize = bookList.getUsedSize();int i=0;for(i=0;i<currentSize;i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){book.setBorrowed(false);System.out.println("《"+name+"》"+"歸還成功,祝每天都有好心情");return;}}} }🥝2.4 user包
前文提到,用戶類型分為管理員和普通用戶兩種,這兩種類型都有相同的name屬性,都要有一個功能菜單,功能菜單中有相同的操作方法也有各自才有的特殊操作方法,既然重合度這么高,但又有區別,好喔,這里需要用一個父類更加方便。
User類就是user這個包中的父類,AdminUser和NormalUser是子類。
繼承的作用:
通過繼承可以快速創建新的類,實現代碼的重用,提高程序的可維護性,節省大量創建新類的時間,提高開發效率和開發質量
允許程序員在保持原有類特性的基礎上進行擴展,增加功能,這樣產生新的類,稱派生類
🍊1. User類
package user;import book.BookList; import operation.IOperation;public abstract class User {protected String name;//用戶名protected IOperation[] iOperations;//此時并沒有初始化和分配大小public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice, BookList bookList){this.iOperations[choice].work(bookList);} }🍊2. AdminUser類
package user;import book.BookList; import operation.*;import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);this.iOperations = new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};}public int menu(){System.out.println("hello "+this.name+" 歡迎來到魔幻小書架!");System.out.println("1.查找書籍");System.out.println("2.新增書籍");System.out.println("3.刪除書籍");System.out.println("4.顯示書籍");System.out.println("0.退出系統");System.out.println("請輸入你的操作:");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();return choice;} }🍊3.?NormalUser類
package user;import operation.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations = new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation(),new DisplayOperation()};}public int menu(){System.out.println("hello "+this.name+" 歡迎來到魔幻小書架!");System.out.println("1.查找書籍");System.out.println("2.借閱書籍");System.out.println("3.歸還書籍");System.out.println("4.顯示書籍");System.out.println("0.退出系統");System.out.println("請輸入你的操作:");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();return choice;} }🥝2.4?Main類
Main類用于將這些功能屬性整合起來,也是整個小項目的執行入口,
用戶登錄之后,可選擇自己的身份——(管理員/普通用戶)
菜單用循環實現多次打印
login()函數將AdminUser或者NormalUser向上轉型為父類User
在main()方法中,用一個父類user調用menu()方法,根據user是管理員還是普通用戶,向下轉型調用各自不同的菜單
import book.BookList; import user.AdminUser; import user.NormalUser; import user.User;import java.util.Scanner;public class Main {public static User login(){System.out.println("請輸入用戶名:");Scanner sc = new Scanner(System.in);String name = sc.nextLine();System.out.println("請選擇用戶身份:1.管理員 2.普通用戶");int choice = sc.nextInt();if(choice==1){return new AdminUser(name);}else {return new NormalUser(name);}}public static void main(String[] args) {//開始整合BookList bookList = new BookList();//圖書準備//登錄User user = login();int temp = 0;do{int choice = user.menu();//動態綁定user.doOperation(choice,bookList);temp = choice;}while (temp!=0);} }🌕?三、效果展示
psss:因操作過長,長截圖無法截全,為了保證展示完整性,特意用幾張小圖截的,如果給您帶來閱讀不適,請見諒~給你花花🌹🌹
🥝示例一
?🥝示例二
🌕四、小戴想說的話
學習一個知識可能很簡單,但將學到的知識進行整合應用絕對比學那個知識要難,但如果相信自己可以做到,那絕對可以學下去,保持良好的心態是提高學習效率的利器。
咱們一起加油💪💪💪
目前,小戴備考四級和期末考中,有什么學習心理各方面問題歡迎uu們私信后臺踢我,會的我會用心解答~
晚安,唔西迪西!——寫于2022/5/23早1:10
日常禿發,那就明天早上見咯~要是對你有幫助有啟發的話,就淺淺點個贊支持一下吧🌹🌹
總結
以上是生活随笔為你收集整理的Java初学者也可以实现的图书系统小练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pl/sql 中关于exception的
- 下一篇: 最适合Java初学者练手的项目【Java