2012-11-01 41 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)方法导入/导出的名称我认为听起来比从文件读取的文件读取更好