您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页java课程设计实训报告-记忆测试系统

java课程设计实训报告-记忆测试系统

来源:测品娱乐


沈 阳 工 程 学 院

课 程 设 计

设计题目: Java程序设计课程设计

-----记忆测试系统

系 别 信息工程系 班级 软件072 学生姓名

学 号 36 22 27 11 指导教师 职称

起止日期:2009 年 6月15 日起——至 2009年 6月 26

日止

沈 阳 工 程 学 院

课程设计任务书

课程设计题目: Java程序设计课程设计

-----记忆测试系统

系 别 信息工程系 班级 软件072 学生姓名 杜黎明 周雷 刘洋 吴佳文 学 号 36 22 27 11 指导教师 李波、衣云龙 职称 讲师、助教 课程设计进行地点: 实训F 任 务 下 达 时 间: 2009 年 6 月 15 日 起止日期:2009年 6 月 15 日起——至 2009年 6月 26 日止 教研室主任 费雅洁 2009年 6月 12 日批准

II

1.设计的原始资料及依据

通过课程设计使学生进一步加深对课程内容的理解,利用程序设计的基本思想进行程序的开发,进一步掌握编程方法和技巧,提高学生用程序的思想来解决实际问题的能力。

2.设计的主要内容及要求

本小组设计题目:记忆测试系统 需要完成的功能:

⑴单击“选择级别”菜单可以选择初级、中级或高级。

⑵单击“查看排行榜”菜单可以查看初级记忆榜、中级记忆榜和高级记忆榜,通过记忆榜存储每个级别的成绩。

⑶选择级别后,将出现相应级别的测试区。测试区共有m*n个方块组成,程序通过设置m和n的值来确定相应的测试级别,例如,对于初级级别,m=5,n=6。每个方块上都有一个图标,但该图标默认不可见,用鼠标单击测试区的任何一个方块,则计时器开始启动,同时在该方块上的图标将显示出来。

⑷m*n个方块测试区有m中图标,每个图标重复出现n次,并且随即分布在m*n个方块上。用户必须用鼠标连续点击出n个相同的方块。

⑸测试区能显示用户的用时,并根据级别的不同,提示用户必须用鼠标连续单击出多个图标相同的方块。

⑹测试区有提示图标所在位置的功能。用户单击测试区中的“提示”按钮后,测试区将持续1.2秒为用户显示全部方块上的图标。用户每次单击一次“提示”按钮,用户的用时将增加10秒。

⑺连续单击出级别所要求的若干个图标相同的方块后,将弹出保存成绩对话框,用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。

⑻单击“选择图标”菜单可以重新选择方块中的图标样式,即可以重新选择m个图标。

3.对设计说明书撰写内容、格式、字数的要求

⑴ 学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。课程设计说明书(论文)的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。应做到文理通顺,内容正确完整,书写工整,装订整齐。

⑵ 装订格式

封面、任务书、成绩评审意见表、摘要和关键词、目录、正文、结论、致谢、参考文献。 ⑶ 课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,三级节标题采用黑体小四号字,表题与图题采用宋体五号字。

4. 设计完成后应提交成果的种类、数量、质量等方面的要求

⑴ 课程设计任务书 ⑵ 课程设计报告 ⑶ 设计成品(光盘)

1 III

5.时间进度安排

顺序 1 2 3 4 5 6 阶段日期 第16周第1天 第16周第2天 计 划 完 成 内 容 查阅资料,充分解读题目内容,小组分工,确定每个人的具体任务。 数据库设计及登陆界面的实现。 备注 1天 1天 4天 2天 1天 1天 第16周第3,4,5天,编制程序,单元测试。 第17周第1天 第17周第2,3天 第17周第4天 第17周第5天 程序整合,综合调试。 答辩。 撰写课程设计报告。 6.主要参考资料(文献)

[1] 辛运帏 《Java算法》 北京:电子工业出版社,1998

[2] 王克宏 《Java语言APPLET编程技术》 北京:清华大学出版社,1997 [3] 旭日工作室 《Java1.1使用大全》 北京:电子工业出版社,1998 [4] 辛运帏等 《Java程序设计》 北京:清华大学出版社,2001

[5] 辛运帏、高宁《Java程序设计课程设计》 北京:机械工业出版社,2005 [6] 肖旻、廖雷《Java程序设计教程》 北京:中国电力出版社,2007 [7] [美]Bruce Eckel《Java编程思想》 北京:机械工业出版社,1999

[8] [美]Edward Yourdon等 《实用面向对象软件工程教程》 北京:电子工业出版社,1998 [9] [美]Deitel H M,Deitel P J《Java语言程序设计大全》 北京:机械工业出版社,2001 [10] 杨绍方 《Java编程实用技术与案例》 北京:清华大学出版社,2000 [11] Java技术文档 http://www.java.sun.com

[12] Java技术文档 http://chinajava.home.chinaren.com

[13] JDK1.3开发工具和API帮助文档 http://java.sun.com/products/

1 IV

沈阳工程学院 课程设计成绩评定表

