主頁 > 軟體設計 > 冒著開除的風險,讓我們解密圖書管理之校長看完直夸好IO流下篇

冒著開除的風險,讓我們解密圖書管理之校長看完直夸好IO流下篇

2021-10-27 10:13:06 軟體設計

圖書管理系統IO流版之下集

  • 1.前言
  • 2.結構設計
  • 3.資訊管理
    • 3.1用戶資訊管理
    • 3.2讀者資訊管理
    • 3.3圖書資訊管理
  • 4.基礎資訊維護
  • 4. 總結

1.前言

??鵬之徙于南冥也,水擊三千里,摶扶搖而上者九萬里,去以六月息者也,上一篇,我們冒著大不為,為大家分析了基本思想,對于繼上一篇的學習,我們初步了解了學校圖書館管理系統的大概框架,相信大家對于這個專案也有了一定的想法,接下來跟進博主走進這背后的是與非吧,讓我們來完善它,走進基層,看看校長憑什么夸你 !
在這里插入圖片描述

2.結構設計

??相信大家在上一篇博客的最后,都有看見整個圖書館管理系統的模塊展示吧,不了解的同學可自行翻閱上一篇博主的博客,至于博主為什么要那么設計呢?嗯,這是一個很清晰的問題,我們現在就來為大家解答,圖書館管理系統的艱辛之路!

設計思想
??讓我們一起來看看專案的分析,該專案也是以增、刪、改、查為基礎,相信大家都不陌生,與之前的專案一,團隊調度有區別的就是:該專案的資料是通過IO流來保存的,這樣的優勢就是:我們保存的資料不會因為重啟專案時被清除掉,一直都會在檔案里存在,對于資料的保存的角度來看,是個較好的選擇,為什么這樣設計,而不是放在一個類里面,一個是為了方便展示,也是方便自己修改,提高可讀性,所以采用這樣一個架構,這也是養成一個好習慣的開始!
1.首先結合功能設計,設計6個物體類(存放在model類中)
??圖書物體:圖書編號ISBN、圖書名稱、作者、出版社、出版日期、印刷次數、單價、圖書型別
??圖書型別:圖書型別編號、圖書型別名稱
??讀者物體:讀者編號、讀者姓名、出生日期、性別、電話、所在院系、注冊日期
??讀者型別:讀者型別編號、讀者型別名稱、可借閱天數、可借閱數量
??用戶:用戶編號、用戶名、用戶密碼
??借閱型別:讀者編號、書籍編號、借閱日期、歸還日期、罰金

2.然后根據操作設計,創建操作類(存放在dao類里)
??圖書資訊操作:BookDao
??圖書型別操作:BookTypeDao
??讀者資訊操作:ReaderDao
??讀者型別操作:ReaderTypeDao
??用戶管理操作:UserDao
??借閱管理操作:BookBorrowDao

3.然后創建工具類util.ut,里面存放自定義的例外 BookException 和工具類 TSUtility和一些其他工具

4.接下來創建一個包存放我們進行讀寫的txt檔案,以及相關的日志資訊
?
5.最后創建我們的視圖包view,里面存放了有關界面的類
??圖書操作界面類:BookView
??讀者操作界面類:ReaderView
??用戶操作界面類:UserView
??主界面類:Menu
在這里插入圖片描述

??之后創建運行代碼就OK啦,整個專案的基本框架算是完成了,接下來就剩下具體一個一個板塊來實作啦,

3.資訊管理

??根據前面需要的相關類,把類下的基本資訊完善掉,

3.1用戶資訊管理

??比如user里面就應該包含id,name,passwowrd,創建它的get,set方法
??然后完成一個UserDao類,在里面把相關方法寫進去
??UserDao.:具體包括登錄系統的時候,首先,我們進入到圖書管理系統,進入的方式就是通過用戶的賬號和密碼的輸入匹配,判斷賬戶密碼是否有效;查詢所有用戶資訊;添加用戶;修改指定編號的用戶的密碼;洗掉指定編號的用戶資訊
??在這里我創建了下面這些方法:

     //判斷賬號和密碼是否有效
    public static Users check(String name, String password) throws IOException, ClassNotFoundException, InterruptedException {}
     //存入默認賬號和密碼(初始化)
    public static void initialization() throws IOException {}
     //查詢所有資訊
    public static List<Users> selectUser() throws IOException, ClassNotFoundException {}
     //添加用戶資訊
    public static int insertUser(String name, String password) throws IOException, ClassNotFoundException, BookException {}
     //修改用戶資訊
    public static int updateUserPWD(Integer id, String pwd) throws IOException, ClassNotFoundException, BookException, InterruptedException {}
     //洗掉用戶資訊
    public static int deleteUser(Integer id) throws IOException, ClassNotFoundException, BookException {}

??接下來就是實作用戶登錄的 LoginView 類,去實作UserDao類的具體功能

    //登錄界面
    public static void loginFace() throws IOException, ClassNotFoundException, InterruptedException, BookException {}
    //登錄界面存在賬戶密碼
    public static void login1() throws IOException, ClassNotFoundException, EOFException, InterruptedException, BookException {}
     //用戶管理界面
    public static void usersManagement() throws IOException, ClassNotFoundException, InterruptedException {}

