一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JAVA實戰練習之圖書管理系統實現流程

JAVA實戰練習之圖書管理系統實現流程

2022-02-24 13:10ck_67 Java教程

隨著網絡技術的高速發展,計算機應用的普及,利用計算機對圖書館的日常工作進行管理勢在必行,本篇文章手把手帶你用Java實現一個圖書管理系統,大家可以在過程中查缺補漏,提升水平

前言

長期以來,人們使用傳統的人工方式管理圖書館的日常業務,其操作流程比較煩瑣。在借書時,讀者首先將要借的書和借閱證交給工作人員,然后工作人員將每本書的信息卡片和讀者的借閱證放在一個小格欄里,最后在借閱證和每本書貼的借閱條上填寫借閱信息。在還書時,讀者首先將要還的書交給工作人員,工作人員根據圖書信息找到相應的書卡和借閱證,并填好相應的還書信息。太過于繁瑣了!所以,我們需求設計一個圖書管理系統來方便學生的借書和圖書館管理書籍。

 

項目說明:

  • 本系統功能分為讀者信息管理模塊、圖書信息管理模塊、圖書借閱管理模塊、基礎信息維護模塊和用戶管理模塊。
  • 讀者信息管理:能夠對讀者的基本信息進行管理,包括新增讀者,如學校新來一名教師,想要借書,就必須先添加讀者信息;讀者信息的修改,如學生轉到別的專業,此時要修改學生的基本信息;刪除讀者的信息,比如某個學生中途退學了,可以將其信息刪除。查詢讀者的信息,比如有同學拾到了一張借閱卡,卡上有學生的編號,通過此號來查詢學生的聯系電話,從而可以找到學生。
  • 圖書信息管理:能夠對圖書的基本信息進行管理,包括新增圖書,學校每年會購進新書,此時需要將新書的信息錄入系統中;圖書信息的修改,如學生借書后將圖書丟失,此時需要修改圖書的總數量,使總數減1;刪除圖書,學校在購進新書的同時,每年會對過期的圖書進行清理,不再提供借閱,此時就需要將這些圖書的信息從系統中刪除。查詢圖書的信息,比如要查看有哪些是Java相關的書籍或者指定ISBN號的圖書等。
  • 圖書借閱信息管理:能夠對圖書的借閱信息進行記錄,包括讀者信息、圖書信息、借閱時間等信息。
  • 圖書歸還信息管理:能夠對圖書的借閱信息進行記錄,包括讀者信息、圖書信息、歸還時間、是否超期、罰金等信息。
  • 系統用戶信息管理:能夠對系統用戶的信息進行管理,包括增加新的系統操作用戶,對當前系統用戶的密碼進行修改,以及刪除某一用戶。

JAVA實戰練習之圖書管理系統實現流程

項目功能如下:

(1)讀者信息管理:包括讀者信息添加和讀者信息查詢與修改功能。用戶登錄成功之后,可以瀏覽所有讀者的信息,也可以檢索特定讀者的信息;同時,可以對讀者信息進行維護,包括增加、刪除及修改。具體信息包括讀者類型(讀者的類型決定著他可以借到書的最大數量和最大歸還天數)、讀者姓名、出生日期、性別、電話、所在院系、注冊日期等。(相關存儲數據可通過I/O流直接存在文件,可也直接在文件里讀的數據)

(2)圖書信息管理:包括圖書信息添加和圖書信息查詢與修改功能。用戶登錄成功之后,可以瀏覽所有圖書信息和檢索特定圖書的信息;也可以對圖書信息進行維護。包括添加圖書、刪除圖書以及修改圖書信息。具體信息包括:圖書ISBN、圖書名稱、作者、出版社、出版日期、印刷次數、單價、圖書類別等。(相關存儲數據可通過I/O流直接存在文件,可也直接在文件里讀的數據)

