1. 程式人生 > >《面向物件程式設計》課程設計報告 題目:《記憶測試系統》課程設計

《面向物件程式設計》課程設計報告 題目:《記憶測試系統》課程設計

《面向物件程式設計》課程設計報告

題目:《記憶測試系統》課程設計    

學院:資訊工程學院

姓名:

學號:

專業:電腦科學與技術

班級:

指導教師:

2016 年 6月


目 錄

目錄...............................................................................2

1 概    述.................................................................. 1

1.1 課程設計目的....................................................... 1

1.2 課程設計內容....................................................... 1

2 需求分析.................................................................. 1

2.1 設計目標............................................................... 1

2.2 主體功能 ...............................................................1

2.3 開發環境............................................................... 2

3 概要設計.................................................................. 2

3.1 系統的功能模組劃分 ...........................................2

3.2 系統流程圖 ...........................................................2

4 詳細設計 ..................................................................4

5測試........................................................................... 4

5.1 測試方案 ...............................................................4

5.2 測試結果 ...............................................................7

6 課程設計總結 ..........................................................9

附    錄 ....................................................................11

附錄1 源程式清單 ...................................................11


記憶測試系統

1 概    述

1.1 課程設計目的

1) 鞏固和提高java程式設計技術。 

2) 培養掌握成學設計的基本思路和方法。

3) 加強研發、除錯程式的能力。

4) 增強分析、解決問題的能力。

5) 提高科技論文寫作能力。

1.2課程設計內容

記憶測試系統是通過回憶法測試記憶能力,測試手段分為初級,中級和高階三個級別。記憶測試系統設計要求如下: 

(1)單擊“記憶測試”選單可以選擇初級、中級或高階三個級別。 

(2)單擊“記憶測試”選單還可以檢視初級記憶榜、中級記憶榜或高階記憶榜,通過記憶榜儲存每個級別的成績。 

(3)選擇級別後,將出現相應級別的測試區。測試區由m*n個方塊組成,程式通過設定m和n的值來確定相應的測試級別,例如,對於初級級別,m=5,n=6。每個方塊上都有一個圖示,但該圖示預設不可見。用滑鼠單擊測試區中的任何一個方塊,則計時器開始啟動動,同時該方塊上的圖示將顯示出來。 

(4)m*n個方塊組成的測試區中有m個圖示,每個圖示重複出現n次,並且隨機分佈在測試區中的m*n各方塊上。使用者必須用滑鼠連續單擊出n個圖表相同的方塊,也就是說,如果使用者已經用滑鼠連續單擊出p(p<n)個圖示相同的方塊,當再單擊另一個方塊時,如果該方塊的圖示和上一個的相同,那麼該方塊的圖示和前p次單擊出的方塊的圖示仍然可見;否則前p次單擊出來的方塊的圖示全都變得不可見,只有當前單擊的方塊的圖示可現。 

(5)測試區能顯示使用者的同時,並根據級別的不同,提示使用者必須用滑鼠連續單擊出多個圖示相同的方塊。  

(6)連續單擊出級別所要求的若干個相同的方塊後,將彈出儲存成績對話方塊,使用者可以通過該對話方塊選擇是否將自己的成績儲存到成績表中。 

2 需求分析 

2.1 設計目標

1.單擊“記憶測試”選單可以選擇初級、中級、高階三個級別,通過記憶榜可以檢視初級記憶榜、中級記憶榜或高階記憶榜。 

2.選擇級別後,將顯示相應級別的測試區域。測試區域由若干個方塊組成,每個方塊上都有一個圖示,但該圖示預設情況下不可見。用滑鼠單擊測試區中的任何一個方塊,則計時器開始啟動,同時該方塊上的圖示將顯示出來。對於初級級別,使用者必須用滑鼠連續單擊6個圖示相同的方塊,也就是說,如果使用者已經用滑鼠連續單擊出n(n<6)個圖示相同的方塊,單擊另一個方塊時,如果該方塊的圖示和上一個相同,那麼該方塊的圖示和前n次單擊出的方塊的圖示仍然可見,否則,前n次單擊出的方塊的圖示都變為不可見。 

