打字训练测试系统_第1页
打字训练测试系统_第2页
打字训练测试系统_第3页
打字训练测试系统_第4页
打字训练测试系统_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TOC o 1-5 h z第一章打字训练测试系统的概述21.1系统总体设计概述21.2系统功能需求分析2第二章系统设计的主要类和方法32.1API类和系统主类:32.2图形界面设计32.3创建线程42.4文件管理52.5事件监听响应5第三章系统功能设计53.1主窗口界面设计53.2添加文件功能实现93.3设置测试时间设计123.4速度和剩余时间设计143.5显示测试结果15 HYPERLINK l bookmark30 第四章总结16第一章打字训练测试系统的概述1.1系统总体设计概述计算机在20世纪后半期取得了飞速发展,随着网络的发展,已经成为人们日常生活中不可或缺的一部分,如何快速的掌握计算

2、机操作技能显得非常重要,其中打字速度更是衡量一个人操作熟练与否的重要标志,因此开发一种高效的打字程序显得迫在眉睫。目前大多数打字程序都是只能在Windows下运行,跨平台运行能力不是很强。为了适应当下的需求,格外需要一款新的打字程序。我们小组开发的这个用JAVA设计的打字训练测试软件,它的主要功能是从文件中录入一段英文或中文文档,并能给出错误率和平均录入速度。在该文档设计中,为了方便,文档格式设置为txt格式。该软件能实现从磁盘上寻找打开一个文件、实时显示打字速度和剩余时间等功能,应用到GUI,多线程,文件的输入输出等知识。需要从磁盘打开要录入文件的样本,录入时需要实时显示录入速度和剩余时间,

3、录入结束后,显示录入速度和错误率。录入结束方式可以通过点击“结束测试”按钮结束测试,文章录入完成也自动结束录入,到达设置时间也自动结束录入。最后要求图形界面,界面良好美观,主要是为了锻炼一下打字技能,提高打字速度,并能给出错误分析。本系统构建学生打字练习系统,基于所开发的打字程序界面友好,图形复杂。打字练习程序中应用到eclipse最新版本,javal.6以上版本的jdk。对于打字测试进入整体的部署。完成打字练习程序开发,培养程序设计和开发能力。1.2系统功能需求分析要求设计一款打字训练测试程序,实现从磁盘上寻找打开一个文件、设置打字时间、时实显示打字速度和剩余时间等功能,应用到GUI,多线程

4、,文件的输入输出等知识。需要从磁盘打开要录入文件的样本,录入前可以设定录入练习时间,录入时需要实时显示录入速度和剩余时间,录入结束后,显示录入速度和错误率。录入结束方式可以通过点击“结束测试”按钮结束测试,文章录入完成也自动结束录入,到达设置时间也自动结束录入。最后要求图形界面,界面良好美观。根据任务要求主要遇到的问题在于如何很好的监听按键菜单事件,监听部分键盘;如何在打开文件对话框中过滤只显示txt和目录文件,读取文件后如何一部一部地显示并能正确统计录入字数和错误字数;如何在录入文章时,同时监控系统时间,并能尽量减少cpu占用。经过对现有一般打字程序的使用者的调查与分析,得出若要编写此打字程

5、序,本程序必需主要实现的功能如下:1)添加文件。从磁盘添加现有的文本文件显示在程序界面上方。2)设置测试时间。在打字开始前,可以设置测试时间,方便快捷地结束测试。3)显示测试结果。结果主要包括:打字速度和错误率。4)在录入过程中,显示当前速度和剩余时间。为了实时提醒用户打字速度和打字时间可以实时提示打字速度和剩余时间(剩余时间是设置的测试时间减掉已使用的时间).5)使用菜单栏。要求菜单栏可以从“文件打开”添加文件,可以从“文件退出”退出程序,可以从“帮助一关于”了解程序信息。6)多情况结束测试。1.当测试结束时,结束测试。2.当点击“结束测试”按钮结束测试。3当文章录入完成结束测试。主要功能图

6、如图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;publicclassType

7、rpublicstaticvoidmain(Stringargs)TyperProgramtp=newTyperProgram();tp.start();2.2图形界面设计定义setWindow()方法来设计用户界面,整体的JFrame用BorderLayout进行布局分成北中南三个块。其中北边是一个用GridLayout布局的JPanel分成1行2列,两列中分别是一个JTextField;中间是一个GridLayout布局的JPanel分成2行1歹U;南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮。publicvoidsetWindow()JFramejf_title