(3)圖書借閱管理:包括圖書借閱和圖書歸還功能。圖書借閱功能,先輸入讀者的編號,然后輸入要借閱的圖書的信息,記錄系統當前時間即借閱時間;圖書歸還功能,輸入讀者的編號,選擇其名下已借閱的圖書,判斷當前日期即歸還日期與借閱日期的差值是否超過了規定的期限,計算罰金,從而進行圖書的歸還操作。具體信息包括:借閱日期、歸還日期、罰金。由于要計算罰金,故需要知道該讀者的讀者類型,根據類型判斷其可借圖書天數、可借圖書數量等。(相關存儲數據可通過I/O流直接存在文件,可也直接在文件里讀的數據)

(4)基礎信息維護:包括圖書類別設置、讀者類別設置及罰金設置。圖書類別設置,可以對圖書的類別進行增加、刪除、修改和查詢;讀者類別設置可以對讀者的類別進行增加、刪除、修改和查詢;罰金設置,可以指定超期一天的罰金標準。(相關存儲數據可通過I/O流直接存在文件,可也直接在文件里讀的數據)

(5)用戶管理:包括修改密碼、用戶添加和刪除。修改密碼,是指當前用戶修改自己的密碼;用戶添加和刪除,是對新增和去除系統用戶時對用戶信息的維護。(相關存儲數據可通過I/O流直接存在文件,可也直接在文件里讀的數據)

 

項目分析:

讓我們一起來看看項目的分析,該項目也是以增、刪、改、查為基礎,相信大家都不陌生。

與之前的項目一,團隊調度有區別的就是:該項目的數據是通過IO流來保存的,這樣的優勢就是:

我們保存的數據不會因為重啟項目時被清除掉,一直都會在文件里存在。對于數據的保存的角度來看,是個較好的選擇。

通過需求:

我們可以將這些模塊的實現劃分為三個類包和一個數據包:(博主寫得是):

JAVA實戰練習之圖書管理系統實現流程

三個包分別為:界面展示包(里面放的全是展示類);功能實現包(放的各個功能的實現類);

實體類包(放各個需要用到的實體類);數據包(存放各種用到的數據);

JAVA實戰練習之圖書管理系統實現流程

JAVA實戰練習之圖書管理系統實現流程

(―)用戶管理模塊

首先,我們進入到圖書管理系統,進入的方式就是通過用戶的賬號和密碼的輸入匹配。

用戶登錄:

設計該功能時,我們選擇將數據保存在文件中,也就是用IO流來做。

確定了IO流,這時,我們可以選擇對應的實現方式,(1)Properties與IO流結合起來,設置值就是根據鍵獲取值。(2)用序列化和反序列化來寫。

這里,博主選擇了用Properties來寫。通過設置鍵值對,鍵代表賬戶,值代表密碼。而且在文件中可以直接直觀地讀取數據。

JAVA實戰練習之圖書管理系統實現流程

JAVA實戰練習之圖書管理系統實現流程

其次就是用戶數據的增刪改查。

JAVA實戰練習之圖書管理系統實現流程

因為會用到IO流,在實現文件數據讀寫操作是需要拋出異常的??梢酝ㄟ^快捷鍵:

Alt+Enter來快速實現。

注意事項:

在存儲和修改數據時我們都需要先將之前的數據讀取到Properties集合中,然后再將新的數據寫入

文件里。這樣可以防止每次寫數據的時候,不小心將之前想要保留的數據覆蓋掉了。

JAVA實戰練習之圖書管理系統實現流程

還有一點就是:在用戶登錄成功,并執行刪除用戶數據的功能時,我們不能把當前的用戶數據刪掉。這里只需要加一個判斷語句就可以了。

JAVA實戰練習之圖書管理系統實現流程

到這里,用戶管理模塊基本就完成了。

(二)基本信息維護模塊

該模塊下有,讀者類別的設置,圖書類別的設置,還有罰金的設置;

讀者類別,就是當我們再添加讀者時,可以將讀者類別當做讀者類的一個屬性添加進去。