3.連續單擊出該級別所要求的若干個圖示形同的方塊後,將顯示儲存成績對話方塊,成績按所用時間排序。使用者可以通過該對話方塊選擇是否將自己的成績儲存到成績表中。

2.2 主體功能

本遊戲是通過由使用者點選圖片顯示出圖片後,如果是相同的,便保持圖形,如果使用者點開的是不同的圖片則先前點選的圖片被清空。當用戶同時點擊出規定數目的圖片後,彈出儲存成績框。

2.3 開發環境

Win7;MyEclipse 8.5軟體 

3 概要設計

3.1系統的功能模組劃分

記憶測試系統共包含7個java原始檔和若干個影象檔案(使用者可以增加)。類之間的主要關係如下圖所示。  

在測試系統中,可以編寫5個Java原始檔:Memory.java、Block.java、ShowRecord.java、Record.java、People.java。  記憶測試系統除了上述5個Java原始檔產生的類外,還需要Java系統提供的一些重要的類。  記憶測試系統所用到的一些重要的類以及之間的組合關係如圖3.1所示。

Block(方塊) MemoryTestPane(測試版) ShowRecord(顯示成績)

圖3.1 類之間的組合關係

RandomSetIcon(隨機排列圖示)               Record(記錄成績)

People(使用者資訊)

3.2 系統流程圖

開始

建立容器

選擇選單

選擇級別

相應級別提示

載入“方塊”

隨機設定“方塊”上的圖示

檢視排行榜              檢視幫助資訊

載入“圖示”並開始計時

顯示相應級別

排行榜   否

相同圖示滿足要求

顯示操作資訊

顯示儲存成績

對話方塊

是否儲存成績

輸入玩家姓名

成績排序後儲存到相應檔案中

結束

4 詳細設計 

4.1工作原理 

系統主體部分是在底層容器上插入面板,並在面板上安排按鈕陣列,當用戶點選按鈕,經過隨機安排在按鈕後面的圖片顯示出來。通過對比圖片下標,如果所顯示圖片和前一個顯示圖片一樣,則沒變化;如果,不一樣,則把以前所有顯示的圖片重新用按鈕遮蓋。當用戶點開指定數量的圖片時,就進入記錄資料部分。在測試過程中,顯示使用者測試時間。記錄資料部分。是把使用者輸入的姓名和系統記錄使用者測試時間寫入指定文件中儲存。查閱資料部分,是把指定文件的資料顯示給使用者,包括姓名和測試時間。使用者此時可以清除文件中資料,即可刪除排行榜。 

4.2 演算法思路 

主視窗安排指定數量按鈕,是通過使用者所選級別傳引數計算後進行安排。隨機分佈圖片需要隨機函式隨機產生指定數量的圖片下標,並傳給主視窗的按對應按鈕通過對比所顯示圖片的下標,統計顯示的相同圖片的數量。使用者測試開始後,記錄測試時間,並儲存。 

4.3主類Memory 

a).成員變數 

主要成員變數(屬性): 

成員變數描述 變數型別 名稱 

選單條 JMenuBar Bar 

選單                      JMenuItem              FileMenu 

選單項                    JMenuBar 初級,中級,高階,初級排行榜,中級排行榜,高階排行榜 

面板容器 MemoryTestPane 記憶測試板 

方塊陣列                  Block[]                 block 

顯示成績 ShowRecord 顯示成績表對話方塊 

圖示陣列 ImageIcon[] icon 

b).方法 

主要方法: 

名稱 功能 備註 

Memory                  建立視窗 構造方法 

給出級別測試 選擇級別 

actionPerformed 處理ActionEvent事件   介面方法 

Main 主程式開始執行  

4.4類Block 

a).成員變數

主要成員變數(屬性):

成員變數描述 變數型別 名稱 

方塊翻開時的圖示 ImageIcon 翻開時的圖示

 方塊關閉時的圖示 ImageIcon            關閉時的圖示

b).方法 

主要方法: 

名稱                        功能                 備註

actionPerformed 處理ActionEvent事件     處理ActionEvent事件

4.5類MemoryTestPane 

a).成員變數 

主要成員變數(屬性): 

變數描述                  變數型別 名稱 

隨機排列圖示物件         RandomSetIcon               排列圖示 

方塊陣列 Block block 

