The Artima Developer Community
Sponsored Link

Legacy Java Answers Forum
December 2001

Advertisement

Advertisement

This page contains an archived post to the Java Answers Forum made prior to February 25, 2002. If you wish to participate in discussions, please visit the new Artima Forums.

Message:

Update Record method not working :(

Posted by Paul Michael on December 19, 2001 at 12:06 PM

Hello All:

Having problems with my "UpdateRec" method maybe you can help. Please create two text files (i.e. Notepad), HardwareStore.java and Record.java and save them as (all files) ".java" files; launched JBuilder or Forte or whatevet Java editor you use and run it. Create a "New record" then 'Save Changes' and then click on the "Update Record" command button, edit the name, quqnity or price and you will see what I mean.

Thank you and have a Happy Holiday!
PM

//HardwareStore.java
// This program reads a random access file sequentially,
// updates data already written to the file, creates new
// data to be placed in the file, and deletes data
// already in the file.
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import Record;

public class HardwareStore extends Frame
implements ActionListener {
private Button updateButton, // update record
newButton, // add new record
deleteButton, // delete record
done; // quit program

private UpdateRec update; // dialog box for record update
private NewRec newRec; // dialog box for new record
private DeleteRec deleteRec; // dialog box for delete record
private RandomAccessFile file; // file from which data is read
private Record data;

public HardwareStore()
{
super( "Fred's Hardware Store Inventory" );

// Open the file for existing and\or create new + open
try {
file = new RandomAccessFile("hardware.dat", "rw" );
}
catch ( IOException e ) {
System.err.println( e.toString() );
System.exit( 1 );
}

data = new Record();
setup();
addWindowListener( new WindowHandler( this ) );
}

public void setup()
{
setSize( 300, 80 );
setLayout( new GridLayout( 2, 2 ) );

updateButton = new Button( "Update Record" );
newButton = new Button( "New Record" );
deleteButton = new Button( "Delete Record" );
done = new Button( "Done" );

updateButton.addActionListener( this );
newButton.addActionListener( this );
deleteButton.addActionListener( this );
done.addActionListener( this );

add( updateButton );
add( newButton );
add( deleteButton );
add( done );

setVisible( true ); // show the Frame

// Create dialog boxes
update = new UpdateRec( file );
newRec = new NewRec( file );
deleteRec = new DeleteRec( file );
}

public void actionPerformed( ActionEvent e )
{
String current = ( String ) e.getActionCommand();

if ( current.equals( "Update Record" ) )
update.setVisible( true );
else if ( current.equals( "New Record" ) )
newRec.setVisible( true );
else if ( current.equals( "Delete Record" ) )
deleteRec.setVisible( true );
else if ( current.equals( "Done" ) )
cleanup();
}

public void cleanup()
{
try {
file.close();
}
catch ( IOException e ) {
System.exit( 1 );
}

setVisible( false );
System.exit( 0 );
}

public static void main( String args[] )
{
HardwareStore inventory = new HardwareStore();
}
}

class WindowHandler extends WindowAdapter {
HardwareStore h;

public WindowHandler( HardwareStore s ) { h = s; }

public void windowClosing( WindowEvent e ) { h.cleanup(); }
}

class UpdateRec extends Dialog
implements ActionListener {
private RandomAccessFile file;
private TextField part, tName, quantity, price;
private Label partLabel, tNameLabel, quantityLabel, priceLabel;
private Button cancel, save;
private Record data;
private int thePartNumber;

public UpdateRec( RandomAccessFile f )
{
super( new Frame(), "Update Record", true );
setSize( 300, 180 );
setLayout( new GridLayout( 6, 2 ) );
file = f;

part = new TextField( 10 );
tName = new TextField( 10 );
quantity = new TextField( 10 );
price = new TextField( 10 );
partLabel = new Label( "Part" );
tNameLabel = new Label( "Tool name" );
quantityLabel = new Label( "Quantity" );
priceLabel = new Label( "Price" );
save = new Button( "Save Changes" );
cancel = new Button( "Cancel" );

part.addActionListener( this );
save.addActionListener( this );
cancel.addActionListener( this );

add( partLabel);
add( part );
add( tNameLabel );
add( tName );
add( quantityLabel );
add( quantity );
add( priceLabel );
add( price );
add( save );
add( cancel );

data = new Record();
}

public void actionPerformed( ActionEvent e )
{
if ( e.getSource() == part ) {
thePartNumber = Integer.parseInt( part.getText() );

if ( thePartNumber < 1 || thePartNumber > 100 ) {
part.setText( "Invalid part number" );
return;
}

try {
file.seek( ( thePartNumber - 1 ) * data.getSize() );
data.read( file );
}
catch ( IOException ex ) {
part.setText( "Error reading file" );
}

if ( data.getPartNumber() != 0 ) {
part.setText( String.valueOf( data.getPartNumber() ) );
tName.setText( data.getPartName() );
quantity.setText( Integer.toString( data.getQuantity() ) );
price.setText( String.valueOf( data.getCost() ) );
}
else
part.setText( thePartNumber + " does not exist" );
}
else if ( e.getSource() == save ) {
try {
file.seek( ( thePartNumber - 1 ) * data.getSize() );
data.setPartNumber( thePartNumber );
data.setPartName( tName.getText() );
data.setQuantity( Integer.parseInt( quantity.getText() ) );
data.setCost( ( Double.valueOf(
price.getText() ) ).doubleValue() );
data.write( file );
}
catch ( IOException ex ) {
part.setText( "Error writing file" );
return;
}

setVisible( false );
clear();
}
else if ( e.getSource() == cancel ) {
setVisible( false );
clear();
}
}

private void clear()
{
part.setText( "" );
tName.setText( "" );
quantity.setText( "" );
price.setText( "" );
}
}

class NewRec extends Dialog
implements ActionListener {
private RandomAccessFile file;
private TextField part, tName, quantity, price;
private Label partLabel, tNameLabel, qLabel, priceLabel;
private Button cancel, save;
private Record data;
private int partNum;

public NewRec( RandomAccessFile f )
{
super( new Frame(), "New Record", true );
setSize( 300, 150 );
setLayout( new GridLayout( 5, 2 ) );
file = f;

partLabel = new Label( "Part Number" );
part = new TextField( 10 );
tName = new TextField( 10 );
quantity = new TextField( 10 );
price = new TextField( 10 );
tNameLabel = new Label( "Tool Name" );
qLabel = new Label( "Quantity" );
priceLabel = new Label( "Price" );
save = new Button( "Save Changes" );
cancel = new Button( "Cancel" );

save.addActionListener( this );
cancel.addActionListener( this );

add( partLabel);
add( part );
add( tNameLabel );
add( tName );
add( qLabel );
add( quantity );
add( priceLabel );
add( price );
add( save );
add( cancel );

data = new Record();
}

public void actionPerformed( ActionEvent e )
{
if ( e.getSource() == save ) {
partNum = Integer.parseInt( part.getText() );

data.setPartName( tName.getText() );
data.setQuantity( Integer.parseInt( quantity.getText() ) );
data.setCost( ( new Double( price.getText() ) ).doubleValue() );
data.setPartNumber( partNum );

if ( partNum < 1 || partNum > 100 ) {
part.setText( "Invalid account" );
return;
}

try {
file.seek( ( partNum - 1 ) * data.getSize() );
data.write( file );
}
catch ( IOException ex ) {
part.setText( "Error writing file" );
System.err.println(ex.toString());
return;
}

setVisible( false );
clear();
}
else if ( e.getSource() == cancel ) {
setVisible( false );
clear();
}
}

private void clear()
{
part.setText( "" );
tName.setText( "" );
quantity.setText( "" );
price.setText( "" );
}
}

class DeleteRec extends Dialog
implements ActionListener {
private RandomAccessFile file;
private TextField part;
private Label partLabel;
private Button cancel, delete;
private Record data;
private int partNum;

public DeleteRec( RandomAccessFile f )
{
super( new Frame(), "Delete Record", true );
setSize( 300, 80 );
setLayout( new GridLayout( 2, 2 ) );
file = f;

partLabel = new Label( "Part Number" );
part = new TextField( 10 );
delete = new Button( "Delete Record" );
cancel = new Button( "Cancel" );

cancel.addActionListener( this );
delete.addActionListener( this );
part.addActionListener( this );

add( partLabel);
add( part );
add( delete );
add( cancel );

data = new Record();
}

public void actionPerformed( ActionEvent e )
{
if ( e.getSource() == part ) {
partNum = Integer.parseInt( part.getText() );

if ( partNum < 1 || partNum > 100 ) {
part.setText( "Invalid part number" );
return;
}

try {
file.seek( ( partNum - 1 ) * data.getSize() );
data.read( file );
}
catch ( IOException ex ) {
part.setText( "Error reading file" );
}

if ( data.getPartNumber() == 0 )
part.setText( partNum + " does not exist" );
}
else if ( e.getSource() == delete ) {
try {
file.seek( ( partNum - 1 ) * data.getSize() );
data.setPartNumber( 0 );
data.setPartName( "" );
data.setQuantity( 0 );
data.setCost( 0.0 );
data.write( file );
}
catch ( IOException ex ) {
part.setText( "Error writing file" );
return;
}

setVisible( false );
part.setText( "" );
}
else if ( e.getSource() == cancel ) {
setVisible( false );
part.setText( "" );
}
}
}
*************************************
//Record.java
//A smal sub-routine
import java.io.*;

public class Record {
private int partNumber;
private String partName;
private int quantity;
private double cost;

// Read a record from the specified RandomAccessFile
public void read( RandomAccessFile file ) throws IOException
{
partNumber = file.readInt();
char f[] = new char[ 15 ];

for ( int i = 0; i < f.length; i++ )
f[ i ] = file.readChar();

partName = new String( f );
quantity = file.readInt();
cost = file.readDouble();
}

// Write a record to the specified RandomAccessFile
public void write( RandomAccessFile file ) throws IOException
{
StringBuffer buf;

file.writeInt( partNumber );

if ( partName != null )
buf = new StringBuffer( partName );
else
buf = new StringBuffer( 15 );

buf.setLength( 15 );

file.writeChars( buf.toString() );
file.writeInt( quantity );
file.writeDouble( cost );
}

public void setPartNumber( int p ) { partNumber = p; }

public int getPartNumber() { return partNumber; }

public void setPartName( String f ) { partName = f; }

public String getPartName() { return partName; }

public void setQuantity( int q ) { quantity = q; }

public int getQuantity() { return quantity; }

public void setCost( double c ) { cost = c; }

public double getCost() { return cost; }

// NOTE: This method contains a hard coded value for the
// size of a record of information.
public static int getSize() { return 31; }
}




Replies:

Sponsored Links



Google
  Web Artima.com   
Copyright © 1996-2009 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use - Advertise with Us