就比如說,我們當前添加的讀者類型為學生,那么就在可以單獨設置學生的可借閱圖書的天數和圖書的數量。

同理,圖書類別的設置,就可以把圖書進行分類。

罰金的設置:可以根據不同類型的讀者,設置不同類型的罰金。

JAVA實戰練習之圖書管理系統實現流程

部分代碼展示(讀者類型的設置):

public class ReaderTypeServe {
  static String typeid,typename,limit,maxborrownum;

  //添加讀者類型
  public static void addReaderType() throws IOException, ClassNotFoundException {
      boolean flog=true;
      System.out.println("歡迎來到讀者類別添加界面 ");
      //讀取文件中的數據,存入集合。
      TSUtility.readReaderType();
      ArrayList<ReaderType> array=TSUtility.readerTypesArray;
      System.out.println();
     /* if (array.size()==0){
              System.out.println("沒有檢測到讀者類型信息...");
      }*/

      while (true){
          try {

              System.out.println("請添加讀者唯一的的類型號:(正數)");
              typeid=TSUtility.readKeyBoard(3,false);
              if (Integer.parseInt(typeid)>=0){
                  break;
              }else {
                  System.out.println("格式不對,請檢后輸入:");
              }

          }catch (NumberFormatException e){
              System.out.println("請輸入相應的整數...");
          }

      }

      for (ReaderType reader : array) {
          if (typeid.equals(reader.getTypeid())) {
              System.out.println("該id已被使用,自動返回上一界面!");
              flog=false;
              break;
          }
      }
      if (flog){
          System.out.println("請輸入讀者類型名稱:");
          typename =TSUtility.readKeyBoard(4,false);
          for (ReaderType reader : array) {
              if (typename.equals(reader.getTypename())) {
                  System.out.println("該類型已被使用,自動返回上一界面!");
                  flog=false;
                  break;
              }
          }
      }

      if (flog){
          while (true){
              try {

                  System.out.println("請設置可借閱天數:(正數,且不能超過100天)");
                  limit =TSUtility.readKeyBoard(2,false);
                  if (Integer.parseInt(limit)>=0&&Integer.parseInt(typeid)<=100){
                      break;
                  }else {
                      System.out.println("未按規定格式,請檢查后輸入...");
                  }

              }catch (NumberFormatException e){
                  System.out.println("請輸入相應的整數...");
              }

          }


          while (true){
              try {

                  System.out.println("請設置可借閱數量:(正數,且不能超過30本)");
                  maxborrownum =TSUtility.readKeyBoard(4,false);
                  if (Integer.parseInt(limit)>=0&&Integer.parseInt(typeid)<=30){
                      break;
                  }else {
                      System.out.println("未按規定格式,請檢查后輸入...");
                  }

              }catch (NumberFormatException e){
                  System.out.println("請輸入相應的整數...");
              }

          }

          //創建對象
          ReaderType reader=new ReaderType(typeid,typename,limit,maxborrownum);
          TSUtility.writeReaderType(reader);
          System.out.println("添加成功!");
      }




  }

  //刪除讀者類型
  public static void deleteReaderType()throws IOException, ClassNotFoundException {
      System.out.println();
      showAllReaderType();
      ArrayList<ReaderType> array=TSUtility.readerTypesArray;
      if (array.size()!=0){
          //讀取文件中的數據,存入集合。讀者
          TSUtility.readReaderPath();
          ArrayList<Reader> readerArray=TSUtility.readerArray;
          //
          System.out.println("請選擇您想要刪除讀者類型的編號(回車跳過該選項..):");
          String id =TSUtility.readString(10,"false");
          if (!(id.equals("false"))){
              for (int i=0;i<array.size();i++){
                  if (array.get(i).getTypeid().equals(id)){
                      int i1=0;
                      for (Reader reader : readerArray){
                          i1++;
                          if (reader.getReaderType().getTypename().equals(array.get(i).getTypename())){
                              System.out.println("該讀者類型已經被使用,不能被刪除!");
                              break;
                          }else {
                              if (i1==readerArray.size()){
                                  TSUtility.readerTypesArray.remove(i);
                                  System.out.println("刪除成功!");
                                  break;
                              }
                          }
                      }

                  }else {
                      if (i==array.size()){
                          System.out.println("編號不存在,請重新輸入...");
                      }
                  }
              }
          }
          //刷新
          flush();
      }

  }

