1/30成绩:评语:华南理工大学广州学院2012-2013学年度第一学期课程名称:面向对象程序设计大作业项目题目:记忆测试系统专业班级:年级:2011级姓名:学号:2/30目录及程序设计说明书1.1设计要求…………………………………………………………1.2总体设计…………………………………………………………31.2.1MemoryGame.java(主类)…………………………………………………1.2.2MemoryTestArea.java………………………………………………………1.2.3Block.java……………………………………………………………………1.2.4Record.java…………………………………………………………………1.2.5ShowRecordDialog.java……………………………………………………1.2.6People.java……………………………………………………………………1.3详细设计…………………………………………………………41.3.1MemoryGame类………………………………………………………………41.3.2MemoryTestArea类…………………………………………………………101.3.3Block类……………………………………………………………………181.3.4ShowRecordDialog类………………………………………………………191.3.5People类……………………………………………………………………231.3.6Record类………………………………………………………………………251.3.7图像文件………………………………………………………………………281.4课程设计总结……………………………………………………30(参考文献………………………………………………………………………………)3/301.1设计要求记忆测试系统是通过回忆法测试记忆能力,测试手段分为初、中、高三个级别。记忆测试系统设计要求如下:(1)单击“选择级别”菜单可以选择级别。(2)单击“查看排行榜”菜单可以查看初级、中级、高级记忆排行榜,通过记忆榜存储每个级别的成绩。(3)选择级别后,将出现相应级别的测试区。测试区由m×n个方块组成,程序通过设置m和n的来确定相应的测试级别。如对于初级级别,m=5,n=6。每个方块上都有一个图标,但该图标默认不可见。用鼠标单击测试区域中的任何一个方块,则计数器开始启动,同时该方块上的图标将显示出来。(4)m×n个方块组成的测试区域中有m个图标,每个图标出现n次,并且随机分布在测试区中的m×n方块上。用户必须用鼠标连续单击出n个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出p(pn)个图标相同的方块,当再单击另一个方块时,如果该方块的图标跟上一个相同,那么该方块的图标和前p次单击出的方块的图标仍然可见;否则,前p次单击出的方块图标全都变得不可见,只有当前单击的方块的图标可见。(5)测试区能显示用户的用时,并根据级别的不同,提示用户必须用鼠标连续单击出多少个图标相同的方块。(6)测试区有提示图标所在位置的功能。用户单击测试区中的“提示”按钮后,测试区将持续1.2秒为用户显示全部的方块上图标。用户每单击一次“提示”按钮,用户的用时将增加10秒。(7)连续单击出级别所要求的若干图标相同的方块后,将弹出保存成绩对话框,用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。(8)单击“选择图标”菜单可重新选择方块的图标样式,即可以重新选择m个图标。1.2总体设计在记忆测试系统中,可以编写6个java源文件:MemoryGame.java、MemoryTestArea.java、Block.java、ShowRecordDialog.java、Record.java和People.java。记忆测试系统除了上述6个java源文件产生的类之外,还需要java系统提供一些重要的类。记忆测试系统所用到的一些重要的类以及之间的组合关系如图1.1所示。MemoryGameStringFileMemoryTestAreaShowRecordDialogFileTreeSetPeopleArrayListBlockStringRecordTimerFileThread4/30图1.1类之间的组合关系以下是6个java源文件的总体设计。1.2.1MemoryGame.java(主类)MemoryGame类负责创建记忆测试系统的主窗口,该类含有main方法,记忆测试系统从该类开始执行。MemoryGame类有4种重要类型的对象,分别是String、File、MemoryTestArea和ShowRecordDialog对象。MemoryGame类创建的窗口对象以及其中的主要成员对象如图1.2所示。MemoryGame类的主要成员的作用将在后面的详细设计中阐述。1.2.2MemoryTestArea.javaMemoryTestArea类是主类MemoryGame窗口中的一个JPanel容器,所创建的对象称为“测试区”,这个“测试区”被添加到MemoryGame窗口的中心。MemoryTestArea主要有6种类型的成员:ArrayListBlock、String、Record、Timer、File和Thread对象。MemoryTestArea类的主要成员的作用将在后面的详细设计中概述。1.2.3Block.javaBlock类是JButton的子类,负责为MemoryTestArea类中的ArrayBlock数组表提供Block对象。1.2.4Record.javaRecord类是javax.swing包中的JDialog对话框的子类,当用户成功单击出相应级别所要求的图标相同的方块后,Record创建的对象负责保存用用户的名字和成绩到相应的级别文件中。1.2.5ShowRecordDialog.javaShowRecordDialog类是javax.swing包中JDialog对话框的子类,当用户单击“查看排行榜”时,ShowRecordDialog创建的对象负责显示用户的成绩。1.2.6People.javaPeople对象封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。1.3详细设计1.3.1MemoryGame类1.效果图如下:5/30MemoryGame创建的窗口2.UML图MemoryGame类是javax.swing包中JFrame的一个子类,并实现了ActionListener接口。该类的主要成员变量和方法如下图:MemoryGame类的UML图以下是UML图中有关数据和方法的详细说明。JFrameActionListenerMemoryGamebar:JMenuBarimageName:String[]menuGrade,menuResult,menuIcon:JMenumemoryArea:MemoryAreaoneGradeItem,twoGradeItem,threeGradeItem:JMenuItemshowDialog:ShowRecordDialogoneGradeResult,twoGradeResult,threeGradeResult:JMenuItemm,n:intcarImageIcon,animalImageIcon:JMenuItemfileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile:FileMemoryGame():无类型actionPerformed(ActionEvent):voidmian(String[]):void6/301)成员变量bar是JMenuBar类创建的菜单条,可以向bar中添加菜单。menuGrade、menuResult、menuIcon是JMenu类创建的三个菜单,这三个菜单的名称分别是“选择级别”、“查看排行榜”和“选择图标”。oneGradeItem、twoGradeItem和threeGradeIte是JMenuItem类创建的三个菜单项,被添加到menuGrade菜单中。这三个菜单项的名称分别是“初级”、“中级”和“高级”。oneGradeResult、twoGradeResult和threeGradeResult是JMenuItem类创建的三个菜单项,被添加到menuResult菜单中。这三个菜单项的名称分别是“初级排行榜”、“中级排行榜”和“高级排行榜”。carImageIcon、animalImageIcon、fruitImageIcon和buildingImageIcon是JMenuItem类创建的四个菜单项,被添加到menuIcon菜单中。这四个菜单项的名称分别是“汽车图标”、“动物图标”“水果图标”、“建筑图标”。fileOneGradeResult、fileTwoGradeResult、fileThreeGradeResult和gardeFile是Fiel类创建的四个文件对象。fileOneGrade、fileTwoGradehe和fileThreeGrade三个文件对象所引用的文件分别是“初级记忆排行榜.txt”、“中级记忆排行榜.txt”和“高级记忆排行榜.txt”,分别用来写入三个级别的成绩。gradeFile可以是fileOneGrade、fileTwoGrade和fileThreeGarde中的某一个。imageName是String类型的数组,每个单元是一个图像文件的名字。memoryArea是测试区对象,由MemoryArea类负责创建。showDialog是负责显示成绩对话框,由ShowRecordDialog类负责创建。m和n是int型数据,其值可以确定相应级数中测试区中方块的数量,例如,对于中级水平,m=6,n=7,测试区一共有42个方块。2)方法actionPerformed(ActionEvent)方法是MemoryGame类来实现的ActionListener接口中的方法,负责执行菜单项发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。MemoryGame()是构造方法,的负责完成窗口的初始化。main(String[])方法是软件运行的入口方法。7/303.代码(MemoryGame.java)importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.LinkedList;publicclassMemoryGameextendsJFrameimplementsActionListener{JMenuBarbar;//创建一个菜单栏(条)JMenumenuGrade,menuResult,menuIcon;//创建三个菜单JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;//创建菜单项JMenuItemoneGradeResult,twoGradeResult,threeGradeResult;JMenuItemcarImageIcon,animalImageIcon,fruitImageIcon,buildingImageIcon;FilefileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile;//创建四个File类的对象,分别引用文件“初级记忆排行榜.txt”等!!!StringimageName[];//用于图片名称数组!!!MemoryTestAreamemoryArea;ShowRecordDialogshowDialog=null;intm=5,n=6;finalintimageNumber