课程
(
)
目 名 称 记忆测试系统
课 程 名 称 专业课程设计Ⅲ
学 生 姓 名
学 号
系 、专 业 信息工程系、计算机科学与技术
指 导 教 师
2013年 11 月 2 日
目 录
1 前言 1
2 需求分析 1
2.1 任务和要求 1
2.2 运行环境 2
2.3 开发工具 2
3 分析和设计 2
3.1 系统分析及设计思路 2
3.2 主要类图 3
3.3
流程图 4
4 具体代码实现 6
5 课程设计总结 21
5.1 程序运行结果或预期运行结果 21
5.2 设计结论 25
参考文献 26
致 谢 26
1前言
伴随着社会科学技术的飞速发展,信息化时代也以闪电般的速度呈现在我们的面前,所以,计算机的发展更以其惊人的速度在发展着,生活中有许多复杂的问题都需要用计算机去解决,从而产生了新的思想,Java语言就是一种伴随着社会息技术的飞速发展而发展起来的强有力的计算机编程语言,它能够透彻地反映人们的思想,巧妙而充分地使计算机本身特性发挥到极致,便于编程人员根据社会的需要,灵活地编制出高级语言程序来实现生活和工作中的各种复杂程序。
在当今众多的计算机程序设计语言中,面向对象技术正逐步替代传统的面向过程的程序设计技术,成为目前软件的主流开发方向,Java语言以它独到的面向对象特性在各类编程语言中脱颖而出,Java语言的快速发展与广泛应用有目共睹。Java语言是计算机能提供的最快而又最有效的语言,也是能够利用计算机所有硬件特性的编程语言。在当今信息高速发展的社会,Java语言越来越实用,可以通过Java实现更高更快的应用需求,Java语言将成为应用程序的开发和建设的核心技术,它能够有效地提高计算机性能和应用场合,满足各种用户的应用需求。
本论文主要介绍了《记忆测试系统》的相关使用方法,以及程序中应用到的相关技术和方法。本论文包括需求分析、系统功能介绍和系统功能实现三个主要部分。
2 需求分析
2.1任务和要求
通过专业课程设计Ⅲ,还有根据团队合作的内容,我们做了相应的自主练习,笑话了课堂所解的内容,通过调试典型例题或习题积累调试JAVA程序的经验。逐渐培养了我们的编程能力,并且有助于培养学生综合运用数据库相关知识解决实际问题的能力。本设计要求对实际问题进行需求分析,提炼实际问题中的数据,建立关系模型,并在大型数据库中得以实现。同时要求对数据库的运营、管理及使用上进行必要的规划和实现。
(1)根据需求,建立ER模型。通过ER图表示。
(2)预计每个表的大致容量和增长速度。指定备份的方案,写出相关的备份命令。
(3)从安全的角度出发,规划系统的角色、用户、权限,并通过相关的SQL实现。
(4)从数据更新或修改的角度出发,设计至少1个存储过程。
(5)以上所有命令及脚本均需测试,在设计报告中说明其功能并记录其输出。
(6)针对常用的业务,创建包,同时实现一个函数放入包中。
(7)从实际查询应用出发,为一些主要的应用模块设计至少3个参数化视图。
(8)在此基础上,设计物理表结构,编写创建数据库表的语句。较高要求为在设计创建数据表语句的同时考虑性能上的要求,采用相关的磁盘存储技术。
(9)从数据检验的角度出发,为相关的表建立至少1个触发器
2.2运行环境
(1)WINDOWS2000/XP系统
(2)editplus 或eclipse
2.3开发工具
JAVA
3分析和设计
3.1系统分析及设计思路
结束
Thread
选择级别后,将显示相应级别的测试区域。测试区域由若干个方块组成,每个方块都有一个图标,但该图标默认情况下不可见。用鼠标单击测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。对于初级级别,用户必须用鼠标连续单击出6个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出n(n<6)个图标相同的方块,单击另一个房块时,如果该方块的图标和上一个相同,那么该方块的图标和前n 次单击出的方块的图标仍然可见,否则,前n次单击出的方块的图标都变为不可见。连续单击出该级别所要求的若干个图彪相同的方块后,将显示保存成绩对话框,成绩按所用时间排序。用户可以通过该对话框选择是否将自己的成绩保存到成绩表中。
3.2主要类图
MemoryGame
actionPerformed()
main()
Block 类
getOpenStateIcon()
setOpenStateIcon()
Record类
setGradeFile()
setTime()
actionPerformed()
ShowRecordDialog 类
setGradeFile()
showRecord()
actionPerformed()
ShowRecord类
setGradeFile()
showRecord()
actionPerformed()
MemoryTestArea类
initBlock()
setImageName()
actionPerformed()
run()
People类
getTime()
getName()
compareTo()
3.3函数流程图
4具体代码实现
//主类MemoryGame
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("高级");
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();
}
catch(IOException exp){}
}
setBounds(100,100,400,360);
setVisible(true);
memoryArea=new MemoryTestArea();
imageName=new String[imageNumber];
for(int i=0;i
allBlockList;
String imageFileName[];
LinkedList openIconList;
LinkedList openBlockList;
int success=0;
Thread hintThead;
JButton hintButton;
int usedTime=0;
JTextField showUsedTime,hintMessage;
javax.swing.Timer timer;
Record record;
JPanel center,south;
MemoryTestArea(){
setLayout(new BorderLayout());
allBlockList=new ArrayList();
openIconList=new LinkedList();
openBlockList=new LinkedList();
hintThead=new Thread(this);
hintMessage=new JTextField();
hintMessage.setHorizontalAlignment(JTextField.CENTER);
hintMessage.setEditable(false);
hintMessage.setFont(new Font("宋体",Font.BOLD,18));
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);
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;i 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);
}
}
}
//ShowRecordDialog 类
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);
showArea.setFont(new Font("楷体",Font.BOLD,20));
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(readPosition 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();
f.createNewFile();
showArea.setText("排行榜被清空");
}
catch(Exception ee){}
}
}
}
//ShowRecord类
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;
JButton clear;
JTextArea showArea=null;
People people;
TreeSet treeSet;
public ShowRecord(File f){
treeSet=new TreeSet();
showArea=new JTextArea(6,4);
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(){
try{
RandomAccessFile in=new RandomAccessFile(gradeFile,"rw");
String name=null;
while((name=in.readUTF())!=null){
int time=in.readInt();
people =new People(name,time);
treeSet.add(people);
}
Iterator iter=treeSet.iterator();
while(iter.hasNext()){
People p=iter.next();
showArea.append("姓名:"+p.getName()+"成绩: "+p.getTime());
showArea.append("\n");
}
}
catch(IOException exp){}
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==clear){
try{
File f=gradeFile.getAbsoluteFile();
gradeFile.delete();
f.createNewFile();
showArea.setText("排行榜被清空");
}
catch(Exception ee){}
}
}
}
//People类
import java.io.*;
public class People implements Serializable,Comparable{
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){
People p=(People)b;
if((this.time-p.time)==0)
return 1;
else
return (this.time-p.time);
}
}
5课程设计总结
5.1程序运行结果或预期运行结果
调试运行初级模式,执行过程如下所示:
1)运行记忆测试系统程序,如下图:
2)记忆系统界面显示,按要求连续找出6个相同图标的方法,成功后,输入保存玩家姓名,如下图:
3)点击“查看排行榜”,选择“初级”,宣示出成绩,如下图:
4)如果选择“中级”,则如下图所示:
5)如果选择高级,则如下图:
6)在图标选择中还可以选择运动类的标,如下图:
5.2设计结论
通过两个周对Java程序设计的学习,我们对Java语言有了更进一步的了解,知道了如何运用以前学过的知识来完成本次课程设计。我们小组选择了《记忆测试系统》的设计,主要实现记忆力的测试,主要分为初级记忆力的测试、中级记忆力的测试和高级记忆力的测试等功能。选择这个题目时感觉有点困难,好像无从下手,基本上没有一个具体的设计思路,因此我们先对小组成员进行分工,明确好各自的主要任务,然后分头查阅资料,上网搜索相关线索,每个人的工作做好之后,再由组长用一个主函数连接起来,进行整个程序的调试运行,最后,我们也顺利的完成了《记忆测试系统》的设计,并且得到了同学们的认可和喜爱。
对于整个程序的流程构架、主界面的布局、数据的保存和清除等,开始时我们并没有十足的把握,但是因为之前我们在图馆查阅了很多的资料,也上网搜索了很多这方面的解决方案方法,在课程设计的第一个星期里我们就顺利地把代码组织并编写好了。在连接所有的类的时候遇到了一点问题,不过在老师的指导,我们都把它解决了。在课程设计的前一个周,我们就把整个程序顺利地运行出来了,心里感到无比的兴奋与激动。在这个过程中我们运用了我们平时所学的知识,查阅了大量的资料。在其中,我们得到了意志的锻炼,在反复的操作中我们不断成长,在收获成功的同时,我们更得到了Java上机编程的深切体会和丰厚的编程经验。
参考文献
耿祥义. Java课程设计(第三版)[M] . 北京:清华大学出版社, 2004
张跃平.Java2实用教程实验指导与习题解答(第三版)[M]. 北京:清华大学出版社, 2004
致 谢
在这次课程设计的撰写过程中,我得到了许多人的帮助。首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做毕业设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。