圖示陣列                 ImageIcon[] icon 

新增方塊物件用的連結串列     LinkedList listIcon 

新增圖示物件用的連結串列 LinkedList                    listIcon 

確定是否成功的物件 int success 

用來計時的物件             Timer 計時器 

記憶測試板的行數和列數    int                          行數,列數

b).方法 

主要方法: 

名稱                       功能 備註

造方法 

 actionPerformed 處理ActionEvent事件              介面方法

4.6類ShowRecord 

a). 成員變數 

主要成員變數(屬性):  

成員變數描述                變數型別 名稱 

存放成績的檔案 File gradeFile 

按鈕物件 JButton 確定,清除 

顯示成績的區域 JTextArea                     show 

b).方法 

主要方法: 

名稱                         功能                    備註 

ShowRecord 建立顯示成績視窗 構造方法

actionPerformed 處理ActionEvent事件            介面方法

4.7類Record 

a).成員變數 

主要成員變數(屬性): 

成員變數描述               變數型別 名稱 

用時 int time 

輸入測試者的名字            JTextField yourname 

存放成績的檔案 File gradeFile

 是否儲存成績的按鈕           JButton                     確定,取消

b).方法 主要方法: 

名稱                          功能 備註

actionPerformed             處理ActionEvent事件            介面方法 

setTime 設定時間  

setFile                        設定檔案

4.8類RandomSetIcon

 a).成員變數(無) 

b).方法 主要方法:

名稱 功能 備註 

隨機設定圖示         隨機排列記憶測試板中方塊的圖示

4.9類People 

a)成員變數 

主要成員變數(屬性): 

描述                         變數型別 名稱

 測試者名字 String name

 用時                          int time 

b) 方法 

主要方法: 

名稱            功能 備註

5測試 

5.1 測試方案 

將7個java檔案儲存到一個資料夾中,例如,D:\jiyiceshi。將7個檔案分別編譯成相應的位元組碼(.class)檔案。然後,用java直譯器執行主類:C:\jiyiceshi\java Memory  程式執行後選擇各選單,分別進行功能測試。

 5.2 測試結果 

(1)   執行效果

(2)    當選擇“記憶力測試”後,自己可以設定遊戲的難度,效果如圖

初級效果圖

中級效果圖

高階效果圖

(3)當遊戲結束後,檢視“初級排行榜”,將顯示初級的成績記錄效果。

初級成績記錄

6 課程設計總結

Java程式設計是本專業的一門重要的面向物件的程式語言。在剛開始學習時,一直擔心自己、也沒把握自己能否學好,也曾擔心過不了考試這一關。經過近大半學期老師您不厭其煩的教導,引導我們去學習。我對Java語言有了一定的瞭解,但那絕對是遠遠不夠的,還是要不斷地把它應用到實踐中去,融會貫通。 

經過為期一週的Java課程設計,親身感受體驗敲、改寫Java程式程式碼的樂趣,我對Java程式設計有了較為深入的瞭解,不僅鞏固了以前在課本上學到的知識,還學會了很多其他東西,比如Java程式不同調試平臺的使用、錯誤的除錯及資料庫路徑的配置等等。  

一直以來,或許有不少人跟我一樣,總是覺得程式設計是很枯燥乏味的,但是這次 的體驗下來,其實以前我們的想法錯誤的。感覺到看著敲擊的程式碼變為一個個可以自娛自樂小遊戲程式,其實是一件非常有趣的事情。並且在新增功能的過程中,不僅可以啟發自己的想象力,還可以培養靈活運用知識的能力。在此過程中,我們認識到程式設計的重要步驟是分析,分析問題的本身和現實要求。分析過程中採用根據設定框架選擇功能使我的思路特別清晰。拿到一個題目不能只侷限在一種思想一種方法上,要儘量的多嘗試其他的做法,然後比較,集各家之所長,拿出最優秀的程式來。其次也是最重要的就是我們應當開啟我們的視野,我們應當從我們的生活的這個世界中去領悟解決問題的思想和方法 

通過這次課程設計,我收穫的不僅僅是課程上的知識得到實際應用,還有程式設計的基本習慣和開發系統時應注意的流程。作為一個程式程式設計人員,要保持清醒的頭腦,以現實為依據,讓自己的每一行程式碼都能實現自己的意義。