系(部): 信息工程系 班级: 软件072 学生姓名: 杜黎明 周雷 刘洋 吴佳文

指 导 教 师 评 审 意 见 评价内容 调研 论证 具 体 要 求 能查阅文献,收集资料;能制定课程设计方案和日程安排。 权重 0.1 0.2 0.2 5 5 5 评 分 4 4 4 3 3 3 加权分 2 2 2 工作能力 工作态度认真,遵守纪律,出勤情况是否良好,态度 能够完成设计工作, 工作量 说明书的质量 按期完成规定的设计任务,工作量饱满,难度适宜。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 0.5 5 4 3 2 指导教师评审成绩 (加权分合计乘以8) 指 导 教 师 签 名: 分 加权分合计 年 月 日 评 阅 教 师 评 审 意 见 评价内容 查阅 文献 工作量 说明书的质量 具 体 要 求 查阅文献有一定广泛性;有综合归纳资料的能力 工作量饱满,难度适中。 说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。 权重 0.2 0.5 0.3 5 5 5 评 分 4 4 4 3 3 3 加权分 2 2 2 评阅教师评审成绩 (加权分合计乘以4) 评 阅 教 师 签 名: 分 加权分合计 年 月 日 答 辩 小 组 评 审 意 见 评价内容 具 体 要 求 权重 5 评 分 4 3 2 加权分 汇报准备充分,思路清晰;语言表达准确,概学生汇报 念清楚,论点正确,有层次,有重点,基本上0.5 反映了所完成任务的全部内容;时间符合要求。 答 辩 思路清晰;回答问题有理论依据,基本概念清楚;主要问题回答准确,深入,有说服力。 0.5 5 4 3 2 答辩小组评审成绩 (加权分合计乘以8) 答辩小组教师签名: 课 程 设 计 总 评 成 绩 分 加权分合计 年 月 日 分 1 V

沈阳工程学院课程设计报告 摘要

摘 要

伴随着社会科学技术的飞速发展,信息化时代也以闪电般的速度呈现在我们的面前,所以,计算机的发展更以其惊人的速度在发展着,生活中有许多复杂的问题都需要用计算机去解决,从而产生了新的思想,Java语言就是一种伴随着社会信息技术的飞速发展而发展起来的强有力的计算机编程语言,它能够透彻地反映人们的思想,巧妙而充分地使计算机本身特性发挥到极致,便于编程人员根据社会的需要,灵活地编制出高级语言程序来实现生活和工作中的各种复杂程序。

在当今众多的计算机程序设计语言中,面向对象技术正逐步替代传统的面向过程的程序设计技术,成为目前软件的主流开发方向,Java语言以它独到的面向对象特性在各类编程语言中脱颖而出,Java语言的快速发展与广泛应用有目共睹。

Java语言是计算机能提供的最快而又最有效的语言,也是能够利用计算机所有硬件特性的编程语言。在当今信息高速发展的社会,Java语言越来越实用,可以通过Java实现更高更快的应用需求,Java语言将成为应用程序的开发和建设的核心技术,它能够有效地提高计算机性能和应用场合,满足各种用户的应用需求。

本论文主要介绍了《记忆测试系统》的相关使用方法,以及程序中应用到的相关技术和方法。本论文包括绪论、系统功能介绍和系统功能实现三个主要部分。

关键词:记忆测试系统、Java小游戏、JavaGUI、Swing包

1 I

目 录

摘 要 ............................................................................................................................................... I 第1章 绪 论 .................................................................................................................................. 1 第2章 系统功能介绍 ........................................................................................................................ 2

2.1系统功能总框图 ..................................................................................................................... 2 2.2模块功能介绍 ......................................................................................................................... 2

2.2.1 MemoryGame.java(主类) ........................................................................................ 2 2.2.2 MemoryTestArea.java................................................................................................... 3 2.2.3Block.java ...................................................................................................................... 3 2.2.4 Record.java ................................................................................................................... 3 2.2.5 ShowRecordDialog.java ............................................................................................... 3 2.2.6 People.java .................................................................................................................... 3 2.3 组内任务分工 ........................................................................................................................ 3 第3章 系统功能实现 ........................................................................................................................ 5

3.1MemoryGame类 ..................................................................................................................... 5

3.1.1 效果图 .......................................................................................................................... 5 3.1.2 成员变量和成员方法 .................................................................................................. 5 3.1.3 程序代码(MemoryGame.java) ............................................................................... 6 3.2 MemoryTestArea类 ............................................................................................................... 9

3.2.1 效果图 .......................................................................................................................... 9 3.2.2 成员变量和成员方法 ................................................................................................ 10 3.2.3 程序代码(MemoryTestArea.java) ........................................................................ 11 3.3 Block类 ................................................................................................................................ 15

3.3.1 效果图 ........................................................................................................................ 15 3.3.2成员变量和成员方法 ................................................................................................. 15 3.3.3程序代码(Block.java) ................................................................................................. 15 3.4 ShowRecordDialog类 .......................................................................................................... 15

