作者主頁:paper jie 的博客
本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。
本文錄入于《JAVA》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將javaSE基礎知識一網(wǎng)打盡,希望可以幫到讀者們哦。
其他專欄:《算法詳解》《C語言》《javaSE》等
內(nèi)容分享:本期將會使用javase來制作一個簡易版本的圖書管理系統(tǒng)
目錄
設計需求
?設計思路
設計的具體過程及源碼展示
book包?
Book類
Booklist類
user包
User類
AdminUser類
NormalUser類
operation包
IOoperation接口
Addoperation類
Deloperation類
Borrowoperation類
Exitoperation類
Findoperation類
Returnoperation類
Showoperation類
?Main類
效果展示?
圖書管理系統(tǒng)的畫圖分析
設計需求
我們需要通過使用javase來實現(xiàn)一個簡易版本的圖書管理系統(tǒng),它需要具備以下幾個功能:
1 首先需要有兩個模式,一個是管理員模式,一個是普通用戶模式
2 需要具有 新增圖書,刪除圖書,查找圖書,顯示圖書,借閱圖書,歸還圖書,退出系統(tǒng)這些功能
3.需要將上面的功能分成兩部分,新增,刪除,顯示,查找,退出為管理員的權(quán)限,而查找,借閱,歸還,退出為普通用戶的權(quán)限
?設計思路
1 我們首先需要將我們的用戶分為兩個部分,一個為管理員,一個為普通用戶,在使用的時候根據(jù)不同的需求展現(xiàn)不同的界面和功能,這里我們可以通過繼承,多態(tài),向上轉(zhuǎn)型給他們一個父類來實現(xiàn)
2 我們需要實現(xiàn)多個類來實現(xiàn)刪除圖書,查找圖書,顯示圖書,借閱圖書,歸還圖書,退出系統(tǒng)這些功能
3 我們通過創(chuàng)建一個接口,讓功能類來實現(xiàn)這個接口,再用一個類型為創(chuàng)建的接口類型的數(shù)組來存放功能類的new出的對象,這樣子就可以進行統(tǒng)一管理了
4 我們還需要創(chuàng)建書和書架類,將書的屬性封裝,書架類存放的就是書,會用一個書架類型的數(shù)組來存放
設計的具體過程及源碼展示
為了讓程序去復雜化,易修改這里將用三個包和一個主類來搭建這個框架會有book包,里面存放書類和書架類。operation包存放各個功能類和接口。user包中放著父類User類和普通用戶類,管理員類,最后還有一個主類Main
book包?
Book類
book類起到的作用就是將book類封裝起來,后面容易放入書架中。 這里的構(gòu)造方法,getandset方法以及toString方法可以通過編譯器生成,速度很快的。在toString方法中我們需要改動一下編譯器生成的,我們可以用三目操作符來確定是true還是false來打印是已借出還是未接出
package book;
public class Book {
private String name;
private String author;
private int price;
private String type;
//默認flose 未被借出
private boolean isBorrowed;
//get 和 set方法設置和返回成員變量
public Book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
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{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", " + ((isBorrowed == true) ? "已經(jīng)借出" : "未接出") +
'}';
}
}
Booklist類
這里也可以使用編譯器生成需要的代碼,這里要注意的是books數(shù)組,它是用來存放book書本的。在構(gòu)造方法中要對它進行初始化,可以存放幾本,已進放進去的書的內(nèi)容。
package book;
public class Booklist {
//書架
private Book[] books;
//記錄使用書的位置
private int usedsize;
private static final int DEFAULT_CAPACITY = 10;
public Booklist() {
//對書架初始化
this.books = new Book[DEFAULT_CAPACITY];
//放書
this.books[0] = new Book("三國演義", "羅貫中", 10, "小說");
this.books[1] = new Book("西游記", "吳承恩", 20, "小說");
this.books[2] = new Book("紅樓夢", "曹雪芹", 30, "小說");
this.usedsize = 3;
}
public int getUsedsize() {
return usedsize;
}
public void setUsedsize(int usedsize) {
this.usedsize = usedsize;
}
public Book getBook(int pos) {
return books[pos];
}
public void setBook(int pos, Book book) {
books[pos] = book;
}
public Book[] getBooks() {
return books;
}
}
user包
這個包里放的是一個父類和兩個子類,企圖通過繼承和多態(tài)來實現(xiàn)管理員和普通用戶的切換
User類
這里要注意的是IOoperation這個數(shù)組,它會在User類的子類中進行初始化,來存放需要功能類的對象。而dooperation方法則是通過IOoperations數(shù)組里的成員的work方法來實現(xiàn)需要的操作
package user;
import book.Booklist;
import operation.IOoperation;
public abstract class User {
protected String name;
protected IOoperation[] iOoperations;
public User(String name) {
this.name = name;
}
public abstract int menu();
public void dooperation(int choise, Booklist booklist) {
iOoperations[choise].work(booklist);
}
}
AdminUser類
它和NormalUser都是User的子類,這里面的構(gòu)造方法就對父類的成員進行了IOoperation初始化,且實現(xiàn)的菜單界面,menu方法的返回值就是你選擇需要使用的功能
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.iOoperations = new IOoperation[]{new Exitoperation(),new Addopertaion(),
new Deloperation(), new Showoperation(),new Findoperation()};
}
public int menu() {
System.out.println("*********************** 管理員用戶 ***************************");
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("請輸入你的操作:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
NormalUser類
實現(xiàn)思路和AdminUser一樣
package user;
import operation.*;
import java.util.Scanner;
public class NormalUser extends User {
public NormalUser(String name) {
super(name);
this.iOoperations = new IOoperation[]{new Exitoperation(),new Findoperation(),
new Borrowoperation(), new Returnoperation()};
}
public int menu() {
System.out.println("*************************** 普通用戶 ****************************");
System.out.println("1. 查找圖書");
System.out.println("2. 借閱圖書");
System.out.println("3. 歸還圖書");
System.out.println("0. 退出系統(tǒng)");
System.out.println("**************************************************************");
System.out.println("請輸入你的操作:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
operation包
這個包里需要實現(xiàn)需要的功能類和一個將他們都串起來的接口
IOoperation接口
所有的功能類都要實現(xiàn)這個接口,從而重寫work方法,來統(tǒng)一使用work這個名字
package operation;
import book.Booklist;
public interface IOoperation {
public void work(Booklist booklist);
}
Addoperation類
新增圖書功能:
package operation;
import book.Book;
import book.Booklist;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Description:
* User: sun杰
* Date: 2023-08-25
* Time: 10:43
*/
public class Addopertaion implements IOoperation{
@Override
public void work(Booklist booklist) {
System.out.println("新增圖書:");
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入名字:");
String name = scanner.nextLine();
System.out.println("請輸入作者:");
String author = scanner.nextLine();
System.out.println("請輸入類型:");
String type = scanner.nextLine();
System.out.println("請輸入價格:");
int price = scanner.nextInt();
Book book = new Book(name, author, price, type);
int pos = booklist.getUsedsize();
for (int i = 0; i < pos; i++) {
Book book1 = booklist.getBook(i);
if(book1.getName().equals(name)) {
System.out.println("已有這本書,不再存放");
return;
}
}
if(pos == booklist.getBooks().length) {
System.out.println("書架滿了");
}else {
booklist.setBook(pos, book);
booklist.setUsedsize(pos + 1);
}
}
}
Deloperation類
刪除圖書功能:
import book.Booklist;
import java.util.Scanner;
public class Deloperation implements IOoperation{
@Override
public void work(Booklist booklist) {
System.out.println("刪除圖書:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int size = booklist.getUsedsize();
for (int i = 0; i < size; i++) {
Book book = booklist.getBook(i);
if(book.getName().equals(name)) {
int pos = i;
int j = 0;
for ( j = pos; j < size - 1; j++) {
Book book1 = booklist.getBook(j+1);
booklist.setBook(j, book1);
}
booklist.setBook(j, null);
booklist.setUsedsize(size - 1);
System.out.println("刪除成功");
return;
}
}
System.out.println("不存在這本書");
}
}
Borrowoperation類
借閱圖書功能:
package operation;
import book.Book;
import book.Booklist;
import java.util.Scanner;
public class Borrowoperation implements IOoperation {
@Override
public void work(Booklist booklist) {
System.out.println("借閱圖書:");
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你要借閱的圖書:");
String name = scanner.nextLine();
int size = booklist.getUsedsize();
for (int i = 0; i < size; i++) {
Book book = booklist.getBook(i);
if(book.getName().equals(name)) {
book.setBorrowed(true);
System.out.println(book);
System.out.println("借閱成功");
return;
}
}
System.out.println("該書不存在");
}
}
Exitoperation類
退出系統(tǒng)功能:
package operation;
import book.Booklist;
public class Exitoperation implements IOoperation{
@Override
public void work(Booklist booklist) {
System.out.println("退出系統(tǒng)");
System.exit(0);
}
}
Findoperation類
查找圖書功能:
package operation;
import book.Book;
import book.Booklist;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
import javax.imageio.metadata.IIOMetadataController;
import java.util.Scanner;
public class Findoperation implements IOoperation{
@Override
public void work(Booklist booklist) {
System.out.println("查找圖書:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int size = booklist.getUsedsize();
for (int i = 0; i < size; i++) {
Book book = booklist.getBook(i);
if(book.getName().equals(name)) {
System.out.println("找到了,信息如下:");
System.out.println(book);
return;
}
}
System.out.println("上述不存在");
}
}
Returnoperation類
歸還圖書功能:
package operation;
import book.Book;
import book.Booklist;
import java.util.Scanner;
public class Returnoperation implements IOoperation{
@Override
public void work(Booklist booklist) {
System.out.println("歸還圖書:");
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入你要歸還的圖書:");
String name = scanner.nextLine();
int size = booklist.getUsedsize();
for (int i = 0; i < size; i++) {
Book book = booklist.getBook(i);
if(book.getName().equals(name)) {
book.setBorrowed(false);
System.out.println(book);
System.out.println("歸還成功");
return;
}
}
System.out.println("該書不存在");
}
}
Showoperation類
顯示圖書功能:
package operation;
import book.Book;
import book.Booklist;
public class Showoperation implements IOoperation {
@Override
public void work(Booklist booklist) {
System.out.println("顯示圖書:");
int size = booklist.getUsedsize();
for (int i = 0; i < size; i++) {
Book book = booklist.getBook(i);
System.out.println(book);
}
}
}
?Main類
通過Main類來組織程序執(zhí)行:
import book.Book;
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 scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("請輸入你的身份:1.管理員 2.普通用戶");
int choice = scanner.nextInt();
if(choice == 1) {
//管理員
return new AdminUser(name);
}else {
//普通用戶
return new NormalUser(name);
}
}
public static void main(String[] args) {
Booklist booklist = new Booklist();
//這里發(fā)生了向上轉(zhuǎn)型
User user = login();
while(true) {
int choice = user.menu();
//choice來決定調(diào)用哪個方法類
user.dooperation(choice, booklist);
}
}
}
效果展示?
圖書管理系統(tǒng)的畫圖分析
文章來源:http://www.zghlxwxcb.cn/news/detail-705516.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-705516.html
到了這里,關(guān)于【JAVA】 圖書管理系統(tǒng)(javaSE簡易版 內(nèi)含畫圖分析) | 期末大作業(yè)&課程設計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!