  //修改讀者類型
  public static void modifyReaderType()throws IOException, ClassNotFoundException {

      TSUtility.readReaderType();
      ArrayList<ReaderType> array=TSUtility.readerTypesArray;
      if (array.size()!=0){
          System.out.println();
          System.out.println("  讀者類型修改界面  ");
          showAllReaderType();
          boolean flog=true;
          while (flog){
              System.out.println("請選擇您想要修改讀者類型的編號(回車跳過...):");
              String id =TSUtility.readString(5,"false");
              if (!(id.equals("false"))){
                  //讀取文件中的數據,存入集合。讀者
                  TSUtility.readReaderPath();
                  ArrayList<Reader> readerArray=TSUtility.readerArray;
                  //
                  boolean flogs=true;
                  for (int i=0;i<array.size();i++){
                      if (array.get(i).getTypeid().equals(id)){

                          String typeName = array.get(i).getTypename();
                          for (Reader reader : readerArray) {
                              if (reader.getReaderType().getTypename().equals(typeName)) {
                                  System.out.println("該讀者類型已經被使用,不能修改!");
                                  flogs=false;
                                  /*flog=false;*/
                                  break;
                              }
                          }
                          if (flogs){
                              System.out.println(" 修改讀者類型名稱("+array.get(i).getTypename()+"):(回車跳過該選項..) ");
                              String name=TSUtility.readString(10,array.get(i).getTypename());
                              TSUtility.readerTypesArray.get(i).setTypename(name);
                             
                              while (true){
                                  System.out.println(" 修改讀者可借閱天數(正數)("+array.get(i).getLimit()+"):(回車跳過該選項..) ");
                                  try {

                                      String limit=TSUtility.readString(5,array.get(i).getLimit());
                                      if (Integer.parseInt(id)>=0){
                                          TSUtility.readerTypesArray.get(i).setLimit(limit);
                                          break;
                                      }else {
                                          System.out.println("格式不對,請檢后輸入:");
                                      }

                                  }catch (NumberFormatException e){
                                      System.out.println("請輸入相應的整數...");
                                  }
                              }


                              while (true){

                                  try {

                                      System.out.println(" 修改讀者可借閱數量("+array.get(i).getMaxborrownum()+"):(回車跳過該選項..) ");

                                      String maxborrownum=TSUtility.readString(5,array.get(i).getMaxborrownum());
                                      if (Integer.parseInt(id)>=0){
                                          TSUtility.readerTypesArray.get(i).setMaxborrownum(maxborrownum);
                                          break;
                                      }else {
                                          System.out.println("格式不對,請檢后輸入:");
                                      }

                                  }catch (NumberFormatException e){
                                      System.out.println("請輸入相應的整數...");
                                  }
                              }


                              //刷新
                              flush();
                              System.out.println("修改成功!");
                              flog=false;
                              break;
                          }else {
                              if (i==array.size()){
                                  System.out.println("該編號不存在,請檢查后輸入...");
                              }
                          }
                      }
                  }
              }else {
                  flog=false;
                  System.out.println("已取消修改...");
              }


          }
      }else {
          System.out.println("還沒有讀者類型信息...");
      }
  }

  //查詢所有讀者類型信息
  public static void showAllReaderType() throws IOException, ClassNotFoundException {
      //展示讀者信息
      //讀取文件中的數據,存入集合。
      TSUtility.readReaderType();
      ArrayList<ReaderType> array =TSUtility.readerTypesArray;
      if (array.size()!=0){
          System.out.println("編號 "+" 類型名稱 "+" 可借閱天數 "+" 可借閱數量 ");
          for (int i = 0; i <array.size() ; i++) {
              System.out.println(array.get(i).getTypeid()+"\t "+array.get(i).getTypename()+"\t\t"+array.get(i).getLimit()+"\t\t"+array.get(i).getMaxborrownum() );
          }
          /*System.out.println("讀者類型展示完成!");*/
          System.out.println();
      }else {
          System.out.println("目前還沒有讀者類型信息");
      }

  }

