打字训练测试系统Word文档下载推荐.docx
- 文档编号:8069693
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:19
- 大小:570.39KB
打字训练测试系统Word文档下载推荐.docx
《打字训练测试系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《打字训练测试系统Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
需要从磁盘打开要录入文件的样本,录入前可以设定录入练习时间,录入时需要实时显示录入速度和剩余时间,录入结束后,显示录入速度和错误率。
最后要求图形界面,界面良好美观。
根据任务要求主要遇到的问题在于如何很好的监听按键菜单事件,监听部分键盘;
如何在打开文件对话框中过滤只显示txt和目录文件,读取文件后如何一部一部地显示并能正确统计录入字数和错误字数;
如何在录入文章时,同时监控系统时间,并能尽量减少cpu占用。
经过对现有一般打字程序的使用者的调查与分析,得出若要编写此打字程序,本程序必需主要实现的功能如下:
1)添加文件。
从磁盘添加现有的文本文件显示在程序界面上方。
2)设置测试时间。
在打字开始前,可以设置测试时间,方便快捷地结束测试。
3)显示测试结果。
结果主要包括:
打字速度和错误率。
4)在录入过程中,显示当前速度和剩余时间。
为了实时提醒用户打字速度和打字时间可以实时提示打字速度和剩余时间(剩余时间是设置的测试时间减掉已使用的时间).
5)使用菜单栏。
要求菜单栏可以从“文件——>
打开”添加文件,可以从“文件——>
退出”退出程序,可以从“帮助——>
关于”了解程序信息。
6)多情况结束测试。
1.当测试结束时,结束测试。
2.当点击“结束测试”按钮结束测试。
3.当文章录入完成结束测试。
主要功能图如图1.1所示
图1.1打字训练功能模块
第二章系统设计的主要类和方法
2.1API类和系统主类
该软件采用JAVA语言编写,运用myeclipse开发环境,程序整体采用一个Typer主类和用一个TyperProgram类完成图形界面的编写和监听响应事件。
当程序运行时调用TyperProgram类,启动线程。
importjava.io.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.filechooser.FileFilter;
publicclassTyper{
publicstaticvoidmain(String[]args){
TyperProgramtp=newTyperProgram();
tp.start();
}
2.2图形界面设计
定义setWindow()方法来设计用户界面,整体的JFrame用BorderLayout进行布局分成北中南三个块。
其中北边是一个用GridLayout布局的JPanel分成1行2列,两列中分别是一个JTextField;
中间是一个GridLayout布局的JPanel分成2行1列;
南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮。
publicvoidsetWindow(){
JFramejf_title=newJFrame("
打字训练测试软件"
);
//创建标题窗口
Containercont=jf_title.getContentPane();
cont.setLayout(newBorderLayout());
Fontfont=newFont("
黑体"
Font.PLAIN,17);
Fontfont_text=newFont("
timesnewman"
Font.PLAIN,18);
//设置字体大小
JMenuBarjmb=newJMenuBar();
//创建菜单条
JMenujm_file,jm_help;
//创建文件和帮助两个菜单
jm_file=newJMenu("
文件"
jm_file.setFont(font);
jm_help=newJMenu("
帮助"
jm_help.setFont(font);
.......}
2.3创建线程
在设计本系统时,由于同时存在多个执行单元,如打字素的显示,打字错误率计算以及剩余时间的统计,它们必须按照不同的执行方式共同工作,所以为了让程序活的更高的性能,提高程序的响应速度及程序的数据吞吐量,我们采用了多线程控制,即首先定义一个主线程TyperProgram,然后再在这个主线程内部定义一个子线程Timer,监听键盘和文本输入用匿名内部类来实现,TyperProgram和Timer用多线程来实现并发运行。
当程序运行时TyperProgram的对象先运行,当点击开始按钮时Timer对象开始运行。
A.创建主线程
classTyperProgramextendsThreadimplementsActionListener{
JPaneljpc1,jpc2,jpg,jp_button,jpb;
JMenuItemjmi_open,jmi_exit,jmi_about;
JTextFieldjtf_pace,jtf_time;
JTextAreajta_text,jta_type;
JButtonjbt_add,jbt_start,jbt_end;
CardLayoutcard1,card2;
Stringstate="
"
strTime="
;
StringBufferstrbFile;
intwords,errorWords;
doublestartTime;
FilegetPath;
//获得文件路径
BufferedReaderbuf;
//定义字符输入流
booleanfileOver,lock=true;
………………}
B.创建子线程
用Timer类实现Runnable接口从而实现对系统时间监控显示完成录入后的成绩计算。
其中监听键盘和文本输入用匿名内部类来实现。
putScore()用来结束测试后,统计错误率,并将错误率显示在界面,右上方的JTextField中。
privateclassTimerimplementsRunnable{
publicvoidputScore(){…}//定义计算错误率方法
publicvoiderrcolor(){…}//定义错别字设置显色方法
publicvoidrun(){…}//重写run方法
2.4文件管理
添加打开文件用打开对话框,通过定义readFile函数来获取文件路径,再使用addFile方法及文件过滤器来添加txt文件进行测。
。
publicvoidreadFile(){…}//读取文件
publicvoidaddFile(){…}//添加文件
2.5事件监听响应
我们用setListener()来设置多种监听,如事件监听,键盘监听,文本监听等。
其中事件监听由于实现了接口ActionListener,直接添加本类,再于函数actionPerformed()来实现,而其它监听都用的是匿名内部类来实现。
很成功地完成了多种监听处理功能。
publicbooleanisDigit(Stringstr){…}//确定指定位置为字符
publicvoidsetstart(){…}//设置测试时间
publicvoidsetListener(){…}//设置监听
publicvoidactionPerformed(ActionEvente){…}//事件监听接口
publicvoidrun(){…
}
第三章系统功能设计
3.1主窗口界面设计
窗口为一个添加菜单栏的JFrame,菜单栏包括主要有文件和帮助两个部分,整体的JFrame用BorderLayout进行布局分成北中南三个块。
其中北边是一个用GridLayout布局的JPanel分成0行2列,两列分别是一个JTextField(当前的速度,剩余时间);
中间是一个GridLayout布局的JPanel分成2行1列,每行分别为一个CardLayout布局的JPanel,其中第一行里放了一个带按钮的JPanel(添加文件)和一个JTextArea,第二行为JTextArea;
南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮(开始测试,结束测试),相关代码如下,该界面如图2.4.1所示
publicvoidsetWindow(){
JFramejf=newJFrame("
Containercon=jf.getContentPane();
//声明一个Container对象
con.setLayout(newBorderLayout());
//设置容器的布局方式为
BorderLayout
//设置字体大小
//创建文件和帮助两个菜单并设置字体
//创建打开,退出,关于三个菜单项并设置相关热键
jmi_open=newJMenuItem("
打开"
jmi_open.setFont(font);
jmi_open.setActionCommand("
jmi_open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
jmi_exit=newJMenuItem("
退出"
jmi_exit.setFont(font);
jmi_exit.setActionCommand("
jmi_exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
jmi_about=newJMenuItem("
关于"
jmi_about.setFont(font);
jmi_about.setActionCommand("
jm_file.add(jmi_open);
//在文件菜单上添加打开菜单项
jm_file.addSeparator();
//菜单项之间的分界线
jm_file.add(jmi_exit);
//在文件菜单添加退出菜单项
jm_help.add(jmi_about);
//在帮助菜单上添加关于菜单项
jmb.add(jm_file);
jmb.add(jm_help);
//在菜单条上添加文件和帮助两个菜
单
jtf_pace=newJTextField();
//创建一行显示速度的文本
jtf_pace.setFont(font);
jtf_pace.setEditable(false);
//使显示速度的文本无法编辑
jtf_time=newJTextField();
//创建一行显示时间的文本
jtf_time.setFont(font);
jtf_time.setEditable(false);
//使显示时间的文本无法编辑
JPaneljp_show=newJPanel(newGridLayout(1,2));
//创建一个显示结果的测试栏,并将其布局设置为1行两列
jp_show.add(jtf_pace);
jp_show.add(jtf_time);
//添加速度和时间到该测试栏
con.add(BorderLayout.NORTH,jp_show);
//将测试栏置于北面
jpg=newJPanel();
jpg.setLayout(newGridLayout(2,1));
//创建GridLayout的布局方式为2行,1列
jta_text=newJTextArea();
//创建显示多行的添加文本
jta_type=newJTextArea();
//创建显示多行的输入文本
jta_text.setFont(font_text);
//设置文字字体
jta_text.setLineWrap(true);
//设置为自动换行
jta_text.setEditable(false);
//使添加的文字无法编辑
jta_text.setBackground(newColor(200,255,200));
//设置添加文字背景色
jta_type.setFont(font_text);
///设置输入文本的字体
jta_type.setLineWrap(true);
jta_type.setBackground(newColor(200,200,255));
//设置输入文字背景色
jbt_add=newJButton("
添加文件"
jbt_add.setFont(font);
//
jbt_add.setActionCommand("
//设置jbt_add按钮的激发事件
jpb=newJPanel(newCardLayout());
//创建卡片布局
card1=newCardLayout();
jpc1=newJPanel(card1);
jpc1.add("
card1"
jpb);
jpc1.add("
card2"
jta_text);
JLabeljb=newJLabel(newImageIcon("
image/keybord.png"
));
//创建一个图片标签
card2=newCardLayout();
jpc2=newJPanel(card2);
jpc2.add("
jb);
jta_type);
jpg.add(jpc1);
jpg.add(jpc2);
con.add(BorderLayout.CENTER,jpg);
jp_button=newJPanel();
jp_button.setLayout(newFlowLayout(FlowLayout.CENTER,50,0));
//设置该JPanel为流布局,使放置的组件居中,行高为50个单位
jbt_start=newJButton("
开始测试"
jbt_start.setFont(font);
jbt_start.setActionCommand("
开始"
jbt_end=newJButton("
结束测试"
jbt_end.setFont(font);
jbt_end.setActionCommand("
结束"
//设置jbt_end按钮的激发事件
jp_button.add(jbt_start);
jp_button.add(jbt_end);
//将该两个按钮添加到
con.add(BorderLayout.SOUTH,jp_button);
//将该面板设置为南面
jf.setBounds(250,100,710,705);
//设置整个界面的大小
jf.setJMenuBar(jmb);
jf.setVisible(true);
jbt_add.requestFocus();
jf.setResizable(false);
//设置窗体不可编辑
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
publicvoidactionPerformed(ActionEvente){
StringstrAction=e.getActionCommand();
if(strAction=="
&
lock){
addFile();
}
elseif(strAction=="
){
System.exit
(1);
Stringstr="
版权所有2012"
JOptionPane.showMessageDialog(null,str,"
JOptionPane.PLAIN_MESSAGE);
if(!
state.equals("
addFile"
))
JOptionPane.showMessageDialog(null,"
你还没有添加有效文档"
"
提示"
JOptionPane.INFORMATION_MESSAGE);
else
setstart();
start"
你还没有测试"
state="
over"
图3.1起始界面设计
3.2添加文件功能实现
添加打开文件用打开对话框,并对对话框添加文件过滤器,代码如下,界面如图2.4.2所示
publicvoidreadyFile(){
StringstrFile="
FileReaderin=null;
try{
StringstrLine="
in=newFileReader(getPath);
buf=newBufferedReader(in);
strLine=buf.readLine();
while(strLine!
=null){
strFile+=strLine;
strLine=buf.readLine();
}
}catch(IOExceptione1){
e1.printStackTrace();
strbFile=newStringBuffer(strFile);
fileOver=false;
publicvoidreadFile(){
StringstrPart="
intn=320;
if(strbFile.length()<
=n){
jta_text.setText(strbFile+"
\n"
fileOver=true;
return;
strPart=strbFile.substring(0,n);
strbFile=strbFile.delete(0,n);
jta_text.setText(strPart+"
publicvoidaddFile(){//增加文件的方法
JFileChooserfileCh=newJFileChooser();
fileCh.setCurrentDirectory(newFile("
files"
fileCh.setFileFilter(newFileFilter(){
publicbooleanaccept(Filef){
returnf.getName().toLowerCase().endsWith("
.txt"
)||f.isDirectory();
publicStringgetDescription(){
return"
文本文档*.txt*"
});
if(fileCh.showOpenDialog(null)==JFileChooser.CANCEL_OPTION)return;
getPath=fileCh.getSelectedFile();
if(!
getPath.getPath().toLowerCase().endsWith("
)){
JOptionPane.showMessageDialog(null,"
请选择文本文档"
readyFile();
readFile();
state="
card1.show(jpc1,"
jbt_ad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打字 训练 测试 系统