0

ユーザーが自分の口座番号、残高(99999以下)、および姓を入力できるアプリケーションを作成しました。プログラムはこの情報を取得し、アカウント番号(acct)に対応する場所の.txtファイルに挿入します。そのためのコードは次のとおりです。

import java.io.*;

public class NationalBank {
  public static void main(String[] args) throws Exception{
     InputStreamReader temp = null;
     BufferedReader input = null;
     try {
        temp = new InputStreamReader(System.in);
        input = new BufferedReader(temp);

        int acct;
        double amount;
        String name;
        RandomAccessFile file = new RandomAccessFile("bank.txt", "rw");
        while(true) {
            // Asks for input
           System.out.println("Enter Account Number (0-9999): ");
           acct = Integer.parseInt(input.readLine());
           System.out.println("Enter Last Name: ");
           name = input.readLine();
           System.out.println("Enter Balance ");
           amount = Double.parseDouble(input.readLine());

            // Making sure account numbers are between 0 and 9999
           if(acct >=0 && acct <= 9999) {
              file.seek(acct*17);
              file.write(truncateName(name));
              file.writeBytes(" " +amount);
           }
           else {
              continue;
           }
            // Asks user if more entries are needed
           System.out.println("Enter More? (y/n)");   
           if (input.readLine().toLowerCase().equals("n"))
              break;
        }
        file.close();
     }
        catch (Exception e) {  
        }
  }

// Truncate/adding spaces to name until 8 characters
  public static byte[] truncateName (String name) {
     byte[] result = new byte[8];
     for (int i = 0; i < 8; i++)
        result [i] = i < name.length () ? (byte)name.charAt (i) : (byte)' ';
     return result;
  }

}

今、私は、(名前と残高を含む)情報を含むすべてのアカウントを書き戻すアプリケーションを作成しようとしています。それらのアカウントのアカウント番号、残高、および姓を表示する必要があります。これまでのところ、私は持っています:

import java.io.*;

public class DisplayBank {
  public static void main(String[] args) throws IOException {
    FileInputStream input = new FileInputStream ("bank.txt");
     try {
        byte[] record = new byte[17];
        while (input.read(record) == 17) {
           String name = new String(record, 0, 8);
           long bits = 0;
           for (int i = 8; i < 17; i++) {
              bits <<= 8;
              bits |= record[i] & 0xFF;
           }
           double amount = Double.longBitsToDouble(bits);

           System.out.println("Account Number: " + record + " Name: " + name + ", amount: " + amount);
        }
     }

     catch (IOException e) {  
     }
     finally {
            input.close();

     }
  }
}

これにより、現在、名前のみが正しく表示されます。残高が間違っており、口座番号の取得方法がわかりません。アカウント番号を取得するには、の位置を取得する必要がありnameます。を取得するには、9バイトをオフセットamountしてシークnameし、次の8バイトを読み取る必要があります。

4

2 に答える 2

1

指定したものと同様の姓と金額を含むテキスト ファイルを解析する場合:

提供された例

姓 93942.12

私がすることは、次のようなことを試すことです

 public void read_file(){
    try{

    // Open the file that is the first 
    // command line parameter
    FileInputStream fstream = new FileInputStream("C:\\Users\\Alos\\Desktop\\test.txt");
    // Use DataInputStream to read binary NOT text.
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;
    int record = 0;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {

        String[] splits = strLine.split("\t");
        String LastName = splits[0];
        String Amount = splits[1]; 
        System.out.println("Account Number: " + record + " Name: " + LastName + ", amount: " + Amount);
        record++;
    }
    //Close the input stream
    in.close();

      }catch (Exception e){//Catch exception if any
    System.err.println("Error: " + e.getMessage());
    }

}

これはまさにあなたが探しているものではないかもしれませんが、何か違うものが欲しい場合は、質問を見て更新してください.

于 2013-02-22T21:35:50.627 に答える
0

これは宿題ではありません。Derby や MySQL などの RDBMS を使用することを強くお勧めします。

于 2013-02-22T21:50:34.203 に答える