Java快速實現(xiàn)圖書管理基本功能
前言
今天的內(nèi)容主要是利用前面所學(xué)的知識點:類,抽象類,封裝,繼承,多態(tài),接口等進(jìn)行的一個簡單的代碼練習(xí)。
主要要求:
1、用戶登錄
2、管理端
- 查找圖書
- 新增圖書
- 刪減圖書
- 顯示圖書列表
- 退出系統(tǒng)
3、用戶端
- 查找圖書
- 借閱圖書
- 歸還圖書
- 退出系統(tǒng)
我們可以將以上內(nèi)容分為對書的創(chuàng)建初始化,對用戶的操作,對書的操作。
主函數(shù)
Main:(對所有流程進(jìn)行整合)
import book.BookList;
import User.NormalUser;
import User.AdminUser;
import User.user;
import java.util.Scanner;
public class Main {
public static user login(){
System.out.print("請輸入你的姓名:");
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);
}else{
return new NormalUser(name);
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
user us = login();//向上轉(zhuǎn)型
while (true) {
int choice = us.menu();//多態(tài)綁定
us.doWork(choice, bookList);
}
}
}書的創(chuàng)建
Book:
package book;
//創(chuàng)建圖書
public class Book {
private String name;//書名
private String author;//書的作者
private String type;//書的類型
private int price;//書的價格
boolean isBorrowed;//書是否被借出
//在這里我們就不對isBorrowed進(jìn)行構(gòu)造,在最后打印的時候?qū)λM(jìn)行判斷就好
public Book(String name, String author, String type, int price) {
this.name = name;
this.author = author;
this.type = type;
this.price = price;
}
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 String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", type='" + type + '\'' +
", price=" + price +
((isBorrowed==true)?" 已被借出":" 未被借出") +
'}';
}
}BookList:
package book;
//創(chuàng)建書架
public class BookList {
private Book[] books=new Book[10];//創(chuàng)建一個數(shù)組當(dāng)書架放書,假設(shè)一共可以放10本
public int usedSize;//書架上有效放書數(shù)
public BookList(){//假設(shè)一開始書架上就放了三本書
books[0]=new Book("紅樓夢","曹雪芹","文學(xué)",55);
books[1]=new Book("西游記","吳承恩","文學(xué)",65);
books[2]=new Book("水滸傳","施耐庵","文學(xué)",23);
usedSize=3;
}
public int getUsedSize(){
return usedSize;
}
public void setUsedSize(int usedSize){
this.usedSize=usedSize;
}
//獲取一本書的位置
public Book getpos(int pos){
return this.books[pos];
}
//在下標(biāo)為pos的位置上放一本書(添加)
public void setBook(int pos,Book book){
this.books[pos]=book;
}
}對用戶的操作
創(chuàng)建用戶user類:
package User;
import book.BookList;
import operation.IOperation;
public abstract class user {
protected String name;
protected IOperation[] iOperations;//創(chuàng)建操作類數(shù)組,通過返回的數(shù)字用于對書的操作
public user(String name){
this.name=name;
}
public abstract int menu();//用于動態(tài)綁定
public void doWork(int choice, BookList bookList){
iOperations[choice].work(bookList);
}
}創(chuàng)建管理員用戶類AdminUser ,是 user 的子類.
package User;
import operation.*;
import java.util.Scanner;
public class AdminUser extends user {
public AdminUser(String name) {
super(name);
this.iOperations=new IOperation[]{//初始化數(shù)組,將菜單上的數(shù)字與對應(yīng)的操作放好
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation()
};
}
public int menu(){
System.out.println("========管理員的菜單========");
System.out.println("歡迎"+this.name+"來到圖書館");
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.print("請選擇你要的操作: ");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;//返回選擇的數(shù)字
}
}創(chuàng)建普通用戶類NormalUser, 是 user 的子類.
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()
};
}
public int menu(){
System.out.println("========普通用戶的菜單========");
System.out.println("歡迎"+this.name+"來到圖書館");
System.out.println("1.查找圖書");
System.out.println("2.借閱圖書");
System.out.println("3.歸還圖書");
System.out.println("0.退出系統(tǒng)");
System.out.println("============================");
System.out.print("請選擇你要的操作: ");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}對書的操作
創(chuàng)建接口 IOperation:
package operation;
import book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner=new Scanner(System.in);
void work(BookList bookList);
}創(chuàng)建增加圖書類AddOperation,繼承接口 IOperation
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
public void work(BookList bookList){
System.out.println("新增圖書!");
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,type,price);//新創(chuàng)建一本書
int size= bookList.getUsedSize();
bookList.setBook(size,book);
bookList.setUsedSize(size+1);
System.out.println("新增圖書成功");
}
}創(chuàng)建刪減圖書類DelOperation,繼承接口 IOperation
package operation;
import book.Book;
import book.BookList;
public class DelOperation implements IOperation{
public void work(BookList bookList){
System.out.println("刪減圖書");
System.out.println("請輸入要刪減圖書的名字:");
String name=scanner.nextLine();
int size= bookList.getUsedSize();
int index=0;
int i=0;
for (i = 0; i <size ; i++) {
Book book = bookList.getpos(i);
if(name.equals(book.getName())) {
index=i;
break;
}
}
if(i>=size){
System.out.println("沒有你要刪除的圖書");
}
//刪除就是要將j+1下標(biāo)的信息放進(jìn)j下標(biāo)里面信息去,這樣子j里面的信息就被刪除了
for (int j = index; j < size-1; j++) {
Book book=bookList.getpos(j+1);//獲取j+1下標(biāo)放的書的信息給j下標(biāo)
bookList.setBook(j,book);
}
bookList.setBook(size,null);//刪除之后,把最后一個下標(biāo)信息置為null
bookList.setUsedSize(size-1);//下標(biāo)減1
System.out.println("刪除成功");
}
}創(chuàng)建查找圖書類FindOperation,繼承接口 IOperation
package operation;
import book.BookList;
import book.Book;
public class FindOperation implements IOperation{
public void work(BookList bookList){
System.out.println("查找圖書!");
System.out.println("請輸入要查找書的名字");
String name = scanner.nextLine();
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getpos(i);//找到這本書的信息
if(name.equals(book.getName())) {//比較名字是否相同
System.out.println("找到了這本書,信息如下:");
System.out.println(book);
return;
}
}
System.out.println("沒有找到這本書!");
}
}創(chuàng)建顯示圖書列表類DisplayOperation,繼承接口 IOperation
package operation;
import book.Book;
import book.BookList;
public class DisplayOperation implements IOperation{
public void work(BookList bookList){
System.out.println("顯示圖書");
for(int i=0;i<bookList.usedSize;i++){
Book book=bookList.getpos(i);
System.out.println(book);
}
}
}創(chuàng)建借閱圖書列表類BorrowOperation,繼承接口 IOperation
package operation;
import book.Book;
import book.BookList;
public class BorrowOperation implements IOperation{
public void work(BookList bookList){
System.out.println("借閱圖書");
System.out.println("請輸入你要借閱的圖書的名字");
String name=scanner.nextLine();
int size= bookList.getUsedSize();
for(int i=0;i<size;i++){
Book book = bookList.getpos(i);
if(name.equals(book.getName())) {
book.setBorrowed(true);
System.out.println("借閱成功");
System.out.println(book);
return;
}
}
System.out.println("沒有你要借閱的書");
}
}創(chuàng)建歸還圖書列表類ReturnOperation,繼承接口 IOperation
package operation;
import book.Book;
import book.BookList;
public class ReturnOperation implements IOperation{
public void work(BookList bookList){
System.out.println("歸還圖書");
System.out.println("請輸入你要歸還的圖書的名字");
String name=scanner.nextLine();
int size= bookList.getUsedSize();
for(int i=0;i<size;i++){
Book book = bookList.getpos(i);
if(name.equals(book.getName())) {
book.setBorrowed(true);
System.out.println("歸還成功");
System.out.println(book);
return;
}
}
System.out.println("沒有你要歸還的書");
}
}創(chuàng)建退出系統(tǒng)類ExitOperation,繼承接口 IOperation
package operation;
import book.BookList;
public class ExitOperation implements IOperation{
public void work(BookList bookList){
System.out.println("退出系統(tǒng)");
System.exit(0);
}
}到此這篇關(guān)于Java快速實現(xiàn)圖書管理基本功能的文章就介紹到這了,更多相關(guān)Java圖書管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用正則表達(dá)式判斷獨立字符的存在(代碼示例)
通過使用正則表達(dá)式,我們可以更加靈活地判斷字符串中是否包含特定的字符,并且可以控制匹配的條件,如獨立的字符,這為我們處理字符串提供了更多的選擇和功能,這篇文章主要介紹了Java使用正則表達(dá)式判斷獨立字符的存在,需要的朋友可以參考下2023-10-10
在Java中Collection的一些常用方法總結(jié)
今天給大家?guī)淼闹R是關(guān)于Java的,文章圍繞著Java中Collection的一些常用方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
spring的TransactionSynchronizationAdapter事務(wù)源碼解析
這篇文章主要介紹了spring的TransactionSynchronizationAdapter事務(wù)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
簡單講解Java設(shè)計模式編程中的單一職責(zé)原則
這篇文章主要介紹了Java設(shè)計模式編程中的單一職責(zé)原則,這在團(tuán)隊開發(fā)編寫接口時經(jīng)常使用這樣的約定,需要的朋友可以參考下2016-02-02
IDEA在SpringBoot項目使用Maven打包后jar包太小問題及解決
這篇文章主要介紹了IDEA在SpringBoot項目使用Maven打包后jar包太小問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04