特別注意
??在這里設計該功能時,我們選擇將資料保存在檔案中,也就是用IO流來做,
??確定了IO流,這時,我們可以選擇對應的實作方式,(1)集合與IO流結合起來(2)用序列化和反序列化來寫,
??1.針對為了簡化代碼,對于讀和寫檔案,我們可以采用方法的形式,下次就可以直接呼叫即可,避免了繁瑣代碼,這對于整個專案都可以采用的方法,
??2.因為我們采用了物件序列化,就會使用Object物件,在這里就會產生一個新的情況,若檔案內容為空,就會報 EOFException 例外,因此針對這個的解決辦法就是:先用 try/catch 將該例外捕獲并拋出,然后存入初始資料值,這樣后面存入其他資料時就不會再報這個例外,
??3.在實作序列化和反序列化時,我們序列化的類一定要實作Serializable介面,不然也會拋出例外!

3.2讀者資訊管理

??讀者首先需要的就是完善基本類,Reader包括讀者編號、姓名、讀者類別、性別、年齡、電話、所在部門、注冊日期,然后創建構造方法,還有重寫它的to String方法, ReaderType類包括讀者型別名稱,可借閱天數,還有可借閱數量,
??接下來就是ReaderDao:完成讀者資訊添加和讀者資訊查詢與修改功能

    //列印資訊
    public static void printInfor(List<Reader> list){}
    //初始化
    public static void initialization() throws IOException, ClassNotFoundException {}
    //讀者資訊添加
    public static int insertReader(String id, List<ReaderType> list, String name, String age, String sex, String phone, String dept, String reg) throws BookException, IOException, ClassNotFoundException {}
    //查詢讀者資訊
    public static List<Reader> selectReader() throws IOException, ClassNotFoundException {}
    
    public static List<Reader> selectReaderByName(String name) throws IOException, ClassNotFoundException, BookException {}
    
    public static List<Reader> selectReaderByType(String type) throws IOException, ClassNotFoundException, BookException {}
    
    public static List<Reader> selectReaderByDept(String dept) throws IOException, ClassNotFoundException, BookException {}
    //修改讀者資訊
    public static int updateReader(String id, String typename, String name, Integer age,String sex, String phone, String dept, String reg) throws IOException, ClassNotFoundException, BookException {}
    //洗掉讀者資訊
    public static int deleteReader(String id) throws IOException, ClassNotFoundException, BookException {}      

??然后是讀者ReaderView類的設計,就是對讀者資訊的管理,實作界面化,連接上ReaderDao
里面包括了讀者型別設定在這里我把罰金系統放在了這里,

設計思路:
??(1)讀者資訊添加,根據輸入的讀者編號、姓名、類別、性別、年齡、電話、所在部門、注冊日期,完成讀者資訊的錄入,其中要求讀者編號和姓名不能為空,讀者編號長度為8,
??(2)讀者資訊查詢與修改,用戶登錄成功之后,可以查詢全部讀者資訊,也可以分別根據讀者編號、讀者姓名、讀者部門、讀者型別查詢讀者資訊,讀者資訊修改根據查詢到的讀者資訊,可以修改各部分,
??(3) 在這里如果檔案沒有內容,我們也需要先進行初始化的,

3.3圖書資訊管理

??圖書管理部分呢,其實它的設計和讀者管理大致差不多,首先就是Book類,BookBorrow類,然后
??BookDao:完成圖書資訊添加和圖書資訊查詢與修改功能,

    //列印輸出
    public static void printInfor(List<Book> list){}
     //初始化
    public static void initialization() throws IOException, ClassNotFoundException {}
    //添加圖書資訊
    public static int insertBook(String ISBN, String bookname, String author, String publish, String publishdate, String  printtime, String price, BookType bt) throws IOException, ClassNotFoundException, BookException {}
    //查詢所有圖書資訊
    public static List<Book> selectBook() throws IOException, ClassNotFoundException {}
    //根據其他資訊查詢圖書資訊
    public static List<Book> selectBookByISBN(String ISBN) throws IOException, ClassNotFoundException, BookException {}
public static List<Book> selectBookByName(String bookname) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByType(String type) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByAuthor(String author) throws IOException, ClassNotFoundException, BookException {}
    public static List<Book> selectBookByPublish(String Publish) throws IOException, ClassNotFoundException, BookException {}
    //修改圖書資訊
    public static int update(String ISBN, String bookname, String author, String publish, String publishdate, int printtime, double price, BookType bt) throws IOException, ClassNotFoundException, BookException {}
    //洗掉圖書資訊
    public static int delete(String ISBN) throws IOException, ClassNotFoundException, BookException {}