8、=newJFrame(打字训练测试软件);/创建标题窗口Containercont=jf_title.getContentPane();cont.setLayout(newBorderLayout();Fontfont=newFont(黑体,Font.PLAIN,17);Fontfont_text=newFont(timesnewman,Font.PLAIN,18);/设置字体大小JMenuBarjmb=newJMenuBar();/仓U建菜单条JMenujm_file,jm_help;/创建文件和帮助两个菜单jm_file=newJMenu(文件);jm_file.setFont(font)

9、;jm_help=newJMenu(帮助);jm_help.setFont(font);.2.3创建线程在设计本系统时,由于同时存在多个执行单元,如打字素的显示,打字错误率计算以及剩余时间的统计,它们必须按照不同的执行方式共同工作,所以为了让程序活的更高的性能,提高程序的响应速度及程序的数据吞吐量,我们采用了多线程控制,即首先定义一个主线程TyperProgram,然后再在这个主线程内部定义一个子线程Timer,监听键盘和文本输入用匿名内部类来实现,TyperProgram和Timer用多线程来实现并发运行。当程序运行时TyperProgram的对象先运行,当点击开始按钮时Timer对象开始运

10、行。A创建主线程classTyperProgramextendsThreadimplementsActionListenerJPaneljpc1,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,error

11、Words;doublestartTime;FilegetPath;/获得文件路径BufferedReaderbuf;/定义字符输入流booleanfileOver,lock=true;B创建子线程用Timer类实现Runnable接口从而实现对系统时间监控显示完成录入后的成绩计算。其中监听键盘和文本输入用匿名内部类来实现。putScore()用来结束测试后,统计错误率,并将错误率显示在界面,右上方的JTextField中。privateclassTimerimplementsRunnablepublicvoidputScore()./定义计算错误率方法publicvoiderrcolor()

12、./定义错别字设置显色方法publicvoidrun()./重写run方法2.4文件管理添加打开文件用打开对话框,通过定义readFile函数来获取文件路径,再使用addFile方法及文件过滤器来添加txt文件进行测。publicvoidreadFile()./读取文件publicvoidaddFile()./添加文件2.5事件监听响应我们用setListener()来设置多种监听,如事件监听,键盘监听,文本监听等。其中事件监听由于实现了接口ActionListener,直接添加本类,再于函数actionPerformed()来实现,而其它监听都用的是匿名内部类来实现。很成功地完成了多种监听处

13、理功能。publicbooleanisDigit(Stringstr)./确定指定位置为字符publicvoidsetstart()./设置测试时间publicvoidsetListener()./设置监听publicvoidactionPerformed(ActionEvente)./事件监听接口publicvoidrun().第三章系统功能设计3.1主窗口界面设计窗口为一个添加菜单栏的JFrame,菜单栏包括主要有文件和帮助两个部分,整体的JFrame用BorderLayout进行布局分成北中南三个块。其中北边是一个用GridLayout布局的JPanel分成0行2列,两列分别是一个JTe

14、xtField(当前的速度,剩余时间);中间是一个GridLayout布局的JPanel分成2行1列I,每行分别为一个CardLayout布局的JPanel,其中第一行里放了一个带按钮的JPanel(添加文件)和一个JTextArea,第二行为JTextArea;南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮(开始测试,结束测试),相关代码如下,该界面如图2.4.1所示publicvoidsetWindow()JFramejf=newJFrame(打字训练测试软件);/创建标题窗口Containercon=jf.getContentPane();/声明一个Contain

15、er对象con.setLayout(newBorderLayout();/设置容器的布局方式为BorderLayoutFontfont=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);/创

16、建打开,退出,关于三个菜单项并设置相关热键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.getK

17、eyStroke(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

18、);/在菜单条上添加文件和帮助两个菜单jtf_pace=newJTextField();/仓U建一行显示速度的文本jtf_pace.setFont(font);jtf_pace.setEditable(false);/使显示速度的文本无法编辑jtf_time=newJTextField();/仓U建一行显示时间的文本jtf_time.setFont(font);jtf_time.setEditable(false);/使显示时间的文本无法编辑JPaneljp_show=newJPanel(newGridLayout(1,2);/仓U建一个显示结果的测试栏,并将其布局设置为1行两列jp_show

19、.add(jtf_pace);jp_show.add(jtf_time);/添加速度和时间至U该测试栏con.add(BorderLayout.NORTH,jp_show);/将测试栏置于北面jpg=newJPanel();jpg.setLayout(newGridLayout(2,1);/仓U建GridLayout的布局方式为2行,1列jta_text=newJTextArea();/仓U建显示多行的添加文本jta_type=newJTextArea();/创建显示多行的输入文本jta_text.setFont(font_text);/设置文字字体jta_text.setLineWrap(t

20、rue);/设置为自动换行jta_text.setEditable(false);/使添加的文字无法编辑jtatext.setBackground(newColor(200,255,200);/设置添加文字背景色jta_type.setFont(font_text);/设置输入文本的字体jta_type.setLineWrap(true);jtatype.setBackground(newColor(200,200,255);/设置输入文字背景色jbt_add=newJButton(添加文件);jbt_add.setFont(font);/jbt_add.setActionCommand(打开

21、);/设置jbt_add按钮的激发事件jpb=newJPanel(newCardLayout();/仓U建卡片布局card1=newCardLayout();jpc1=newJPanel(card1);jpc1.add(card1,jpb);jpc1.add(card2,jta_text);JLabeljb=newJLabel(newImageIcon(image/keybord.png);/仓U建一个图片标签card2=newCardLayout();jpc2=newJPanel(card2);jpc2.add(card1,jb);jpc2.add(card2,jta_type);jpg.a

22、dd(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.set

23、ActionCommand(结束);/设置jbt_end按钮的激发事件jp_button.add(jbt_start);jp_button.add(jbt_end);/将该两个按钮添加至Ucon.add(BorderLayout.SOUTH,jp_button);/将该面板设置为南面jf.setBounds(250,100,710,705);/设置整个界面的大小jf.setJMenuBar(jmb);jf.setVisible(true);jbt_add.requestFocus();jf.setResizable(false);/设置窗体不可编辑jf.setDefaultCloseOpera

24、tion(JFrame.EXIT_ON_CLOSE);publicvoidactionPerformed(ActionEvente)StringstrAction=e.getActionCommand();if(strAction=打开&lock)addFile();elseif(strAction=退出)System.exit(1);elseif(strAction=关于)Stringstr=版权所有2012;JOptionPane.showMessageDialog(null,str,JOptionPane.PLAIN_MESSAGE);elseif(strAction=开始&lock)i

25、f(!state.equals(addFile)JOptionPane.showMessageDialog(null,你还没有添加有效文档,提示,JOptionPane.INFORMATION_MESSAGE);elsesetstart();elseif(strAction=结束)if(!state.equals(start)JOptionPane.showMessageDialog(null,你还没有测试,提示,JOptionPane.INFORMATION_MESSAGE);elsestate=over;图3.1起始界面设计3.2添加文件功能实现添加打开文件用打开对话框,并对对话框添加文件

26、过滤器,代码如下,界面如图2.4.2所示publicvoidreadyFile()StringstrFile=;FileReaderin=null;tryStringstrLine=;in=newFileReader(getPath);buf=newBufferedReader(in);strLine=buf.readLine();while(strLine!=null)strFile+=strLine;strLine=buf.readLine();catch(IOExceptione1)el.printStackTrace();strbFile=newStringBuffer(strFile

27、);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+n);publicvoidaddFile()/增加文件的方法JFileChooserfileCh=newJFileChooser();fileCh.setCu

28、rrentDirectory(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();

29、if(!getPath.getPath().toLowerCase().endsWith(.txt)JOptionPane.showMessageDialog(null,请选择文本文档,提示,JOptionPane.INFORMATION_MESSAGE);return;readyFile();readFile();state=addFile;card1.show(jpc1,card2);jbt_add.requestFocus();生活,是一只环子一位教授往一个空杯子里填满石块后,又拿出一盒小鹅卵石倒进那子.并轻轻晃动环子,好让小鹅卵石滚进石块之间的空当,然后教授拿出一盒沙子倒进杯子,晃动那

30、子,使沙子填满所有的缝隙,最后又倒进水,直到水渗透沙子溢出杯沿=I敌完这些教授对学生们说道:“现在,我想让大家把这个杯子理解为生活=里面的石块代表生命中最童要的东西,比如说家庭伴侣健康孩子等,所有这些对我们来说都至关重要,一旦失去将永远无法弥补;鹅卵石代表生命中较为重要的东西,如工作.房子.车等;沙子代表生命中的日常琐事:水带边烦摘.忧郁=如果我们手先把水和沙子装进那子那就没有空间去裟石快和鹅卵石了匚”h二I”H,rnr77!co开始测试结束测试图3.2添加文件界面设计3.3设置测试时间设计录入时间设定用一个对话框实现,并接收输入信息,默认录入测试时间为5分钟,主要代码如下该界面如图2.4.3

31、所示publicvoidsetstart()JPaneljp=newJPanel(newGridLayout(2,0);JLabeljlab=newJLabel(设置测试时间(分):);JTextFieldjtfTime=newJTextField();jtfTime.setText(5);jp.add(jlab);jp.add(jtfTime);intselect=JOptionPane.showConfirmDialog(null,jp,设置,JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);if(select!=JOption

32、Pane.OK_OPTION)return;strTime=jtfTime.getText();if(isDigit(strTime)if(jta_text.getText()!=null)readyFile();readFile();card2.show(jpc2,card2);jta_type.setText(null);jta_type.setEditable(true);jta_type.requestFocus();state=start;lock=false;startTime=System.currentTimeMillis();Timerti=newTimer();Thread

33、t=newThread(ti);t.start();elseJOptionPane.showMessageDialog(null,请输入数字,提示,JOptionPane.INFORMATION_MESSAGE);publicvoidsetListener()/设置监听jmi_open.addActionListener(this);jmi_exit.addActionListener(this);jmi_about.addActionListener(this);jbt_add.addActionListener(this);jbt_start.addActionListener(this)

34、;jbt_end.addActionListener(this);jbt_add.addKeyListener(newKeyListener()publicvoidkeyPressed(KeyEvente1)if(el.getKeyCode()=KeyEvent.VK_ENTER)addFile();publicvoidkeyReleased(KeyEvente2)publicvoidkeyTyped(KeyEvente2);jta_type.getDocument().addDocumentListener(newDocumentListener()publicvoidinsertUpdat

35、e(DocumentEvente1)Stringstr1=jta_text.getText();Stringstr2=jta_type.getText();if(str1.length()=str2.length()&str2.endsWith(n)if(fileOver)state=over;elsewords+=str2.length();for(inti=0;istr2.length();i+)if(str1.charAt(i)!=str2.charAt(i)errorWords+;EventQueue.亡(newRunnable()publicvoidrun()jta_type.set

36、Text(null););readFile();publicvoidchangedUpdate(DocumentEvente2)publicvoidremoveUpdate(DocumentEvente3);图2.4.3设置测试时间3.4速度和剩余时间设计实时显示录入速度和剩余时间通过实现Runnable接口的一个Timer类来计算实现。当开始录入时获取一个系统时间startTime=System.currentTimeMillis()然后每隔一秒获取一个系统时间nowTime=System.currentTimeMillis(),同时统计当前录入的字数count=jta2.getText()

37、.length(),字数除以用两个时间之差得到速度最后单位换算为(字/分);剩余时间等于设置时间减去花费的时间remainTime=setTime-spendTime最后转换为分和秒,代码如下。publicvoidputScore()jta_type.setEditable(false);/设置添加文本不可编辑Stringstr1,str2;/定义两个字符串,分别为从添加文本和输入文本中获取的字符str1=jta_text.getText();str2=jta_type.getText();doubleerror;/定义错误率intk=strl.length()str2.length()?st

38、r2.length()-strl.length():0,l=str1.length()str2.length()?str1.length():str2.length();for(inti=0;il;i+)if(strl.charAt(i)!=str2.charAt(i)/若两个字符串在同一索弓I处的字符不相同,k+;error=(words+l)=0?0:(errorWords+k)*1.0/(words+l)*100;jtf_time.setText(错误率:+Math.ceil(error*100)/100.0+%);errorWords=0;words=0;state=addFile;lock=t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论