Java入門教程之圖書管理系統(由簡入繁)(三)
作者:AlexTan
E-mail: [email protected]
上一篇部落格我們講到了用ArrayList來實現圖書管理系統,用ArrayList彌補了二中所提到的那兩個缺點。但是一個漏洞填完,又來了新的一個漏洞,所謂精益求精嘛。接下來我們就在原始碼的基礎上加上IO流,對TXT檔案進行操作。
Java入門之圖書管理系統二(IO實現):
這次的程式碼只需要加上讀寫兩個函式就可以了,即load()和save()。
為了程式碼看起來不那麼臃腫,所以我們建立一個tool包,裡面放IO.java檔案,這個檔案的程式碼具體如下:
package tool; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import model.Book; import ui.MainClass; public class IO { public void load(MainClass mainClass)//讀取檔案 { try { String filename = "D:\\Users\\alext\\workspace\\first\\book.txt";//也可以用d:/xxx/xxx的形式 File file = new File(filename); BufferedReader reader = new BufferedReader(new FileReader(file)); String temp; while((temp = reader.readLine()) != null) { String bookname = temp.split(",")[0]; String author = temp.split(",")[1]; String pricestr = temp.split(",")[2]; float price = Float.parseFloat(pricestr); Book book = new Book(bookname,author,price); mainClass.booklist.add(book); mainClass.count++; } reader.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void save(MainClass mainClass)//寫入檔案 { String fileName = "D:\\Users\\alext\\workspace\\first\\book.txt"; String allbook=""; for(int i = 0; i < mainClass.booklist.size(); i++) { Book book = (Book)mainClass.booklist.get(i); String temp = book.getBookname() + "," + book.getAuthor() + "," + book.getPrice() + "\r\n"; allbook += temp; } try { File file1 = new File(fileName); FileWriter fileWriter; fileWriter = new FileWriter(file1); fileWriter.write(allbook); fileWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
然後在MainClass類裡的建構函式里加上
IO io = new IO();
io.load(this);
這兩段程式碼就可以讀取了,在退出系統那裡,即
if(choice == 5)
{
io.save(this);
System.out.println("成功退出系統,歡迎再次光臨!");
break;
}
這裡改成這樣就好了,完整MainClass程式碼如下:
package ui; import java.util.ArrayList; import java.util.Scanner; import model.Book; import tool.IO; public class MainClass { /* public static final int SIZE = 10; Book[] booklist = new Book[SIZE]; */ public ArrayList booklist = new ArrayList(); public int count = 0; public MainClass() { Scanner scan = new Scanner(System.in); IO io = new IO(); io.load(this); printMenu(); while(true) { //讀取使用者輸入 int choice = scan.nextInt(); if(choice == 5) { io.save(this); System.out.println("成功退出系統,歡迎再次光臨!"); break; } switch(choice) { case 1: addBook(); break; case 2: deleteBoo(); break; case 3: changeBoo(); break; case 4: findBoo(); break; default: System.out.println("輸入非法"); printMenu(); continue; } } /* while(true) { //根據使用者輸入呼叫不同方法 if(choice == 1) { addBook(); } else if(choice == 2) { deleteBoo(); } else if(choice == 3) { changeBoo(); } else if(choice == 4) { findBoo(); } else if(choice == 5) { System.out.println("成功退出系統,歡迎再次光臨!"); break; } } */ } void printMenu() { //列印選單 System.out.println("歡迎..."); System.out.println("增加圖書...1"); System.out.println("刪除圖書...2"); System.out.println("修改圖書...3"); System.out.println("查詢圖書...4"); System.out.println("退出系統...5"); } void addBook() { if (count < booklist.size()+1) { System.out.println("當前共有:"+booklist.size()+"本書!"); Scanner scan = new Scanner(System.in); System.out.println("請輸入圖書名:"); String bookname = scan.next(); System.out.println("請輸入作者:"); String author = scan.next(); System.out.println("請輸入單價:"); float price = scan.nextFloat(); Book book = new Book(bookname,author,price); //booklist[count] = book; booklist.add(book); count++; System.out.println("增加成功!"); printAllBook(); } else { System.out.println("圖書庫已滿!"); } } void deleteBoo() { Scanner scan = new Scanner(System.in); while(true) { System.out.println("請輸入按哪種方法刪除圖書:1、序號/2、書名/3、返回主選單"); int choose = scan.nextInt(); if(choose == 1) { System.out.println("請輸入要刪除第幾本書:"); int id = scan.nextInt(); id = orderFind(id); //System.out.println(id); if(id > -1) { /* for(int i = id; i < count - 1 ; i++) booklist[i]=booklist[i+1]; */ booklist.remove(id); count--; System.out.println("刪除成功!"); printAllBook(); } else { System.out.println("輸入錯誤!"); } } else if(choose == 2) { System.out.println("請輸入您要刪除的書名:"); String name = scan.next(); int id = nameFind(name); if(id > -1) { /* for(int j = id; j<count-1; j++) { booklist[j]=booklist[j+1]; } */ booklist.remove(id); count --; System.out.println("刪除成功!"); printAllBook(); } else { System.out.println("未查詢到您想要的書名"); } } else if(choose == 3) { printMenu(); break; } else { System.out.println("輸入非法!"); } } } void changeBoo() { Scanner scan = new Scanner(System.in); while(true) { System.out.println("請輸入按哪種方法修改圖書:1、序號/2、書名/3、返回主選單"); int choose = scan.nextInt(); if(choose == 1) { System.out.println("請輸入要修改第幾本書:"); int number = scan.nextInt(); int id = orderFind(number); if(id > -1) { Book book = (Book)booklist.get(id); //System.out.println("原書名為:"+booklist[id].getBookname()+" 請輸入你要修改為什麼書名:"); System.out.println("原書名為:"+book.getBookname()+" 請輸入你要修改為什麼書名:"); String str = scan.next(); System.out.println("請輸入作者:"); String author = scan.next(); System.out.println("請輸入單價:"); float price = scan.nextFloat(); //booklist[id].setBook(str,author,price); book.setBook(str,author,price); System.out.println("修改成功!"); printAllBook(); } else { System.out.println("輸入錯誤!"); } } else if(choose == 2) { System.out.println("請輸入您要修改的書名:"); String name = scan.next(); int id = nameFind(name); if(id > -1) { Book book = (Book)booklist.get(id); //System.out.println("原書名為:"+booklist[id].getBookname()+" 請輸入你要修改為什麼書名:"); System.out.println("原書名為:"+book.getBookname()+" 請輸入你要修改為什麼書名:"); String str = scan.next(); System.out.println("請輸入作者:"); String author = scan.next(); System.out.println("請輸入單價:"); float price = scan.nextFloat(); //booklist[id].setBook(str,author,price); book.setBook(str,author,price); System.out.println("修改成功!"); printAllBook(); } } else if(choose == 3) { printMenu(); break; } else { System.out.println("輸入非法!"); } } } void findBoo() { Scanner scan = new Scanner(System.in); while(true) { System.out.println("請輸入按哪種方法查詢圖書:1、序號/2、書名/3、返回主選單"); int choose = scan.nextInt(); if(choose == 1) { System.out.println("請輸入要查詢第幾本書:"); int number = scan.nextInt(); int id = orderFind(number); if(id > -1) { Book book = (Book)booklist.get(id); //System.out.println("你要查詢的書名為:"+booklist[id].getBookname()+" 作者:"+booklist[id].getAuthor()+" 單價:"+booklist[id].getPrice()+"元/本"); System.out.println("你要查詢的書名為:"+book.getBookname()+" 作者:"+book.getAuthor()+" 單價:"+book.getPrice()+"元/本"); } else { System.out.println("輸入錯誤!"); } } else if(choose == 2) { System.out.println("請輸入您要查詢的書名:"); String name = scan.next(); int id = nameFind(name); if(id > -1) { Book book = (Book)booklist.get(id); //System.out.println("查詢成功,您查詢到的書為第"+(id+1)+"本書!"+"書名為:"+booklist[id].getBookname()+" 作者:"+booklist[id].getAuthor()+" 單價:"+booklist[id].getPrice()+"元/本"); System.out.println("查詢成功,您查詢到的書為第"+(id+1)+"本書!"+"書名為:"+book.getBookname()+" 作者:"+book.getAuthor()+" 單價:"+book.getPrice()+"元/本"); } } else if(choose == 3) { printMenu(); break; } else { System.out.println("輸入非法!"); } } } void printAllBook() { for (int i = 0; i < count; i++) { Book book = (Book)booklist.get(i); //System.out.println("第"+(i+1)+"本書名:"+booklist[i].getBookname()+" 作者:"+booklist[i].getAuthor()+" 單價:"+booklist[i].getPrice()+"元/本"); System.out.println("第"+(i+1)+"本書名:"+book.getBookname()+" 作者:"+book.getAuthor()+" 單價:"+book.getPrice()+"元/本"); } } int orderFind(int number) { //System.out.println(number); if(number <= count) { int id = number - 1; return id; } else return -1; } int nameFind(String name) { int id = -1; for(int i = 0; i < count; i++) { Book book = (Book)booklist.get(i); //if(booklist[i].getBookname().equals(name)) if(book.getBookname().equals(name)) { id = i; break; } else if(i<count) continue; else { System.out.println("未查詢到您想要的書名"); break; } } return id; } /* void load() { String fileName = "D:/Users/alext/workspace/first/book.txt"; try { File file = new File(fileName); BufferedReader in = new BufferedReader(new FileReader(file)); String tempString; while ((tempString = in.readLine()) != null) { System.out.println(tempString); } in.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void save(String bookname,String author,float price) { String fileName = "D:\\Users\\alext\\workspace\\first\\book.txt"; File file1 = new File(fileName); try { FileWriter fileWriter = new FileWriter(file1,true); String writeData="書名:"+ bookname +" 作者:"+author+" 價格:"+price+"元/本 \n"; fileWriter.write(writeData); fileWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } */ public static void main(String[] args) { // TODO Auto-generated method stub new MainClass(); } }
總結:
這樣下來,便解決了重新執行程式資料消失的問題了。雖然我們上面把對txt檔案讀寫的函式寫在了tool包下的IO類裡,但是整個程式看起來還是非常的臃腫,程式碼不好維護,也不好閱讀,因此接下來我們將把以上程式碼改成MVC的程式設計模式,來讓程式碼顯得更系統化。
請閱讀下一篇:Java入門教程之圖書管理系統(由簡入繁)(四)
轉載請註明出處:http://blog.csdn.net/alextan_/article/details/65449952相關推薦
Java入門教程之圖書管理系統(由簡入繁)(三)
作者:AlexTan E-mail: [email protected] 上一篇部落格我們講到了用ArrayList來實現圖書管理系統,用ArrayList彌補了二中所提到的那兩個缺點。但是一個漏洞填完,又來了新的一個漏洞,所謂精益求精嘛。接下來我們就在原始碼的
Java入門教程之圖書管理系統(由簡入繁)(八)
作者:AlexTan E-mail: [email protected] 更新日誌: 由於最近在忙專案,所以推遲到現在才更新部落格...這次更新的內容主要是把程式碼拆分成了兩部分,一部分是客戶端,只是介面,即MCV中的V,和網路程式設計的一些東西,自己定義了一個
JAVA高階特性——迷你圖書管理系統(DOM4J操作儲存集合中的物件)
要求:使用XML儲存圖書資訊,使用DOM4J操作XML,進行圖書的增刪改查。 使用技術:XML/DOM4j/集合/物件 部分實現效果如果下: 實現思路 首先需要建立一個圖書類(Book類),儲存圖書的屬性(屬性和XML檔案一致,因
Django框架之圖書管理系統(一)
manage model request 名稱 from 模型 nag clu llb 圖書管理系統共分為兩篇博客進行講解,該篇博客主要記錄圖書與出版社之間的關系(一對一),記錄圖書的增刪查改操作 =====================================
大學生都經歷過的圖書管理系統(Mysql+MyEclipse+Struts2+Hibernate)--附帶原始碼喲!
圖書管理系統(Mysql+MyEclipse+Struts2+Hibernate) 1、資料庫與資料表的設計 1.1設計資料表(由於操作失誤資料表重構略有差異) 1. 讀者類別表(tb_reader_type) 序號
簡單的圖書管理系統(練習JDBC+Oracle資料庫)
這是一個簡單的圖書管理系統,對部分功能的進行了實現,主要就是練習對資料庫的增刪改查和邏輯的運用! 1、使用的Oracle資料庫,先建資料庫,並插入幾條簡單的資料 2、在MyEclipse中建立Web Project,命名為bookManager,建包結構如下 3、首先
Jsp基礎語法(由簡入雜)
代碼 嵌入 分號 常用 lam taglib jsp簡介 類文件 發送請求 JSP基礎語法 一,JSP簡介 Jsp是一個簡化的Servlet設計,是在服務器端執行,他實現了再Java中使用HTML標簽。 Jsp是一種動態網頁技術標準也是JAVAEE的標
基於java的圖書管理系統(英文)
OOD大作業 完全按照軟體工程思路製作文件:需求分析-詳細設計-測試-使用者手冊 僅實現基本功能,詳情介紹可以見文件 由於時間很短,這個工程只是個demo,系統和文件都有需要改進的地方(尤其是測試部分),不過可以提供課程完成思路。
圖書管理系統(Java + MySQL)
(完整程式碼+實訓報告): https://download.csdn.net/download/qq_35793285/10896342 (完整程式碼): https://pan.baidu.com/s/1B0kV-_nCQ4MkRmPclqaK7A 提取碼
java中利用IO流實現簡單的圖書管理系統(利用陣列和IO實現)
這個案例,主要對陣列及IO流進行總結! 利用IO流實現簡單的圖書管理系統,在控制檯上列印! 功能:1,檢視所有書籍 2,新增書籍 3,刪除書籍 4,修改書籍 5,退出 package com.baojian.bookStore; import java.io.Buf
基於JAVA的圖書管理系統(jsp+mysql+tomcat)
這裡分享一個java web 專案,是一個基於JAVA 的圖書管理系統 本系統使用JSP+MySQL+Tomcat開發完成,由於開發時間過短,功能不甚完善,前臺頁面也不怎麼美觀,但是麻雀雖小,五臟俱全
利用java實現基於文字的圖書管理系統(有介面)
我覺得最難的一部分就是如何實現實現增刪改查 增加:使用write直接向檔案寫入資料即可 刪除:例如通過圖書號(x)找到圖書資料,刪除圖書資料。要想實現此功能,利用一個字元陣列(Arraylist)儲存文字每行資料,分割文字每一行資料(每一行分割成書號,書名,價格等資訊等等,
Java swing實現圖書管理系統(高階版)
大家好,今天給大家演示一下由Java swing實現的圖書管理系統,此前給大家演示過一個版本,這個版本作為升級版,比上一個版本功能複雜了不少,這個版本環境還是跟上一個一樣,jdk版本不限,資料庫為mysql,可匯入到eclipse或myeclipse裡執行,下面我們來演示執行
圖書管理系統(增刪改)
分享 bootstra url jquery .cn 添加 啟動 管理 bootstrap 圖書管理系統半成: 數據庫配置,urls配置,views配置,前端頁面配置,setting配置 先來一張簡單的配置圖: setting數據庫配置: 前端頁面編寫(h5,boots
Python-Flask框架之——圖書管理系統 , 附詳解源碼和效果圖 !
數據庫 mysql AS image http 分享圖片 bubuko 書籍 sql 該圖書管理系統要實現的功能: 1. 可以通過添加窗口添加書籍或作者, 如果要添加的作者和書籍已存在於書架上, 則給出相應的提示. 2. 如果要添加的作者存在, 而要添加的書籍書架上沒有,
SpringCloud入門教程之Eureka註冊中心(二)
學習SpringCloud技術前提就是學習Eureka註冊服務中心,而Eureka註冊服務中心,它是什麼呢?今天小編就帶你一起了解一下吧!!! Eureka 1.認識Eureka 2.原理圖 3.入門案例 1.認識
linux專案 --- 圖書管理系統(資料庫版)
在 /home/openwrt/Desktop/IS/book_manager_sqlite 目錄下提供了“圖書管理系統”專案,是使用sqlite3資料庫進行資料管理。 在該目錄下,提供了bm_sqlite可執行程式,直接執行如下: ./bm_
linux專案 -- 圖書管理系統(連結串列版)
在ubuntu系統的/home/openwrt/Desktop/IS目錄下,提供了筆者的一些專案,使用者可以直接測試,瞭解linux系統下C程式專案的開發。提供瞭如下的專案: 其中book_manager_json專案是一個“圖書管理系統”的
C語言程式設計:圖書管理系統(超詳細有登入系統,附程式碼和試驗報告)
C課程設計——圖書管理系統 1、題目意義 圖書館,作為文獻的聚集地和展示平臺,常常扮演著引領文化前進的角色,是每個大學不可或缺的基礎設施,而圖書管理系統則是一個圖書館能夠正常運轉的關鍵。本次課程設計使用C語言製作程式來實現圖書的登記,刪除,查詢,瀏覽以及讀者的借
java+SQL做學生資訊管理系統(增刪改查)學生新作
java+SQL做學生資訊管理系統(增刪改查) 過程中需要用到的所有工具資料庫以及資料庫管理器等等 密碼:q80t 大學學習java後做的第一個小專案忍不住分享一下,也是我自己的面向物件程式設計的實踐作業啦,有點水,不是很優。廢話不多數,下面進入正題 介面的編