目錄
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)碑林免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。1.設(shè)計(jì)背景
2.設(shè)計(jì)思路
3.模塊展示及代碼演示
3.1 Book類的實(shí)現(xiàn)
3.2 BookList類的實(shí)現(xiàn)(書(shū)架)
3.3 異常類的實(shí)現(xiàn)(OperationException)
3.4 用戶類的實(shí)現(xiàn)
3.5 操作接口的實(shí)現(xiàn)(定義規(guī)范)
3.6 操作類的具體實(shí)現(xiàn)
3.6.1 增加操作
3.6.2 查找操作
3.6.3 刪除操作
3.6.4 顯示操作
3.6.5 借書(shū)操作
3.6.6 還書(shū)操作
3.6.7 退出功能
3.7 管理員類的實(shí)現(xiàn)
3.8 讀者類的實(shí)現(xiàn)
3.9 Test類
4. 整體效果展示
圖書(shū)館作為每個(gè)大學(xué)或者城市必不可少的部分,其存放的海量書(shū)籍與文獻(xiàn)使得其管理顯得尤為困難,此時(shí)圖書(shū)管理系統(tǒng)就起到了一個(gè)重大的作用。本次就將使用java語(yǔ)言中的異常處理,多態(tài),繼承,封裝,接口等知識(shí)點(diǎn),來(lái)綜合性的設(shè)計(jì)與實(shí)現(xiàn)出一個(gè)簡(jiǎn)易的圖書(shū)管理系統(tǒng)。
2.設(shè)計(jì)思路①首先我們需要區(qū)分出管理員與普通用戶,不同的用戶所展示的界面不同,利用繼承和多態(tài)可以實(shí)現(xiàn)這一思路;
②我們可以將各個(gè)操作都封裝起來(lái),單獨(dú)的設(shè)計(jì)成一個(gè)類,且這些操作都需要遵循一定的規(guī)范,而接口實(shí)際上就是定義了一種規(guī)范,這里可以使用接口來(lái)進(jìn)行實(shí)現(xiàn)。
③我們需要將書(shū)的屬性進(jìn)行封裝,同時(shí)設(shè)立一個(gè)書(shū)架類,即存放的是書(shū)的數(shù)組。
④我們需要實(shí)現(xiàn)管理員能夠添加書(shū)籍,查找書(shū)籍,刪除書(shū)籍以及顯示書(shū)籍;
⑤讀者能夠?qū)崿F(xiàn)查找書(shū)籍,借閱書(shū)籍以及歸還書(shū)籍。
3.模塊展示及代碼演示 3.1 Book類的實(shí)現(xiàn)我們這里書(shū)籍的屬性有書(shū)名、作者、價(jià)格、類型以及是否被借出,我們結(jié)合封裝性,將屬性設(shè)置為private權(quán)限,并提供相應(yīng)的get方法和set方法,空參構(gòu)造器,以及一個(gè)不包含是否被借出的構(gòu)造器(布爾值的默認(rèn)類型就是false,可以不進(jìn)行初始化)并需要提供對(duì)應(yīng)的toString()方法的重寫(具體重寫情況看展示效果),代碼實(shí)現(xiàn)如下:
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrowed; //是否被借出
//構(gòu)造器
public Book(){
}
public Book(String name,String author,int price,String type){
this.author=author;
this.name=name;
this.price=price;
this.type=type;
}
//get、set方法
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
//重寫toString()
public String toString() {
return "Book{" +
"書(shū)名:'" + name + '\'' +
", 作者:'" + author + '\'' +
", 價(jià)格:" + price +
", 類型:'" + type + '\'' +
", 是否借出:" + isBorrowed +
'}';
}
}
3.2 BookList類的實(shí)現(xiàn)(書(shū)架)BookList類我們主要提供一個(gè)ArrayList的泛型數(shù)組來(lái)進(jìn)行Book的存儲(chǔ),便于后面對(duì)書(shū)籍的操作。
BookList類我們提供一個(gè)私有的ArrayList的泛型數(shù)組,同時(shí)在空參構(gòu)造器中對(duì)其初始化,先加入幾本書(shū)籍,并提供對(duì)應(yīng)的get和set方法,具體代碼實(shí)現(xiàn)如下:
import java.util.ArrayList;
public class BookList {
private ArrayListbooks=new ArrayList();
public BookList() {
books.add(new Book("三國(guó)演義","羅貫中",19,"小說(shuō)"));
books.add(new Book("西游記","吳承恩",29,"小說(shuō)"));
books.add(new Book("紅樓夢(mèng)","曹雪芹",25,"小說(shuō)"));
}
public Book getBook(int pos){ //獲取某個(gè)位置上的書(shū)籍
return books.get(pos);
}
public void setBook(int pos,Book book){ //設(shè)置某個(gè)位置上的書(shū)籍
books.set(pos,book);
}
public ArrayListgetBooks(){ //獲取書(shū)架,便于后面的Operation的使用
return books;
}
}
3.3 異常類的實(shí)現(xiàn)(OperationException)異常的出現(xiàn)一般出現(xiàn)在操作中,我們可以通過(guò)自定義異常類的方式來(lái)處理不同異常情況的發(fā)生(也可以不進(jìn)行定義),我們的自定義也提供一個(gè)空參構(gòu)造器,和一個(gè)有參構(gòu)造器用來(lái)打印異常信息(自定義異常類需要繼承Exception類),代碼實(shí)現(xiàn)如下:
public class OperationException extends Exception{
static final long serialVersionUID=-33875169931L;
//空參構(gòu)造器
public OperationException(){
}
public OperationException(String message){
super(message); //Exception類中存在String參數(shù)的構(gòu)造器和message
}
}
3.4 用戶類的實(shí)現(xiàn)用戶類中,我們需要定義用戶的名字,同時(shí)定義一個(gè)抽象方法menu()來(lái)給子類管理員類和讀者類重寫(二者的目錄不同),同時(shí)要提供set和get方法,并提供抽象Operation方法給子類重寫使用(子類的目錄不同,執(zhí)行的操作就會(huì)存在差異),代碼實(shí)現(xiàn)如下:
public abstract class User {
private String name;
public User(String name){
this.name=name;
}
public User(){
}
public abstract void menu();
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public abstract void Operation(int n, BookList bookList)throws OperationException;
//子類的Operation會(huì)拋出異常來(lái)處理異常,父類也需要拋出異常,
//因?yàn)楦割悞伋霎惓4笮∫笥谧宇愔貙懛椒⊕伋龅漠惓?}
3.5 操作接口的實(shí)現(xiàn)(定義規(guī)范)我們需要執(zhí)行的操作有增加,刪除,顯示,查找等,他們都需要遵循一定的規(guī)范,而這個(gè)規(guī)范就由接口來(lái)實(shí)現(xiàn),在增刪查改等操作中,他們的主要方式就是工作,即work(),故接口中提供對(duì)應(yīng)的work()方法供接口的實(shí)現(xiàn)類,即各種操作進(jìn)行重寫,代碼實(shí)現(xiàn)如下:
public interface IOperation{
void work(BookList bookList)throws Exception;
}
3.6 操作類的具體實(shí)現(xiàn)
3.6.1 增加操作我們需要將操作類實(shí)現(xiàn)操作接口,同時(shí)為重寫的方法提供書(shū)架類,便于進(jìn)行操作。代碼實(shí)現(xiàn)如下:
添加操作并沒(méi)有什么異常,在簡(jiǎn)易圖書(shū)系統(tǒng)中不需要對(duì)書(shū)籍的信息進(jìn)行檢驗(yàn)。
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("新增圖書(shū)!");
Scanner scan=new Scanner(System.in);
System.out.println("請(qǐng)輸入要新增圖書(shū)的名字:");
String name=scan.next();
System.out.println("請(qǐng)輸入作者的名字:");
String author=scan.next();
System.out.println("請(qǐng)輸入圖書(shū)的價(jià)格:");
int price=scan.nextInt();
System.out.println("請(qǐng)輸入圖書(shū)的類型:");
String type=scan.next();
Book book=new Book(name,author,price,type); //新建書(shū)籍
bookList.getBooks().add(book); //使用ArrayList的add來(lái)進(jìn)行圖書(shū)的添加
System.out.println("添加成功!");
}
}
3.6.2 查找操作查找操作只有兩種情況,一種是找到了,另一種自然就是沒(méi)找到,在沒(méi)找到的時(shí)候我們就可以選擇拋出一個(gè)異常,查找操作的具體實(shí)現(xiàn)還是通過(guò)遍歷來(lái)實(shí)現(xiàn),代碼如下:
import java.util.Scanner;
//查找功能的實(shí)現(xiàn)
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) throws OperationException {
Scanner scan=new Scanner(System.in);
System.out.println("請(qǐng)輸入你想要查找的書(shū)名:");
String name=scan.next();
boolean flag=true;
for(int i=0;i
3.6.3 刪除操作刪除操作同理,也是提供相應(yīng)的書(shū)名,然后進(jìn)行搜索,如果找到了,就使用remove()方法進(jìn)行刪除,否則就拋出一個(gè)異常,具體還是通過(guò)遍歷實(shí)現(xiàn):
public class DelOperation implements IOperation{
public void work(BookList bookList)throws OperationException{
System.out.println("請(qǐng)輸入你想要?jiǎng)h除的書(shū)籍:");
Scanner scan=new Scanner(System.in);
String name=scan.next();
boolean flag=true;
for(int i=0;i< bookList.getBooks().size();i++){
if(bookList.getBooks().get(i).getName().equals(name)){
flag=false;
System.out.println("查找到了,請(qǐng)問(wèn)是否要進(jìn)行刪除:"+name+"(Y/N)");
if(scan.next().equalsIgnoreCase("y")){ //進(jìn)行刪除操作
bookList.getBooks().remove(i);
System.out.println("刪除成功!");
}
}
}
if(flag){
throw new OperationException("未查找到該書(shū)籍!");
}
}
}
3.6.4 顯示操作顯示操作較為好實(shí)現(xiàn),因?yàn)橹貙戇^(guò)book的toString()方法了,所以可以直接遍歷BookList進(jìn)行輸出即可,代碼如下:
public class DisplayOperation implements IOperation{
//顯示功能的實(shí)現(xiàn)
//結(jié)合book類的重寫進(jìn)行
@Override
public void work(BookList bookList) throws OperationException {
for(int i=0;i
3.6.5 借書(shū)操作借書(shū)操作的實(shí)現(xiàn)也相同,先提供一個(gè)書(shū)名,然后遍歷書(shū)架,若有則判斷其是否已被借出,如果是,則拋出一個(gè)異常,否則就借出成功,并更改書(shū)的借出狀態(tài);若沒(méi)有,即拋出一個(gè)未找到的異常。
public class BorrowOperation implements IOperation{
public void work(BookList bookList)throws OperationException{
System.out.println("請(qǐng)輸入你想要借的書(shū):");
Scanner scan=new Scanner(System.in);
String name=scan.next();
boolean flag=true;
for(int i=0;i< bookList.getBooks().size();i++){
if(bookList.getBooks().get(i).getName().equals(name)){ //查找到該書(shū)籍在圖書(shū)館中
flag=false;
if(bookList.getBooks().get(i).isBorrowed()==true){
throw new OperationException("借書(shū)失敗,該書(shū)已被借出");
}else{ //書(shū)未被借出
System.out.println("借出成功!");
bookList.getBooks().get(i).setBorrowed(true);
}
}
}
//出循環(huán)了,仍未找到
if(flag) {
throw new OperationException("未查找到該書(shū)");
}
}
}
3.6.6 還書(shū)操作還書(shū)操作的過(guò)程,也是提供相應(yīng)的書(shū)名,遍歷書(shū)架,若有該書(shū),則進(jìn)行歸還,同時(shí)設(shè)置其狀態(tài)為未被借出狀態(tài);如果未找到該書(shū),也拋出一個(gè)異常。
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) throws Exception {
Scanner scan=new Scanner(System.in);
System.out.println("請(qǐng)輸入你要?dú)w還的書(shū)籍:");
String name=scan.next();
boolean flag=true;
for(int i=0;i
3.6.7 退出功能退出功能的實(shí)現(xiàn)較為簡(jiǎn)單,我們這里使用System類中的靜態(tài)方法exit來(lái)進(jìn)行實(shí)現(xiàn),代碼如下:
//退出功能的實(shí)現(xiàn)
public class ExitOperation implements IOperation {
@Override
public void work(BookList bookList) throws OperationException {
System.out.println("是否要進(jìn)行退出?"+"(Y/N)");
Scanner scan=new Scanner(System.in);
if(scan.next().equalsIgnoreCase("Y")){
System.out.println("退出成功!");
System.exit(0);
}
}
}
3.7 管理員類的實(shí)現(xiàn)首先,管理員類需要繼承于用戶類,同時(shí)實(shí)現(xiàn)用戶類中的抽象方法menu(),同時(shí)實(shí)現(xiàn)抽象方法Operation(),這里可以利用接口的多態(tài)性來(lái)進(jìn)行實(shí)現(xiàn),同時(shí)我們要對(duì)Operation拋出的異常進(jìn)行處理,同時(shí)拋出在選擇過(guò)程中會(huì)出現(xiàn)的異常,代碼如下:
public class Admin extends User{
public Admin(String name){
super(name);
}
public void menu(){
System.out.println("尊敬的管理員:"+this.getName()+"歡迎來(lái)到圖書(shū)管理系統(tǒng)");
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)");
}
public void Operation(int n,BookList bookList)throws OperationException{
IOperation iOperation=null;
switch(n){
case 0:
iOperation= new ExitOperation();
break;
case 1:
iOperation=new FindOperation();
break;
case 2:
iOperation=new AddOperation();
break;
case 3:
iOperation=new DelOperation();
break;
case 4:
iOperation= new DisplayOperation();
break;
default:
throw new OperationException("輸入錯(cuò)誤,請(qǐng)重新輸入!");
}
try {
iOperation.work(bookList);
}catch(OperationException e){
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.8 讀者類的實(shí)現(xiàn)讀者類與管理員類同理,代碼如下:
public class Reader extends User{
public Reader(String name){
super(name);
}
@Override
public void menu() {
System.out.println("尊敬的讀者:"+this.getName()+"歡迎來(lái)到圖書(shū)館");
System.out.println("1.查找圖書(shū)");
System.out.println("2.借閱圖書(shū)");
System.out.println("3.歸還圖書(shū)");
System.out.println("0.退出系統(tǒng)");
}
public void Operation(int n, BookList bookList)throws OperationException {
IOperation iOperation=null;
switch(n){
case 0:
iOperation= new ExitOperation();
break;
case 1:
iOperation=new FindOperation();
break;
case 2:
iOperation=new BorrowOperation();
break;
case 3:
iOperation=new ReturnOperation();
break;
default:
throw new OperationException("輸入錯(cuò)誤,請(qǐng)重新輸入!");
}
try {
iOperation.work(bookList);
}catch(OperationException e){
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.9 Test類此時(shí),我們所有的框架都已經(jīng)搭建好了,只需要在Test類中添加main方法進(jìn)行測(cè)試即可,代碼如下:
public class Test {
public static void main(String[] args){
System.out.println("請(qǐng)輸入你的身份:");
System.out.println("管理員/普通用戶(0/1)");
Scanner scan=new Scanner(System.in);
int choice=scan.nextInt();
System.out.println("請(qǐng)輸入你的姓名:");
User user=null;
BookList bookList=new BookList();
switch(choice){ //進(jìn)行身份的選擇
case 0:
user=new Admin(scan.next());
break;
case 1:
user=new Reader(scan.next());
}
IOperation iOperation=null;
do {
user.menu();
System.out.println("請(qǐng)輸入你要進(jìn)行的操作:");
int input=scan.nextInt();
if(input==0){
System.out.println("退出成功");
return;
}
try {
user.Operation(input, bookList);
}catch(OperationException e){
System.out.println(e.getMessage());
}
}while(true);
}
}
4. 整體效果展示源碼地址在這:JavaSenior/day_02/src · 夕夕夕夕夕立/java - 碼云 - 開(kāi)源中國(guó) (gitee.com)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站標(biāo)題:用Java實(shí)現(xiàn)簡(jiǎn)易的圖書(shū)管理系統(tǒng)(超詳細(xì))-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://jinyejixie.com/article42/dijhec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、服務(wù)器托管、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容