3.4.1 效果图 ........................................................................................................................ 15 3.4.2 成员变量和成员方法 ................................................................................................ 16 3.4.3程序代码(ShowRecordDialog.java) ........................................................................... 16 3.5 People类 ............................................................................................................................... 18

3.5.1 效果图 ........................................................................................................................ 18 3.5.2成员变量和成员方法 ................................................................................................. 18 3.5.3 程序代码(People.java) .............................................................................................. 18 3.6 Record类的实现 .................................................................................................................. 19

3.6.1效果图 ......................................................................................................................... 19 3.6.2 成员变量和成员方法 ................................................................................................ 19 3.6.3 程序代码(Record.java) .............................................................................................. 20

结 论 ............................................................................................................................................ 22 致 谢 ............................................................................................................................................ 23 参考文献 ............................................................................................................................................ 24

沈阳工程学院课程设计报告 第1章 绪论

第1章 绪 论

信息化的现代社会,无论何时何地,都存在着一大批追求效率、讲求速度的分秒必争的上班族,其中更包括着高等学校中的一层广大学生工作者,每天繁重的工作学习任务无不压的人们喘不过气来,因此,有必要开发一些益智性的软件来扩充一下人们的业余兴趣爱好,拥有一个健全业余生活也是众望所归的,因此我们选择开发一个《记忆测试系统》以便提高人们的业余兴趣爱好,提高工作和学习的效率。

而以往的记忆测试系统,界面不够友好,没有让人耳目一新的视觉效果,往往还缺少图标的选择功能,而这也是最引起我们注意的方面,同时是这也就是我们选择这个课题的最初动机。

本系统主要采用Java.Swing包设计界面。在《记忆测试系统》中,记忆力的测试是本Java程序的核心,通过“选择级别”菜单可以选择测试测试的级别,其中包括初级、中级以及高级的测试选择项,每个选项实现对每个层次级别的测试。在每个级别的测试之中,测试者需要在系统的提示下,通过鼠标单击出6个、7个、8个相同图标的方块(也即汽车图标或动物图标),当测试者凭借自己的记忆连续点击出要求的相同图标数目时,系统会自动弹出保存成绩的提示窗口,测试者可根据自己的需要记录自己的成绩(测试者也可以“匿名”的方式记录成绩)或者退出提示窗口。测试者还可以在“查看排行榜”选项里边查看自己在当前级别的测试中的排名情况。

利用Java的GUI设计图形界面,为了设计出紧凑、固定、颇具观赏性的界面,我们充分的发挥了中间容器JPanel的强大作用。在界面的布局设计时,我们克服了(BorderLayout())窗口默认布局每个区域只能添加一个组件的缺点,我们通过使用中间容JPanel来进行过度,结合GridLayout()、FlowLayout()布局成功的实现了将多个组件加入到BorderLayout()的某一个区域,设计出了我们想要的清新界面。

本《记忆测试系统》也是一款简单的游戏软件,是用Java语言以及其它脚本语言编写的应用程序。在日常生活中虽然起不到很大的工业和商业作用,但每个人都可以在其中找到自己的兴趣爱好,在娱乐中找到工作的乐趣,在工作中放松自己的心情,减轻自己的压力。 该《记忆测试系统》操作简单,易于上手,适宜不同职业,不同年龄段的人,不管是小孩、中年人还是老年人,相信您都会爱上我们的《记忆测试系统》的。在您进入主界面后,很容易就能够对它的所有功能模块精通之至,一般的人都能够使用。

1

沈阳工程学院课程设计报告 第2章 系统功能介绍

第2章 系统功能介绍

2.1系统功能总框图

记忆测试系统用到的类以及它们的组合关系如图2.1所示。

MemoryGame String File MemoryTestArea ShowRecordDialog File TreeSet ArrayList String Record Timer File Thread

图2.1类之间的组合关系

2.2模块功能介绍

2.2.1 MemoryGame.java(主类)

MemoryGame类负责创建记忆测试系统的主窗口,该类有main方法,记忆测试系统从该类开始执行。MemoryGame类有4中重要的类型对象,分别是String、File、MemoryTestArea和ShowRecordDialog对象。MemoryGame类创建的窗口及其对象如图2.2和图2.3所示。

图2.2 窗口及其测试区

2

沈阳工程学院课程设计报告 第2章 系统功能介绍

图2.3 ShowRecord类对应的对话框

2.2.2 MemoryTestArea.java

MemoryTestArea类是主类MemoryTestArea窗口中的一个Jpanel容器,所创建的对象称为“测试区”,这个“测试区”被插入到MemoryGame窗口的中心。MemoryTestArea类主要有6中类型的成员:ArrayList、String、Record、Timer、File和Thread对象。

2.2.3Block.java

Block类是Jbutton的子类,负责为MemoryTestArea类中的ArrayList数组表提供Block对象。

2.2.4 Record.java

Record类是javax.swing包中Jdialog对话框的子类,当用户成功单击出相应级别所要求的图标相同的方块口,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。

