欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)

 更新時(shí)間:2021年07月16日 14:18:06   作者:Coder米  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

一、項(xiàng)目分布

Book類: 定義了書的一些屬性(書名,作者,價(jià)格,分類,狀態(tài))并且寫了屬性的get、set方法
Library類: 寫了登錄函數(shù)(1、普通用戶,2、管理員,3、退出系統(tǒng)),
Person類:定義的人的屬性(姓名,性別,年齡)并且寫了屬性的get、set方法,定義了一些書。
operate接口:操作的接口,操作方法:查詢/查閱,刪除/借閱,增加/還書,顯示書籍列表
Root類:繼承了Person類,實(shí)現(xiàn)operate(查閱,刪除,增加,顯示書籍列表)接口
User類:繼承了Person類,實(shí)現(xiàn)operate(查詢,借閱,還書,顯示書籍列表)接口
Main類:Main中的主函數(shù)開啟整個(gè)項(xiàng)目。

模型圖:

聲明: 本項(xiàng)目只是一個(gè)簡(jiǎn)單的面向?qū)ο笕腴T小項(xiàng)目,有一些基礎(chǔ)理論需要掌握,比如對(duì)象,類,抽象類,接口,繼承,實(shí)現(xiàn),數(shù)組及數(shù)組的操作,for循環(huán),while循環(huán),switch語句,if語句。

二、代碼展示

1.Book類

public class Book {
 private String name; //書名
 private String author; //作者
 public double price; //價(jià)格
 private String category; //分類
 private boolean state; //狀態(tài)  true-未借出  false-已借出

 //通過構(gòu)造函數(shù)給定書的屬性
 public Book(String name,String author,double price,String category,boolean state){
  this.author = author;
  this.name = name;
  this.price = price;
  this.category = category;
  this.state = state;
 }

 public Book() {  //默認(rèn)10本書
  this(10);
 }
 public Book(int i) {
  Person.books = new Book[i];
 }

 //屬性的獲取和設(shè)置
 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 getCategory() {
  return category;
 }
 public void setCategory(String category) {
  this.category = category;
 }
 public boolean getState() {
  return state;
 }
 public void setState(boolean state) {
  this.state = state;
 }
}

2.Library類

import java.util.Scanner;

public class Library {
 Scanner sc = new Scanner(System.in);
 //登錄函數(shù):顯示登錄界面進(jìn)行選擇登錄
 public void login() {
  int count = 0;
  Person p = null;
  while (count < 2) {
   System.out.println("===============jewel圖書管理系統(tǒng)===============");
   System.out.println("歡迎討論指正! qq505791225"+"\n");
   System.out.println("請(qǐng)登錄:1.普通用戶  2.管理員登錄  3.退出系統(tǒng)");

   int n = sc.nextInt();
   //通過輸入的值進(jìn)行登錄判斷
   if (n == 3) {
    return;
   }
   switch (n) {
    case 1:
     System.out.println("請(qǐng)輸入姓名:");
     String Uname = sc.next();
     System.out.println("請(qǐng)輸入性別:");
     String Usex = sc.next();
     System.out.println("請(qǐng)輸入年齡:");
     int Uage = sc.nextInt();

     p = new User(Uname,Usex,Uage); //構(gòu)造普通用戶對(duì)象

     System.out.println("登錄成功!");
     System.out.println("當(dāng)前普通用戶:"+"姓名:" + p.getName() + " "+"性別:" + p.getSex() + " "+"年齡"+ p.getAge());
     //普通用戶循環(huán)操作
     while (true) {
      System.out.println("請(qǐng)輸入你的操作: 1.查詢書籍 2.借閱書籍 3.歸還書籍 4.顯示書籍列表 5.退出");
      int i = sc.nextInt();
      if (i == 5) {
       System.out.println("您已成功退出!");
       break;
      }else {
       p.operate();  //調(diào)用普通用戶的操作方法
      }
     }
     break;
    case 2:
     System.out.println("請(qǐng)輸入管理員姓名:");
     String Rname = sc.next();
     System.out.println("請(qǐng)輸入性別:");
     String Rsex = sc.next();
     System.out.println("請(qǐng)輸入年齡:");
     int Rage = sc.nextInt();

     p = new Root(Rname,Rsex,Rage);//構(gòu)造管理員對(duì)象

     System.out.println("登錄成功!");
     System.out.println("當(dāng)前管理員:"+"姓名:" + p.getName() + " "+"性別:" + p.getSex() + " "+"年齡" + p.getAge());
     while (true) {
      System.out.println("請(qǐng)輸入你的操作: 1.整理書籍 2.查閱書籍 3.增加書籍 4.刪除書籍 5.顯示書籍列表 6.退出");
      int j = sc.nextInt();
      if (j == 6) {
       System.out.println("您已成功退出!");
       break;
      }else{
       p.operate();//調(diào)用管理員的操作方法
      }
     } break;
   }
  }
 }
}

