0

ユーザーが従業員の名前と番号を入力してから、時給と通常時間と残業時間の合計数を入力できるプログラムの出力を作成しました。このタイプのプログラムをJavaで使用するのはこれが初めてであり、ユーザーからテキスト入力を取得して設定するTry-Catchブロックに問題があります。誰かが私を助けることができればそれは大いにありがたいです。

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CreatePayrollFile extends JFrame implements ActionListener, WindowListener {
    public static final int WIDTH = 400;
    public static final int HEIGHT = 300;
    JPanel titlePanel = new JPanel();
    JPanel displayPanel = new JPanel(new GridLayout(6, 1));
    JPanel dPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel dPanel7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel buttonPanel = new JPanel();
    private JLabel companyName = new JLabel("Payroll INC.");
    Font bigFont = new Font("Helvetica", Font.ITALIC, 24);
    private JLabel prompt = new JLabel("Enter Payroll Information");
    private JTextField employeeName = new JTextField(10);
    private JTextField employeeNumber = new JTextField(10);
    private JTextField hourlyRate = new JTextField(10);
    private JTextField regularHours = new JTextField(10);
    private JTextField overtimeHours = new JTextField(10);
    private JLabel enameLabel = new JLabel("Employee Name       ");
    private JLabel enumLabel = new JLabel("Employee Number   ");
    private JLabel hrLabel = new JLabel("Hourly Rate                ");
    private JLabel rhLabel = new JLabel("Regular Hours          ");
    private JLabel orLabel = new JLabel("Overtime Hours        ");
    private JButton enterDataButton = new JButton("  Enter data  ");
    DataOutputStream ostream;

    public CreatePayrollFile() {
        super("Create Payroll File - Assignment 10");

        setSize(WIDTH, HEIGHT);
        try {
            ostream = new DataOutputStream(new FileOutputStream("payroll.dat"));
        } catch (IOException e) {
            System.err.println("File not opened");
            System.exit(1);
        }
        Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());

        companyName.setFont(bigFont);
        titlePanel.add(companyName);
        titlePanel.setBackground(Color.white);

        dPanel1.add(prompt);
        displayPanel.add(dPanel1);

        dPanel2.add(enameLabel);
        dPanel2.add(employeeName);
        displayPanel.add(dPanel2);

        dPanel3.add(enumLabel);
        dPanel3.add(employeeNumber);
        displayPanel.add(dPanel3);

        dPanel4.add(hrLabel);
        dPanel4.add(hourlyRate);
        displayPanel.add(dPanel4);

        dPanel5.add(rhLabel);
        dPanel5.add(regularHours);
        displayPanel.add(dPanel5);

        dPanel6.add(orLabel);
        dPanel6.add(overtimeHours);
        displayPanel.add(dPanel6);

        buttonPanel.setBackground(Color.white);
        buttonPanel.setLayout(new FlowLayout());
        enterDataButton.setMnemonic(KeyEvent.VK_E);
        buttonPanel.add(enterDataButton);
        enterDataButton.addActionListener(this);

        contentPane.add(titlePanel, BorderLayout.NORTH);
        contentPane.add(displayPanel, BorderLayout.CENTER);
        contentPane.add(buttonPanel, BorderLayout.SOUTH);
        addWindowListener(this);
    }

    private void writeRecord() {

        String employeeName;
        Double hourlyRate;
        Integer employeeNumber, regularHours, overtimeHours;


     // this is where I am having errors. It is saying that the getText method is undefined
     // for each respective use (int, string, double). I am also getting error "The method
     // writeString(String) is undefined for the type DataOutputStream" and the same 
     // undefined errors for the setText for each respective use. 

        try {
            employeeName = String.parseString(employeeName.getText());
            employeeNumber = Integer.parseInt(employeeNumber.getText());
            hourlyRate = Double.parseDouble(hourlyRate.getText());
            regularHours = Integer.parseInt(regularHours.getText());
            overtimeHours = Integer.parseInt(overtimeHours.getText());
            ostream.writeString(employeeName);
            ostream.writeInt(employeeNumber);
            ostream.writeDouble(hourlyRate);
            ostream.writeInt(regularHours);
            ostream.writeInt(overtimeHours);
            employeeName.setText("");
            employeeNumber.setText("");
            hourlyRate.setText("");
            regularHours.setText("");
            overtimeHours.setText("");

        } catch (NumberFormatException e2) {
            System.err.println("Invalid number ");
        } catch (IOException e3) {
            System.err.println("Error writing file");
            System.exit(1);
        }
    }

    public void actionPerformed(ActionEvent e) {
        writeRecord();
    }

    public void windowClosing(WindowEvent e) {
        try {
            ostream.close();
        } catch (IOException e4) {
            System.err.println("File not closed");
            System.exit(1);
        }

        System.exit(0);
    }

    public void windowClosed(WindowEvent e) {
    }

    public void windowDeiconified(WindowEvent e) {
    }

    public void windowIconified(WindowEvent e) {
    }

    public void windowOpened(WindowEvent e) {
    }

    public void windowActivated(WindowEvent e) {
    }

    public void windowDeactivated(WindowEvent e) {
    }

    public static void main(String[] args) {
        CreatePayrollFile cmof = new CreatePayrollFile();
        cmof.setVisible(true);
    }
} 