設計思路
??(1)圖書資訊添加,根據錄入的圖書ISBN、類別、圖書名稱、作者、出版社、出版日期、印刷次數、單價完成圖書資訊添加,
??(2)圖書資訊查詢與修改,用戶登錄成功之后,可以瀏覽所有圖書資訊,也可以根據ISBN、圖書名稱、圖書類別、作者、出版社檢索特定圖書的相關資訊,圖書資訊修改根據查詢到的讀者資訊,可以修改各部分,
??BookBorrowDao包括圖書借閱和圖書歸還功能

    //初始化
    public static void initialization() throws IOException, ParseException, BookException, ClassNotFoundException {}
    //查詢指定編號讀者的借書資訊
    public static List<BorrowBook> selectBorrowByReaderId(String readerid) throws BookException, IOException, ClassNotFoundException {}
    //查看所有借閱資訊
    public static void selectAllBorrow() throws IOException, ClassNotFoundException {}
    //圖書借閱,(借閱者的編號,圖書編號,借閱日期)
    public static int borrowBook(String readerid,String ISBN, String  borrowdate) throws IOException, ClassNotFoundException, BookException, ParseException {}
    //圖書歸還,(還書者的編號,圖書編號,歸還日期)
    public static int returnBook(String readerid,String ISBN,String returndate,List<BorrowBook> list) throws  IOException, ClassNotFoundException, ParseException, BookException {}

設計思路
??(1)圖書借閱,根據用戶輸入的讀者編號,則顯示出該讀者的姓名、類別,及該讀者的借閱情況,然后錄入該讀者的最新借閱的圖書ISBN,顯示出該圖書的相關資訊,確定借閱后,將該借閱資訊錄入(包括讀者編號、圖書ISBN,當前日期即借閱日期),
??(2)圖書歸還,圖書歸還功能,輸入讀者的編號,則顯示出該讀者名下已借閱的圖書,選中要歸還的圖書,判斷當前日期即歸還日期與借閱日期的差值是否超過了規定的期限,計算罰金,從而進行圖書的歸還操作,更新借閱資訊表的歸還日期為當前日期,

??然后BookView類就是對上面那個類進行結合實作界面的一個類,就不做展示啦,

4.基礎資訊維護

??基礎資訊的維護這里就不作多的闡述,設計思想都是一致的,相比于資訊管理,是較簡單的,該模塊下有,讀者類別的設定,圖書類別的設定,還有罰金的設定;讀者類別,就是當我們再添加讀者時,可以將讀者類別當做讀者類的一個屬性添加進去,就比如說,我們當前添加的讀者型別為學生,那么就在可以單獨設定學生的可借閱圖書的天數和圖書的數量,同理,圖書類別的設定,就可以把圖書進行分類,罰金的設定:可以根據不同型別的讀者,設定不同型別的罰金,

        //列印資訊
        public static void printInfor(List<ReaderType> list){}
        //初始化
        public static void initialization() throws IOException, ClassNotFoundException {}
        //查詢全部讀者型別資訊
        public static List<ReaderType> selectReaderType() throws IOException, ClassNotFoundException {}
         //查詢指定型別名的讀者型別資訊
        public static List<ReaderType> selectReaderType(String type) throws IOException, ClassNotFoundException, BookException {}
        //添加讀者型別
        public static int insertReaderType(Integer id, String typename, Integer num, Integer limit) throws IOException, ClassNotFoundException, BookException {}
        //修改讀者型別
        public static int updateReaderType(Integer id, String typename, Integer num, Integer limit) throws IOException, ClassNotFoundException, BookException {}
         //洗掉讀者型別
        public static int deleteReaderType(Integer id) throws IOException, ClassNotFoundException, BookException {}

??該模塊主要注意的就是: 在某個型別被使用的時候,我們就不能讓該型別被修改和洗掉!(添加一個判斷陳述句,利用回圈遍歷實作,)
??在罰金設定這里:因為我們需要根據不同的型別來設定罰金,這里要注意的是,罰金的檔案讀寫方式并不是用的物件序列化,所以,在這里我們用Properties通過鍵值對的形式,可以很好地將罰金設定出來,想要了解該類,可以參考博主之前的檔案IO流Properties
在這里插入圖片描述

4. 總結

??該專案是我學Java以來自己制作的功能最為復雜,設計內容最豐富的專案,同時也是耗費我時間最久的專案,專案中還有很多地方的代碼是可以繼續優化的,而且還有很多可以增加用戶體驗的功能是可以再添加的,
??整個專案的制作程序也是我查缺補漏的一個程序,將我之前學習的比較薄弱的部分給進行了增強,同時也將一些之前學的扎實的部分進行了加固,到此這篇關于Java實戰之基于I/O流設計的圖書館管理系統的文章就介紹到這了,下面是關于本次專案的具體代碼,有興趣的歡迎下載,運行體驗一下,嘿嘿嘿!!!
鏈接:https://pan.baidu.com/s/1mMBaU20skDCjMBVec15m3w
提取碼:yy52
具體代碼
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337764.html

標籤:其他

上一篇:20年前iPod改變了世界,20年后它變成了懷舊機器

下一篇:韓國大面積斷網,電信公司KT承認其配置錯誤,此前甩鍋DDoS攻擊

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more