java中利用IO流實現簡單的圖書管理系統(利用數組和IO實現)

這個案例,主要對數組及IO流進行總結!

利用IO流實現簡單的圖書管理系統,在控制檯上打印!

功能:1,查看所有書籍

  2,添加書籍

3,刪除書籍

4,修改書籍

5,退出


package com.baojian.bookStore;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
/*
 * 實體類,主要利用數組,和IO流,對兩個知識點進行加強
 */
public class Book {
	private int id;
	// 書名
	private String name ;
	// 作者
	private String authorName;
	// 價格
	private double price ;
	// 書的數量
	private int num;
	// 用於從控制檯輸入內容
	Scanner scan = new Scanner(System.in); 
	// 確定庫存數爲20
	final static int SIZE = 20;
	// 創建一個長度爲20的數組,用於存放書籍
	Book[] books = new Book[SIZE];
	// 存放當前圖書數量
	static int count = 0;
	public Book() {
		super();
	}
	public Book(int id,String name, String authorName, double price, int num) {
		super();
		this.id = id;
		this.name = name;
		this.authorName = authorName;
		this.price = price;
		this.num = num;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthorName() {
		return authorName;
	}
	public void setAuthorName(String authorName) {
		this.authorName = authorName;
	}
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	//查看圖書列表
	public void list() throws IOException{
		// 從文件中讀出數據
		books = Service.readData();
		// 如果count爲0,說明系統裏面還沒有書籍
		if(count == 0 ){
	       System.out.println("圖書管理系統中還沒有輸入書籍,快去添加吧!");
		} else {  
			// 如果有書籍則遍歷書籍
			System.out.println("圖書編號\t\t" + "書名\t\t" + "作者\t\t" + "價格\t\t" + "數量\t\t");
			for (int i = 0; i < count; i++)  {  
				System.out.print(books[i].getId() + "\t\t");
				System.out.print(books[i].getName() + "\t\t");
				System.out.print(books[i].getAuthorName() + "\t\t");
				System.out.print(books[i].getPrice() + "\t\t");
				System.out.println(books[i].getNum() + "\t\t");
				// 確保書的種類不能多於20種
				//count++;
			}
		}
	}  
	//添加圖書
	public void add() throws IOException {  
		System.out.println("----------------------------");
        if (count < SIZE)  {
        	// System.out.println("請輸入圖書編號:");
        	int id = count;
            System.out.println("請輸入圖書名稱:");  
            String name = scan.next();  
            System.out.println("請輸入作者:");  
            String authorName = scan.next();  
            System.out.println("請輸入單價:");  
            double price = scan.nextDouble(); 
            System.out.println("請輸入圖書數量:");  
            int num = scan.nextInt();
            Book book = new Book(id,name,authorName,price,num);  
            books[count] = book;
            // 保存已經添加的書籍到文本文檔中
            Service.saveBook(books[count]);
            count++;  
            System.out.println("添加成功!");   
        } else {  
            System.out.println("書庫已滿!");  
        }     
	}  
	//刪除圖書
	public void delete() throws IOException{  
		System.out.println("----------------------------");
		System.out.println("請輸入要刪除書籍的id:"); 
	    //list();
	    int id = scan.nextInt();             
	    for(int i = id; i < count - 1 ; i++){
		    //用for循環的形式實現對數組的刪除
	    	books[i+1].setId(i);
		    books[i]=books[i+1];
		}
	    System.out.println("刪除成功!");  
	    count--;  
	    // 重寫寫到文件裏面
	    Service service = new Service();
	    service.saveBook(books);
	}  
	//修改圖書
	public void update() throws IOException{
		 System.out.println("----------------------------");
	     System.out.println("請輸入需要修改的圖書編號:"); 
	     int id = scan.nextInt();
	     System.out.println("請輸入圖書名稱:");  
         String name = scan.next();  
         System.out.println("請輸入作者:");  
         String authorName = scan.next();  
         System.out.println("請輸入單價:");  
         double price = scan.nextDouble(); 
         System.out.println("請輸入圖書數量:"); 
         int num = scan.nextInt();
         Book book = new Book(id,name, authorName, price, num);
         // 修改該書籍的數據
         books[id] = book;
         Service.saveBook(books);
         System.out.println("修改成功!");
	}
}
package com.baojian.bookStore;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

/*
 * 用於向讀取和寫入數據
 */
public class Service {
	private static final int SIZE = 20;
	// 此方法用於從文本文件中讀出數據,封裝成book對象,存到books中
	public static Book[] readData() throws IOException {
		// 創建一個Book類型的數組,用於存放讀取出來的數據封裝成的Book對象
		Book[] readBooks = new Book[SIZE];
		// 創建一個字符串用於存放讀取出來的數據
		String data = "";
		// 創建一個字符緩衝輸入流對象
		BufferedReader br = new BufferedReader(new FileReader("c:\\bookData.txt"));
		// 用於控制存放數組的下標
		int id = 0;
		// 每次度一行,如果有內容繼續讀取
		while ((data = br.readLine()) != null) {
			String[] dataArr = data.split(":");
			// 創建Book對象
			Book book = new Book();
			// 第一個字符串用於設置id
			//System.out.println(Integer.parseInt(dataArr[0].trim()));
			book.setId(id);
			// 第二個字符串用於設置name
			book.setName(dataArr[1]);
			// 第三個字符串用於設置author
			book.setAuthorName(dataArr[2]);
			// 第四個字符串用於設置價格
			book.setPrice(Double.parseDouble(dataArr[3]));
			// 第五個字符串用於設置存量
			book.setNum(Integer.parseInt(dataArr[4]));
			// 給數組中的元素賦值
			readBooks[id] = book;
			
			id++;
		}
		// 確定數據個數,就是書籍的種類
		Book.count = id;
		br.close();
		// 返回讀取到的數據
		return readBooks;
	}
	
	// 將新添加的書籍保存到文本文檔中
	public static void saveBook(Book book) throws IOException {
		// 創建字符輸入緩衝流對象
		// BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\bookData.txt",true));
		// FileWriter fw = new FileWriter("c:\\bookData.txt",true);
		FileOutputStream fos = new FileOutputStream("c:\\bookData.txt",true);
		// 將book中的數據拼接成字符串
		StringBuffer data = new StringBuffer();
		// 獲取書籍的id值
		data.append( "\r\n" + book.getId() + ":");
		// 獲取書名
		data.append(book.getName() + ":");
		// 獲取作者名
		data.append(book.getAuthorName() + ":");
		// 獲取價格
		data.append(book.getPrice() + ":");
		// 獲取庫存數
		data.append(book.getNum() + "");
		// 創建數據字符串
		String dataStr = data.toString();
		byte[] buf = dataStr.getBytes();
		// 控制寫入數據的長度
		int len = buf.length;
		fos.write(buf, 0, len);
		fos.close();
		// System.out.println("寫入成功!");
	}
	// 重寫saveBook方法用於刪除和更新後向文件寫數據
	public static void saveBook(Book[] books) throws IOException{
		// 創建字符輸入緩衝流對象
		// BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\bookData.txt",true));
		// FileWriter fw = new FileWriter("c:\\bookData.txt",true);
		FileOutputStream fos = new FileOutputStream("c:\\bookData.txt");
		// 存放數據
		StringBuffer data = new StringBuffer();
		//String data = "";
		for(int i = 0;i < Book.count;i++){
			if(i == 0){
				data.append(books[i].getId() + ":");
				// 獲取書名
				data.append(books[i].getName() + ":");
				// 獲取作者名
				data.append(books[i].getAuthorName() + ":");
				// 獲取價格
				data.append(books[i].getPrice() + ":");
				// 獲取庫存數
				data.append(books[i].getNum() + "");
			}else{
				data.append( "\r\n" + books[i].getId() + ":");
				// 獲取書名
				data.append(books[i].getName() + ":");
				// 獲取作者名
				data.append(books[i].getAuthorName() + ":");
				// 獲取價格
				data.append(books[i].getPrice() + ":");
				// 獲取庫存數
				data.append(books[i].getNum() + "");
			}
		}
		// 創建數據字符串
		String dataStr = data.toString();
		byte[] buf = dataStr.getBytes();
		// 控制寫入數據的長度
		int len = buf.length;
		fos.write(buf, 0, len);
		fos.close();
	}
}
package com.baojian.bookStore;

import java.util.Scanner;
/*
 * 管理員實體類
 */
public class User {
	// 用戶名
	private String userName ;
	// 密碼
	private String password ;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//登錄方法
	public void login (){
		Scanner sc = new Scanner(System.in);
		while(true){
			User user = new User();
			System.out.println("請輸入用戶名:");
			// 從控制檯上輸入用戶名
			user.setUserName(sc.nextLine());
			System.out.println("請輸入密碼:");
			// 從控制檯上輸入密碼
			user.setPassword(sc.nextLine());
			if(user.getUserName().equals("張三") && user.getPassword().equals("123")){
				System.out.println("登陸成功!歡迎【" + user.getUserName() + "】使用閱山管理系統");
				break;
			}else{
				System.out.println("登錄失敗!請重新登錄:");
				login();
			}
		}
			
		  
	}


}
package com.baojian.bookStore;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
/*
 * 測試類,用於測試功能
 */
public class Test {
	public static void main(String[] args) throws IOException {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		User user = new User();
		Book book = new Book();
		//進行登錄
		user.login();
		while(true){
			System.out.println("請輸入數字進行操作:1.查看圖書列表 2.添加圖書 3.刪除圖書 4.修改圖書  5.退出本系統");
		    int num = sc.nextInt();
			switch(num){
	 		case 1 :
	 			// 查看圖書列表
	 			book.list();
				break;
			case 2:
				book.add();
				break;
			case 3:
				System.out.println("----------------------------");
				book.list();
				book.delete();
				break;
			case 4:
				System.out.println("----------------------------");
				book.list();
				book.update();
				break;
			case 5:
				System.out.println("已退出系統!");
				//break aa;
				return;
			default:
		    	System.out.println("您輸入的數字不符合要求!");
		    	break;
			}
		}
		
	}


}

文本寫入格式爲:

完成案例測試效果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章