附  錄

附錄1 源程式清單

Block.java

import javax.swing.*;

import java.awt.event.*;

public class Block extendsJButton implements ActionListener

{

 ImageIcon 翻開時的圖示=null,關閉時的圖示=null;

 public Block()

  {

    addActionListener(this);

  }

 public ImageIcon 獲取翻開時的圖示()

  {

    return 翻開時的圖示;

  } 

 public ImageIcon 獲取關閉時的圖示()

  {

    return 關閉時的圖示;

  } 

 public void 設定翻開時的圖示(ImageIcon icon)

  {

    翻開時的圖示=icon;

  }

 public void 設定關閉時的圖示(ImageIcon icon)

  {

    關閉時的圖示=icon;

  }

 public void 設定圖示(ImageIcon icon)

  {

    setIcon(icon);   

  }

 public void actionPerformed(ActionEvent e)

  {

    this.setIcon(翻開時的圖示);

  }

}

Memory.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

importjava.util.LinkedList;

public class Memoryextends JFrame implements ActionListener

{

  JMenuBar bar;

  JMenu fileMenu;

  JMenuItem 初級,中級,高階,初級排行榜,中級排行榜,高階排行榜;

  Block block[];

  ImageIcon icon[];

  MemoryTestPane 記憶測試板=null;

  File file初級=new File("初級記憶排行榜.txt"),

       file中級=new File("中級記憶排行榜.txt"),

       file高階=new File("高階記憶排行榜.txt");

  LinkedList 成績表=null;

  ShowRecord 顯示成績表對話方塊=null;

  int m=5,n=6;                                       

  int 圖示個數=0;

  Container con=null;

  JTextField 提示條=null;

  File gradeFile=null;           

  public Memory()

  {

    block=new Block[m*n];

    圖示個數=m;

    icon=new ImageIcon[圖示個數];

    for(int i=0;i<icon.length;i++)

       {

         icon[i]=newImageIcon("a"+i+".gif");

       }

    for(int i=0;i<block.length;i++)

       {

         block[i]=new Block();

         block[i].設定關閉時的圖示(new ImageIcon("關閉.gif"));

       }

    bar=new JMenuBar();

    fileMenu=new JMenu("記憶力測試");

    初級=new JMenuItem("初級");

    中級=new JMenuItem("中級");

    高階=new JMenuItem("高階");

    fileMenu.setMnemonic('G');

    初級.setMnemonic('B');

    中級.setMnemonic('I');

    高階.setMnemonic('E');

    高階排行榜=new JMenuItem("高階排行榜");

    中級排行榜=new JMenuItem("中級排行榜");

    初級排行榜=new JMenuItem("初級排行榜");

    初級.setMnemonic('T');

    fileMenu.add(初級);

    fileMenu.add(中級);

    fileMenu.add(高階);

    fileMenu.add(初級排行榜);

    fileMenu.add(中級排行榜);

    fileMenu.add(高階排行榜);

    bar.add(fileMenu);

    setJMenuBar(bar);

    初級.addActionListener(this);

    中級.addActionListener(this);

    高階.addActionListener(this);

    初級排行榜.addActionListener(this);

    中級排行榜.addActionListener(this);

    高階排行榜.addActionListener(this);

    成績表=new LinkedList();

    if(!file初級.exists())                        

     {

      try{

          FileOutputStream out=newFileOutputStream("初級記憶排行榜.txt");

          ObjectOutputStream object_out=newObjectOutputStream(out);

          object_out.writeObject(成績表);

          object_out.close();

          out.close();

         }

      catch(IOException e)

         {

         }

     }

     if(!file中級.exists())

     {

      try{

          FileOutputStream out=newFileOutputStream("中級記憶排行榜.txt");

          ObjectOutputStream object_out=newObjectOutputStream(out);

          object_out.writeObject(成績表);

          object_out.close();

          out.close();

         }

      catch(IOException e)

         {

         }

     }

     if(!file高階.exists())

     {

      try{

          FileOutputStream out=newFileOutputStream("高階記憶排行榜.txt");

          ObjectOutputStream object_out=newObjectOutputStream(out);

          object_out.writeObject(成績表);

          object_out.close();

          out.close();

         }

      catch(IOException e)

         {

         }

     }

    gradeFile=file初級;

    setBounds(100,100,300,260);

    setVisible(true);

    addWindowListener(new WindowAdapter()

      {

        public void windowClosing(WindowEvente)

         {

          System.exit(0);

         }

      });

    con=getContentPane();

    記憶測試板=newMemoryTestPane(block,icon,m,n,gradeFile);

    提示條=new JTextField("初級:您需要連續找出"+6+"個相同圖示的方塊");

    提示條.setEditable(false);

    提示條.setForeground(Color.red);

    con.add(記憶測試板,BorderLayout.CENTER);

    con.add(提示條,BorderLayout.SOUTH);

    con.validate();

    this.validate();

 }