3.Person類(抽象類)

abstract class Person {
 public String name;
 public String sex;
 public int age;
 /**
  *  默認(rèn)定義10本書籍。(預(yù)留3本新書的buffer,用來添加書籍)
  */
 public static Book[] books = new Book[]{
   new Book("西游記", "吳承恩", 10, "名著", true),
   new Book("紅樓夢(mèng)", "曹雪芹", 20, "名著", true),
   new Book("三國(guó)演義", "羅貫中", 15, "名著", true),
   new Book("小茗同學(xué)", "小明", 5, "雜志", true),
   new Book("C與指針", "馬老師", 35, "計(jì)算機(jī)", true),
   new Book("Java編程思想", "王老師", 55, "計(jì)算機(jī)", true),
   new Book("新世界", "陳宇", 15, "雜志", true),
   new Book("阿衰與大頭妹", "阿衰", 5, "漫畫", true),
   new Book("一個(gè)人就一個(gè)人", "劉同", 35, "小說", true),
   new Book("活著", "陳彤", 36, "小說", true),
   new Book(),
   new Book(),
   new Book(),
 };

 public Person(String name, String sex, int age) {
  this.age = age;
  this.name = name;
  this.sex = sex;
 }

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 /**
  *  抽象類中的抽象方法
  */
 public abstract void operate();
}

4.operate接口

public interface operate{  //操作的接口
    void select(Book[] books); //查詢,查閱
    void delete(Book[] books);//刪除,借閱
    void add(Book[] books); //增加,還書
    void list(Book[] books); //顯示書列表
}

