Java順序表實(shí)現(xiàn)圖書管理系統(tǒng)
本文實(shí)例為大家分享了Java順序表實(shí)現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、簡介
實(shí)現(xiàn)此項(xiàng)目的目的是鞏固并理解前面的知識(shí)點(diǎn):類,抽象類,封裝,繼承,多態(tài),接口等
二、核心需求
管理端
??查閱書籍
??增加書籍
??刪除書籍
??打印書籍列表
??退出系統(tǒng)
用戶端
??查詢書籍
??借閱書籍
??歸還書籍
??打印書籍列表
??退出系統(tǒng)
三、類的設(shè)計(jì)
1. 創(chuàng)建圖書類
圖書類中包含圖書的名稱,價(jià)格,類型,作者和是否被借出等信息,并生成構(gòu)造方法,Getter()和Setter()方法,toString方法(注意成員變量應(yīng)該盡可能使用private關(guān)鍵字修飾)
public class Book {
private String name;
private double price;
private String type;
private String author;
private boolean isBorrowed;
public Book(String name, double price, String type, String author) {
this.name = name;
this.price = price;
this.type = type;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
", type='" + type + '\'' +
", author='" + author + '\'' +
", 狀態(tài):" +((isBorrowed) ? "已借出":"未借出")+
'}';
}
}
2. 創(chuàng)建圖書列表類
圖書列表類用于存放圖書,我們可以先在列表中初始化幾本書以方便后續(xù)測試
public class BookList {
private Book[] books = new Book[10];
private int usedSize;
public BookList(){
books[0] = new Book("三國演義",19,"小說","羅貫中");
books[1] = new Book("水滸傳",29,"小說","施耐庵");
books[2] = new Book("西游記",39,"小說","吳承恩");
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;
}
}
3. 創(chuàng)建用戶類
創(chuàng)建一個(gè)用戶類并將其定義為抽象類,再創(chuàng)建普通用戶類和管理員類繼承于用戶類:
創(chuàng)建用戶類并定義為抽象類:
public abstract class User {
protected String name;
protected IOperation[] iOperations;
public abstract int menu();
public void doWork(int choice, BookList bookList){
iOperations[choice].work(bookList);
}
public User(String name) {
this.name = name;
}
}
創(chuàng)建管理員用戶類:
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.iOperations = new IOperation[]{
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DisplayOperation(),
new DelOperation()
};
}
@Override
public int menu(){
System.out.println("===========管理員菜單============");
System.out.println("您好, 管理員 "+this.name+":");
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("=================================");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
創(chuàng)建普通用戶類:
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.iOperations = new IOperation[]{
new ExitOperation(),
new DisplayOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
};
}
@Override
public int menu(){
System.out.println("===========普通用戶菜單============");
System.out.println("您好,用戶 "+this.name+":");
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("=================================");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
4. 創(chuàng)建操作相關(guān)的類
首先創(chuàng)建一個(gè)接口用于實(shí)現(xiàn)多態(tài):
public interface IOperation {
void work(BookList bookList);
}
創(chuàng)建添加書籍類:
public class AddOperation implements IOperation{
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入圖書名稱:");
String name = scanner.nextLine();
System.out.println("請輸入價(jià)格:");
double price = scanner.nextDouble();
System.out.println("請輸入類型:");
String type = scanner.next();
System.out.println("請輸入作者:");
String author = scanner.next();
Book book = new Book(name,price,type,author);
int usedSize = bookList.getUsedSize();
bookList.setBook(usedSize,book);
bookList.setUsedSize(++usedSize);
System.out.println("添加圖書成功!");
}
}
創(chuàng)建查找書籍類:
public class FindOperation implements IOperation{
public void work(BookList bookList){
System.out.println("請輸入書名:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
for(int i=0;i<bookList.getUsedSize();i++){
Book book = bookList.getBook(i);
if(name.equals(book.getName())){
System.out.println(book);
return;
}
}
System.out.println("找不到 《"+name+"》 這本書");
}
}
創(chuàng)建借閱書籍類:
public class BorrowOperation implements IOperation {
public void work(BookList bookList) {
System.out.println("請輸入你要借閱的書籍:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int i = 0;
for (i = 0; i < bookList.getUsedSize() - 1; i++) {
Book book = bookList.getBook(i);
if (name.equals(book.getName()) && !book.isBorrowed()) {
book.setBorrowed(true);
System.out.println("借閱成功!");
return;
}
if (name.equals(book.getName()) && book.isBorrowed()) {
System.out.println("該書籍已被借出");
return;
}
}
System.out.println("找不到你要借閱的書籍!");
}
}
創(chuàng)建歸還書籍類:
public class ReturnOperation implements IOperation{
public void work(BookList bookList){
System.out.println("請輸入你要?dú)w還的書籍:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int i=0;
for(i=0;i<bookList.getUsedSize()-1;i++){
Book book = bookList.getBook(i);
if(name.equals(book.getName())&& book.isBorrowed()){
book.setBorrowed(false);
System.out.println("歸還成功!");
return;
}
if(name.equals(book.getName())&& !book.isBorrowed()){
System.out.println("此書處于未借出狀態(tài)!");
return;
}
}
System.out.println("找不到你要?dú)w還的書籍!");
}
}
創(chuàng)建刪除書籍類:
public class DelOperation implements IOperation{
public void work(BookList bookList) {
System.out.println("請輸入要?jiǎng)h除的書名:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
int index = 0;
int i = 0;
for(i=0;i<bookList.getUsedSize();i++){
Book book = bookList.getBook(i);
if(name.equals(book.getName())){
index = i;
break;
}
}
if(i>=bookList.getUsedSize()) {
System.out.println("找不到這本書");
return;
}
int j = 0;
for (j = index;j< bookList.getUsedSize()-1;j++){
Book book = bookList.getBook(j+1);
bookList.setBook(j,book);
}
bookList.setBook(bookList.getUsedSize()-1, null);
bookList.setUsedSize(bookList.getUsedSize()-1);
System.out.println("刪除成功!");
}
}
創(chuàng)建打印書籍列表類:
public class DisplayOperation implements IOperation{
public void work(BookList bookList){
int usedSize = bookList.getUsedSize();
for (int i=0;i<usedSize;i++){
Book book = bookList.getBook(i);
System.out.println(book);
}
}
}
退出系統(tǒng)類:
public class ExitOperation implements IOperation{
public void work(BookList bookList){
System.out.println("退出系統(tǒng)!");
System.exit(0);
}
}
主函數(shù)類:
public class Main {
public static User work(){
System.out.println("請輸入您的姓名:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("請輸入身份: 1-> 管理員登錄 0-> 用戶登錄");
int choice = scanner.nextInt();
if(choice==1){
return new AdminUser(name);
}
return new NormalUser(name);
}
public static void main(String[] args) {
BookList bookList = new BookList();
User user = work();
while (true) {
int choice = user.menu();
user.doWork(choice, bookList);
}
}
}
The end
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot連接多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方法
有時(shí)候一個(gè)SpringBoot項(xiàng)目需要同時(shí)連接兩個(gè)數(shù)據(jù)庫,本文就來介紹一下springboot連接多個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼詳解
Feign是一個(gè)聲明式的Web Service客戶端,是一種聲明式、模板化的HTTP客戶端。而OpenFeign是Spring Cloud 在Feign的基礎(chǔ)上支持了Spring MVC的注解,如@RequesMapping等等,這篇文章主要給大家介紹了關(guān)于JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼的相關(guān)資料,需要的朋友可以參考下2021-10-10
springboot開啟mybatis駝峰命名自動(dòng)映射的三種方式
這篇文章給大家總結(jié)springboot開啟mybatis駝峰命名自動(dòng)映射的三種方式,文章并通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-02-02
關(guān)于Java?中?Future?的?get?方法超時(shí)問題
這篇文章主要介紹了Java?中?Future?的?get?方法超時(shí),最常見的理解就是,“超時(shí)以后,當(dāng)前線程繼續(xù)執(zhí)行,線程池里的對應(yīng)線程中斷”,真的是這樣嗎?本文給大家詳細(xì)介紹,需要的朋友參考下吧2022-06-06
Spring Boot之FilterRegistrationBean-自定義Filter詳解
這篇文章主要介紹了Spring Boot之FilterRegistrationBean-自定義Filter詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java基于JNDI 實(shí)現(xiàn)讀寫分離的示例代碼
本文主要介紹了Java基于JNDI 實(shí)現(xiàn)讀寫分離的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
詳解Java的JDBC API的存儲(chǔ)過程與SQL轉(zhuǎn)義語法的使用
這篇文章主要介紹了詳解Java的JDBC API的存儲(chǔ)過程與SQL轉(zhuǎn)義語法的使用,JDBC是Java用于連接使用各種數(shù)據(jù)庫的API,需要的朋友可以參考下2015-12-12

