基于JAVA的打字练习软件的设计与实现.docx
《基于JAVA的打字练习软件的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于JAVA的打字练习软件的设计与实现.docx(18页珍藏版)》请在冰豆网上搜索。
基于JAVA的打字练习软件的设计与实现
基于JAVA的打字练习软件的设计与实现
摘要
二十世纪的后半期,尤其是90年代后,计算机取得了飞速的发展。
近来,随着网络的发展,计算机已经成为人们生活中不可缺少的一部分。
提高人们对计算机的操作能力显得尤为重要。
而打字速度是衡量一个人操作熟练程度的一个重要方面。
因此开发一种高效的打字系统显得迫在眉睫。
随着科学技术的不断提高,计算机科学日渐成熟,计算机已经深入到工作和生活的各个角落,文字录入是学习计算机非常重要的一部分。
在手写录入技术和语音识别技术还不完善的同时大部分人还在使用键盘作为文字录入的工具。
所以我编了这样一个小程序,同时也是我的毕业设计,希望能对电脑初学者和想提高打字速度的朋友们有所帮助。
关键词:
打字练习文字录入打字速度
BasedonJAVAtypingpracticesoftwaredesignandimplementation
Abstract
Inthesecondhalfofthe20thcentury,especiallyafterthe1990s,thecomputerhasmaderapiddevelopment.Recently,withthedevelopmentofthenetwork,computershavebecomethepeopletheindispensablepartinlife.Improvetheoperationabilityofcomputerpeopleappearespeciallyimportant.Whiletypingspeedisthemeasureofamanoperatingskilleddegreeofaimportantaspects.Sodevelopingaefficienttypingsystemappearsimminent.Alongwiththescienceandtechnologyunceasingenhancement,thecomputerscienceismaturedayafterday,thecomputertohavein-depthworkandeachcornersofthelife,languageschoolisaveryimportantpartoflearningcomputer.Inthehandwrittentypedtechnologyandspeechrecognitiontechnologyisnotperfectandmostpeoplearestillinusethekeyboardaslanguageschooltools.SoImadesuchasmallprogram,andalsomygraduationdesign,inhopesofcomputernovicesandwanttoimprovetypingspeedfriendshelp
KeyWords:
TypingpracticeTextentryTypingspeed
第一章绪论
1.1课题背景及选题意义
打字软件主要针对的是电脑初学者,那就怎么把软件的内容设计得更容易,更有吸引力,把界面设计得更美观,更友好,就成了本软件的重点要解决的问题。
拟采用的研究手段:
本打字练习软件主要分为六个模块,分别为:
键盘练习,简码练习,文章练习,速度测试,编码查询,帮助。
其中速度测试模块和键盘练习模块是主要模块,其他为此要模块。
1.2打字练习软件的国内外研究现状
调查显示,熟练的打字水平应该为英文每分钟150字母,中文30字每分钟。
据统计,电脑的使用者中约有70%以上的人远远达不到这个水平。
其中更有30%的人,有熟练打字的意愿,却缺乏好的打字软件而讲究着自己的打字的“龟速”。
教学间隔时间长。
由于小学信息技术课每星期只有一节,在课堂练完后不能及时巩固,前后间隔时间6天,教完就忘的现象很严重,导致以后的教学内容不能正常进行。
打字练习相对枯燥。
与小学生爱玩好动的特征相比,打字练习并不有趣,打字时不仅要注意字母,还要注意指法,很多同学在坚持了五分钟后就开始有厌倦情绪,这给完成打字练习任务带来了很大的障碍。
键盘输入是人与电脑沟通的主要桥梁,是一项一朝学会终身受益的基本技能——至少在目前以键盘为主要输入设备的时候,它就像中国人吃饭使用筷子,写字使用笔一样,伴随着我们的终身。
因此键盘输入教学作为小学信息技术教学的一个模块,有其重要的地位和作用。
对于键盘输入的教学,我们需要趁热打铁。
1.3论文结构
一、绪论。
主要介绍课题背景及选题意义,在国内外的研究现状。
二、系统分析。
主要介绍系统的需求分析,开发环境,主要功能。
三、系统功能设计。
主要介绍系统的功能具体设计。
四、性能测试与分析。
第二章系统分析
2.1系统需求分析
本课题为打字练习软件。
主要是为了解决使用者们的打字练习,主要是为了给初学五笔的人员以帮助之用。
现在人们大多不会用五笔这种中国特色的汉字输入法。
本软件设计的目的就是为了让更多的人学习这种输入法。
各功能需求如下:
初学者:
键盘练习、简码练习、文章练习、速度测试、编码查询、帮助。
已学者:
简码练习、文章练习、速度测试、编码查询、帮助。
2.2软件开发环境和方法
本打字练习软件可以运行于windows操作系统和linux操作系统。
是多操作系统的软件,不只是能在windows操作系统上运行,还可以在linux上运行,因为这个打字练习软件是利用java编写的。
它实现了一处编写处处运行的java特性。
很好的解决了因为操作系统差异而造成的问题。
这个打字练习软件界面是由Java自带的类编写的。
Java有自已的java.awt和javax.swing包可以实现界面的给出。
虽然这个界面并不是最好的,但是这个界面编写可以减少开发的时间。
2.3主要功能简介
根据以上的需求分析,这个软件主要设计了键盘练习,简码练习,文章练习,速度测试,编码查询,帮助等功能。
下面一一介绍。
2.3.1键盘练习
采用英文打字来练习。
初学者对于键盘是不熟悉的,而键盘是外国人发明的,要想学习打字就必需要学习熟悉键盘的布局,以及正确的指法。
本功能可以帮助初学者练习掌握键盘布局和熟悉键盘的键位,为以后的学习和练习打下基础。
初学者还可以结合帮助来练习。
系统会在用户点击键盘练习按钮后,调出一篇英语文章来,通过英文的打字练习来熟悉键盘,从而达到练习的目的。
2.3.2简码练习
这个功能是为了练习五笔打字的,五笔打字中有些字是不用打全码的,打简码就可以了,这样主可以大大简化了,汉字的输入。
可以说五笔简码是比较有用的,犹其像初学者这样的人员。
再者说,简码的使用,减少了敲击键盘的次数,这也是五笔的精华之所在。
用户通过点击简码练习按钮,系统会调用相应文字出来,用户可以比对上面给出来的文字,在下面打出来,以此来练习。
2.3.3文章练习
文章练习的功能主要是对前面学习以及练习的加以强化,从应用的方面来练习打字。
文章的字更像我们日常生活之所用,是非常好的提升打字水平的非常有用的方法和策略。
通过文章的练习,初学者们一般都会有一个好的水平的。
学习打字员的目的就是为了快速的与计算机交流,以及和网友交流。
用户通过点击文章练习按钮,系统会调用相应文文章出来,用户可以比对上面给出来的文字,在下面打出来,以此来练习。
文章是连贯的文字。
2.3.4速度测试
这个功能主要是为了检测个人的打字水平是怎么一个水平,主要是通过打汉字的方式来检测打字的快慢,这一功能是这个软件的最主要的功能之一。
用户通过点击速度测试系统会随机调用一篇文章给用户,用户通过对照上面给出的文章内容,在下面打出相同的文章来。
系统会自动记者所用的时间,通过时间来计算用户打字的平均速度。
2.3.5编码查询
这个功能是打字练习软件所必需的。
任何人都不可能是记得所有汉字的五笔编码的,初学者更不必说。
因此,这一功能也是非常的重要。
用户可以根据自己的实际需要来使用这一功能。
用户点击查询按钮后,系统给出一个界面,用户可以输入汉字,点击查询后,系统会把查询结果显示出来。
2.3.6帮助
这个功能是每个软件都是会有的一个功能。
在这个功能上用户会得到老大老多的帮助。
用户通过点击这个功能,系统给出几项帮助,用户可以根据自身的需要点击相应的帮助。
第三章系统功能设计
3.1系统总体设计
3.1.1运行环境
●操作系统:
Windowslinux
●安装Myeclipse
3.1.2系统总体功能描述
系统功能设计图。
如图3.1所示。
图3.1系统功能设计图
第四章软件界面与代码的设计
4.1软件界面,如图4.1所示。
图4.1软件主界面
实现的相关代码:
JFrame.setDefaultLookAndFeelDecorated(true);
frame=newJFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Containercontainer=frame.getContentPane();
container.add(this,BorderLayout.CENTER);
this.setPreferredSize(newjava.awt.Dimension(800,550));
frame.setTitle("疯狂打字通");
Imageico=Toolkit.getDefaultToolkit().getImage("Image/f.gif");
frame.setIconImage(ico);
frame.setResizable(false);
screen=toolkit.getScreenSize();
frame.setLocation((screen.width-800)/2,screen.height/2-600/2);//窗口定位
//添加菜单
fMenu=newJMenuBar();
frame.setJMenuBar(fMenu);
fMenu.setPreferredSize(newjava.awt.Dimension(392,23));
fMenuSys=newJMenu();
fMenu.add(fMenuSys);fMenuSys.setText("系统(S)");
fMenu.add(fMenuLx);fMenuLx.setText("练习(E)");
fMenu.add(fMenuTest);fMenuTest.setText("测试(T)");
fMenu.add(fMenuHelp);fMenuHelp.setText("帮助(H)");
//添加工具条.
tool=newTool(this);
this.add(tool,1);
//添加聊天工具条
Chatchat=newChat(this);
this.add(chat,2);
frame.pack();
frame.setVisible(true);
//添加按钮
btnJP=newJButton("键盘练习",image);
btnJM=newJButton("简码练习",image);
btnWZ=newJButton("文章练习",image);
btnLocalTest=newJButton("速度测试",image);
btnBMCX=newJButton("编码查询",image);
btnHelp=newJButton("帮助",image);
btnExit=newJButton("退出系统",image);
4.2实现退出功能,如图4.2。
图4.2退出图
实现的相关代码:
if(PublicData.onChoice==true){
if(e.getSource()==fMenuExit){
inti=JOptionPane.showConfirmDialog(this,"你真的要退出吗?
","疯狂打字",
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(i==0){
System.exit(0);
4.3软件的主要功能设计
4.3.1界面设计。
软件的打字用户操作界面。
键盘练习的操作界面如图4.3所示:
图4.3键盘练习操作
简码练习的操作界面如图4.4所示。
图4.4简码练习
文章练习的用户操作界面如图4.5所示。
图4.5文章练习
速度测试的操作界面如图4.6所示
图4.6速度测试
编码查询界面如图4.7所示。
图4.7编码查询
4.3.2、实现功能的主要代码:
//记录输入的正确和错误的个数据
privateintrightWord=0;
privateinterrorWord=0;
privateintrightCount=0;
privateinterrorCount=0;
privateintwordCount=0;
privatebooleantemp=true;
publicEditor(Hintparent){
this.parent=parent;
th=newThread(this);
//组建Editor用户界面....
this.setPreferredSize(newjava.awt.Dimension(657,325));
//内部窗体大小
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
this.putClientProperty("JInternalFrame.isPalette",Boolean.TRUE);
getContentPane().setLayout(null);
this.setVisible(true);
pAttrib=newJPanel();
getContentPane().add(pAttrib,newGridBagConstraints(1,0,12,3,0.0,0.0,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,newInsets(0,0,0,0),0,0));
FlowLayoutpAttribLayout=newFlowLayout();
pAttrib.setBorder(BorderFactory.createTitledBorder(""));
pAttrib.setLayout(pAttribLayout);
pAttrib.setBounds(-2,33,658,42);
txtOriginal.setText(DistillText.getData(PublicData.Text,PublicData.textTag));
Emptyempty=newEmpty();
empty.start();
this.pack();
txtNewText.requestFocus();
th.start();
//判断正确和错误的字.并改变它们的颜色
publicvoidchDocs(intxLen,intyLen,StringxStr,StringyStr){
SimpleAttributeSetattrSet=newSimpleAttributeSet();
for(inti=1;i<=xLen;i++){
if(i<=yLen){//数据验证
if(xStr.substring(i-1,i).equals(yStr.substring(i-1,i))){
rightWord++;
StyleConstants.setForeground(attrSet,Color.BLUE);}
else{errorWord++;
StyleConstants.setForeground(attrSet,Color.RED);}
StyleConstants.setUnderline(attrSet,true);}
else{StyleConstants.setForeground(attrSet,Color.BLACK);
StyleConstants.setUnderline(attrSet,false);}
styledDoc.setCharacterAttributes(i-1,1,attrSet,true);}
txtRight.setText((rightWord+rightCount)+"");
txtError.setText((errorWord+errorCount)+"");
intc=0;
for(inti=0;ic=c+60;}
c=c+second;
doubles=(double)c/60;
txtMW.setText(""+Math.round(((double)Integer.parseInt(txtRight.getText()))/s));}
//实现DocumentListener所有的方法..用于监听输入文本...
publicvoidchangedUpdate(DocumentEvente){
if(PublicData.Lang.equals("English")){
PublicData.key=txtOriginal.getText().substring(txtNewText.getText().length(),
txtNewText.getText().length()+1);
this.parent.repaint();}
if(PublicData.Lang.equals("Chinese")){
PublicData.key="";
publicvoidinsertUpdate(DocumentEvente){
if(PublicData.Lang.equals("English")){
PublicData.key=txtOriginal.getText().substring(txtNewText.getText().length(),
txtNewText.getText().length()+1);
}catch(StringIndexOutOfBoundsExceptionstr){}
this.parent.repaint()}
if(PublicData.Lang.equals("Chinese")){
PublicData.key="";}}
publicvoidremoveUpdate(DocumentEvente){
if(PublicData.Lang.equals("English")){
PublicData.key=txtOriginal.getText().substring(txtNewText.getText().length(),
txtNewText.getText().length()+1);
this.parent.repaint();}
if(PublicData.Lang.equals("Chinese")){
PublicData.key="";}}
//数据验证
privatevoiddataValidate(){
chDocs(txtOriginal.getText().length(),txtNewText.getText()
.length(),txtOriginal.getText(),txtNewText.getText());
if(txtOriginal.getText().length()>txtNewText.getText().length()){
if(PublicData.Lang.equals("English")){
PublicData.key=txtOriginal.getText().substring(txtNewText.getText().length(),
txtNewText.getText().length()+1);}
if(PublicData.Lang.equals("Chinese")){
PublicData.key="";}
txtCount.setText((txtNewText.getText().length()+wordCount)+"");}
else{wordCount=wordCount+txtOriginal.getText().length();
rightCount=rightCount+rightWord;
errorCount=errorCount+errorWord;
txtOriginal.setText(DistillText.getData(PublicData.Text,PublicData.textTag));
if(PublicData.Lang.equals("English")){
PublicData.key=txtOriginal.getText().substring(0,1);
this.parent.repaint();
}
if(PublicData.Lang.equals("Chinese")){
PublicData.key="";
this.parent.repaint();
//退出时所要关闭的窗体
privatevoidexitFram(){
System.gc();
//计时器
classEmptyextendsThread{
publicvoidrun(){
while(true){
try{
Thread.sleep(100);
dataValidate();
if(txtNewText.getText().length()>=txtOriginal.getText().length()){
txtNewText.setText("");
catch(InterruptedExceptione){