5.Root類

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Root extends Person implements Operate {
 //繼承了人的類,需要重寫它的抽象方法operate,實(shí)現(xiàn)了operate接口,需要重寫接口內(nèi)的方法
 
 public Root(String name, String sex, int age) {
  //調(diào)用人基類的構(gòu)造函數(shù)
  super(name, sex, age);
 }

 Scanner sc = new Scanner(System.in);

 /**
  * 管理員的操作
  */
 @Override
 public void operate() {
  System.out.print("請(qǐng)輸入確認(rèn)操作:");
  int i = sc.nextInt();
  switch (i) {
   case 1:
    //整理
    sort(books);
    break;
   case 2:
    //查
    select(books);
    break;
   case 3:
    //加
    add(books);
    break;
   case 4:
    //刪
    delete(books);
    break;
   case 5:
    //列表
    list(books);
    break;
   default:
    System.out.println("輸入有誤!");
    break;

  }
 }

 /**
  *  compareable整理,重寫compare to,如果數(shù)組中有空的,則會(huì)出現(xiàn)空指針異常,把不空的拷到另一個(gè)新的數(shù)組,然后實(shí)現(xiàn)
  * @param books
  */
 public void sort(Book[] books) {
  System.out.println("圖書館中的書按價(jià)格整理如下:" + "\n" + "【書名】—— 【作者】——【價(jià)格】——【分類】——狀態(tài)");
  Arrays.sort(books, new Comparator<Book>() {
   @Override
   public int compare(Book o1, Book o2) {
    return (int) (o1.getPrice() - o2.getPrice());
   }
  });
  //遍歷數(shù)組打印書的列表
  for (int i = 0; i < books.length; i++) {
   if (books[i].price != 0) {
    System.out.println(
      "【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
        + "】——【" + books[i].getCategory() + "】——" + books[i].getState());
   }
  }
 }

 @Override
 public void select(Book[] books) {
  System.out.println("請(qǐng)輸入書名進(jìn)行查詢:");
  String name = sc.next();
  if (name != null) {
   boolean flag = false;
   int bookNum = 0;
   for (int i = 0; i < books.length; i++) {
    if (books[i].getName() != null && name.equals(books[i].getName())) {
     flag = true;
     bookNum = i;
     break;
    }
   }
   if (!flag) {
    System.out.println("未查詢到此書籍!");
   } else {
    System.out.println("書籍信息為:" + "\n" + "【書名】—— 【作者】——【價(jià)格】——【分類】——狀態(tài)");
    System.out.println(
      "【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
        .getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
        .getState());
   }
  }
 }

 @Override
 public void delete(Book[] books) {
  System.out.println("請(qǐng)輸入要?jiǎng)h除的書名:");
  String str = sc.next();
  if (str != null) {
   for (int i = 0; i < books.length; i++) {
    if (books[i].getName().equals(str)) {
     books[i] = null;
     System.out.println("刪除成功!");
     break;
    }
   }
  }

 }

 @Override
 public void add(Book[] books) {
  System.out.println("請(qǐng)輸入書名:");
  String name = sc.next();
  System.out.println("請(qǐng)輸入作者:");
  String author = sc.next();
  System.out.println("請(qǐng)輸入價(jià)格:");
  double price = sc.nextDouble();
  System.out.println("請(qǐng)輸入分類:");
  String category = sc.next();

  boolean flag = false;
  for (int i = 0; i < books.length; i++) {
   if (books[i].getName() == null) {
    flag = true;
    books[i].setName(name);
    books[i].setAuthor(author);
    books[i].setPrice(price);
    books[i].setCategory(category);
    books[i].setState(true);
    System.out.println("添加成功");
    break;
   }
  }
  if (!flag) {
   System.out.println("【警告】數(shù)組預(yù)留buffer最多只能添加3本新書,沒有位置放置新書了,如需添加多余3本,需要在‘Person'類中添加buffer!" + "\n");
  }

 }

 @Override
 public void list(Book[] books) {
  System.out.println("圖書列表如下:" + "\n" + "【書名】—— 【作者】——【價(jià)格】——【分類】——狀態(tài)");  //打印Book數(shù)組
  for (int i = 0; i < books.length; i++) {
   if (books[i] != null) {
    if (books[i].price != 0) {
     System.out.println(
       "【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
         + "】——【" + books[i].getCategory() + "】——" + books[i].getState());

    }
   }
  }
 }
}

6.User類

import java.util.Scanner;

public class User extends Person implements Operate {   //user類繼承了人的類,  實(shí)現(xiàn)operate接口

 public User(String name, String sex, int age) {
  //調(diào)用人基類的構(gòu)造函數(shù)(派生類不繼承基類的構(gòu)造函數(shù))
  super(name, sex, age);
 }

 Scanner sc = new Scanner(System.in);

 @Override
 public void operate() {  //普通用戶的操作

  System.out.print("請(qǐng)輸入確認(rèn)操作:");
  int i = sc.nextInt();
  switch (i) {
   case 1:
    //查
    select(books);
    break;
   case 2:
    //借
    delete(books);
    break;
   case 3:
    //還
    add(books);
    break;
   case 4:
    //書列表
    list(books);
    break;
   default:
    System.out.println("輸入有誤!");
    break;
  }
 }

 @Override
 public void select(Book[] books) {
  System.out.println("請(qǐng)輸入書名進(jìn)行查詢:");
  String name = sc.next();
  if (name != null) {
   boolean flag = false;
   int bookNum = 0;
   for (int i = 0; i < books.length; i++) {
    if (books[i].getName() != null && name.equals(books[i].getName())) {
     flag = true;
     bookNum = i;
     break;
    }
   }
   if (!flag) {
    System.out.println("未查詢到此書籍!");
   } else {
    System.out.println("書籍信息為:" + "\n" + "【書名】—— 【作者】——【價(jià)格】——【分類】——狀態(tài)");
    System.out.println(
      "【" + books[bookNum].getName() + "】—— 【" + books[bookNum].getAuthor() + "】——【" + books[bookNum]
        .getPrice() + "】——【" + books[bookNum].getCategory() + "】——" + books[bookNum]
        .getState());
   }
  }
 }