 public void 給出級別測試(int 寬,int 高,File f)

 {   

    m=寬;

    n=高;

    圖示個數=m;

    gradeFile=f;

    block=new Block[m*n];

    icon=new ImageIcon[圖示個數];

       for(int i=0;i<icon.length;i++)

       {

         icon[i]=newImageIcon("a"+i+".gif");

       }

    for(int i=0;i<block.length;i++)

       {

         block[i]=new Block();

         block[i].設定關閉時的圖示(new ImageIcon("關閉.gif"));

       }

    記憶測試板=newMemoryTestPane(block,icon,m,n,gradeFile);

    con.removeAll();

    con.add(記憶測試板,BorderLayout.CENTER);

    con.add(提示條,BorderLayout.SOUTH);

    con.validate();

    this.validate();

 }

 public void actionPerformed(ActionEvent event)

 {

   if(event.getSource()==初級)

       { 

         給出級別測試(5,6,file初級);

         setBounds(100,100,300,260);

         this.validate();

         提示條.setText("初級:您需要連續找出"+6+"個相同圖示的方塊");

       }

   if(event.getSource()==中級)

       {

         給出級別測試(6,7,file中級);

         setBounds(100,100,340,280);

         this.validate();

         提示條.setText("中級:您需要連續找出"+7+"個相同圖示的方塊");

       }

   if(event.getSource()==高階)

       { 

         給出級別測試(7,8,file高階);

         setBounds(100,100,360,300);

         this.validate();

         提示條.setText("高階:您需要連續找出"+8+"個相同圖示的方塊");

       }

   if(event.getSource()==高階排行榜)

       {

         顯示成績表對話方塊=new ShowRecord(this,file高階);

         顯示成績表對話方塊.setVisible(true);

       }

    if(event.getSource()==中級排行榜)

       {

         顯示成績表對話方塊=new ShowRecord(this,file中級);

         顯示成績表對話方塊.setVisible(true);

       }

     if(event.getSource()==初級排行榜)

       {

         顯示成績表對話方塊=new ShowRecord(this,file初級);

         顯示成績表對話方塊.setVisible(true);

       }

 }

 public static void main(String args[])

  {

    new Memory();

  }

}

MemoryTestPane.java

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

importjava.util.LinkedList;

import java.io.*;

public classMemoryTestPane extends JPanel implements ActionListener

