With assistance from others, I have an 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:
http://i108.photobucket.com/albums/n24/zypher89/readPayroll.jpg

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.

package assignment10_11;

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.

Recommended Answers

All 8 Replies

Your problem is reading the file. What is the format of the file. Can you post some of its data.

Also I would suggest to create an object with properties the data you are reading:

class YourClass {
  private String employeeName=null;
  private int employeeNum=0;
....
// declare constructor and get/set methods
}

Then read the entire file. As you read it create instances of your class and put them into a Vector.
Check the API for the Vector. Then whenever the "Next" button is clicked get from the Vector the next element.

for multiple try-catch statement, you have to close it with one final statement which is "finally{}"

try {
    statements;
} catch (exceptionType1 identifier1) {      // one or multiple
    statements;                 
} catch (exceptionType2 identifier2) {
    statements;
}    
...
} finally {                                 // one or none
    statements;
}

for the readChars() function, I don't really understand your point. maybe you can elaborate a little bit more and include only the necessary code so I can be more focus in looking the issue. hope it helps.

btw after re-read your post your readChars() function that comes with error message "undefined", maybe you can just simply add

Import java.lang.String;

for multiple try-catch statement, you have to close it with one final statement which is "finally{}"

The above is not quite correct. You make it sound like it is necessary to put a finally block which is not. In your code you specify that it is not obligatory, but at your description above you accidentally give the impression that a finally block is always needed.


But this is wrong:

Import java.lang.String;

The above is absolutely not needed to be added

i am a biginner in java programming,i would like to know how we can identify and correct types of errors in java program?

i am a biginner in java programming,i would like to know how we can identify and correct types of errors in java program?

Next time start a new Thread. Someone else has started this and expects to find answers to his problem, not yours.

> Also the compile errors tell you at which line the error is and they have a brief description of the error.
> The exception tell you the line were the exception happened. Look for the first line of the message, that indicates your class.
> ALWAYS look the API of the classes you are using:
http://java.sun.com/j2se/1.5.0/docs/api/overview-summary.html
or search the internet for the API of the class you are using.

The above is not quite correct. You make it sound like it is necessary to put a finally block which is not. In your code you specify that it is not obligatory, but at your description above you accidentally give the impression that a finally block is always needed.


But this is wrong:

Import java.lang.String;

The above is absolutely not needed to be added

thank's a lot for the corrections. really appreciated.

In not fully understanding what I was getting myself into, I am taking both C++ and Java at the same time. I have been given a C++ project that is due next tue whereas this isn't due until the 1st week of Dec so I am going to have to "pause" (as much as I hate to leave it unfinnished) and focus on the C++.

Thanks again for all of your assistance. I will come back to this asap or will delete this and start a new thread when I come back to "bump" it up (saying that I will still need assistance which is rather likely).

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.