java记忆教学教案系统.doc
/盐城工学院Java语言与面向对象课程设计报告(2014年秋学期) 记忆测试系统学 院: 专业班级: 姓 名: 学 号: 指导教师: 张永平 2015年 1 月 24 日目录1. 题目简介12. 设计的内容、要求和目标 23. 总体设计44. 详细设计75. 运行调试76. 总结7 附录 21一、 题目简介 记忆测试系统通过回忆法测试记忆能力测试手段分为初级中级高级三个级别。 二、 设计的内容、要求和目标 我设计的记忆测试系统除了要编写的6个java文件所给的类外还需在添加一些功能如添加图标改进测试条件添加音乐功能使程序有翻开相同的图标是播放一段音乐同时播放另一段音乐等。列出菜单有选择级别选择图标成绩记忆榜在菜单下有M*N个图标随机分布点击一个图标被保存下来点击下一个图标时与上一个图标比图标相同而方块不同则success加1反之则不变当点击六个相同的图标时记录所需的时间保存在成绩记忆排行榜中点击成绩排行榜可登陆成绩且会给成绩排行由高到低。设计要求如下: 1.单击“选择级别”菜单可以选择初级中级高级。 2.单击“查看排行榜”菜单可以查看记忆榜通过记忆榜存储每个级别的成绩。 3.选择级别后将出项相应级别的测试区。测试区由M*N个方块组成程序通过设置M和N的值来确定相应的测试级别例如对于初级级别M=5N=6.每个方块上都有一个图标但该图标默认不可见。用鼠标当即测试区中的任何一个方块则计时器开始启动同时该方块上的图标将显示出来。 4. M*N个方块组成的测试区中有M个图标每个图标重复出现N次并且随机分布在测试区中的M*N个方块上。用户必须用鼠标连续单击出N个图标相同的方块也就是说如果用户已经用鼠标连续单击出P个图标相同的方块当再单击另一个方块时如果该方块的图标和上一个的相同那么该方块的图标和前P次单击出的方块的图标仍然可见否则前P次单击出的方块的图标全都变得不可见只有当前单击的方块的图标可见。 5. 测试区能显示用户的用时并根据级别的不同提示用户必须用鼠标连续单击出多少个图标相同的方块。 6. 测试区有提示图标所在位置的功能。用户单击测试区中的“提示”按钮后测试区将持续1.2秒为用户显示全部方块上的图标。用户每单击一次“提示”按钮用户的用时将增加10秒。 7. 连续单击出级别所要求的若干个图标相同的方块后将弹出保存成绩的对话框用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。 8. 单击“选择图标”菜单可重新选择方块的图标样式即可以重新选择M个图标。设计目标可以选择级别图标当用户游戏结束后可以选择是否保存成绩连续点击六个相同的图标可见连续相同的图标播放一段音乐同播放另一段音乐。当用户不清楚相同图标的位置时可以按“提示”按钮将会对用户进行提示信息。设计目标:可以选择级别图标当用户游戏结束后可以选择是否保存成绩连续点击六个相同的图标可见连续相同的图标播放一段音乐不同播放另一段音乐。当用户不清楚相同图标的位置时可以按“提示”按将会对用户进行提示信息。三、总体设计 测试系统中可以编写6个java源文件MenoryGame.java,MenoryTestArea.java,Block,java,People.java,Record.java和ShowRecordDialog.java。 记忆测试系统除了上述7个Java源文件产生的类外还需要Java系统提供的一些重要的类。记忆测试系统所用到的一些重要的类以及之间的组合关系如图1所示。 图1以下是六个源文件的总体设计 1.MenoryGame类 责创建记忆测试系统的主窗口该类含有main方法记忆测试系统从该类开始执行。MenoryGame类有四种重要类型的对象分别是String,Flie,MenoryTestArea和ShowRecordDialog对象。MenoryGame类创建的窗口对象以及其中的主要成员对象。MenoryGame类的主要成员的作用将在后面的详细设计中阐述。2.MenoryTestArea.java MenoryTestArea类是主类MenoryGame窗口中的一个Jpanel容器所创建的对象称为测试区这个测试区被添加到MenoryGame窗口的中心。MenoryTestArea类主要有六个种类型的成员ArrayList<Block>,String ,Record,Timer,File和Thread对象MenoryTestArea类的主要成员的作用将在后面的详细的设计中阐述。3.Block.java Block类是Jbutton的子类负责为MenoryTestArea类中ArrayList<Block>数组表提供Block对象。4.Record.java Record类是javax.swing包中Jdialog对话框的子类当用户成功单击出相应的级别所要求的图标相同的方块后Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。5.ShowRecordDialog.java ShowRecordDialog类javax.swing包中Jdialog对话框的子类当用户单击“查看排行榜”时ShowRecordDialog创建负责显示用户的成绩。6.People.java People对象封装用户的名字和成绩以便ShowRecordDialog对象可以按成绩的高低排序用户。四 详细设计4.1 操作界面设计如图2所示: 图24.2类成员变量及方法设计:(一)MemoryGame类 成员变量: Bar是JmenuBar类创建的菜单条可以向bar中添加菜单。menuGradeBar和menuIcon是Jmenu类创建的三个菜单这三个菜单的名称分别是“选择级“查看排行榜”“选择图标”。oneGradeItemtwoGradeItem和threeGradeItem是JmenuItem类创建的三个菜单项被添加到menuGrade菜单中这三个菜单项的名称分别是“初级”“中级”“高级”。oneGradeResulttwoGradeResult和threeGradeResult是JmenuItem类创建的三个菜单项被添加到menuResult菜单中。这三个菜单项的名称分别是“初级排行榜”“中级排行榜”“高级排行榜”。carImageIcon和animalImageIcon是JmenuItem类创建的两个菜单项被添加到menuIcon菜单中。这两个菜单项的名称分别是“汽车图标”“动物图标”。fileOneGradefileTwoGradefilethreeGrade和gradeFile是File类创建的四个文件对象。fileOneGradeileTwoGrade和filethreeGrade三个文件对象所引用的文件分别是“初级排行榜.txt”,“中级排行榜.txt”“高级排行榜.txt”分别用来写入三个级别的成绩。gradeFlie可以是fileOneGradefileTwoGrade和filethreeGrade中的某一个。imageName是String类型的数组每个单元是一个图像文件的名字。 menoryArea是测试区对象由MenoryArea类负责创建。 showDialog是负责显示成绩的对话框由ShowRecordDialog类负责创建 m和n是int型数据其值可以确定相应级别中测试区中方块的数量例如对于中级水平m=6,n=7,测试区一共有42方块。 方法: actionPerformed(ActionEvent)方法是MenoryGame类实现的ActionListener接口中的方法负责执行菜单项发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件导致actionPerformed(ActionEvent)方法执行相应的操作。 MenoryGame()是构造方法负责完成窗口的初始化。main(String)方法是软件运行的入口方法。(二)MemoryTestArea类成员变量: row和col的值确定测试区中方块的数量。MemoryTestArea类创建的对象memoryArea是MemoryGame中的成员memoryArea对象通过调用initBlock(int,int,String,File)方法将MemoryGame类中m和n的值传递给row和col。 usedTime是用户的用时单位是秒。success的值是用户找到的具有同样的图标的方块的个数 gradeFiel是级别文件memoryArea对象通过调用initBlock(int,int,String,Fil)方法将MemoryGame类中的gradeFile的引用传递给MemoryGame类中的gradeFile的引用传递给memoryArea对象中的gradeFile。 数组表allBlockList单元的个数是row和col的乘积它的每个单元存放着一个Block对象。memoryArea对象在调用initBlock(int,int,String,File)方法时完成对 allBlockList单元的初始化,即创建单元中的Block对象。字符串数组imageFileName中的每个单元是一幅图像文件的名字。memoryArea对象通过调用setIMageName(String)方法将MemoryGame中存放图像文件名字的imageName数组的引用传递给imageFileName。 链表openIconList用来存放用户找到图标相同的方块上的图标 。链表openBlockList用来存放用户找到图标相同的方块。 hintThread是用Thread类创建的线程对象用来提示测试区中的Block上的图标提示方式是将测试区中的各个Block上图标持续显示1200毫秒。 hintButton是注册ActionEvent事件的监视器,当单击它时启动hintThread线程。showUsedTime显示用户的用时即显示usedTime的值。 hintMessage根据不同的级别显示相应的提示信息.如该级别需要用户寻找的相同图标方块的数目。timer是计时器负责改变usedTime的值。 record负责提供保存成绩的界是一个对话框默认不可见。当用户寻找出级别所要求的相同图标方块的数目后该对话框可见用户可以在该对话框中输入姓名并保存所输入的姓名和 usedTime的值到gradeFile指定的级别文件中。 方法: MemoryTestArea是构造方法创建memoryArea对象时需使用该构造方法。 initBlock(int,int,StringFile)方法。memoryArea对象调用该方法将参数的值传递给row,colimageFileName和gradeFile并依据这些值设置allBlockListList数组表的大小然后创建allBlockList的单元中的Block对象并设置Block对象上的图标。 setImageName(String)方法。memoryArea对象调用该方法可以将MemoryGame中的存放图像文件名字的imageName数组的引用传递给imageFileName。当用户单击MemoryGame主类窗口的carImageIcon和animalImageIcon菜单项时memoryArea对象将调用该方法把存放图像文件名字的imageName数组的引用传递给imageFileName。ionPerformed(ActionEvent)方法。该方法是MemoryARea类实现的ActionListener接口中的方法。memoryArea中的每个Block对象都注册了ActionEvent事件监听器当用户单击memoryArea中的某个Block对象时actionPerformed(ActionEVent)方法将被调用执行所执行的主要操作是如果该Block看对象未显示图标并且该Block对象设置的图标和openIconList的中存放的图标相同就将该图标添加到链表opemIconList中同时将该Block对象上的图标显示出来并将success的值增1如果该Block对象未显示图标并且该Block对象设置的图标和openIconList的中存放的图标不相同就将openIconList清空然后再将该图标添加到链表opemIconList中同时将该Block对象上的图标显示出来并将success的值设置成1.当用户单击hintButton按钮时actionPerfomed(ActionEVent)方法将被调用执行执行的主要操作是启动hintThread线程。(三)Blcok类 成员变量 : openStateIcon是方块上的图标 方法: Block对象调用setOpenStateIcon(ImageIcon)方法可以设置它上面的图标。 Block对象调用getOpenStateIcon()方法可以获得它上面的图标 (四)ShowRecordDialog类 ShowRecorDialog效果图如图3所示: 图3成员变量 : gradeFile是对话框要读取的文件该文件存储成绩 。 clear是注册了ActionEVent事件的按钮。 showArea文本区显示对话框从gradeFile文件中读出的成绩。 treeSet负责将成绩按高低排序。方法:ShowRecordDialog()是构造方法负责创建showDialog对象 setGradeFile(File)方法。ShowRecordDialog类创建的ShowRecordDialog对话框是主类MemoryGame窗口中的一个成员。当用户选择窗口上的“查看排行榜”菜单中的菜单项是ShowRecordDialog对话框调用setGradeFile(File)方法将相应的级别文件传递给gradeFile。 showRecord()方法。ShowRecordDialog对话框调用该方法读取gradeFile文件中的成绩为了将成绩按高低顺序显示在showArea()文本区中showRecord方法根据读取的名字和该名字的对应成绩创建一个People对象存放在treeSet数集中。 actionPerformed(ActionEVent)是ZctionListener接口中的方clear注册了ActionEVent事件当用户单击clear按钮时actionPerform(ActionEvent)方法被调用执行所执行的操作是清除gradeFile文件中的内容。(五)People类成员变量:name是用户的名字 time是用户的用时方法: getTime()方法返回time getName方法返回name compareTo(Object)是Comparable接口中的方法,其操作是确定People对象的大小关系(六)Record类成员变量:Time是用户的用时。 yourName是用户用来输入名字的文本框。 enter和cancel是按钮对象用户单击center按钮可以保存成绩单击cancel按钮可以放弃保存成绩。 gradeFile是级别文件。 方法: Record()是构造方法负责创建record对象。 setGradeFile(File)方法。Record类创建的Record对话框测试区MemoryTestArea中的一个成员。当用户成功单击出相应级别所要求的图标相同的方块后,测试区弹出Record对话框Record对话框将调用setGradeFile(File)方法将测试区中的级别文件传递给Record对话框中gradeFile。 setTime(int)方法。当用户成功单击出相应级别所要求的图标相同的方块后测试区弹出Record对话框Record对话框将调用setTime(int)方法将测试区记录的用户用时传递个Record对话框中的time。 actionPerformed(ActionEvent)是ActionListener接口中的方法enter和cancel按钮注册ActionEvent事件当用户单击enter时actionPerformed(ActionEvent)方法别提调用执行其操作时将用户在文本框youName中输入的名字以及time的只保存到gradeFile文件中然后关闭当前对话框当用户单击cancer按钮时,actionPerformed(ActionEvent)方法别调用执行,其操作及时关闭当前对话框。五、运行调试主界面如图4:图4测试去效果图如图5:图5六、总结通过两个周对Java程序设计的学习,我们对Java语言有了更进一步的了解,知道了如何运用以前学过的知识来完成本次课程设计。我们小组选择了记忆测试系统的设计,主要实现记忆力的测试,主要分为初级记忆力的测试、中级记忆力的测试和高级记忆力的测试等功能。选择这个题目时感觉有点困难好像无从下手基本上没有一个具体的设计思路。因此我们先对小组成员进行分工,明确好各自的主要任务,然后分头查阅资料,上网搜索相关线索每个人的工作做好之后再由组长用一个主函数连接起来进行整个程序的调试运行最后我们也顺利的完成了记忆测试系统的设计且得到了同学们的认可和喜爱。 对于整个程序的流程构架、主界面的布局、数据的保存和清除等开始时我们并没有十足的把握,但是因为之前我们在图书馆查阅了很多的资料也上网搜索了很多这方面的解决方案方法。在课程设计的第一个星期里我们就顺利地把代码组织并编写好了。 在连接所有的类的时候遇到了一点问题不过在老师的指导,我们都把它解决了。在课程设计的前一个周,我们就把整个程序顺利地运行出来了,心里感到无比的兴奋与激动。在这个过程中我们运用了我们平时所学的知识查阅了大量的资料。在其中我们得到了意志的锻炼在反复的操作中我们不断成长在收获成功的同时我们更得到了Java上机编程的深切体会和丰厚的编程经验。 接下来,经过小组的认真思考、分析和讨论在老师的指导下我们对系统功能的不足之处给予了最后的完善。在答辩的过程中在老师的提问下,我们分别把自己的设计思想讲解给老师听,同时认真的听取老师的意见和建议,很多问题都得到了与老师的认可和赞同。 时间是短暂的,但收获是丰厚的。经过这样两周的课程设计我们对Java程序设计的知识又重新巩固了,特别对程序的调试运行有了更深刻的体会。这次的课程设计给了我们一个把学习到的知识付诸于实践的机会只有把理论与实际相结合才能做出让人耳目一新的Java应用程序来。附录:程序清单 MenoryGameimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class MemoryGame extends JFrame implements ActionListener JMenuBar bar; /创建一个菜单条bar JMenu menuGrade,menuResult,menuIcon; /创建3个菜单 选择级别、查看排行榜、选择图标 JMenuItem oneGradeItem,twoGradeItem,threeGradeItem; /添加到menuGrade中,初级、中级高级 JMenuItem oneGradeResult,twoGradeResult,threeGradeResult; JMenuItem carImageIcon,animalImageIcon,huaImageIcon; /创建菜单项 File fileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile; /创建文件 其中gradeFile可以是前三个中的任意一个 String imageName; /每个单元是一个图像文件的名字 MemoryTestArea memoryArea; ShowRecordDialog showDiolag=null; /负责显示成绩的对话框 int m=5,n=6; /m,n确定相应级别中测试区中方块的数量 默认等级为初级 final int imageNumber=7; /构造方法 MemoryGame() fileOneGrade=new File("初入江湖记忆排行榜.txt"); fileTwoGrade=new File("人在江湖记忆排行榜.txt"); fileThreeGrade=new File("高手如云记忆排行榜.txt"); bar=new JMenuBar(); menuGrade=new JMenu("选择级别"); oneGradeItem=new JMenuItem("初入江湖"); twoGradeItem=new JMenuItem("人在江湖"); threeGradeItem=new JMenuItem("高手如云"); menuGrade.add(oneGradeItem); /将菜单项添加到菜单 menuGrade.add(twoGradeItem); menuGrade.add(threeGradeItem); menuResult=new JMenu("风云榜"); oneGradeResult=new JMenuItem("初入江湖排行榜"); twoGradeResult=new JMenuItem("人在江湖排行榜"); threeGradeResult=new JMenuItem("高手如云排行榜"); menuResult.add(oneGradeResult); menuResult.add(twoGradeResult); menuResult.add(threeGradeResult); menuIcon=new JMenu("选择图标"); carImageIcon=new JMenuItem("种类一"); animalImageIcon=new JMenuItem("种类二"); huaImageIcon=new JMenuItem("花图标"); animalImageIcon.addActionListener(this); /添加监视器 carImageIcon.addActionListener(this); huaImageIcon.addActionListener(this); menuIcon.add(carImageIcon); menuIcon.add(animalImageIcon); menuIcon.add(huaImageIcon); bar.add(menuGrade); /将菜单添加到菜单条 bar.add(menuResult); bar.add(menuIcon); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); oneGradeResult.addActionListener(this); twoGradeResult.addActionListener(this); threeGradeResult.addActionListener(this); if(!fileOneGrade.exists() /是否存在*文件,不存在创建此文件 try fileOneGrade.createNewFile(); catch(IOException exp) if(!fileTwoGrade.exists() try fileTwoGrade.createNewFile(); catch(IOException exp) if(!fileThreeGrade.exists() try fileThreeGrade.createNewFile(); catch(IOException exp) setBounds(100,100,400,360); this.setSize(new Dimension(700,400); setVisible(true); memoryArea=new MemoryTestArea(); imageName=new StringimageNumber; /设置默认情况下为初级汽车图标 for(int i=0;i<imageName.length;i+) imageNamei=new String("car"+i+".jpg"); m=5; n=6; gradeFile=fileOneGrade; memoryArea.initBlock(m,n,imageName,gradeFile); add(memoryArea,BorderLayout.CENTER); showDiolag=new ShowRecordDialog(); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/退出应用程序 关闭窗口. /事件处理 public void actionPerformed(ActionEvent event) if(event.getSource()=oneGradeItem) m=5; n=6; gradeFile=fileOneGrade; memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=twoGradeItem) m=6; n=7; gradeFile=fileTwoGrade; memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=threeGradeItem) m=7; n=8; gradeFile=fileThreeGrade; memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=carImageIcon) for(int i=0;i<imageName.length;i+) imageNamei=new String("car"+i+".jpg"); memoryArea.setImageName(imageName); memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=animalImageIcon) for(int i=0;i<imageName.length;i+) imageNamei=new String("ani"+i+".jpg"); memoryArea.setImageName(imageName); memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=huaImageIcon) for(int i=0;i<imageName.length;i+) imageNamei=new String("hua"+i+".jpg"); memoryArea.setImageName(imageName); memoryArea.initBlock(m,n,imageName,gradeFile); if(event.getSource()=oneGradeResult) showDiolag.setGradeFile(fileOneGrade); showDiolag.showRecord(); showDiolag.setVisible(true); if(event.getSource()=twoGradeResult) showDiolag.setGradeFile(fileTwoGrade); showDiolag.showRecord(); showDiolag.setVisible(true); if(event.getSource()=threeGradeResult) showDiolag.setGradeFile(fileThreeGrade); showDiolag.showRecord(); showDiolag.setVisible(true); public static void main(String args) new MemoryGame(); /构造方法,负责完成窗口的初始化 MenoryTestAreaimport javax.swing.*; import java.awt.event.*;import java.awt.*;import java.util.*;import java.io.*;import java.applet.*;import java.net.*;public class MemoryTestArea extends JPanel implements ActionListener,Runnable /实现ActionListener和,Runnable接口,所创建的对象 int row,col; File gradeFile; ArrayList<Block> allBlockList; /数组表allBlockList 每个单元存放一个Block对象 String imageFileName; /字符串数组*中每个单元是一幅图像文件的名字 LinkedList<ImageIcon> openIconList; LinkedList<Block> openBlockList; /java