版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、专 业计算机班 级07级4班姓 名 设 计 起 止 日 期2010.7.设计题目:记忆测试系统设计任务(主要技术参数):硬件环境:CPU:T6400 2.00GHz 内存:2G 硬盘空间:250G软件环境:(1)操作系统:Windows XP(2)开发软件:JDK,JCreator实现功能:Java编写的记忆测试系统,通过回忆法测试记忆,分为初级、中级、高级三个级别,并通过记忆榜存储每个级别的成绩。指导教师评语:成绩: 签字:年 月 日源代码及答辩材料请联系QQ:68661508记忆测试系统1设计目的掌握Java的基本知识后,希望通过此次的课程设计来巩固和提高Java编程技术,从整体上了解使用
2、Java语言在应用系统开发和网络开发中的技巧。进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼自己熟练的应用面向对象的思想和设计方法解决实际问题的能力,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。设计一个记忆测试系统,通过回忆法测试记忆,分为初级、中级、高级三个级别,并通过记忆榜存储每个级别的成绩。2设计方案论证系统主体部分是在底层容器上插入面板,并在面板上安排按钮阵列,当用户点击按钮,
3、经过随机安排在按钮后面的图片显示出来。通过对比图片下标,如何所显示图片和前一个显示图片一样,则没变化;如果,不一样,则把以前所有显示的图片重新用按钮遮盖。当用户点开指定数量的图片时,就进入记录数据部分。 在测试过程中,显示用户测试时间。记录数据部分,要把用户输入的姓名和系统记录用户测试时间写入指定文档中保存。查阅数据部分,要把指定文档的数据显示给用户,包括姓名和测试时间。用户此时可以清除文档中数据,即可删除排行榜。菜单栏包括“菜单”和“帮助”两项。其中“菜单”,又包括“初级”、“中级”、“高级”、“初级排行榜”、“中级排行榜”、“高级排行榜”,可以分别开始初级中级高级测试,还有打开查看相应级别
4、排行榜对话框;“帮助”,又包括“新手入门”和“关于”,分别显示系统使用方式和作者信息。测试面板可以装载按钮阵列,用来显示图片,并且记录统计图片信息,当相同图片数量达到要求时,弹出记录用户信息对话框,记录用户信息。还有实时显示所用时间和提示相应级别测试信息。J单击“记忆测试”菜单可以选择初级/中级/高级,也可以查看初级记忆榜/中级记忆榜或高级记忆榜。选择级别后,将显示相应级别的测试区域。测试区域由若干个方块组成,每个方块都有一个图标,但该图标默认情况下不可见。用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。对于初级级别,用户必须用鼠标连续单击出6个图标相同的方块
5、,也就是说,如果用户已经用鼠标连续单击出n(n<6)个图标相同的方块,单击另一个房块时,如果该方块的图标和上一个相同,那么该方块的图标和前n 次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见。连续单击出该级别所要求的若干个图标相同的方块后,将显示保存成绩对话框,成绩按所用时间排序。用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。新用户可以选择菜单栏上“帮助”|“新手入门”,来学习如何使用本系统。以及“帮助”|“关于”来查看作者。2.5.1根据任务及要求,画出数据流图,描述系统功能。 顶层数据流图:图-1顶层数据流图2.5.2记忆测试系统功能级数据流图:图-
6、2功能级数据流图2.5.3根据数据流图,分析系统的状态转换关系,画出状态转换图,分析软件系统的行为模型。图-3系统状态转换图 系统中游戏主窗口里要排列指定数量的按钮阵列,并且通过随机方法定义指定数量的图片给每个按钮。每点开一个按钮就显示对应的图片,并且对比图片的下标号,如果和上一个图片的下标号不同,则恢复以前所有显示的图片为按钮。统计相同图片下标的数量,达到指定数量时,执行数据输入存储模块。同时,要记录用户测试时间,如果用户测试通过,传给数据输入存储模块进行存储。主窗口安排指定数量按钮,是通过用户所选级别传参数计算后进行安排。随机分布图片需要随机函数随机产生指定数量的图片下标,并传给主窗口的按
7、对应按钮。通过对比所显示图片的下标,统计显示的相同图片的数量。用户测试开始后,记录测试时间,并保存。图-4程序流程图2.7类、方法及属性主要包括15个类,他们分别是:MemoryTest类,装载程序入口的主函数main;About类,封装作者介绍对话框 表-1 About成员变量成员变量描述变量类型名称显示排行榜JButtonSHOW清空排行榜JButtonCLEAR装载成绩信息JTextAreajtaBack类,用来恢复原来已经打开的图片,使图片重新处于不可见状态;Block类,作为计时器,记录用户测试时间;Help类,封装新手入门以及系统使用方法;JB类,设置图片,调用Clock计时,统计
8、相同数量图片数,调用姓名输入类JDin;表-2 JB成员变量成员变量描述变量类型名称记录相同图片数Intcount新的图片下标Intcom记录所用时间Inttime存放图片下标Intpsi存放图片路径String s图片变量ImageIconiconJDin类,姓名输入对话框;JDout类,排行榜对话框,显示用户输入的排行榜信息;JF类,最底层容器,用来承载JB和JP等,调用JDout等其他类;表-3 JF的成员变量成员变量描述变量类型名称菜单选项JMenuBarjmb菜单JMenujm帮助JMenujm2初级JMIjmi1中级JMIJmi2高级JMIJmi3初级排行榜JMIJmi4中级排行榜
9、JMIJmi5高级排行榜JMIJmi6新手入门JMIJmi7关于.JMIJmi8图片阵列安装板JPaneljpC两个提示信息安装板JPaneljpSJMI类,封装了菜单,方便使用;JP类,游戏主窗体,安排承载按钮和显示图片;JTFtime类,封装了文本框,专门用来显示时间;JTFtip类,封装了文本框,用来显示提示信息;Player类,封装玩家信息;Random类,封装了随机方法,用来产生随机图片及随机摆放图片位置;3设计结果与分析“菜单”后如下图界面所示:图-5程序主界面3.1.2在菜单里调整测试级别,按钮阵列做相应变化,当高级时,运行结果如下:图-6阵列变换为高级3.1.3查看帮助菜单中关
10、于作者,可查看作者信息:图-7帮组选项图-8关于作者:图-9新手入门3.1.5当点出的图片和上一个图片不同时,以前的图片都复原,当点出的图片都一样时,会一直显示:图-10测试结束3.1.6当出现相同图片数量达到指定数时,要求用户输入姓名,用户也可以选择“取消”:图-11输入测试则信息3.1.7用户输入姓名后,连同成绩一同计入文本中,可选择菜单中“初级排行榜”进行查看,此时用户“清空排行榜”:图-12显示排行榜应该增加动态载入图片功能,这样玩家可以选择自己喜欢的图片进行测试。应该增加提示功能,比如玩家点中提示按钮后,所有图片会短暂的显示,帮助玩家进行记忆。在用户开始游戏后,需要一个提示对话框提示
11、用户“准备好了吗?”,只有用户准备好后,才开始游戏,并且开始计时;用户在清空排行榜时,应该有一个对话框向用户确认“您真的要删除?”后才可以清空排行榜,并且提供恢复数据机制;显示排行榜时用户可以选择排列方式,比如“时间先后顺序”、“分值大小顺序”、“名字首字母顺序”等等。4总结这个系统最难的一部分应该说是随机那一部分,先从多个图片随机找一部分图片还是不难的,难的是还要随机排列这些图片,并且要程序记住这些图片在什么地方。还有就是统计翻出的图片是否和前一张一样。本来这个单独来说很容易,可是还要传图片下标的参数,随机参数,button下标参数,这么多搅在一起就很麻烦了。能分清不是很容易。还有就是把判断
12、完成指定数量相同图片的任务放在什么地方。放在JF主面板中?还是放在JP游戏主窗口中?还是JB按钮图片中?经过几次的实验,发现放在JB中比较方便。当然,通过这次课程设计,让我学到了不少东西。首先就是对java的学习有了新的认识,对面向对象的程序设计有了进一步的掌握。比如说系统中多次用到JMenuItem这个类,为了方便就把它封装到一个子类中,这样也比较好表示。在不知不觉中就学会了用面向对象的思想去思考问题,虽然是被动的,但是我觉得这也是进步,可能下次在需求分析时就能很快确定要封装什么类。5参考文献1 丁振凡. Java语言实用教程. 北京:北京邮电大学,:75-932 吕凤翥.Java语言程序设
13、计题解与上机指导.北京:清华大学出版社,2007.1:204-2213 张海藩.软件工程导论.北京:清华大学出版社:112-1334 朱福喜,尹为民,余振坤. Java语言与面向对象程序设计M. 武汉: 武汉大学出版社:67-1285 陈国君, 陈 磊. Java 2从入门到精通M. 北京: 清华大学出版社:13-986 Horstmann,C.S, Cornell,G. JAVA2核心技术卷(第7版):10-257 朱站立,沈伟. Java程序设计实用教程M. 北京:北京大学出版社l, 1997,1253-608 张文静,林琪等. JAVA解惑M. 北京: 人民邮电出版社, 2003.6:4
14、5-496. 附录 import java.awt.*;ent.*;import javax.swing.*;import java.util.LinkedList;import java.io.*;class Help extends JDialog implements ActionListenerprivate JButton Hbutton=new JButton("明白");private JTextArea Hlabel=new JTextArea(3,5);public Help(Frame f)super(f,"帮助提示",true);s
15、etSize(350,270);setResizable(false);setLocationRelativeTo(null);Hlabel.setText(" "+"温馨提示"+"n"+ "请您在最短的时间内翻开最多的相同图片,选择级别后,"+"n"+ "将显示相应级别的测试区域。测试区域由若干个方块组成,"+"n"+ "每个方块都有一个图标,但该图标默认情况下不可见。用鼠"+"n"+ "标单击测试区中的
16、任何一个方块,则计时器开始启动,同时"+"n"+ "该方块上的图标将显示出来。对于初级级别,用户必须用鼠标"+"n"+ "连续单击出6个图标相同的方块,也就是说,如果用户已经用"+"n"+ "鼠标连续单击出n(n<6)个图标相同的方块,单击另一个房块"+"n"+ "时,如果该方块的图标和上一个相同,那么该方块的图标和前n"+"n"+ "次单击出的方块的图标仍然可见,否则,前n次单击出的方块的
17、"+"n"+ "图标都变为不可见。");getContentPane().add(Hlabel,BorderLayout.CENTER);getContentPane().add(Hbutton,BorderLayout.SOUTH);Hbutton.addActionListener(this);setVisible(true);public void actionPerformed(ActionEvent e)dispose();class About extends JDialog implements ActionListener /.
18、关于作者private JLabel Alabel=new JLabel(" 杨一涛"+”n”+” 单位:沈阳大学信息工程学院”);private JButton Abutton=new JButton("确定");public About(Frame f)super(f,"关于作者",true);setSize(350,200);setResizable(false);setLocationRelativeTo(null);getContentPane().add(Alabel,BorderLayout.CENTER);getCon
19、tentPane().add(Abutton,BorderLayout.SOUTH);Abutton.addActionListener(this);setVisible(true);public void actionPerformed(ActionEvent e)dispose();class JDout extends JDialog implements ActionListener /.排行榜private JButton SHOW=new JButton("显示排行榜");private JButton CLEAR=new JButton("清空排行榜
20、");private static JTextArea jta=new JTextArea(6,20);private static String file;public JDout(Frame f,String s)super(f,"记忆测试排行榜:"+s,true);setLocationRelativeTo(null);file=s;setSize(350,200);setResizable(false);JPanel jdC=new JPanel();JPanel jdS=new JPanel();getContentPane().add(jdC,Bord
21、erLayout.CENTER);getContentPane().add(jdS,BorderLayout.SOUTH);jta.setText(null);jta.setEditable(false);JScrollPane jsp=new JScrollPane(jta);jdC.add(jsp);jsp.setVerticalScrollBarPolicy(jsp.VERTICAL_SCROLLBAR_ALWAYS);jdS.add(SHOW);jdS.add(CLEAR);SHOW.addActionListener(this);CLEAR.addActionListener(thi
22、s);setVisible(true);public void actionPerformed(ActionEvent e)Object obj=e.getSource();if(obj=SHOW)readObject(file);elsetry FileOutputStream out=new FileOutputStream(file); catch(FileNotFoundException event) jta.setText(""); System.out.println(file);public void readObject(String file)try j
23、ta.setText(null); ObjectInputStream in=new ObjectInputStream(new FileInputStream(file); LinkedList l=(LinkedList)in.readObject(); in.close(); for(int i=0;i<l.size();i+) Player PO=(Player)l.get(i); jta.append(PO.name+"成绩:"+PO.score+"n"); catch(Exception ee) class Player impleme
24、nts Serializable /.玩家数据 String name; long score;class JDin extends JDialog implements ActionListener /.姓名输入框privateJButton SURE=new JButton("确定");privateJButton CANCLE=new JButton("取消");privateJTextField jtf=new JTextField("匿名",10);private static String s;public JDin(Fr
25、ame f,String s)super(f,"记录你的成绩到:"+s,true);setLocationRelativeTo(null);this.s=s;setSize(350,200);setResizable(false);setDefaultCloseOperation(this.DO_NOTHING_ON_CLOSE);getContentPane().setLayout(new GridLayout(2,1);JPanel JPdown=new JPanel();JPanel JPup=new JPanel(new GridLayout(1,1);JPup.a
26、dd(new Label("请输入你的姓名,将成绩放到排行榜:"+s);JPdown.add(jtf);JPdown.add(SURE);JPdown.add(CANCLE);getContentPane().add(JPup);getContentPane().add(JPdown);SURE.addActionListener(this);CANCLE.addActionListener(this);setVisible(true);public void actionPerformed(ActionEvent e)for(int j=0;j<JF.getLEVE
27、L()*JF.getLEVEL();j+) JP.jbj.setEnabled(false);Object obj=e.getSource();if(obj=SURE)System.out.println(jtf.getText()+"成绩:"+Clock.I);Player player=new Player();=jtf.getText();player.score=Clock.I;writeObject(player,s);this.dispose(); public void writeObject(Player p,String file)t
28、ryObjectInputStream in=new ObjectInputStream(new FileInputStream(file);LinkedList l=(LinkedList)in.readObject();for(int i=0;i<l.size();i+)if(p.score<(Player)l.get(i).score)l.add(i,p);break;if(i=l.size()-1)l.addLast(p);break;in.close();ObjectOutputStream out=new ObjectOutputStream(new FileOutpu
29、tStream(file);out.writeObject(l);out.close();catch(Exception e)System.out.println(e);try LinkedList l=new LinkedList(); l.add(p); ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(file); out.writeObject(l); out.close(); catch(Exception e2)System.out.println(e2); class Clock extends
30、Thread /.计时器static int I=0; /.成绩计数器 int i=-1;public void run()while(JB.Count()<JF.getLEVEL()&&JF.STOP() /.计时器是否停止i+;JF.time.setText("你所用的时间是:"+i+" 秒");tryThread.sleep(1000);catch(java.lang.InterruptedException e)System.out.println(i);if(JB.Count()=JF.getLEVEL() I=i;cla
31、ss JTFtime extends JTextField /.时间文本框public JTFtime(String s)super(s,15);setEditable(false);class JTFtip extends JTextField /.提示文本框public JTFtip(String s)super(s);setEditable(false);setForeground(Color.black);class JB extends JButton implements ActionListener /.图片按钮private static int count;private s
32、tatic int com; /新的图片下标private static int time=0;final int psi;private String s;public static int Count()return count;public static void setCount(int i)count=i;public static void settime(int i)time=i;public static int gettime()return time;ImageIcon icon;public JB(int i)psi=i; /图片下标 s="image"
33、;+i+".jpg" /获取图片路径 icon=new ImageIcon(s); setDisabledIcon(icon); /显示图片 addActionListener(this);public void actionPerformed(ActionEvent e)this.setEnabled(false); /初始时状态setIcon(icon);time+;if(time=1)com=psi; /获取当前图标下标JF.GO(true); /设置计时器启动条件Clock C=new Clock(); /计时器cnew Thread(C).start(); /启动
34、计时器if(psi=com) count+; /统计相同图片数量countelsenew Thread(new back().start();try /让线程睡眠一会儿Thread.sleep(5);catch(java.lang.InterruptedException e1)count=1;setIcon(icon);com=psi; /获取新的图标下标if(count=JF.getLEVEL() if(JF.getLEVEL()=2) s="初级排行榜.txt" if(JF.getLEVEL()=7) s="中级排行榜.txt" if(JF.get
35、LEVEL()=8) s="高级排行榜.txt"new JDin(null,s); /弹出姓名输入窗口count=0; /重置游戏设置time=0; /重设时间启动项JF.time.setText("你所用的时间是:0 秒"); /时间归0 class random /随机分布图标public int IR(int i)int random=new inti;int array=new inti*i; /在10个中随机选出i个for(int j=0;j<i;j+)randomj=(int)(Math.random()*12+1);for(int j
36、=0;j<i*i;j+) /.再次平均分组,共有i*i个int p=(int)(Math.random()*i);arrayj=randomp;return array;class back extends Thread /.还原已打开的图片public void run()for(int i=0;i<JP.si;i+) /.JP游戏主菜单JP.jbi.setIcon(null); /.还原JP.jbi.setEnabled(true); /.重新设置为可操作class JP extends JPanel /.游戏主窗体 static int si; /.按钮数private in
37、t j=0;static Icon ICON;private static int jbI;static JB jb;public int getjbI(int i)return jbIi;public int getsi()return si;public JP(int i)jbI=new int10;si=i*i;setLayout(new GridLayout(i,i);random r=new random();jb=new JBi*i;int index=r.IR(i);for(;j<i*i;j+)jbj=new JB(indexj);add(jbj);class JMI ex
38、tends JMenuItem /.菜单public JMI(String s)super(s);class JF extends JFrame implements ActionListener /最底层容器private JMenuBar jmb=new JMenuBar();private JMenu jm=new JMenu("菜单");private JMenu jm2=new JMenu("帮助");private JMI jmi1=new JMI("初级");private JMI jmi2=new JMI("
39、中级");private JMI jmi3=new JMI("高级");private JMI jmi4=new JMI("初级排行榜");private JMI jmi5=new JMI("中级排行榜");private JMI jmi6=new JMI("高级排行榜"); private JMI jmi7=new JMI("新手入门");private JMI jmi8=new JMI("关于.");final static JPanel jpC=new JPa
40、nel(new GridLayout(1,1); /图片阵列安装板private JPanel jpS=new JPanel(new GridLayout(2,1); /两个提示信息安装板private JPanel jpSup=new JPanel();private JP Djp=new JP(6);final static JTFtime time=new JTFtime("你所用的时间是:0 秒");private JTFtip tip=new JTFtip("初级:你需要连续找出六个相同图标的方块");private static int LE
41、VEL=6; /初始状况默认为初级,即6private static boolean sel=true; /计时器是否停止public static boolean STOP()return sel;public static void GO(boolean b)sel=b;public static int getLEVEL()return LEVEL;public JF(int i,int j)super("MenoryTest");setSize(i,j);setResizable(false);setLocationRelativeTo(null); /中间位置th
42、is.getContentPane().add(jpC,BorderLayout.CENTER); /.整体采用边缘布局this.getContentPane().add(jpS,BorderLayout.SOUTH);this.setJMenuBar(jmb);jmb.add(jm);jmb.add(jm2);jm2.add(jmi7);jm2.add(jmi8);jm.add(jmi1);jm.add(jmi2);jm.add(jmi3);jm.add(jmi4);jm.add(jmi5);jm.add(jmi6);jpC.add(Djp);jpS.add(jpSup);jpS.add(t
43、ip);jpSup.add(time);this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);this.setVisible(true);jmi1.addActionListener(this);jmi2.addActionListener(this);jmi3.addActionListener(this);jmi4.addActionListener(this);jmi5.addActionListener(this);jmi6.addActionListener(this);jmi7.addActionListener(this);jmi8.addActionListener(this);public void actionPerformed(ActionEvent e)Object obj=e.getSource();if(obj=jmi1)sel=false; /结束时间进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年陕西交通职业技术学院单招职业技能考试题库及答案
- 2026年江西省高职单招面试考试试题及答案
- 2026年成人住院患者跌倒风险评估及预防试题及答案
- 电商用户行为路径用户体验课程设计
- 毕业课程设计报告
- 广告投放优化强化学习模型训练课程设计
- c 课程设计聊天系统
- 爬虫数据分析案例课程设计
- iptables安全配置方法课程设计
- 贝叶斯网络诊断系统应用课程设计
- (正式版)DB15 565-2013 《建筑电气防火检验技术规程》
- 交流教师考核管理办法
- 医院科研诚信培训课件
- 保安公司设备管理制度
- DB5107∕T 059-2018 莴笋周年绿色高效生产技术规范
- GB/T 45232-2025建筑排水排污用聚丙烯(PP)管道系统
- 高中英语外研版选修一单词表
- 建筑公司商务部岗位职责
- T 3034-2022化工过程安全管理导则知识培训
- 应急救援后勤保障方案
- 2023年全国职业院校技能大赛制度汇编
评论
0/150
提交评论