 @Override
 public void delete(Book[] books) {
  System.out.println("請(qǐng)輸入要借閱的書名:");
  String name = sc.next();
  if (name != null) {
   for (int i = 0; i < books.length - 1; i++) {
    if (books[i].getName().equals(name)) {
     //借走書時(shí)設(shè)置狀態(tài)為false
     if (!books[i].getState()) {
      System.out.println("【" + name + "】" + "已經(jīng)被借出!");
     } else {
      books[i].setState(false);
      System.out.println("借閱成功!");
     }
     break;
    }
   }
  }
 }

 @Override
 public void add(Book[] books) {

  System.out.println("請(qǐng)輸入要還的書名:");
  String name = sc.next();

  if (name != null) {
   boolean flag = true;
   int i = 0;
   while (flag) {
    if (books[i].getName().equals(name)) {
     if (!books[i].getState()) {
      books[i].setState(true);
      System.out.println("還書成功!");
      flag = false;
     } else {
      System.out.println("該書籍已經(jīng)被還回!");
      break;
     }
    }
    i++;
   }
  }
 }


 @Override
 public void list(Book[] books) {
  System.out.println("圖書列表如下:" + "\n" + "【書名】—— 【作者】——【價(jià)格】——【分類】——狀態(tài)");  //打印Book數(shù)組
  for (int i = 0; i < books.length; i++) {
   if (books[i] != null) {
    if (books[i].price != 0) {
     System.out.println(
       "【" + books[i].getName() + "】—— 【" + books[i].getAuthor() + "】——【" + books[i].getPrice()
         + "】——【" + books[i].getCategory() + "】——" + books[i].getState());

    }
   }
  }
 }
}

7.Main類

public class Main {
    public static void main(String[] args) {
        Library library = new Library(); //構(gòu)造Library對(duì)象
        library.login(); //調(diào)用對(duì)象的登錄方法。
    }
}

三、實(shí)現(xiàn)結(jié)果

1.登錄界面

普通用戶登錄

2.普通用戶:查詢、借閱、歸還 、顯示列表



3.管理員登錄,按圖書價(jià)格整理書籍

4.管理員添加書籍

5.管理員刪除書籍

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的代碼詳解

    Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的代碼詳解

    這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)時(shí)間類型轉(zhuǎn)換的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2023-09-09
  • java實(shí)現(xiàn)學(xué)生信息錄入界面

    java實(shí)現(xiàn)學(xué)生信息錄入界面

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息錄入界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • jdbc實(shí)現(xiàn)用戶注冊(cè)功能代碼示例

    jdbc實(shí)現(xiàn)用戶注冊(cè)功能代碼示例

    這篇文章主要介紹了jdbc實(shí)現(xiàn)用戶注冊(cè)功能,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    下面小編就為大家?guī)硪黄狫ava反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • ConcurrentHashMap是如何實(shí)現(xiàn)線程安全的你知道嗎

    ConcurrentHashMap是如何實(shí)現(xiàn)線程安全的你知道嗎

    這篇文章主要介紹了ConcurrentHashMap是如何實(shí)現(xiàn)線程安全的你知道嗎,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 一文弄懂Java中ThreadPoolExecutor

    一文弄懂Java中ThreadPoolExecutor

    ThreadPoolExecutor是Java中的一個(gè)線程池實(shí)現(xiàn),它可以管理和控制多個(gè) Worker Threads,本文就詳細(xì)的介紹一下Java中ThreadPoolExecutor,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法

    Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法,實(shí)例分析了ssl認(rèn)證的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Java中Cglib代理和JDK代理的區(qū)別詳解

    Java中Cglib代理和JDK代理的區(qū)別詳解

    這篇文章主要介紹了Java中Cglib代理和JDK代理的區(qū)別詳解,Cglib代理功能更強(qiáng),無論目標(biāo)類是否實(shí)現(xiàn)了接口都可以代理,他是基于繼承的方式來代理目標(biāo)類,如果目標(biāo)類也實(shí)現(xiàn)了接口,代理類也會(huì)實(shí)現(xiàn)一次,需要的朋友可以參考下
    2023-09-09
  • 項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題

    項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題

    這篇文章主要介紹了項(xiàng)目總結(jié)之HttpURLConnection的disconnect的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java合并多個(gè)文件的實(shí)例代碼

    java合并多個(gè)文件的實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于java合并多個(gè)文件的實(shí)例代碼,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02

最新評(píng)論