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

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
更多推荐
电脑打字软件
发布评论