{

  RandomSetIcon 排列圖示=null;

  Block block[];                        

  ImageIcon icon[];                     

  LinkedList listIocn=null,            

              listBlock=null;           

  int 行數=0,列數=0;

  int success=0;                        

  int time=0;                           

  javax.swing.Timer 計時器=null;        

  JTextField 顯示時間=null;

  File gradeFile=null;

  boolean 計時器是否啟動=false;

  public MemoryTestPane(Block[] block,ImageIcon[] icon,int m,int n,File f)

   {

     排列圖示=new RandomSetIcon();

     this.block=block;

     this.icon=icon;

     行數=m;

     列數=n;

     gradeFile=f;

     listIocn=new LinkedList();

     listBlock=new LinkedList();

     setLayout(new BorderLayout());

     JPanel center=new JPanel();

     center.setLayout(new GridLayout(行數,列數));

     for(int i=0;i<block.length;i++)

        {

          center.add(block[i]);

          block[i].addActionListener(this);

        }

     JPanel south=new JPanel();

     顯示時間=new JTextField(12);

     顯示時間.setEditable(false);

     顯示時間.setForeground(Color.red);

     south.add(顯示時間);

     add(center,BorderLayout.CENTER);

     add(south,BorderLayout.SOUTH);

     排列圖示.隨機設定圖示(block,icon);

     計時器=newTimer(1000,this);                             

     計時器是否啟動=false;

   }

  public void actionPerformed(ActionEvent e)

  {

    if(e.getSource() instanceof Block)

    {

        Block 方塊=(Block)e.getSource();

        ImageIcon 翻開時的圖示=方塊.獲取翻開時的圖示();

        方塊.設定圖示(翻開時的圖示);

        if(listIocn.size()==0)                                 

         {

          listIocn.add(翻開時的圖示);

          listBlock.add(方塊);

          success=1;                                            

         }

        else

         {

           ImageIcontemp=(ImageIcon)listIocn.getLast();       

           if(temp==翻開時的圖示&&!(listBlock.contains(方塊))) 

              {

                success=success+1;                             

                listIocn.add(翻開時的圖示);                    

                listBlock.add(方塊);

                if(success==列數)

                  {

                    for(inti=0;i<block.length;i++)          

                     {

                       block[i].setEnabled(false);

                     }

                    for(intj=0;j<listBlock.size();j++)

                     {

                       Blockb=(Block)listBlock.get(j);

                       b.setDisabledIcon(b.獲取翻開時的圖示());

                     }

                    計時器.stop();

                    Record record=newRecord(gradeFile);

                    record.setTime(time);

                    record.setVisible(true);

                  }   

               }

           else if((temp!=翻開時的圖示)&&(!(listBlock.contains(方塊))))

               {

                listIocn.clear();                         

                listBlock.clear();

                listIocn.add(翻開時的圖示);               

                listBlock.add(方塊);

                success=1;                                

                for(inti=0;i<block.length;i++)           

                  {

                    if(方塊!=block[i])

                       {

                         block[i].設定圖示(block[i].獲取關閉時的圖示());

                       }

                 }               

               } 

         }

       if(計時器是否啟動==false)

         {

          time=0;

          計時器.start();                                  

          計時器是否啟動=true;                              

         }

    }

   if(e.getSource()==計時器)

    {

      time=time+1;

      顯示時間.setText("您的用時:"+time+"秒");

    }

 }

}

People.java

publicclass People implements java.io.Serializable

{

  String name=null;

int time=0;                         

public People(String name,int t)

  {

this.name=name;

    time=t;

  }

publicint getTime()

  {

return time;

  }

public String getName()

  {

return name;

  }

}

RandomSeticon.java

importjavax.swing.*;

importjava.util.Vector;

class Point

{

  int x;

  Point(int i)

  {

    x=i;

  }

  public int getInt()

  {

    return x;

  }

}

public class  RandomSetIcon

 {

  public RandomSetIcon()

    {

    }

  public void 隨機設定圖示(Block[] block,ImageIcon icon[])

    {

      Vector vector=new Vector();                  

      int n=icon.length;

     for(int i=0;i<block.length;i++)               

       {

         int x=i%n;

         Point p=new Point(x);

         vector.addElement(p);

       }

     for(int i=0;i<block.length;i++)

       {

         intm=(int)(Math.random()*vector.size());

         Pointp=(Point)vector.elementAt(m);      

         int x=p.getInt();                        

         block[i].設定翻開時的圖示(icon[x]);

         vector.remove(m);          

       }

    }

 }

Recorsd.java

import java.io.*;

importjava.util.*;

importjavax.swing.*;

importjava.awt.event.*;

import java.awt.*;

public classRecord extends JFrame implements ActionListener