2.2.5 ShowRecordDialog.java

ShowRecordDialog类是javax.swing包中Jdialog对话框的子类,当用户单击“查看排行榜”时,ShowRecordDialog创建的对象负责显示用户的成绩。

2.2.6 People.java

People对象封装了用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。

2.3 组内任务分工

小组分工如表2.1所示。

3

沈阳工程学院课程设计报告 第2章 系统功能介绍

表2.1 小组分工表 全体成员 组长学号:36 学号:22 任务 组长姓名:杜黎明 姓名:周雷 查阅文献、收集资料 √ 程序界面设计 √ MemoryGame的实现 √ √ MemoryTestArea的实现 √ Block.java的实现 √ Record.java的实现 √ ShowRecordDialog.java

的实现

People.java的实现

程序测试 √

学号:27 姓名:刘洋 √ √

学号:11 姓名:吴佳文 √ √ √

4

沈阳工程学院课程设计报告 第3章 系统功能实现

第3章 系统功能实现

3.1MemoryGame类

3.1.1 效果图

MemoryGame创建的窗口效果图如图3.1所示。

图3.1 MemoryGame创建的窗口

3.1.2 成员变量和成员方法

1. 成员变量

⑴bar是JmenueBar类创建的的菜单条和menuIcon是Jmenu类创建的三个菜单,这三个菜单的名称分别是“选择级别”、“查看排行榜”、“选择图标”。

⑵oneGradeItem、towGradeItem、threeGredeItem是JmenuItem类创建的三个菜单项,被添加到menuGrade菜单子中。这三个菜单项的名称分别是“初级”、“中级”、“高级”。

⑶carImageIcon和animalImage是JmenuItem类创建的两个菜单项,被添加到menuIcon菜单中,这两个菜单项的名称分别是“汽车图标”和“动物图标”。

⑷fileOneGrade、fileTwoGrade、fileThreeGrade三个文件对象所引用的文件分别是“初级记忆排行榜.txt”、“中级记忆排行榜.txt”、“高级记忆排行榜.txt”,分别用来写入三个级别的成绩。gradeFile可以是fileOneGrade、fileTwoGrade、fileThreeGrade中的某一个。

5

沈阳工程学院课程设计报告 第3章 系统功能实现

⑸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[])方法是软件运行的入口方法。

3.1.3 程序代码(MemoryGame.java)

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

JMenu menuGrade,menuResult,menuIcon; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem;

JMenuItem oneGradeResult,twoGradeResult,threeGradeResult; JMenuItem carImageIcon,animalImageIcon;

File fileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile; String imageName[];

MemoryTestArea memoryArea;

ShowRecordDialog showDiolag=null; int m=5,n=6;

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(\"高级\");

6

沈阳工程学院课程设计报告 第3章 系统功能实现

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(\"动物图标\"); animalImageIcon.addActionListener(this); carImageIcon.addActionListener(this); menuIcon.add(carImageIcon);

menuIcon.add(animalImageIcon); 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(); }

7

沈阳工程学院课程设计报告 第3章 系统功能实现

catch(IOException exp){}

}

setBounds(100,100,400,360); setVisible(true);

memoryArea=new MemoryTestArea(); imageName=new String[imageNumber]; for(int i=0;iimageName[i]=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;iimageName[i]=new String(\"car\"+i+\".jpg\");

8

沈阳工程学院课程设计报告 第3章 系统功能实现

}

memoryArea.setImageName(imageName);

memoryArea.initBlock(m,n,imageName,gradeFile); }

if(event.getSource()==animalImageIcon){ for(int i=0;iimageName[i]=new String(\"ani\"+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(); } }

3.2 MemoryTestArea类

3.2.1 效果图

MemoryTestArea创建的测试区的效果图如图3.2所示。

9

沈阳工程学院课程设计报告 第3章 系统功能实现

图3.2 MemoryTestArea创建的测试区

3.2.2 成员变量和成员方法

⒈成员变量

⑴row和col的值确定测试区中方块的数量。MemoryTestArea 类创建的对象memoryArea是MemoryArea对象通过调用initBlock(int ,int,String[],File)方法将MemoryGame类中m和n的值传递给row和col。

⑵usedTime是用户的用时,单位是秒。

⑶success的值是用户找到的具有通向的图标的方块的个数。

⑷gradeFile是级别文件,memoryArea对象通过调用initBlock(int,int,String[],File)方法将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文件中。

10

沈阳工程学院课程设计报告 第3章 系统功能实现

⒉成员方法

⑴MemoryTestArea()是构造方法,创建memoryArea对象时需使用该构造方法。 ⑵initBlock(int,int,String[],File)方法。memoryArea对象调用该方法将参数的值传递给row、col、 imageFileName和fradeFile,并依据这些值设置allBlockList数组表的大小,然后创建allBlockList的单元中的Block对象,并设置Block对象上的图标。

⑶setImageName(String[])方法。memoryArea对象调用该方法可以将MemoryGame中存放图像文件名字的imageName数组的引用传递给imageFileName。当用户单击MemoryGame主类窗口的carImageIcon和animalImageIcon菜单项时,memoryArea对象将调用该方法把存放图像文件名字的imageName数组的引用传递给imageFileName。

⑷actionPerformed(ActionEvent)方法。该方法是MemoryArea类实现的ActionListener接口中的方法。memoryArea中的每个Block对象都注册了ActionEvent事件,当用户单击memroyArea中的每个Block对象时,actionPerformed(ActionEvent)方法将被调用执行,所执行的主要操作是:如果该Block对象未显示图标,并且该图标和openIconList中,同时将该Block对象未显示图标,并且该Block对象设置的图标和openIconList中存放的图标不相同,就将openIconList 清空,然后再将该图标添加到链表中,同时将该Block对象上的图标显示出来,并将success的数值设置称1。当用户单击hintButton按钮时,actionPerformed(ActionEvent)方法被调用执行,执行的主要操作是启动hintThread线程。

⑸run()方法。该方法是MemoryArea类实现的Runnable接口中的方法,启动hintThread线程后,该方法将执行,其主要操作是将测试区中未显示的图标的各个Block对象上的图标持续显示1200毫秒。

3.2.3 程序代码(MemoryTestArea.java)

import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import java.io.*;

public class MemoryTestArea extends JPanel implements ActionListener,Runnable { int row,col; File gradeFile;

ArrayList allBlockList; String imageFileName[];

LinkedList openIconList; LinkedList openBlockList; int success=0;

Thread hintThead;//java.lang.object包中 JButton hintButton; int usedTime=0;

JTextField showUsedTime,hintMessage; javax.swing.Timer timer; Record record; JPanel center,south; MemoryTestArea(){

setLayout(new BorderLayout());

allBlockList=new ArrayList();

11

沈阳工程学院课程设计报告 第3章 系统功能实现

openIconList=new LinkedList(); openBlockList=new LinkedList(); hintThead=new Thread(this); hintMessage=new JTextField();

hintMessage.setHorizontalAlignment(JTextField.CENTER); hintMessage.setEditable(false);

hintMessage.setFont(new Font(\"宋体\ center=new JPanel(); south=new JPanel();

hintButton=new JButton(\"提示\"); hintButton.addActionListener(this); showUsedTime=new JTextField(8); showUsedTime.setEditable(false);

showUsedTime.setHorizontalAlignment(JTextField.CENTER); south.add(new JLabel(\"用时:\")) ; south.add(showUsedTime);

south.add(new JLabel(\"提示图标位置(导致用时增加):\")) ; south.add(hintButton);

add(south,BorderLayout.SOUTH);

add(hintMessage,BorderLayout.NORTH);

timer=new javax.swing.Timer(1000,this);//创建一个每1000毫秒将通知其侦听器的计时器

record=new Record(); }

public void initBlock(int m,int n,String name[],File f){ row=m; col=n;

gradeFile=f;

center.removeAll(); imageFileName=name;

ImageIcon icon[]=new ImageIcon[imageFileName.length]; for(int i=0;iicon[i]=new ImageIcon(imageFileName[i]); }

if(allBlockList.isEmpty()){

for(int i=0;iallBlockList.add(new Block()); } } else{

allBlockList.clear();

for(int i=0;iallBlockList.add(new Block()); } }

for(int i=0;i12

沈阳工程学院课程设计报告 第3章 系统功能实现

allBlockList.get(i).addActionListener(this);

allBlockList.get(i).setOpenStateIcon(icon[i%row]); }

Collections.shuffle(allBlockList); center.setLayout(new GridLayout(row,col)); for(int i=0;iadd(center,BorderLayout.CENTER); if(timer.isRunning()){ timer.stop(); }

hintMessage.setText(\"您需要用鼠标单击出\"+col+\"个同样图标的方块\"); usedTime=0;

showUsedTime.setText(null); validate(); }

public void setImageName(String name[]){ imageFileName=name; }

public void actionPerformed(ActionEvent e){ if(e.getSource() instanceof Block){ if(!timer.isRunning()) timer.start();

Block block=(Block)e.getSource();

ImageIcon openStateIcon=block.getOpenStateIcon(); block.setIcon(openStateIcon);

if(openIconList.size()==0) { openIconList.add(openStateIcon); openBlockList.add(block);

success=1; } else{

ImageIcon temp=openIconList.getLast();

if(temp==openStateIcon&&!(openBlockList.contains(block))){ success=success+1; openIconList.add(openStateIcon); openBlockList.add(block); if(success==col){

for(int i=0;ifor(int j=0;jb.setDisabledIcon(b.getOpenStateIcon()); }

13

沈阳工程学院课程设计报告 第3章 系统功能实现

timer.stop();

record.setTime(usedTime); record.setGradeFile(gradeFile); record.setVisible(true); } }

else if((temp!=openStateIcon)&&(!(openBlockList.contains(block)))){ openIconList.clear(); openBlockList.clear();

openIconList.add(openStateIcon); openBlockList.add(block);

success=1; for(int i=0;iallBlockList.get(i).setIcon(null); } } } }

if(e.getSource()==hintButton){ if(!hintThead.isAlive())

hintThead=new Thread(this);

for(int i=0;ihintThead.start(); }

catch(IllegalThreadStateException ex){} }

if(e.getSource()==timer){ usedTime++;

showUsedTime.setText(\"您的用时:\"+usedTime+\"秒\"); } }

public void run(){

for(int i=0;iallBlockList.get(i).setIcon(allBlockList.get(i).getOpenStateIcon()); try{ Thread.sleep(1200); }

catch(InterruptedException exp){}

for(int i=0;iif(!openBlockList.contains(allBlockList.get(i))) allBlockList.get(i).setIcon(null);

14

沈阳工程学院课程设计报告 第3章 系统功能实现

} }

3.3 Block类

3.3.1 效果图

Block创建的方块效果如图3.3所示。

图3.3 Block创建方块对象

3.3.2成员变量和成员方法

⒈成员变量

⑴openStateIcon是方块上的图标。 ⒉方法

⑴Block对象调用setOpenStateIcon(ImageIcon)方法可以设置它上面的图标。 ⑵Block对象调用getOpenStateIcon()方法可以获得它上面的图标。

3.3.3程序代码(Block.java)

import javax.swing.*; import java.awt.event.*;

public class Block extends JButton { ImageIcon openStateIcon;

public ImageIcon getOpenStateIcon(){ return openStateIcon; }

public void setOpenStateIcon(ImageIcon icon){ openStateIcon=icon; } }

3.4 ShowRecordDialog类

3.4.1 效果图

15

沈阳工程学院课程设计报告 第3章 系统功能实现

ShowRecordDialog创建的对话框如图3.4所示。

图3.4ShowRecordDialog效果图

3.4.2 成员变量和成员方法

⒈成员变量

⑴gradeFile是对话框要读取的文件,该文件存储成绩。 ⑵clear是注册了ActionEvent事件的按钮。

⑶showArea文本显示对话框从gradeFile文件中读取的成绩。 ⑷treeSet负责将成绩按高低排序。 ⒉方法

⑴ShowRecordDialog()是构造方法,负责创建showDialog对象。

⑵setGradeFile(File)方法。showRecordDialog类创建的ShowRecordDialog对话框是主类MemoryGame窗口中的一个成员。当用户选择窗口上的“查看排行榜”菜单中的菜单项时,ShowRecordDialog对话框调用setGradeFile(File)方法将相应的级别文件传递给gradeFile。

⑶showRecord()方法。ShowRecordDialog对话框调用该方法读取gradeFile文件中的成绩,为了将成绩按高低顺序显示在showArea文本区中,showRecord()方法根据读取的名字和该名字的对应成绩,创建一个People对象,并将该People对象存放在treeSet树级中。

⑷actionPerformed(ActonEvent)是ActionListener接口中的方法,clear注册了ActionEvent事件,当用户单击clear按钮时,actionPerformed(ActionEvent)方法被执行,所执行的操作是清楚gradeFile文件中的内容。

3.4.3程序代码(ShowRecordDialog.java)

import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.awt.*;

public class ShowRecordDialog extends JDialog implements ActionListener{ File gradeFile; JButton clear;

JTextArea showArea=null; TreeSet treeSet; public ShowRecordDialog(){

treeSet=new TreeSet(); showArea=new JTextArea(6,4);

16

沈阳工程学院课程设计报告 第3章 系统功能实现

showArea.setFont(new Font(\"楷体\ clear=new JButton(\"清空排行榜\"); clear.addActionListener(this);

add(new JScrollPane(showArea),BorderLayout.CENTER); add(clear,BorderLayout.SOUTH); setBounds(100,100,320,185); setModal(true);

addWindowListener(new WindowAdapter(){

public void windwoClosing(WindowEvent e){ setVisible(false); } }); }

public void setGradeFile(File f){ gradeFile=f;

setTitle(f.getName()); }

public void showRecord(){ showArea.setText(null); treeSet.clear(); try{

RandomAccessFile in=new RandomAccessFile(gradeFile,\"rw\"); long fileLength=in.length(); long readPosition=0;

while(readPositionreadPosition=in.getFilePointer();

People people=new People(name,time); treeSet.add(people); }

in.close();

Iterator iter=treeSet.iterator(); while(iter.hasNext()){ People p=iter.next();

showArea.append(\"姓名:\"+p.getName()+\成绩: \"+p.getTime()+\"秒\"); showArea.append(\"\\n\"); } }

catch(IOException exp){System.out.println(exp);} }

public void actionPerformed(ActionEvent e){ if(e.getSource()==clear){ try{

File f=gradeFile.getAbsoluteFile(); gradeFile.delete();

17

沈阳工程学院课程设计报告 第3章 系统功能实现

f.createNewFile();

showArea.setText(\"排行榜被清空\"); }

catch(Exception ee){} } } }

3.5 People类

3.5.1 效果图

People是我们编写的一个类,该类对象中的数据是用户的姓名和成绩,被显示在ShowRecordDialog对话框中的showArea文本区中。见图3.4。

3.5.2成员变量和成员方法

⒈成员变量

⑴name是用户的名字。 ⑵time是用户的用时。 ⒉成员方法

⑴getTimer()方法返回time。 ⑵getName方法返回name。

⑶compareTo(Object)是Comparable接口中的方法,其操作是确定People对象的大小关系。

3.5.3 程序代码(People.java)

import java.io.*;

public class People implements Serializable,Comparable{//类通过启动Serializable启动序列化功能,序列化接口没有方法或字段,仅用于标识可序列化的语义。

String name=null;

int time=0; public People(String name,int t){ this.name=name; time=t; }

public int getTime(){ return time; }

public String getName(){ return name; }

public int compareTo(Object b){//Object是类层次结构的根类,每个类都使用它作为根类。

18

沈阳工程学院课程设计报告 第3章 系统功能实现

People p=(People)b; if((this.time-p.time)==0) return 1; else

return (this.time-p.time); } }

3.6 Record类的实现

3.6.1效果图

Record是javax.swing包中Jdialog的子类,并实现了ActionListener接口,该类创建的对象record是MemoryTestArea类的成员方法之一,当用户成功单击出相应级别所要求的图标相同的方块后,程序弹出Record对话框,用户使用该对话框提供的界面将成绩保存到相应的级别文件中。

Record创建的对话框如图3.6所示。

图3.6 Record对话框

3.6.2 成员变量和成员方法

⒈成员变量

⑴time是用户的用时。

⑵yourName是用户用来输入名字的文本框。

⑶enter和cancel是按钮对象,用户单击enter按钮可以保存成绩,单击cancel按钮可以放弃保存成绩。

⑷gradeFile是级别文件。 ⒉成员方法

⑴Record()是构造方法,负责创建record对象。 ⑵setGradeFile(File)方法。Record类创建的Record对话框是测试区MemoryTestArea中的一个成员。当用户成功单击相应级别所要求的图标相同的方块后,测试区弹出一个Record对话框将调用setGradeFile(int)方法将测试区记录的用户用时传递给Record对话框中的time。

⑶setTime(int)方法。当用户成功单击出相应级别所要求的图标相同的方块后,测试区弹出Record对话框,Record对话框将调用setTime(int)方法将测试区记录的用户用时传递给Record对话框中的time。

⑷actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按钮注册了ActionEvent事件,当用户单击enter按钮是,actionPerformed(ActionEvent)方法被调用执行,其操作是将用户在文本框yourName中输入的名字以及time的值保存到gradeFile文件中,然

19

沈阳工程学院课程设计报告 第3章 系统功能实现

后关闭当前对话框;当用户单击cancel按钮时,actionPerformed(ActionEvent)方法被调用执行,其操作是关闭当前对话框。

3.6.3 程序代码(Record.java)

import java.io.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.awt.*;

public class Record extends JDialog implements ActionListener{ int time=0;

JTextField yourName; JLabel label;

JButton enter,cancel; File gradeFile=null; public Record(){

setBounds(100,100,330,160); setResizable(false); setModal(true); setVisible(false);

enter=new JButton(\"确定\"); cancel=new JButton(\"取消\"); yourName=new JTextField(8); yourName.setText(\"匿名\"); enter.addActionListener(this); cancel.addActionListener(this); setLayout(new GridLayout(2,1)); label=new JLabel(); add(label);

JPanel p=new JPanel(); p.add(yourName); p.add(enter); p.add(cancel); add(p); }

public void setGradeFile(File f){ gradeFile=f;

setTitle(\"保存成绩到\"+gradeFile.getName());

label.setText(\"保存成绩到\"+gradeFile.getName()); validate(); }

public void setTime(int time){ this.time=time; }

public void actionPerformed(ActionEvent e){

20

沈阳工程学院课程设计报告 第3章 系统功能实现

if(e.getSource()==enter){

LinkedList list=new LinkedList(); try{

RandomAccessFile out=new RandomAccessFile(gradeFile,\"rw\"); out.seek(out.length());

out.writeUTF(yourName.getText()); out.writeInt(time); out.close(); }

catch(Exception event) {} setVisible(false); }

if(e.getSource()==cancel){ setVisible(false); } } }

21

沈阳工程学院课程设计报告 结论

结 论

通过两个周对Java程序设计的学习,我们对Java语言有了更进一步的了解,知道了如何运用以前学过的知识来完成本次课程设计。

我们小组选择了《记忆测试系统》的设计,主要实现记忆力的测试,主要分为初级记忆力的测试、中级记忆力的测试和高级记忆力的测试等功能。选择这个题目时感觉有点困难,好像无从下手,基本上没有一个具体的设计思路,因此我们先对小组成员进行分工,明确好各自的主要任务,然后分头查阅资料,上网搜索相关线索,每个人的工作做好之后,再由组长用一个主函数连接起来,进行整个程序的调试运行,最后,我们也顺利的完成了《记忆测试系统》的设计,并且得到了同学们的认可和喜爱。

对于整个程序的流程构架、主界面的布局、数据的保存和清除等,开始时我们并没有十足的把握,但是因为之前我们在图书馆查阅了很多的资料,也上网搜索了很多这方面的解决方案方法,在课程设计的第一个星期里我们就顺利地把代码组织并编写好了。

在连接所有的类的时候遇到了一点问题,不过在老师的指导,我们都把它解决了。在课程设计的前一个周,我们就把整个程序顺利地运行出来了,心里感到无比的兴奋与激动。在这个过程中我们运用了我们平时所学的知识,查阅了大量的资料。在其中,我们得到了意志的锻炼,在反复的操作中我们不断成长,在收获成功的同时,我们更得到了Java上机编程的深切体会和丰厚的编程经验。

接下来,经过小组的认真思考、分析和讨论,在老师的指导下,我们对系统功能的不足之处给予了最后的完善。

在答辩的过程中,在老师的提问下,我们分别把自己的设计思想讲解给老师听,同时认真的听取老师的意见和建议,很多问题都得到了与老师的认可和赞同。

时间是短暂的,但收获是丰厚的。经过这样两周的课程设计,我们对Java程序设计的知识又重新巩固了一遍,特别对程序的调试运行有了更深刻的体会。这次的课程设计给了我们一个把学习到的知识付诸于实践的机会,只有把理论与实际相结合,才能做出让人耳目一新的Java应用程序来。

22

沈阳工程学院课程设计报告 致谢

致 谢

经过这两个星期的实训,我们学到了许多Java的相关知识,懂得并掌握了如何去设计一个程序、调试程序,也懂得了如何运用我们自己的创新能力去实现我们想要的功能。

在实训过程中,我们也察觉到了自己对知识掌握的不足之处、知识的缺乏,但是,在同学和老师的帮助和指导下,我们克服困难,突破难关,认真总结,最终我们顺利的完成了本次实训,并且认真的完成了实训报告的书写。

在本次课程设计中,我们不仅完成了老师交给我们的各项任务,还增加了许多课外的有关Java的编程知识。对Java的程序设计有了更深刻的了解,使我们的知识更加完善,视野更加的广阔。

本次Java程序设计的选题、探讨以及报告的撰写均是在我们的指导老师衣云龙老师的悉心指导下完成的。课程设计中的每一个环节无不凝聚着衣老师的心血,老师在课程设计方面的丰厚经验值得我们为之钦佩,在我们面对问题难关时,是我们前进的导航仪、指南针,老师对我们的悉心教导及其严谨的工作态度和锐意的创新精神使我们受益匪浅,在此特别向衣云龙老师表示深深的感谢和由衷的敬意。

在程序日趋完善的过程中,我们也遇到了很多这样或那样的问题,但是经过我们自己的不懈努力,不断查阅资料,上网搜索解决方案,最终都得到满意的答案。同时,同学也给了我不少的启迪和帮助,使我们的课题能够顺利的完成。正所谓“三人行,必有我师焉”,更何况我们是四个人的小组呢。

最后,再次感谢我们的指导老师,在他的悉心指导下我们才能顺利的完成任务。在我们书写报告期间,老师渊博的学识、严谨而科学的求实精神、一丝不苟的治学态度和高尚的教学品格,深深的感染着我们每一位同学。报告的每次改动都离不开老师的辛勤工作,从各个方面来说,审查报告的工作往往比编写报告更加复杂得多得多,正是老师不辞辛苦在百忙之中抽出时间为我们批阅,才使我能够顺利完成报告的所有内容。

在这里,我们对您表示衷心的感谢。祝老师身体健康、工作顺利、万事如意!

23

沈阳工程学院课程设计 参考文献

参考文献

[1] 辛运帏 《Java算法》 北京:电子工业出版社,1998

[2] 王克宏 《Java语言APPLET编程技术》 北京:清华大学出版社,1997 [3] 旭日工作室 《Java1.1使用大全》 北京:电子工业出版社,1998 [4] 辛运帏等 《Java程序设计》 北京:清华大学出版社,2001

[5] 辛运帏、高宁《Java程序设计课程设计》 北京:机械工业出版社,2005 [6] 肖旻、廖雷《Java程序设计教程》 北京:中国电力出版社,2007 [7] [美]Bruce Eckel《Java编程思想》 北京:机械工业出版社,1999

[8] [美]Edward Yourdon等 《实用面向对象软件工程教程》 北京:电子工业出版社,1998 [9] [美]Deitel H M,Deitel P J《Java语言程序设计大全》 北京:机械工业出版社,2001 [10] 杨绍方 《Java编程实用技术与案例》 北京:清华大学出版社,2000 [11] Java技术文档 http://www.java.sun.com

[12] Java技术文档 http://chinajava.home.chinaren.com

[13] JDK1.3开发工具和API帮助文档 http://java.sun.com/products/

24

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务