  //將集合重新序列化到文件,實現相應功能后刷新的功能
  public static void flush() throws IOException {
      //對象序列化
      ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream(TSUtility.pathRederType));
      //序列化對象的方法 void writeObject(Object obj)
      oos.writeObject(TSUtility.readerTypesArray);
      //釋放資源
      oos.close();
  }

}

該模塊主要注意的就是: 在某個類型被使用的時候,我們就不能讓該類型被修改和刪除?。ㄌ砑右粋€判斷語句,利用循環遍歷實現。)

在罰金設置這里:因為我們需要根據不同的類型來設置罰金,所以,在這里我們用Properties通過鍵值對的形式,可以很好地將罰金設置出來。

 

讀者管理模塊

在我們設置該模塊時,我們先明確,我們需要通過類的對象來實現這些功能,所以,我們這里首選序列化來寫。然后就是該模塊的基本功能,增、刪、改、查。

JAVA實戰練習之圖書管理系統實現流程

注意事項:

在實現序列化和反序列化時,我們序列化的類一定要實現Serializable接口,不然會拋出異常!

JAVA實戰練習之圖書管理系統實現流程

在數據存儲方面:一旦我們需要添加、修改或者刪除數據時,我們都需要刷新數據(也就是說,我們都需要先將數據從文件里讀取出來,操作完成后,我們再將數據寫入回文件)。

這里,我們可以先建立相應的集合,用于存儲反序列化出來的對象,這樣,我們就只需要對該集合進行相應的操作,然后序列化該存儲對象的集合就可以了。

JAVA實戰練習之圖書管理系統實現流程

今天我們就先看到這里,完整的代碼,博主會通過鏈接放在后面,需要的童鞋提取下就可以了~

幫博主點個贊吧~ ~

鏈接:https://pan.baidu.com/s/1HlRMeSEIuWCy3K7KURnYTQ
提取碼:5kvq

到此這篇關于JAVA實戰練習之圖書管理系統實現流程的文章就介紹到這了,更多相關Java 圖書管理系統內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/ck_67/article/details/120842129

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本阿v精品视频在线观看 日本xxx片免费高清在线 | 无码中文字幕热热久久 | 亚洲国产精品久久久久久网站 | 电车痴汉中文字幕 | 东北美女野外bbwbbw免费 | 亚洲男gay同性同志 亚洲免费在线看 | 秋霞色| 加勒比成人 | 国自产在线精品免费 | 国产精品久久现线拍久青草 | 99久久国产综合精品1尤物 | 32d乳白色的奶罩未删除 | 久久99re2热在线播放7 | 三级理论在线播放大全 | 99精彩免费观看 | 91久久青青草原线免费 | 国产在线视频一区二区三区 | 青苹果乐园影院免费观看完整版 | 91精品导航在线观看 | 亚洲国产在线视频中文字 | 好姑娘完整版在线观看中文 | 国产精品自在欧美一区 | 爱操综合网 | 2021国产麻豆剧传媒新片 | 成人青青草 | 91国在线观看 | 东北美女野外bbwbbw免费 | 涩涩屋在线观看 | 欧美日韩高清观看一区二区 | 免费观看视频在线播放 | 日本人成动漫网站在线观看 | 久久国产伦子伦精品 | 羞羞漫画视频 | 男男双性生子产乳高辣h | 欧美日韩一区二区综合 | juliaann大战黑人 | aaaaa特级毛片| 国产亚洲女在线线精品 | 翁公与小莹在客厅激情 | 日韩成人在线影院 | 高清国产精品久久 |