⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testrandomaccessfile.java

📁 学生信息写入和查询(文件读写).
💻 JAVA
字号:
// TestRandomAccessFile.java: Store and read data
// using RandomAccessFile
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.lang.String;

public class TestRandomAccessFile extends JFrame
{
  // Create a tabbed pane to hold two panels
  private JTabbedPane jtpStudent = new JTabbedPane();
 // Random access file for access the student.dat file
  private RandomAccessFile raf;
  //RegisterStudent registerstudent;

  // Main method
  public static void main(String[] args)
  {
    TestRandomAccessFile frame = new TestRandomAccessFile();
    frame.pack();
    frame.setTitle("Test RandomAccessFile");
    frame.setVisible(true);
  }

  // Default constructor
  public TestRandomAccessFile()
  {
    // Open or create a random access file
    try
    {
      raf = new RandomAccessFile("student.dat", "rw");
    }
    catch(IOException ex)
    {
      System.out.print("Error: " + ex);
      System.exit(0);
    }

    // Place buttons in the tabbed pane
    jtpStudent.add(new RegisterStudent(raf), "Register Student");
    jtpStudent.add(new ViewStudent(raf), "View Student");
    // Add the tabbed pane to the frame
    getContentPane().add(jtpStudent);
  }
}

// Register student panel
class RegisterStudent extends JPanel implements ActionListener
{
  // Button for registering a student
  private JButton jbtRegister;
  static int registtimes;
  // Student information panel
  private StudentPanel studentPanel;

  // Random access file
  private RandomAccessFile raf;

  // Constructor
  public RegisterStudent(RandomAccessFile raf)
  {
    // Pass raf to RegisterStudent Panel
    this.raf = raf;

    // Add studentPanel and jbtRegister in the panel
    setLayout(new BorderLayout());
    add(studentPanel = new StudentPanel(),
      BorderLayout.CENTER);
    add(jbtRegister = new JButton("Register"),
      BorderLayout.SOUTH);
   // Register listener
    jbtRegister.addActionListener(this);
  }

  // Handle button actions
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == jbtRegister)
    {
      Student student = studentPanel.getStudent();
       registtimes++;
       //System.out.print(registtimes);
      try
      {
        raf.seek(raf.length());
        student.writeStudent(raf);
      }
      catch(IOException ex)
      {
        System.out.print("Error: " + ex);
      }
    }
  }
  public int getregisttimes()
  {
  	return registtimes;
  }
}

// View student panel
class ViewStudent extends JPanel implements ActionListener
{
  // Buttons for viewing student information
  private JButton jbtFirst, jbtNext, jbtPrevious, jbtLast,jbtAverage;
  private float averscore = 0;
  
  private int count = 1; 
  private int times ;
  // Random access file
  private RandomAccessFile raf = null;
  RegisterStudent f = new RegisterStudent(raf);
  // Current student record
  private Student student = new Student();
   // Create a student panel
  private StudentPanel studentPanel = new StudentPanel();
  // File pointer in the random access file
  private long lastPos;
  private long currentPos;

  // Constructor
  public ViewStudent(RandomAccessFile raf)
  {
    // Pass raf to ViewStudent
    this.raf = raf;
    // Panel p to hold four navigator buttons
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout(FlowLayout.LEFT));
    p.add(jbtFirst = new JButton("First"));
    p.add(jbtNext = new JButton("Next"));
    p.add(jbtPrevious = new JButton("Previous"));
    p.add(jbtLast = new JButton("Last"));
    p.add(jbtAverage = new JButton("Averagescore"));
    // Add panel p and studentPanel to ViewPanel
    setLayout(new BorderLayout());
    add(studentPanel, BorderLayout.CENTER);
    add(p, BorderLayout.SOUTH);

    // Register listeners
    jbtFirst.addActionListener(this);
    jbtNext.addActionListener(this);
    jbtPrevious.addActionListener(this);
    jbtLast.addActionListener(this);
    jbtAverage.addActionListener(this);
  }

  // Handle navigation button actions
  public void actionPerformed(ActionEvent e)
  {
    String actionCommand = e.getActionCommand();
    if (e.getSource() instanceof JButton)
    {
      try
      {
        if ("First".equals(actionCommand))
        {
          if (raf.length() > 0)
            retrieve(0);
        }
        else if ("Next".equals(actionCommand))
        {
          currentPos = raf.getFilePointer();
          if (currentPos < raf.length())
            retrieve(currentPos);
        }
        else if ("Previous".equals(actionCommand))
        {
          currentPos = raf.getFilePointer();
          if (currentPos > 0)
            retrieve(currentPos - 2*2*Student.RECORD_SIZE);
        }
        else if ("Last".equals(actionCommand))
        {
          lastPos = raf.length();
          if (lastPos > 0)
            retrieve(lastPos - 2*Student.RECORD_SIZE);
        }
        else if("Averagescore".equals(actionCommand))
        {
        	if(raf.length()>0)
        	
        	computeAverage();
        }
      }
      catch(IOException ex)
      {
        System.out.print("Error: " + ex);
      }
    }
  }

  // Retrieve a record at specified position
  public void retrieve(long pos)
  {
    try
    {
      raf.seek(pos);
      student.readStudent(raf);
      studentPanel.setStudent(student);
    }
    catch(IOException ex)
    {
      System.out.print("Error: " + ex);
    }
  }
  public void computeAverage()
  {
  	if ( count <= 1)
  	{
    
  	try
   {
  	  raf.seek(0);
  	  times = f.registtimes;
  	 // System.out.println(times);
  	for(int i =0;i<times;i++)
    {
    	
    	raf.seek( raf.getFilePointer()+96+32*i);
  	    averscore +=Float.parseFloat(FixedLengthStringIO.readFixedLengthString(32,raf));
  	    //times++;
  	    //System.out.println(times);
    }
      averscore = averscore/times;
      studentPanel.setAverScore(String.valueOf(averscore));
   }
    catch(IOException ex)
    {
      System.out.print("Error: " + ex);
    }
  	
  }
  count++;
 }
}

// This class contains static methods for reading and writing
// fixed length records
class FixedLengthStringIO
{
  // Read fixed number of characters from a DataInput stream
  public static String readFixedLengthString(int size,DataInput in)
  throws IOException
  {
    char c[] = new char[size];

    for (int i=0; i<size; i++)
      c[i] = in.readChar();
    return new String(c);
  }

  // Write fixed number of characters (string s with padded spaces)
  // to a DataOutput stream
  public static void writeFixedLengthString(String s, int size,
    DataOutput out) throws IOException
  {
    char cBuffer[] = new char[size];
    s.getChars(0, s.length(), cBuffer, 0);
    for (int i=s.length(); i<cBuffer.length; i++)
    	cBuffer[i] = ' ';
    String newS = new String(cBuffer);
    out.writeChars(newS);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -