电脑用手机上网-小米手机助手官方下载

电脑打字软件
2023年4月2日发(作者:nt authority system)

打字训练软件

《Java语言程序设计》课程设计

课设题目:打字训练测试软件

院系:计算机科学与技术学院

专业:物联网

学生姓名:宋杰学号:123921041

学生姓名:王鹏学号:123921042

学生姓名:于渊学号:123921043

指导教师:段善荣

2014年12月

1

打字训练测试软件

1、打字训练测试软件的概述

1.1背景与意义

计算机在20世纪后半期取得了飞速发展,随着网络

的发展,已经成为人们日常生活中不可或缺的一部分,

如何快速的掌握计算机操作技能显得非常重要,其中打

字速度更是衡量一个人操作熟练与否的重要标志,因此

开发一种高效的打字程序显得迫在眉睫。目前大多数打

字程序都是只能在Windows下运行,跨平台运行能力不

是很强。为了适应当下的需求,格外需要一款新的打字

程序。我们小组开发的这个用JAVA设计的打字训练测

试软件,它的主要功能是从文件中录入一段英文或中文

文档,并能给出错误率和平均录入速度。在该文档设计

中,为了方便,文档格式设置为txt格式。该软件能实

现从磁盘上寻找打开一个文件、实时显示打字速度和剩

余时间等功能,应用到GUI,多线程,文件的输入输出

等知识。需要从磁盘打开要录入文件的样本,录入时需

要实时显示录入速度和剩余时间,录入结束后,显示录

入速度和错误率。录入结束方式可以通过点击“结束测

试”按钮结束测试,文章录入完成也自动结束录入,到

达设置时间也自动结束录入。最后要求图形界面,界面

2

良好美观,主要是为了锻炼一下打字技能,提高打字速

度,并能给出错误分析。

2、打字训练测试软件的设计思路

2.1系统主要功能

本程序必需主要实现的功能如下:

1)添加文件。从磁盘添加现有的文本文件显示在程序界

面上方。

2)设置测试时间。在打字开始前,可以设置测试时间,

方便快捷地结束测试。

3)显示测试结果。结果主要包括:打字速度和错误率。

4)在录入过程中,显示当前速度和剩余时间。为了实时

提醒用户打字速度和打字时间可以实时提示打字速度

和剩余时间(剩余时间是设置的测试时间减掉已使用

的时间).

5)使用菜单栏。要求菜单栏可以从“文件——>打开”添

加文件,可以从“文件——>退出”退出程序,可以从

“帮助——>关于”了解程序信息。

6)多情况结束测试。1.当测试结束时,结束测试。2.当点

击“结束测试”按钮结束测试。3.当文章录入完成结

束测试。

3

2.2系统主要流程图

打字训练功能模块

退

3、打字训练测试软件的功能模块

3.1主窗口界面设计

窗口为一个添加菜单栏的JFrame,菜单栏包括主

要有文件和帮助两个部分,整体的JFrame用

BorderLayout进行布局分成北中南三个块。其中北边是

一个用GridLayout布局的JPanel分成0行2列,两列

分别是一个JTextField(当前的速度,剩余时间);中间是

一个GridLayout布局的JPanel分成2行1列,每行分

别为一个CardLayout布局的JPanel,其中第一行里放

了一个带按钮的JPanel(添加文件)和一个JTextArea,第

4

二行为JTextArea;南边是一个FlowLayout布局的

JPanel,里面放两个居中的按钮(开始测试,结束测试),

相关代码如下,该界面如图3.1所示

publicvoidsetWindow(){

JFramejf=newJFrame("英文打字测试");

Containercont=tentPane();

out(newBorderLayout());

Fontft=newFont("新新字体",,20);

JMenuBarjmb=newJMenuBar();

JMenujm,jmHelp;

jm=newJMenu("文件");

jmHelp=newJMenu("帮助");

jmi=newJMenuItem("打开");ionCommand("打开");

elerator(Stroke(_O,

RL_MASK));

jmiExit=newJMenuItem("退出");ionCommand("退出");

jmiAbout=newJMenuItem("关于");ionCommand("关于");

(jmi);arator();(jmiExit);

(jmiAbout);

(jm);(jmHelp);

jtf1=newJTextField();

t(ft);

table(false);

jtf2=newJTextField();

t(ft);

table(false);

JPaneljptf=newJPanel(newGridLayout(0,2));

5

(jtf1);(jtf2);

(,jptf);

JPaneljpg,jpf,jpb;

jpg=newJPanel();

out(newGridLayout(2,0,0,30));

jta1=newJTextArea();

jta2=newJTextArea(){

privatestaticfinallongserialVersionUID=1L;

@Overridepublicvoidpaste(){}

};

t(ft);

eWrap(true);

table(false);

kground(newColor(200,255,200));

t(ft);

eWrap(true);

table(false);

kground(newColor(200,200,255));

jbAdd=newJButton("添加文件");ionCommand("打开");

jpb=newJPanel(newCardLayout(350,100));

("card",jbAdd);

card1=newCardLayout();

jpc1=newJPanel(card1);

("card1",jpb);("card2",jta1);

JLabeljpng=newJLabel(newImageIcon("image/"));

card2=newCardLayout();

jpc2=newJPanel(card2);

("card1",jpng);("card2",jta2);

(jpc1);(jpc2);

(,jpg);

6

jpf=newJPanel();

out(newFlowLayout(,50,0));

jb1=newJButton("开始测试");ionCommand("开始");

jb2=newJButton("结束测试");ionCommand("结束");

(jb1);(jb2);

(,jpf);

nds(250,50,810,630);

Toolkittoolkit=lkit();

Imageimage=ge("image/");

nImage(image);

nuBar(jmb);

ible(true);tFocus();

izable(false);

aultCloseOperation(_ON_CLOSE);

}

7

图3.1起始界面设计

3.2添加文件功能实现

添加打开文件用打开对话框,并对对话框添加文件过滤

器,代码如下,界面如图3.2所示

publicvoidreadFile(){

StringstrPart="";intn=320;

if(()<=n){

t(strbFile+"n");

fileOver=true;

return;

}

8

strPart=ing(0,n);

strbFile=(0,n);

t(strPart+"n");

}

publicvoidaddFile(){

JFileChooserfileCh=newJFileChooser();

rentDirectory(newFile("files"));

eFilter(newFileFilter(){

publicbooleanaccept(Filef){

return

e().toLowerCase().endsWith(".txt")||ctory();

}

publicStringgetDescription(){

return"文本文档*.txt*";

}

});

if(enDialog(null)==_OPTION)return;

getPath=ectedFile();

if(!h().toLowerCase().endsWith(".txt")){

ssageDialog(null,"请选择文本文档","提示

",ATION_MESSAGE);

return;

}

readyFile();

readFile();

state="addFile";

(jpc1,"card2");

tFocus();

}

9

图3.2添加文件界面设计

10

3.3设置测试时间设计

录入时间设定用一个对话框实现,并接收输入信息,

默认录入测试时间为5分钟,主要代码如下该界面如图

3.3所示

publicvoidsetstart(){

JPaneljp=newJPanel(newGridLayout(2,0));

JLabeljlab=newJLabel("设置测试时间(分):");

JTextFieldjtfTime=newJTextField();

t("5");

(jlab);(jtfTime);

intselect=nfirmDialog(null,jp,"设置

",_CANCEL_OPTION,_MESSAGE);

if(select!=_OPTION)return;

strTime=t();

if(isDigit(strTime)){

if(t()!=null){

readyFile();

readFile();

}

(jpc2,"card2");

t(null);

table(true);

tFocus();

state="start";

lock=false;

startTime=tTimeMillis();

Timerti=newTimer();

Threadt=newThread(ti);

11

();

}

else{

ssageDialog(null,"请输入数字","提示

",ATION_MESSAGE);

}

}

publicvoidsetListener(){

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

Listener(newKeyListener(){

publicvoidkeyPressed(KeyEvente1){

if(Code()==_ENTER)

addFile();

}

publicvoidkeyReleased(KeyEvente2){}

publicvoidkeyTyped(KeyEvente2){}

});

ument().addDocumentListener(newDocumentListener(){

publicvoidinsertUpdate(DocumentEvente1){

Stringstr1=t();

Stringstr2=t();

if(()==()&&th("n")){

if(fileOver){

state="over";

}

12

else{

words+=();

for(inti=0;i<();i++)

if((i)!=(i))

errorWords++;

Later(newRunnable(){

publicvoidrun(){

t(null);

}

});

readFile();

}

}

}

publicvoidchangedUpdate(DocumentEvente2){}

publicvoidremoveUpdate(DocumentEvente3){}

});

}

13

图3.3设置测试时间

3.4速度和剩余时间设计

实时显示录入速度和剩余时间通过实现Runnable

接口的一个Timer类来计算实现。当开始录入时获取一

个系统时间startTime=tTimeMillis(),然

后每隔一秒获取一个系统时间

nowTime=tTimeMillis(),同时统计当前录

入的字数count=t().length(),字数除以用两个

时间之差得到速度最后单位换算为(字/分);剩余时间

等于设置时间减去花费的时间

14

remainTime=setTime-spendTime最后转换为分和秒,代

码如下。

privateclassTimerimplementsRunnable{

publicvoidputScore(){

table(false);

Stringstr1,str2;intl1,l2;

str1=t();l1=();

str2=t();l2=();

doubleerror;

intk=l1

for(inti=0;i

if((i)!=(i))

k++;

error=(words+l)==0?0:((errorWords+k)*1.0/(words+l))*100;

t("错误率:"+(error*100)/100.0+"%");

errorWords=0;words=0;

state="addFile";lock=true;

tFocus();

}

publicvoidrun(){

doublenowTime,spendTime,setTime,speed=0,remainTime;

intcount,remainMin,remainSec;

nowTime=tTimeMillis();

spendTime=(nowTime-startTime)/60000;

setTime=ouble(strTime);

while(spendTime

count=t().length();

speed=(words+count)/spendTime;

remainTime=setTime-spendTime;

15

remainMin=(int)remainTime;

remainSec=(int)((remainTime-remainMin)*60);

t("当前的速度:"+(speed)+"字/分");

t("剩余时间:"+remainMin+"分"+remainSec+"秒");

try{

(1000);

}catch(Exceptione){

tackTrace();

}

nowTime=tTimeMillis();

spendTime=(nowTime-startTime)/60000;

}

t("速度:"+(speed)+"字/分");

putScore();

}

}

16

图3.4速度和剩余时间

3.5显示测试结果

显示录入速度和错误率。录入速度计算同上,错误

率等于总的错字数/录入总字数

error=(words+l)==0?0:((errorWords+k)*1.0/(words+l))

*100(注:如果没有录入就结束测试,错误率为0%),

界面如图3.5所示

17

图3.5显示测试

结果

4、实验设计总结

经过几个星期,我们的课程设计总算完成了,这其

中虽然遇到不少问题,通过询问同学的帮助也一一解决

了,通过这次课程设计,使大家的编程能力都提高了不

少,这次课程设计给大家提供了一个动手,思考和解决

问题的机会,巩固了所学的课程。在设计中,大家难免

会遇到多种分歧,比如在布局管理器上就要想到怎样放

置整个组件,使整个界面美观,简单。总之,这次课程

18

设计是由大家一起完成的,本人也体会到了团队合作的

氛围,哪方面不懂的大家都可以一起解决,分享自己的

编程心得,最终达到学习的目的。

附录

组员任务分配自

最后

得分

宋杰软件测试,撰写文档85

王鹏找相关的资料,调试程序85

于渊写代码85

更多推荐

电脑打字软件