java课程设计记忆系统报告.docx
《java课程设计记忆系统报告.docx》由会员分享,可在线阅读,更多相关《java课程设计记忆系统报告.docx(42页珍藏版)》请在冰豆网上搜索。
java课程设计记忆系统报告
软件学院
课程设计报告书
课程名称面向对象程序设计
设计题目记忆测试系统
专业班级软件工程(财升本)11-1班
学号1120970108
姓名李春晓
指导教师徐娇月
2011年12月
成绩评定34
1设计时间:
2011年12月19~2011年12月25日
2设计目的:
此次设计课程的目的在于加深对Java基础理论和基础知识的理解,而进行的一次全面的综合训练。
掌握使用java进行软件设计的基本方法,提高运用java(MyEclipse软件)解决实际问题的能力,课程设计是对所学面向对象课程的小结,是提高学对所学知识综合应用能力的一种方式,是集中实践性环节之一。
从而进一步掌握Java语言程序设计方法,提高分析问题、解决问题的综合应用能力。
3设计任务
记忆测试系统通过回忆法测试记忆,分为初级、中级、高级、和自定义四个级别,并通过记忆榜存储每个级别的成绩。
4设计内容
4.1需求分析
4.1.1设计目标
(1)菜单栏包括“选择级别”、“查看排行榜”、“帮助”三项。
其中“选择级别”,包括“初级”、“中级”、“高级”、“自定义级别”,可以分别开始初级中级高级和自定义测试。
“查看排行榜”包括“初级排行榜”、“中级排行榜”、“高级排行榜”,可以打开查看相应级别排行榜对话框;“帮助”又包括“新手入门”,显示系统使用方式。
(2)测试面板可以装载按钮阵列,用来显示图片,并且记录统计图片信息,如果相同图片数量达到要求时,弹出记录用户信息对话框,记录用户信息。
(3)还有实时显示“你所用的时间:
”和提示相应级别测试信息
4.1.2主体功能
1.单击“选择级别”菜单可以选择初级/中级/高级/自定义级别,单击“查看排行榜”菜,可以查看初级记忆榜、中级记忆榜或高级记忆榜。
单击“帮助”菜单可以显示帮助信息。
2.选择级别后,将显示相应级别的测试区域。
测试区域由若干个方块组成,每个方块上都有一个图标,但该图标默认情况下不可见。
用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。
对于初级级别,用户必须用鼠标连续单击6个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出n(n<6)个图标相同的方块,单击另一个方块时,如果该方块的图标和上一个相同,那么该方块的图标和前n次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见。
3.连续单击出该级别所要求的若干个图标形同的方块后,将显示保存成绩对话框,成绩按所用时间排序。
用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。
4.1.3开发环境
MyEclipse8.6软件
4.2系统设计
4.2.1系统的功能模块划分
记忆测试系统共包含8个java源文件和若干个图像文件(用户可以增加)。
类之间的主要关系如下图所示。
类之间的关系
(1).java文件
Memory.java
该java文件定义的类负责创建记忆测试系统的“主窗口”。
该文件含有main方法,程序从该类开始执行。
用户可以通过主窗口菜单选择级别,然后窗口内显示相应的MemoryTestPane对象。
主窗口默认的MemoryTestPane对象是初级。
Memory.Java
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.LinkedList;
publicclassMemoryextendsJFrameimplementsActionListener//主类,实现ActionListener接口
{
JMenuBarbar;
JMenufileMenu;
JMenuhelpMenu;
JMenugradeMenu;
JMenuItem初级,中级,高级,初级排行榜,中级排行榜,高级排行榜,关于;
JMenuItem自定义级别;
Blockblock[];
ImageIconicon[];
MemoryTestPane记忆测试板=null;
Filefile初级=newFile("初级记忆排行榜.txt"),
file中级=newFile("中级记忆排行榜.txt"),
file高级=newFile("高级记忆排行榜.txt");
LinkedList成绩表=null;
ShowRecord显示成绩表对话框=null;
ShowHelp显示帮助文档=null;
intm=5,n=6;
int图标个数=0;
Containercon=null;
JTextField提示条=null;
FilegradeFile=null;
publicMemory()
{
block=newBlock[m*n];
图标个数=m;
icon=newImageIcon[图标个数];
for(inti=0;iicon[i]=newImageIcon("a"+i+".png");
}
for(inti=0;iblock[i]=newBlock();
block[i].设置关闭时的图标(newImageIcon("关闭.png"));
}
bar=newJMenuBar();
fileMenu=newJMenu("查看排行榜");
helpMenu=newJMenu("帮助");
gradeMenu=newJMenu("选择级别");
关于=newJMenuItem("新手入门");
初级=newJMenuItem("初级");
中级=newJMenuItem("中级");
高级=newJMenuItem("高级");
自定义级别=newJMenuItem("自定义级别");
helpMenu.setMnemonic('H');//键盘助记符号
fileMenu.setMnemonic('F');
gradeMenu.setMnemonic('X');
关于.setMnemonic('C');
初级.setMnemonic('B');
中级.setMnemonic('M');
高级.setMnemonic('A');
自定义级别.setMnemonic('D');
高级排行榜=newJMenuItem("高级排行榜");
中级排行榜=newJMenuItem("中级排行榜");
初级排行榜=newJMenuItem("初级排行榜");
初级排行榜.setMnemonic('O');
中级排行榜.setMnemonic('N');
高级排行榜.setMnemonic('L');
gradeMenu.add(初级);//将单个菜单项添加到菜单组中
gradeMenu.addSeparator();//分隔线
gradeMenu.add(中级);
gradeMenu.addSeparator();//分隔线
gradeMenu.add(高级);
gradeMenu.addSeparator();//分隔线
gradeMenu.add(自定义级别);
helpMenu.add(关于);
fileMenu.add(初级排行榜);
fileMenu.addSeparator();//分隔线
fileMenu.add(中级排行榜);
fileMenu.addSeparator();//分隔线
fileMenu.add(高级排行榜);
bar.add(gradeMenu);
bar.add(fileMenu);
bar.add(helpMenu);
setJMenuBar(bar);
关于.addActionListener(this);//对每个菜单项注册监听器,并且大量使用了动作监听器(ActionListener)。
初级.addActionListener(this);//ActionListener只监听一个事件,
中级.addActionListener(this);//这个事件在其相关组件上产生了动作时被触发,
高级.addActionListener(this);//因此叫作动作事件(ActionEvent)。
自定义级别.addActionListener(this);//ActionListener只有一个方法需要实现,
初级排行榜.addActionListener(this);//就是actionPerformed(ActionEventae)。
中级排行榜.addActionListener(this);
高级排行榜.addActionListener(this);
成绩表=newLinkedList();
if(!
file初级.exists()){
try{
FileOutputStreamout=newFileOutputStream("初级记忆排行榜.txt");
ObjectOutputStreamobject_out=newObjectOutputStream(out);
object_out.writeObject(成绩表);
object_out.close();
out.close();
}catch(IOExceptione){
}
}
if(!
file中级.exists()){
try{
FileOutputStreamout=newFileOutputStream("中级记忆排行榜.txt");
ObjectOutputStreamobject_out=newObjectOutputStream(out);
object_out.writeObject(成绩表);
object_out.close();
out.close();
}catch(IOExceptione){
}
}
if(!
file高级.exists()){
try{
FileOutputStreamout=newFileOutputStream("高级记忆排行榜.txt");
ObjectOutputStreamobject_out=newObjectOutputStream(out);
object_out.writeObject(成绩表);
object_out.close();
out.close();
}catch(IOExceptione){
}
}
gradeFile=file初级;
setBounds(100,100,350,350);
setVisible(true);
addWindowListener(newWindowAdapter()//使得单击关闭时结束应用程序
{
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
con=getContentPane();
记忆测试板=newMemoryTestPane(block,icon,m,n,gradeFile);
提示条=newJTextField("初级:
您需要连续找出"+6+"个相同图标的方块");
提示条.setEditable(false);
提示条.setForeground(Color.red);
con.add(记忆测试板,BorderLayout.CENTER);
con.add(提示条,BorderLayout.SOUTH);
con.validate();
this.validate();
}
publicvoid给出级别测试(int宽,int高,Filef){
m=宽;
n=高;
图标个数=m;
gradeFile=f;
block=newBlock[m*n];
icon=newImageIcon[图标个数];
for(inti=0;iicon[i]=newImageIcon("a"+i+".png");
}
for(inti=0;iblock[i]=newBlock();
block[i].设置关闭时的图标(newImageIcon("关闭.png"));
}
记忆测试板=newMemoryTestPane(block,icon,m,n,gradeFile);
con.removeAll();
con.add(记忆测试板,BorderLayout.CENTER);
con.add(提示条,BorderLayout.SOUTH);
con.validate();
this.validate();
}
publicvoid给出级别测试(int宽,int高)//为自定义级别而写重写了publicvoid给出级别测试(int宽,int高,Filef)方法
{//由于不需要排行榜文件所以把第三个File类型参数除去
m=宽;
n=高;
图标个数=m;
block=newBlock[m*n];
icon=newImageIcon[图标个数];
for(inti=0;iicon[i]=newImageIcon("a"+i+".png");
}
for(inti=0;iblock[i]=newBlock();
block[i].设置关闭时的图标(newImageIcon("关闭.png"));
}
记忆测试板=newMemoryTestPane(block,icon,m,n);
con.removeAll();
con.add(记忆测试板,BorderLayout.CENTER);
con.add(提示条,BorderLayout.SOUTH);
con.validate();
this.validate();
}
publicvoidactionPerformed(ActionEventevent){
if(event.getSource()==初级){
给出级别测试(5,6,file初级);
setBounds(100,100,350,350);
this.validate();
提示条.setText("初级:
您需要连续找出"+6+"个相同图标的方块");
}
if(event.getSource()==中级){
给出级别测试(6,7,file中级);
setBounds(100,100,390,390);
this.validate();
提示条.setText("中级:
您需要连续找出"+7+"个相同图标的方块");
}
if(event.getSource()==高级){
给出级别测试(7,8,file高级);
setBounds(100,100,440,460);
this.validate();
提示条.setText("高级:
您需要连续找出"+8+"个相同图标的方块");
}
if(event.getSource()==自定义级别){
try{
intx,y;
Stringinput=JOptionPane.showInputDialog("请输入矩形的高(小于等于14):
");
intk=Integer.parseInt(input);
x=(k-1)*20+350;
Stringwidth=JOptionPane.showInputDialog("请输入连续找出相同图标的个数:
");
intw=Integer.parseInt(width);
y=(w-1)*20+350;
给出级别测试(k,w);
setBounds(100,100,x,y);
this.validate();
提示条.setText("初级:
您需要连续找出"+w+"个相同图标的方块");
}catch(NumberFormatExceptione){
JOptionPane.showMessageDialog(null,"你输入的格式不对","警告",JOptionPane.ERROR_MESSAGE);
}
}
if(event.getSource()==高级排行榜){
显示成绩表对话框=newShowRecord(this,file高级);
显示成绩表对话框.setVisible(true);
}
if(event.getSource()==中级排行榜){
显示成绩表对话框=newShowRecord(this,file中级);
显示成绩表对话框.setVisible(true);
}
if(event.getSource()==初级排行榜){
显示成绩表对话框=newShowRecord(this,file初级);
显示成绩表对话框.setVisible(true);
}
if(event.getSource()==关于){
显示帮助文档=newShowHelp();
显示帮助文档.setVisible(true);
}
}
publicstaticvoidmain(Stringargs[]){
newMemory();
}
}
Block.java
该文件生成的类负责创建测试区中的Block对象。
使用鼠标左键单击Block对象,可以显示该对象上的图标。
Block.java
importjavax.swing.*;
importjava.awt.event.*;
publicclassBlockextendsJButtonimplementsActionListener{
ImageIcon翻开时的图标=null,关闭时的图标=null;
publicBlock(){
addActionListener(this);
}
publicImageIcon获取翻开时的图标(){
return翻开时的图标;
}
publicImageIcon获取关闭时的图标(){
return关闭时的图标;
}
publicvoid设置翻开时的图标(ImageIconicon){
翻开时的图标=icon;
}
publicvoid设置关闭时的图标(ImageIconicon){
关闭时的图标=icon;
}
publicvoid设置图标(ImageIconicon){
setIcon(icon);
}
publicvoidactionPerformed(ActionEvente){
this.setIcon(翻开时的图标);
}
}
MemoryTestPane.java
该文件生成的类负责为主类Memory创建MemoryTestPane对象,主类将级别、Block对象、图标对象等传递给MemoryTestPane。
MemoryTestPane.java
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.util.LinkedList;
importjava.io.*;
publicclassMemoryTestPaneextendsJPanelimplementsActionListener{
RandomSetIcon排列图标=null;
Blockblock[];
ImageIconicon[];
LinkedListlistIocn=null,
listBlock=null;
int行数=0,列数=0;
intsuccess=0;
inttime=0;
javax.swing.Timer计时器=null;
JTextField显示时间=null;
FilegradeFile=null;
boolean计时器是否启动=false;
publicMemoryTestPane(Block[]block,ImageIcon[]icon,intm,intn,Filef){
排列图标=newRandomSetIcon();
this.block=block;
this.icon=icon;
行数=m;
列数=n;
gradeFile=f;
listIocn=newLinkedList();
listBlock=newLinkedList();
setLayout(newBorderLayout());
JPanelcenter=newJPanel();
center.setLayout(newGridLayout(行数,列数));
for(inti=0;icenter.add(block[i]);
block[i].addActionListener(this);
}
JPanelsouth=newJPanel();
显示时间=newJTextField(12);
显示时间.setEditable(false);
显示时间.setForeground(Color.red);
south.add(显示时间);
add(center,BorderLayout.CENTER);
add(south,Bor