JAVA课程设计——记忆测试系统(附源程序)

上传人:痛*** 文档编号:87380727 上传时间:2022-05-09 格式:DOC 页数:26 大小:832KB
返回 下载 相关 举报
JAVA课程设计——记忆测试系统(附源程序)_第1页
第1页 / 共26页
JAVA课程设计——记忆测试系统(附源程序)_第2页
第2页 / 共26页
JAVA课程设计——记忆测试系统(附源程序)_第3页
第3页 / 共26页
点击查看更多>>
资源描述
wordJAVA程序设计课程设计报告题 目:记忆游戏姓 名:学 号:班 级:指导教师:完成时间 成 绩:信息工程学院2015年6月24 / 26目 录1 概述11.1 课程设计目的11.2 课程设计内容12 需求分析22.1 设计目标22.2 主体功能22.3 开发环境23 概要设计33.1 系统的功能模块划分33.2 系统流程图44 详细设计55测试75.1 测试方案85.2 测试结果86 小结11参考文献12附录13附录1 源程序清单13记忆测试系统1 概 述1.1 课程设计目的1) 巩固和提高java编程技术。2) 培养掌握成学设计的根本思路和方法。3) 加强研发、调试程序的能力。4) 增强分析、解决问题的能力。5) 提高科技论文写作能力。1.2 课程设计内容记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级,中级和高级三个级别。记忆测试系统设计要求如下:1单击“记忆测试菜单可以选择初级、中级或高级三个级别。2单击“记忆测试菜单还可以查看初级记忆榜、中级记忆榜或高级记忆榜,通过记忆榜存储每个级别的成绩。3选择级别后,将出现相应级别的测试区。测试区由m*n个方块组成,程序通过设置m和n的值来确定相应的测试级别,例如,对于初级级别,m=3,n=3。每个方块上都有一个图标,但该图标默认不可见。用鼠标单击测试区中的任何一个方块,如此计时器开始启动动,同时该方块上的图标将显示出来。4m*n个方块组成的测试区中有m个图标,每个图标重复出现n次,并且随机分布在测试区中的m*n各方块上。用户必须用鼠标连续单击出n个图表一样的方块,也就是说,如果用户已经用鼠标连续单击出ppn个图标一样的方块,当再单击另一个方块时,如果该方块的图标和上一个的一样,那么该方块的图标和前p次单击出的方块的图标仍然可见;否如此前p次单击出来的方块的图标全都变得不可见,只有当前单击的方块的图标可现。5测试区能显示用户的同时,并根据级别的不同,提示用户必须用鼠标连续单击出多个图标一样的方块。6测试区有提示图标所在位置的功能。用户单击测试区中的“提示按钮后,测试区将持续1.2秒为用户显示全部方块上的图标。用户每单击一次“提示按钮,用户用时将增加10秒。7连续单击出级别所要求的假如干个一样的方块后,将弹出保存成绩对话框,用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。2 需求分析 设计目标1单击“记忆测试菜单可以选择初级、中级、高级三个级别,通过记忆榜可以查看初级记忆榜、中级记忆榜或高级记忆榜。2.选择级别后,将显示相应级别的测试区域。测试区域由假如干个方块组成,每个方块上都有一个图标,但该图标默认情况下不可见。用鼠标单击测试区中的任何一个方块,如此计时器开始启动,同时该方块上的图标将显示出来。对于初级级别,用户必须用鼠标连续单击3个图标一样的方块,也就是说,如果用户已经用鼠标连续单击出n(n3)个图标一样的方块,单击另一个方块时,如果该方块的图标和上一个一样,那么该方块的图标和前n次单击出的方块的图标仍然可见,否如此,前n次单击出的方块的图标都变为不可见。3.连续单击出该级别所要求的假如干个图标形同的方块后,将显示保存成绩对话框,成绩按所用时间排序。用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。 主体功能本游戏是通过由用户点击图片显示出图片后,如果是一样的,便保持图形,如果用户点开的是不同的图片如此先前点击的图片被清空。当用户同时点击出规定数目的图片后,弹出保存成绩框。2.3 开发环境Win7;3 概要设计记忆测试系统共包含8个java源文件和假如干个图像文件(用户可以增加)。类之间的主要关系如如下图所示。在测试系统中,可以编写6个Java源文件:MemoryGame.java、MemoryTestArea.java、Block.java、ShowRecordDialog.java、Record.java、People.java。记忆测试系统除了上述6个Java源文件产生的类外,还需要Java系统提供的一些重要的类。记忆测试系统所用到的一些重要的类以与之间的组合关系如图3.1所示。Memory(主类)Block方块MemoryTestPane测试版ShowRecord显示成绩显示成绩)ShowHelp帮助RandomSetIcon随机排列图标Record记录成绩People用户信息图3.1 类之间的组合关系图3.1 类之间的关系3.2 系统流程图图3.2 系统流程图4 详细设计系统主体局部是在底层容器上插入面板,并在面板上安排按钮阵列,当用户点击按钮,经过随机安排在按钮后面的图片显示出来。通过比照图片下标,如果所显示图片和前一个显示图片一样,如此没变化;如果,不一样,如此把以前所有显示的图片重新用按钮遮盖。当用户点开指定数量的图片时,就进入记录数据局部。在测试过程中,显示用户测试时间。记录数据局部。是把用户输入的某某和系统记录用户测试时间写入指定文档中保存。查阅数据局部,是把指定文档的数据显示给用户,包括某某和测试时间。用户此时可以去除文档中数据,即可删除排行榜。4.2 算法思路主窗口安排指定数量按钮,是通过用户所选级别传参数计算后进展安排。随机分布图片需要随机函数随机产生指定数量的图片下标,并传给主窗口的按对应按钮通过比照所显示图片的下标,统计显示的一样图片的数量。用户测试开始后,记录测试时间,并保存。a).成员变量主要成员变量属性:成员变量描述变量类型名称菜单条JMenuBarBar菜单JMenuItemFileMenu菜单项JMenuBar初级,中级,高级,初级排行榜,中级排行榜,高级排行榜面板容器MemoryTestPane记忆测试板方块数组Blockblock显示成绩ShowRecord显示成绩表对话框图标数组ImageIconiconb).方法主要方法:名称功能备注Memory创建窗口构造方法给出级别测试选择级别actionPerformed处理ActionEvent事件接口方法Main主程序开始执行a).成员变量主要成员变量属性:成员变量描述变量类型名称方块翻开时的图标ImageIcon翻开时的图标方块关闭时的图标ImageIcon关闭时的图标b).方法主要方法:名称功能备注Block创建方块对象的构造方法获取翻开时的图标获取方块翻开时的图标获取关闭时的图标获取方块关闭时的图标设置翻开时的图标设置翻开时的图标设置关闭时的图标设置关闭时的图标设置图标设置方块上的图标actionPerformed处理ActionEvent事件处理ActionEvent事件a).成员变量主要成员变量属性:变量描述变量类型名称随机排列图标对象RandomSetIcon排列图标方块数组Blockblock图标数组ImageIconicon添加方块对象用的链表LinkedListlistIcon添加图标对象用的链表LinkedListlistIcon确定是否成功的对象intsuccess用来计时的对象Timer计时器记忆测试板的行数和列数int行数,列数b).方法主要方法:名称功能备注MemoryTestPane创建记忆测试板对象的构造方法actionPerformed处理ActionEvent事件接口方法a). 成员变量主要成员变量属性:成员变量描述变量类型名称存放成绩的文件FilegradeFile按钮对象utton确定,去除显示成绩的区域JTextAreashowb).方法主要方法:名称功能备注ShowRecord创建显示成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法a).成员变量主要成员变量属性:成员变量描述变量类型名称用时inttime输入测试者的名字JTextFieldyourname存放成绩的文件FilegradeFile是否保存成绩的按钮utton确定,取消b).方法主要方法:名称功能备注Record创建保存成绩窗口构造方法actionPerformed处理ActionEvent事件接口方法setTime设置时间setFile设置文件a).成员变量无b).方法主要方法:名称功能备注随机设置图标随机排列记忆测试板中方块的图标a)成员变量主要成员变量属性:描述变量类型名称测试者名字Stringname用时inttimeb) 方法主要方法:名称功能备注People传递名字和时间构造方法getTime返回使用者用时getName返回使用者名字5测试5.1 测试方案将7个java文件保存到一个文件夹中,例如,D:jiyiceshi。将7个文件分别编译成相应的字节码.class文件。然后,用java解释器运行主类:C:jiyiceshijava Memory 程序运行后选择各菜单,分别进展功能测试。5.2 测试结果1运行效果 图5.2.1 运行效果(2)当选择“记忆力测试后,自己可以设置游戏的难度,效果如图图5.2.2 初级效果图图5.2.3 中级效果图图5.2.4 高级效果图图5.2.5 排行效果图(3)当游戏完毕后,查看“初级排行榜,将显示初级的成绩记录效果图5.2.5 初级成绩记录6 小结Java程序设计是本专业的一门重要的面向对象的程序语言。在刚开始学习时,一直担心自己、也没把握自己能否学好,也曾担心过不了考试这一关。经过近大半学期教师您不厌其烦的教诲,引导我们去学习。我对Java语言有了一定的了解,但那绝对是远远不够的,还是要不断地把它应用到实践中去,融会贯穿。经过为期一周的Java课程设计,亲身感受体验敲、改写Java程序代码的乐趣,我对Java编程有了较为深入的了解,不仅巩固了以前在课本上学到的知识,还学会了很多其他东西,比如Java程序不同调试平台的使用、错误的调试与数据库路径的配置等等。 一直以来,或许有不少人跟我一样,总是觉得编程是很枯燥乏味的,但是这次的体验下来,其实以前我们的想法错误的。感觉到看着敲击的代码变为一个个可以自娱自乐小游戏程序,其实是一件非常有趣的事情。并且在添加功能的过程中,不仅可以启发自己的想象力,还可以培养灵活运用知识的能力。在此过程中,我们认识到编程的重要步骤是分析,分析问题的本身和现实要求。分析过程中采用根据设置框架选择功能使我的思路特别清晰。拿到一个题目不能只局限在一种思想一种方法上,要尽量的多尝试其他的做法,然后比拟,集各家之所长,拿出最优秀的程序来。其次也是最重要的就是我们应当打开我们的视野,我们应当从我们的生活的这个世界中去领悟解决问题的思想和方法通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的根本习惯和开发系统时应注意的流程。作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。参考文献文献写法如下:1. 专著、论文集、毕业论文、报告等疯狂Java讲义 2008-09李刚著附 录附录1 源程序清单import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class Memory extends 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 Blockm*n; 图标个数=m; icon=new ImageIcon图标个数; for(int i=0;iicon.length;i+) iconi=new ImageIcon(a+i+.gif); for(int i=0;iblock.length;i+) blocki=new Block(); blocki.设置关闭时的图标(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=new FileOutputStream(初级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩表); object_out.close(); out.close(); catch(IOException e) if(!file中级.exists() try FileOutputStream out=new FileOutputStream(中级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩表); object_out.close(); out.close(); catch(IOException e) if(!file高级.exists() try FileOutputStream out=new FileOutputStream(高级记忆排行榜.txt); ObjectOutputStream object_out=new ObjectOutputStream(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(WindowEvent e) System.exit(0); ); con=getContentPane(); 记忆测试板=new MemoryTestPane(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 Blockm*n; icon=new ImageIcon图标个数; for(int i=0;iicon.length;i+) iconi=new ImageIcon(a+i+.gif); for(int i=0;iblock.length;i+) blocki=new Block(); blocki.设置关闭时的图标(new ImageIcon(关闭.gif); 记忆测试板=new MemoryTestPane(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()=初级) 给出级别测试(3,3,file初级); setBounds(100,100,300,260); this.validate(); 提示条.setText(初级:您需要连续找出+3+个一样图标的方块); if(event.getSource()=中级) 给出级别测试(4,4,file中级); setBounds(100,100,340,280); this.validate(); 提示条.setText(中级:您需要连续找出+4+个一样图标的方块); if(event.getSource()=高级) 给出级别测试(5,5,file高级); setBounds(100,100,360,300); this.validate(); 提示条.setText(高级:您需要连续找出+5+个一样图标的方块); 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(); import javax.swing.*;import java.awt.event.*;public class Block extends utton 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(翻开时的图标); import javax.swing.*; import java.awt.event.*;import java.awt.*;import java.util.LinkedList;import java.io.*;public class MemoryTestPane extends JPanel implements ActionListener RandomSetIcon 排列图标=null; Block block; ImageIcon icon; LinkedList listIo=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; listIo=new LinkedList(); listBlock=new LinkedList(); setLayout(new BorderLayout(); JPanel center=new JPanel(); center.setLayout(new GridLayout(行数,列数); for(int i=0;iblock.length;i+) center.add(blocki); blocki.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); 计时器=new Timer(1000,this); 计时器是否启动=false; public void actionPerformed(ActionEvent e) if(e.getSource() instanceof Block) Block 方块=(Block)e.getSource(); ImageIcon 翻开时的图标=方块.获取翻开时的图标(); 方块.设置图标(翻开时的图标); if(listIo.size()=0) listIo.add(翻开时的图标); listBlock.add(方块); success=1; else ImageIcon temp=(ImageIcon)listIo.getLast(); if(temp=翻开时的图标&!(listBlock.contains(方块) success=success+1; listIo.add(翻开时的图标); listBlock.add(方块); if(success=列数) for(int i=0;iblock.length;i+) blocki.setEnabled(false); for(int j=0;jlistBlock.size();j+) Block b=(Block)listBlock.get(j); b.setDisabledIcon(b.获取翻开时的图标(); 计时器.stop(); Record record=new Record(gradeFile); record.setTime(time); record.setVisible(true); else if(temp!=翻开时的图标)&(!(listBlock.contains(方块) listIo.clear(); listBlock.clear(); listIo.add(翻开时的图标); listBlock.add(方块); success=1; for(int i=0;iblock.length;i+) if(方块!=blocki) blocki.设置图标(blocki.获取关闭时的图标(); if(计时器是否启动=false) time=0; 计时器.start(); 计时器是否启动=true; if(e.getSource()=计时器) time=time+1; 显示时间.setText(您的用时:+time+秒); import java.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class ShowRecord extends JDialog implements ActionListener File gradeFile=null; utton 确定,去除; JTextArea show=null; public ShowRecord(JFrame frame,File f) super(frame,记忆测试排行榜:+f.toString(); gradeFile=f; show=new JTextArea(6,4); 确定=new utton(显示排行榜); 确定.addActionListener(this); 去除=new utton(清空排行榜); 去除.addActionListener(this); Container con=getContentPane(); con.add(new JScrollPane(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 void windwoClosing(WindowEvent e) setVisible(false); dispose(); ); public void actionPerformed(ActionEvent e) if(e.getSource()=确定) try show.setText(null); FileInputStream in=new FileInputStream(gradeFile); ObjectInputStream object_in=new ObjectInputStream(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=new FileInputStream(gradeFile); ObjectInputStream object_in=new ObjectInputStream(in); LinkedList 成绩=(LinkedList)object_in.readObject(); object_in.close(); 成绩.clear(); FileOutputStream out=new FileOutputStream(gradeFile); ObjectOutputStream object_out=new ObjectOutputStream(out); object_out.writeObject(成绩); out.close(); object_out.close(); show.setText(排行榜被清空); catch(Exception ee) public void sort(LinkedList list) for(int i=0;ilist.size()-1;i+) for(int j=i+1;j(People)list.get(j).getTime() People temp=(People)list.get(j); list.set(j,(People)list.get(i); list.set(i,temp); import java.io.*;import java.util.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;public class Record extends JFrame implements ActionListener int time=0; JTextField yourName,label; utton 确定,取消; File gradeFile=null; public Record(File f) super(记录你的成绩到:+f.toString(); gradeFile=f; setBounds(100,100,330,160); setResizable(false); setVisible(false); 确定=new utton(确定); 取消=new utton(取消); 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 void windwoClosing(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=new FileInputStream(gradeFile); ObjectInputStream object_in=new ObjectInputStream(in); LinkedList list=(LinkedList)object_in.readObject();
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!