oto kod źródłowy programu.... mam button withdraw-wyplata i lodge-wplata, program jesli odczytuje plik .dat prawidlowo. Lecz jesli chce wplacic na konto albo wyplacic to niestety nie dziala - oczywiscie brakuje mi kodu. Jest to w pliku Read.... .java. Nigdy tez nie tworzylem - laczylem dwoch plikow w jeden ... tak aby classy Read... i Write byly razem i uruchamialy sie z menu....
Plik 1
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
public class WriteRandomFile extends Frame implements ActionListener
{
private JTextField accountField, firstNameField,
lastNameField, balanceField, overdraftlimitField;
private JButton enter,
done;
private RandomAccessFile output;
private Record data;
public WriteRandomFile()
{
super("Write to random access file");
data = new Record();
try {
output = new RandomAccessFile("credit.dat","rw");
}
catch ( IOException e ) {
System.err.println(e.toString() );
System.exit(1);
}
setSize(350,150);
setLayout(new GridLayout(6,2));
setLayout(new GridLayout(6,2));
add(new JLabel("Account Number"));
accountField = new JTextField();
add(accountField);
add(new JLabel("First Name"));
firstNameField = new JTextField(20);
add(firstNameField);
add(new JLabel("Last Name"));
lastNameField = new JTextField(20);
add(lastNameField);
add(new JLabel("Balance"));
balanceField = new JTextField(20);
add(balanceField);
add(new JLabel("Overdraftlimit"));
overdraftlimitField = new JTextField(20);
add(overdraftlimitField);
enter = new JButton("Enter");
enter.addActionListener(this);
add(enter);
done = new JButton("Done");
done.addActionListener(this);
add(done);
setVisible(true);
}
public void addRecord()
{
int accountNumber = 0;
Double d, db;
if ( ! accountField.getText().equals("")) {
try{
accountNumber =
Integer.parseInt(accountField.getText());
if ( accountNumber > 0 && accountNumber <= 1000) {
data.setAccount(accountNumber);
data.setFirstName(firstNameField.getText());
data.setLastName(lastNameField.getText());
d = new Double(balanceField.getText());
data.setBalance(d.doubleValue());
output.seek(
(long) (accountNumber-1) * Record.size());
data.write(output);
db = new Double(overdraftlimitField.getText());
data.setOverdraftlimit(db.doubleValue());
output.seek(
(long) (accountNumber-1) * Record.size());
data.write(output);
}
accountField.setText("");
firstNameField.setText("");
lastNameField.setText("");
balanceField.setText("");
overdraftlimitField.setText("");
}
catch (NumberFormatException nfe) {
System.err.println(
"You must enter an integer account number");
}
catch ( IOException io){
System.err.println(
"Error during write to file\n" +
io.toString());
System.exit(1);
}
}
}
public void actionPerformed( ActionEvent e)
{
addRecord();
if (e.getSource() == done) {
try {
output.close();
}
catch ( IOException io ) {
System.err.println("File not closed properly\n" +
io.toString());
}
System.exit(0);
}
}
public static void main(String args[])
{
new WriteRandomFile();
}
}
plik 2:
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class ReadRandomFile extends Frame implements ActionListener {
private JTextField accountField, firstNameField, lastNameField,
balanceField, overdraftlimitField, withdrawField, lodgementField;
private JButton next, done, withdraw, lodge, delete;
private RandomAccessFile input;
private Record data;
private RandomAccessFile output;
public ReadRandomFile() {
super("Read Client File");
try {
input = new RandomAccessFile("credit.dat", "rw");
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
try {
output = new RandomAccessFile("credit.dat", "rw");
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
data = new Record();
setSize(350, 150);
setLayout(new GridLayout(10, 4));
add(new JLabel("Account Number"));
accountField = new JTextField();
accountField.setEditable(false);
add(accountField);
add(new JLabel("First Name"));
firstNameField = new JTextField(20);
firstNameField.setEditable(false);
add(firstNameField);
add(new JLabel("last Name"));
lastNameField = new JTextField(20);
lastNameField.setEditable(false);
add(lastNameField);
add(new JLabel("Balance"));
balanceField = new JTextField(20);
balanceField.setEditable(false);
add(balanceField);
add(new JLabel("Overdraftlimit"));
overdraftlimitField = new JTextField(20);
overdraftlimitField.setEditable(false);
add(overdraftlimitField);
next = new JButton("Next");
next.addActionListener(this);
add(next);
done = new JButton("Done");
done.addActionListener(this);
add(done);
add(new JLabel("Withdraw"));
withdrawField = new JTextField(20);
withdrawField.setEditable(true);
add(withdrawField);
add(new JLabel("Lodgement"));
lodgementField = new JTextField(20);
lodgementField.setEditable(true);
add(lodgementField);
withdraw = new JButton("Withdraw");
withdraw.addActionListener(new ActionListener() // anonymous inner class
{
// event handler called when WithdrawalJButton is pressed
public void actionPerformed(ActionEvent event) {
Withdrawal(event);
}
} // end anonymous inner class
); // end call to addActionListener
add(withdraw);
lodge = new JButton("Lodge");
lodge.addActionListener(new ActionListener() // anonymous inner class
{
// event handler called when WithdrawalJButton is pressed
public void actionPerformed(ActionEvent event) {
Lodgement(event);
}
} // end anonymous inner class
); // end call to addActionListener
add(lodge);
setVisible(true);
delete = new JButton("Delete Record");
delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
DeleteRecord(event);
}
});
add(delete);
}
public void actionPerformed(ActionEvent e) {
int accountNumber;
if (e.getSource() == next)
readRecord();
else
closeFile();
}
public void readRecord() {
DecimalFormat twoDigits = new DecimalFormat("0.00");
try {
do {
data.read(input);
} while (data.getAccount() == 0);
accountField.setText(String.valueOf(data.getAccount()));
firstNameField.setText(data.getFirstName());
lastNameField.setText(data.getLastName());
balanceField.setText(String.valueOf(twoDigits.format(data
.getBalance())));
overdraftlimitField.setText(String.valueOf(twoDigits.format(data
.getOverdraftlimit())));
} catch (EOFException eof) {
closeFile();
} catch (IOException e) {
System.err.println("error during read from file\n" + e.toString());
System.exit(1);
}
}
private void closeFile() {
try {
input.close();
System.exit(0);
} catch (IOException e) {
System.err.println("Error closing file\n" + e.toString());
System.exit(1);
}
}
public static void main(String args[]) {
new ReadRandomFile();
}
private void Withdrawal(ActionEvent event) {
double Balance = Double.parseDouble(balanceField.getText());
double o = 0;
if (Balance > o)
balanceField.setText(String.valueOf(Double.parseDouble(balanceField
.getText())
- Double.parseDouble(withdrawField.getText())));
withdrawField.setText("");
if (Balance <= o) {
JOptionPane.showMessageDialog(null,
"You Have Insufficant Funds to Request an Overdraft",
"Insufficant Funds", JOptionPane.ERROR_MESSAGE); // display
// error
// message
// if
// user
// enters
// invalid
// input
balanceField.setText("0");
}
int accountNumber = 0;
Double d, db;
{
try {
accountNumber = Integer.parseInt(accountField.getText());
{
data.setAccount(accountNumber);
data.setFirstName(firstNameField.getText());
data.setLastName(lastNameField.getText());
d = new Double(balanceField.getText());
data.setBalance(d.doubleValue());
output.seek((long) (accountNumber - 1) * Record.size());
data.write(output);
db = new Double(overdraftlimitField.getText());
data.setOverdraftlimit(db.doubleValue());
output.seek((long) (accountNumber - 1) * Record.size());
data.write(output);
}
}
catch (IOException io) {
System.exit(1);
}
}
} // end method SubmitJButtonActionPerformed
private void Lodgement(ActionEvent event) {
balanceField.setText(String.valueOf(Double.parseDouble(lodgementField
.getText())
+ Double.parseDouble(balanceField.getText())));
lodgementField.setText("");
int accountNumber = 0;
Double d, db;
{
try {
accountNumber = Integer.parseInt(accountField.getText());
{
data.setAccount(accountNumber);
data.setFirstName(firstNameField.getText());
data.setLastName(lastNameField.getText());
d = new Double(balanceField.getText());
data.setBalance(d.doubleValue());
output.seek((long) (accountNumber - 1) * Record.size());
data.write(output);
db = new Double(overdraftlimitField.getText());
data.setOverdraftlimit(db.doubleValue());
output.seek((long) (accountNumber - 1) * Record.size());
data.write(output);
}
}
catch (IOException io) {
System.exit(1);
}
}
}
private void DeleteRecord(ActionEvent event) {
}
}
Mam nadzieje, ze nie sknocilem tym razem :)