{

  int time=0;

  JTextField yourName,label;

  JButton 確定,取消;

  File gradeFile=null;

  public Record(File f)

  {

    super("記錄你的成績到:"+f.toString());

    gradeFile=f;

    setBounds(100,100,330,160);

    setResizable(false);

    setVisible(false);

    確定=newJButton("確定");

    取消=newJButton("取消");

    yourName=new JTextField(8);

    yourName.setText("匿名");

    確定.addActionListener(this);

    取消.addActionListener(this);

    Container con=getContentPane();

    con.setLayout(new GridLayout(2,1));

    label=new JTextField("輸入你的姓名,將成績存放到排行榜:"+f.toString());

    label.setEditable(false);

    con.add(label);

    JPanel p=new JPanel();

    p.add(yourName);

    p.add(確定);

    p.add(取消);

    con.add(p);

    addWindowListener(new WindowAdapter()

                        {

                          public voidwindwoClosing(WindowEvent e)

                            {

                             setVisible(false);

                              dispose();

                            }

                        }

                     );

  }

  public void setFile(File f)

  {

    gradeFile=f;

  }

  public void setTime(int time)

  {

    this.time=time;

  }

  public void actionPerformed(ActionEvent e)

  {

    if(e.getSource()==確定)

     {

      try{

          FileInputStream in=newFileInputStream(gradeFile);

          ObjectInputStream object_in=newObjectInputStream(in);

          LinkedListlist=(LinkedList)object_in.readObject();

          object_in.close();

          in.close();

          People people=newPeople(yourName.getText(),time);

          list.add(people);

          FileOutputStream out=newFileOutputStream(gradeFile);

          ObjectOutputStream object_out=newObjectOutputStream(out);

          object_out.writeObject(list);

          out.close();

          object_out.close();

         }

     catch(Exception event)

         {

            System.out.println(event);

         }

       setVisible(false);

       dispose();

     }

    if(e.getSource()==取消)

     {

       setVisible(false);

       dispose();

     } 

  }

}

ShowRecord.java

import java.io.*;

importjava.util.*;

importjavax.swing.*;

importjava.awt.event.*;

import java.awt.*;

public classShowRecord extends JDialog implements ActionListener

{

  File gradeFile=null;

  JButton 確定,清除;

  JTextArea show=null;

 public ShowRecord(JFrame frame,File f)

  {

    super(frame,"記憶測試排行榜:"+f.toString());

    gradeFile=f;

    show=new JTextArea(6,4);

    確定=newJButton("顯示排行榜");

    確定.addActionListener(this);

    清除=newJButton("清空排行榜");

    清除.addActionListener(this);

    Container con=getContentPane();

    con.add(newJScrollPane(show),BorderLayout.CENTER);

    JPanel p=new JPanel();

    p.add(確定);

    p.add(清除);

    con.add(p,BorderLayout.SOUTH);

    setBounds(100,100,320,185);

    setVisible(false);

    setModal(true);

    addWindowListener(new WindowAdapter()

                        {

                          public voidwindwoClosing(WindowEvent e)

                            {

                             setVisible(false);

                              dispose();

                            }

                        }

                     );

   }

 public void actionPerformed(ActionEvent e)

  {

    if(e.getSource()==確定)

     {

       try

         {

           show.setText(null);

           FileInputStream in=newFileInputStream(gradeFile);

           ObjectInputStream object_in=newObjectInputStream(in);

           LinkedList 成績=(LinkedList)object_in.readObject();

           object_in.close();

           sort(成績);                                        

           for(int i=0;i<成績.size();i++)

            {

              People people=(People)成績.get(i);

             show.append("\n"+people.getName()+"成績:"+people.getTime());

            }

         }

        catch(Exception ee)

         {

         }

     }

   if(e.getSource()==清除)

     {

       try

         {

           FileInputStream in=newFileInputStream(gradeFile);

           ObjectInputStream object_in=newObjectInputStream(in);

           LinkedList 成績=(LinkedList)object_in.readObject();

           object_in.close();

           成績.clear();

           FileOutputStream out=newFileOutputStream(gradeFile);

           ObjectOutputStream object_out=newObjectOutputStream(out);

           object_out.writeObject(成績);

           out.close();

           object_out.close();

           show.setText("排行榜被清空");

         }

        catch(Exception ee)

         {

         }

     }   

  }

 public void sort(LinkedList list)

  {

    for(int i=0;i<list.size()-1;i++)

      {

         for(int j=i+1;j<list.size();j++)

            {

            if(((People)list.get(i)).getTime()>((People)list.get(j)).getTime())

                {

                   Peopletemp=(People)list.get(j);

                  list.set(j,(People)list.get(i));

                   list.set(i,temp);

                }

            }

      }

  }

}