2012-11-01 40 views
0

我有重大的麻煩拼湊了一起。我有基本的讀寫功能。我需要的是從文件「Books.txt」的輸入進行檢查,以便:麻煩與一個小型圖書館的管理程序

  • ISBN有效
  • 拷貝數,年份和統計數據應是數字
  • 標題,作者和出版商必須包含如果有必須是一個有效的日期
  • LibraryCardNumber如果可用值必須是數字
  • BorrowDate必須是一個有效的日期
  • ReturnDate。

如果一本書沒有借用,最後兩個字段不存在。

2從 'Books.txt' 示例行:

9780140455168#2#The Twelve Caesars#Suetonius#Penguin Classics#2007#3#101009#101030#5478 
9780141188607#1#Claudius the God#Robert Graves#Penguin Classics#2006#2#08

錯誤線應與一個錯誤消息,例如寫入 'ErrorLines.txt'錯誤的ISBN。應將無錯書籍寫入按作者姓名排序的「NewBooks.txt」中。

這裏就是我這麼遠。我並不是在尋找一個完整的解決方案,因爲我顯然有一條寬鬆的路要走,但如果有人會給我一些指點,我會非常感激!是的,它的功課:d

我需要做一個嘗試循環驗證輸入...?

圖書館類:

import java.util.ArrayList; 
import java.util.*; 
import java.io.*; 
import java.io.IOException; 

public class Library { 

public void readFromFile (String filename) throws IOException { 

String inLine; 
File inFile; 

    inFile = new File("Books.txt"); 
    BufferedReader fIn = new BufferedReader(new FileReader(inFile)); 

     inLine = fIn.readLine(); 
     while (inLine != null) { 
      inLine = fIn.readLine(); 
      aBookList.add(inLine + "\n"); 
     } 
     fIn.close(); 
    } 

public void writeToFile (String fileName) throws IOException { 

    BufferedWriter bw = null; 
     try { 
      bw = new BufferedWriter(new FileWriter(fileName)); 

      bw.write("???"); //Dont know what to put here... 
      bw.newLine(); 
     } catch (IOException e) { 
      System.out.println("Error writing file."); 
     } finally { 
      bw.close(); 
     } 
    } 

public static boolean isISBN13Valid(isbn) { 
     int check = 0; 
     for (int i = 0; i < 12; i += 2) { 
      check += Integer.valueOf(isbn.substring(i, i + 1)); 
     } 
     for (int i = 1; i < 12; i += 2) { 
      check += Integer.valueOf(isbn.substring(i, i + 1)) * 3; 
     } 
     check += Integer.valueOf(isbn.substring(12)); 
     return check % 10 == 0; 
    } 
} 

而這裏的圖書類:

import java.util.*; 
import java.io.*; 

public class Book { 
Book b = new Book(); 
private static ArrayList<String> aBookList = new ArrayList<String>(); 

private String Isbn; 
private int CopyNumber; 
private String Title; 
private String Author; 
private String Publisher; 
private int Year; 
private int Statistics; 
private String BorrowDate; 
private String ReturnDate; 
private int LibraryCardNumber; 

public void bookInfo (String nIsbn, int nCopyNumber, String nTitle, String nAuthor, String nPublisher, int nYear, 
     int nStatistics, String nBorrowDate, String nReturnDate, int nLibraryCardNumber) { 

    Isbn = nIsbn; 
    CopyNumber = nCopyNumber; 
    Title = nTitle; 
    Author = nAuthor; 
    Publisher = nPublisher; 
    Year = nYear; 
    Statistics = nStatistics; 
    BorrowDate = nBorrowDate; 
    ReturnDate = nReturnDate; 
    LibraryCardNumber = nLibraryCardNumber; 
} 

public void bookInfo (String Row) { 
    StringTokenizer sT = new StringTokenizer(Row); 
    Isbn = sT.nextToken("#"); 
    CopyNumber = Integer.parseInt(sT.nextToken("#")); 
    Title = sT.nextToken("#"); 
    Author = sT.nextToken("#"); 
    Publisher = sT.nextToken("#"); 
    Year = Integer.parseInt(sT.nextToken("#")); 
    Statistics = Integer.parseInt(sT.nextToken("#")); 
    BorrowDate = sT.nextToken("#"); 
    ReturnDate = sT.nextToken("#"); 
    LibraryCardNumber = Integer.parseInt(sT.nextToken("#")); 
} 
public void setIsbn(String nIsbn) { 
    Isbn = nIsbn;  
} 
public void setCopynumber(int nCopyNumber) { 
    CopyNumber = nCopyNumber;  
} 
public void setTitle(String nTitle) { 
    Title = nTitle;  
} 
public void setAuthor(String nAuthor) { 
    Author = nAuthor;  
} 
public void setPublisher(String nPublisher) { 
    Publisher = nPublisher;  
} 
public void setYear(int nYear) { 
    Year = nYear;  
} 
public void setStatistics(int nStatistics) { 
    Statistics = nStatistics;  
} 
public void setBorrowDate(String nBorrowDate) { 
    BorrowDate = nBorrowDate;  
} 
public void setReturnDate(String nReturnDate) { 
    ReturnDate = nReturnDate; 
} 
public void setLibraryCardNumber(int nLibraryCardNumber) { 
    LibraryCardNumber = nLibraryCardNumber; 
} 

public String getAll() { 
    String s = " "; 
    return (Isbn + s + CopyNumber + s + Title + s + Author + s + Publisher + s + 
        Year + s + Statistics + s + BorrowDate + s + ReturnDate + s + 
        LibraryCardNumber); 
} 
public void showAll() { 
    String t = "\t"; 
    System.out.println(Isbn + t + CopyNumber + t + Title + t + Author + t + 
         Publisher + t + Year + t + Statistics + t + 
         BorrowDate + t + ReturnDate + t + LibraryCardNumber); 
} 
} 

最後有一個與main方法的主要類:

public class Main<aBookList> implements Comparable<aBookList> { 
public static void main(String [] args) throws Exception { 

    new Library().readFromFile("Books.txt"); 

    new Library().writeToFile("NewBooks.txt"); 
    new Library().writeToFile("ErrorLines.txt"); 

} 

@Override 
public int compareTo(aBookList o) { 
    return 0; 
} 
} 

回答

0

,因爲它是家庭作業,我會指出你的方向,不給你代碼

1)你有一大堆亂七八糟的位置,也就是我不知道爲什麼你在你的主類都比較?而不是建立在一個BookInfo GETALL方法(它被命名爲在Java nameing約定)只覆蓋toString方法

2)爲什麼你有一個字符串列表嗎?讀取一行,轉換到這本書,如果書是有效的把它添加到你的列表中,否則報告錯誤

3)移動你的isISBN13Valid方法來預定

4)寫入文件 - 通過列表>循環,並將每個元素保存到文件中bw.write(book.toString()),

5)創建第二個方法createErrorFile,然後每個錯誤將添加到錯誤列表中,並且在您調用該方法後,您將使每個元素都進入給定文件,這不是perfetc解決方案,如果每次發生錯誤時都會更好。

6)在你的主要方法中創建一個庫實例,只需調用它的所有方法,並避免在項目中使用靜態字段(有時你必須,但如果你不需要,只是避免它們)

7)方法導入/導出的名稱我認爲聽起來比從文件讀取的文件讀取更好