這個案例,主要對數組及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;
}
}
}
}
文本寫入格式爲:
完成案例測試效果: