《面向对象程序设计》课程设计报告 题目:《记忆测试系统》课程设计

 

《面向对象程序设计》课程设计报告

 

 

 

 

题目:《记忆测试系统》课程设计    

学院:信息工程学院

姓名:

学号:

专业:计算机科学与技术

班级:

指导教师:

 

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).方法 

主要方法: 

名称                        功能                 备注

 Block 创建方块对象的构造方法  

获取翻开时的图标 获取方块翻开时的图标  

获取关闭时的图标 获取方块关闭时的图标  

设置翻开时的图标 设置翻开时的图标  

设置关闭时的图标         设置关闭时的图标  

设置图标 设置方块上的图标  

actionPerformed 处理ActionEvent事件     处理ActionEvent事件

4.5类MemoryTestPane 

a).成员变量 

主要成员变量(属性): 

变量描述                  变量类型 名称 

随机排列图标对象         RandomSetIcon               排列图标 

方块数组 Block block 

图标数组                 ImageIcon[] icon 

添加方块对象用的链表     LinkedList listIcon 

添加图标对象用的链表 LinkedList                    listIcon 

确定是否成功的对象 int success 

用来计时的对象             Timer 计时器 

记忆测试板的行数和列数    int                          行数,列数

b).方法 

主要方法: 

名称                       功能 备注

 MemoryTestPane 创建记忆测试板对象的构

造方法 

 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).方法 主要方法: 

名称                          功能 备注

Record 创建保存成绩窗口 构造方法 

actionPerformed             处理ActionEvent事件            接口方法 

setTime 设置时间  

setFile                        设置文件

4.8类RandomSetIcon

 a).成员变量(无) 

b).方法 主要方法:

名称 功能 备注 

随机设置图标          随机排列记忆测试板中方块的图标

4.9类People 

a)成员变量 

主要成员变量(属性): 

描述                         变量类型 名称

 测试者名字 String name

 用时                          int time 

b) 方法 

主要方法: 

名称            功能 备注

 People 传递名字和时间 构造方法 

getTime 返回使用者用时

 getName                   返回使用者名字

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);

                }

            }

      }

  }

}

 

 

 

发布了63 篇原创文章 · 获赞 120 · 访问量 24万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览