私は以前、宿題の支援リクエストを投稿するためにこのフォーラムに「スナップ」されたので、これが宿題であることを事前に述べていますが、誰もが見ることができるように、私は人々にそれをするように頼んでいるだけではありません。それは修辞的だと言わざるを得ないのですが、私が努力していないと誰にも思われたくないのです。インストラクターが教えてくれた形で全力を尽くして完成させましたが、セットをカバーする講義の一部を読んでメソッドを取得したとき、私は誤解したに違いありません。

支援を提供するすべての人に事前に感謝します。


++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++


さまざまなフォーラムからの支援のおかげで、プログラムは機能し、想定される出力ファイルを作成するようになりました。次に、作成したばかりのファイルを読み込むプログラムを作成する必要があります。物事をステップに分解できるように、最初の投稿にすべてを入れていませんでした(ファイルを作成していないとファイルを読み取ることができません。ちょっとしたことです)。新しいスレッドを作成する必要がある場合は作成しますが、pplはプログラムに精通しているため、これを読む可能性が高いため、編集と同じスレッドに投稿しました。

ここで行う必要があるのは、GUIのリストの下部に別のフィールドを追加して、作成したファイルから読み込まれた入力に基づいて計算された後の総賃金を表示することです。

言い換えれば、最初のプログラムはファイルを作成することでした。次に、それを読み込んで、計算された総賃金を表示する必要があります。(出力例のphotobucket画像へのリンク:[URL = "http://i108.photobucket.com/albums/n24/zypher89/readPayroll.jpg"] http://i108.photobucket.com/albums/n24/zypher89/ readPayroll.jpg [/ URL]

何らかの理由でjava.sun.comサイトがダウンしているため(少なくとも、異なるネットワーク上の異なるコンピューターからでもアクセスできません)、参照用としてはありません。

これが私のコードで、エラーがコメントアウトされています

[コード]

パッケージの割り当て10_11;

java.ioをインポートします。; java.awtをインポートします。; java.awt.eventをインポートします。; javax.swingをインポートします。;

パブリッククラスReadPayrollFileはJFrameを拡張し、ActionListener、WindowListener{を実装します。

public static final int WIDTH = 400;
public static final int HEIGHT = 300;
JPanel titlePanel = new JPanel();
JPanel displayPanel = new JPanel(new GridLayout(7, 1));
JPanel dPanel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel dPanel7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel buttonPanel = new JPanel();
private JLabel companyName = new JLabel("Payroll INC.");
Font bigFont = new Font("Helvetica", Font.ITALIC, 24);
private JLabel prompt = new JLabel("Enter Payroll Information");
private JTextField employeeName = new JTextField(10);
private JTextField employeeNumber = new JTextField(10);
private JTextField hourlyRate = new JTextField(10);
private JTextField regularHours = new JTextField(10);
private JTextField overtimeHours = new JTextField(10);
private JTextField grossPay = new JTextField(10);
private JLabel enameLabel = new JLabel("Employee Name       ");
private JLabel enumLabel = new JLabel("Employee Number   ");
private JLabel hrLabel = new JLabel("Hourly Rate                ");
private JLabel rhLabel = new JLabel("Regular Hours          ");
private JLabel orLabel = new JLabel("Overtime Hours       ");
private JLabel gpLabel = new JLabel ("Gross Pay                 ");
private JButton nextRecordButton = new JButton("  Next Record  ");
DataInputStream fstream;

public ReadPayrollFile() {
    super("Read Payroll File - Assignment 11");

    setSize(WIDTH, HEIGHT);
    try
    {
        fstream = new DataInputStream(new FileInputStream("payroll.dat"));

    } catch (IOException e) {
        System.err.println("File not opened");
        System.exit(1);
    }
    Container contentPane = getContentPane();
    contentPane.setLayout(new BorderLayout());

    companyName.setFont(bigFont);
    titlePanel.add(companyName);
    titlePanel.setBackground(Color.white);

    dPanel1.add(prompt);
    displayPanel.add(dPanel1);

    dPanel2.add(enameLabel);
    dPanel2.add(employeeName);
    displayPanel.add(dPanel2);

    dPanel3.add(enumLabel);
    dPanel3.add(employeeNumber);
    displayPanel.add(dPanel3);

    dPanel4.add(hrLabel);
    dPanel4.add(hourlyRate);
    displayPanel.add(dPanel4);

    dPanel5.add(rhLabel);
    dPanel5.add(regularHours);
    displayPanel.add(dPanel5);

    dPanel6.add(orLabel);
    dPanel6.add(overtimeHours);
    displayPanel.add(dPanel6);

    dPanel7.add(gpLabel);
    dPanel7.add(grossPay);
    displayPanel.add(dPanel7);

    buttonPanel.setBackground(Color.white);
    buttonPanel.setLayout(new FlowLayout());
    nextRecordButton.setMnemonic(KeyEvent.VK_E);
    buttonPanel.add(nextRecordButton);
    nextRecordButton.addActionListener(this);

    contentPane.add(titlePanel, BorderLayout.NORTH);
    contentPane.add(displayPanel, BorderLayout.CENTER);
    contentPane.add(buttonPanel, BorderLayout.SOUTH);
    addWindowListener(this);
}

private void readRecord(DataInputStream inputFile) {

    String l_employeeName;
    Double l_hourlyRate;
    Integer l_employeeNumber, l_regularHours, l_overtimeHours;
    boolean endOfFile = false;

    try {

        while (!endOfFile)
        {
            try
            {
                /** This is where it says that the readChars() is undefined. The code posted
                 *  doesn't show it, but I have tried changing the output file program to 
                 *  write the string as a UTF and then changed this program to readUTF and it
                 *  works for "l_employeeName = inputFile.readChars();" but not for the 
                 *  "fstream.readChars(l_employeeName);". Also, all of the fstream lines have
                 *  errors "The method readInt() in the type DataInputStream is not applicable
                 *  for the arguments (Integer)" (replace Integer/Int with Double respectively).
                 */

                l_employeeName = inputFile.readUTF();
                l_employeeNumber = inputFile.readInt();
                l_hourlyRate = inputFile.readDouble();
                l_regularHours = inputFile.readInt();
                l_overtimeHours = inputFile.readInt();
                fstream.readUTF(l_employeeName);
                fstream.readInt(l_employeeNumber);
                fstream.readDouble(l_hourlyRate);
                fstream.readInt(l_regularHours);
                fstream.readInt(l_overtimeHours);

                calculateGrossPay(l_hourlyRate, l_regularHours, l_overtimeHours);

                employeeName.setText("l_employeeName");
                employeeNumber.setText("l_employeeNumber");
                hourlyRate.setText("l_hourlyRate");
                regularHours.setText("l_regularHours");
                overtimeHours.setText("l_overtimeHours");
                grossPay.setText("grossPayAmmount");
            } 

            catch (NumberFormatException e2) 
            {
                System.err.println("Invalid number ");
            }

            catch (IOException e3) 
            {
                System.err.println("Error reading file");
                System.exit(1);
            } //here I get error "Syntax error, insert "Finally" to complete TryStatement"
        }

        /** Then here I assume the instructor wants the program to
         *  read in the next set of employee data from the input file
         *   but he didn't specify and hasn't returned my email. So if 
         *   going with my assumption, how would I go about doing that?
         */
        public void actionPerformed(ActionEvent e) {
            NextRecord();
        }

        public void windowClosing(WindowEvent e) {
            try {
                fstream.close();
            } catch (IOException e4) {
                System.err.println("File not closed");
                System.exit(1);
            }

            System.exit(0);
        }

        public void windowClosed(WindowEvent e) {
        }

        public void windowDeiconified(WindowEvent e) {
        }

        public void windowIconified(WindowEvent e) {
        }

        public void windowOpened(WindowEvent e) {
        }

        public void windowActivated(WindowEvent e) {
        }

        public void windowDeactivated(WindowEvent e) {
        }

        public static void main(String[] args) {
            ReadPayrollFile cmof = new ReadPayrollFile();
            cmof.setVisible(true);
        }
        public double calculateGrossPay(double l_hourlyRate, int l_regularHours, int l_overtimeHours)
        {
            double grossPayAmmount, overtimePayRate, overtimePay;

            overtimePayRate = l_hourlyRate * 1.5;
            overtimePay = l_overtimeHours * overtimePayRate;
            grossPayAmmount = ((l_hourlyRate * l_regularHours) + overtimePay);

            return grossPayAmmount;
        }
    }

[/コード]

私はこれからも作業を続け、ファイルI / Oを研究し、APIを機能させるように努めます。

皆様のご協力に改めて感謝申し上げます。

4

4 に答える 4

2

すべてのsetTextメソッドについて:クラス変数をオーバーライドするローカル変数があります。代わりにこれを試してください:

private void writeRecord() {

    String l_employeeName;
    Double l_hourlyRate;
    Integer l_employeeNumber, l_regularHours, l_overtimeHours;


 // this is where I am having errors. It is saying that the getText method is undefined
 // for each respective use (int, string, double). I am also getting error "The method
 // writeString(String) is undefined for the type DataOutputStream" and the same 
 // undefined errors for the setText for each respective use. 

    try {
        l_employeeName = String.parseString(employeeName.getText());
        l_employeeNumber = Integer.parseInt(employeeNumber.getText());
        l_hourlyRate = Double.parseDouble(hourlyRate.getText());
        l_regularHours = Integer.parseInt(regularHours.getText());
        l_overtimeHours = Integer.parseInt(overtimeHours.getText());
        ostream.writeString(l_employeeName);
        ostream.writeInt(l_employeeNumber);
        ostream.writeDouble(l_hourlyRate);
        ostream.writeInt(l_regularHours);
        ostream.writeInt(l_overtimeHours);
        employeeName.setText("");
        employeeNumber.setText("");
        hourlyRate.setText("");
        regularHours.setText("");
        overtimeHours.setText("");

For ostream.writeStringDataOutputStreamのドキュメントには、ostream.writeStringがないことが示されています。を使用してみてくださいostream.writeChars

于 2009-11-14T08:19:25.700 に答える
2

3 つの基本的なエラーを犯しました

  1. のローカル変数writeRecord()はインスタンス変数と同じ名前を持っているため、それらを隠しています。すでにChip Uni +ソリューションで示されています。
  2. このStringクラスには機能がありませんparseString(String)。javadoc ( JDK API: String ) を確認してください。getText()とにかく a を返すので、それを完全に削除してStringください。
  3. DataOutputStream代わりに関数のwriteString()使用はありませんwriteChars()
于 2009-11-14T10:28:31.907 に答える
1

問題は、メンバー変数にアクセスしたいが、実際にはローカル変数にアクセスすることです。ローカル変数の名前は、実際にはメンバー変数を隠します! このようにクラスを定義すると

public class A {
  private int asdf = 0;

  public void blah() {
    String asdf = "Hello!";
    System.out.println(text);
  }

}

プログラムは「Hello!」を表示します。あなたが「何とか」と呼ぶなら。これは、ローカル変数 "text" が同じ名前のメンバーを隠しているためです。次の 2 つのオプションがあります。

  1. このように異なる名前を選択してください

    public class A {
      private int aNumber = 0;
    
      public void blah() {
        String asdf = "Hello!";
        System.out.println(aNumber);
      }
    
    }
    
  2. これを使用して、このようなメンバーにアクセスします

       public class A {
          private int asdf = 0;
    
          public void blah() {
            String asdf = "Hello!";
            System.out.println(this.asdf);
          }
    
        }
    
于 2009-11-14T08:36:09.830 に答える
0

JavaAPIを見てください

いくつかの研究であなたは理由を見つけるでしょう

...getTextメソッドは未定義です

あなたの文字列に。

ただし、宿題の場合でもIDEを使用することをお勧めします。

于 2009-11-14T08:13:28.723 に答える