tags:

views:

226

answers:

2

With assistance from others, I have a program that allows a user to input their employee name and number and then their hourly wage and their total number of regular hours and overtime hours. The program I need assistance with reads in that file, adds a new field at the bottom, "Gross Pay", and calculates the gross pay from the values from the input file. If anyone can assist me it would be greatly appreciated

(link to photobucket image of an example of desired output: Payroll : example of desired output )

For some reason the java.sun.com site has been down (at least I can't access it even from different computers on different networks) so I don't have it as a reference.

Here is the code I have thus far and the errors are in comments. (Code tags aren't working right. I had to tag it out wierd to show it all.)

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

public class ReadPayrollFile 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(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 am going to continue working on it and studying file I/O as well as trying to get the API to work.

Thanks again for any assistance.

A: 

Hi Ryujin89:

Firstly, according to your imported packages :

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

There is no such a method called readChars(), so far I can tell.

I have read your code and guessed the purpose of your code is to read through a text file and "parse" it so to populate the GUI elements, right?

I don't know how the text file looks like, would you add it to your post?

Secondly, It would be better if you use Buffered Reader instead of just a reader, cause Buffered Reader can read one line at each time.

Another java utility : java.util.Scanner also might be helpful to your problem.

Sorry cannot help you out completely, you have to do some research / investigation yourself... :)

Michael Mao
A: 
fstream.readUTF(l_employeeName);

readUTF has no parameters and just returns String, so your code for fstream is wrong. You do it correctly for the inputFile.

It asks for catch or finally for the try block before the while, so either remove that try or add a catch.

tulskiy