2024年2月6日发(作者:)

编号

软件工程与计算(1)

课程设计

题目 英文打字测试系统

二级学院

专 业

班 级

学生姓名 学号

指导教师

评阅教师

时 间 2012/9/20

重庆理工大学 英文打字测试系统

目录

摘要 .............................................................. 2

1.

绪论 ....................................................... 3

项目背景 ................................................... 4

2.1. 发展史 ..................................................... 4

2.2. 现状 ....................................................... 4

系统概述 ................................................... 5

3.1. 系统基本要求和功能描述 ..................................... 5

3.2. 系统实现的内容 ............................................. 5

3.3. 系统的编写目的 ............................................. 5

系统分析 ................................................... 5

4.1. 数据分析 ................................................... 5

4.2. 功能分析 ................................................... 5

4.3. 人员分析 ................................................... 5

系统设计 ................................................... 6

5.1. 主界面设计 ................................................. 6

5.2. 功能按扭设计 ............................................... 7

5.3. 菜单栏设计 ................................................. 8

5.4. 系统流程图 ................................................. 8

系统主要代码实现 ........................................... 8

6.1. 窗体的代码实现 ............................................. 8

6.2. 各个功能键的实现 ........................................... 9

6.2.1 New功能 .............................................. 9

6.2.2 Stop功能 ............................................ 11

6.2.3 Help 功能............................................ 12

6.2.4 Exit功能 ............................................ 13

总结 ...................................................... 14

2.

3.

4.

5.

6.

7.

参考文献 ......................................................... 15

1

重庆理工大学 英文打字测试系统

摘要

二十世纪后半期,计算机取得了飞速的发展。现在,随着网络技术的发展,计算机已经成为人们生活中不可或缺的一部分。但是很多人对于计算机的操作能力及认知极为匮乏,因此提高人们对计算机的了解以及操作能力已经非常重要。而打字速度是用来衡量一个人操作熟练程度的一个重要方面。当前打字软件的市场已经达到了一定的高度,本软件设计开发的方式是仅仅是简单的使用户能够测试自己的打字速度与正确率。

本软件使用的开发工具是JAVA,它是当前比较流行的开发工具。在构造图形及其处理方面具有很强的优势,能够为用户构造一个比较美观的打字测试界面,并且能够很好的测试您的打字速度以及正确率,请用户放心使用。

关键词:打字速度 正确率 熟练度 JAVA

2

重庆理工大学 英文打字测试系统

1. 绪论

随着科学技术的不断提高,计算机科学技术日渐成熟,计算机已经深入到人们工作和生活的每个个角落,对计算机操作的熟练已经不可缺少。由于现在语音录入技术的不成熟,绝大多数的计算机用户依旧使用键盘来作为录入工具,所以我编了这样一个程序,希望能对计算机初学者和想提高打字速度的朋友们有所帮助。

计算机是人类社会20世纪的重大科技成果之一。自1946年世界第一台电子数字计算机诞生至今,在短短几十年的时间里,计算机技术得到了飞速发展。目前计算机已广泛应用在工业,农业,科技,国防,文教,卫生,家庭生活等各个领域中,已成为现代人类生活不可缺少的工具之一。

本系统构建了英文打字练习系统。打字测试系统使用了java语言来设计系统,Windows7开发平台。本系统是一个java构造的系统,充分利用java在GUI开发组件方面的优势和模块化设计思想,对打字练习系统界面进行整体部署。完成打字练习软件开发,培养学生的程序设计和开发能力。

计算机科学技术的发展不仅极大的促进了整个科学技术的发展,而且明显的加快了经济信息化和社会信息化的进程。因此计算机教育在各国倍受重视,计算机知识与能力已经成为21世纪人才素质的基本要素之一。我国也非常重视计算机教育,国家已经开始在大中专学校及小学普及计算机,计算机操作技能及操作水平的提高尤为重要。而打字速度是衡量一个人计算机水平的一个重要方面。现在各大中专学校都对在校大学生的打字速度进行考核,使他们能够满足社会的需要。

3

重庆理工大学 英文打字测试系统

2. 项目背景

2.1. 发展史

金山打字2003 完全摆脱枯燥学习的速学打字软件,循序渐进突破盲打障碍,短时间运指如飞; 新手上路即学即会,拼音练习短期速成; 易错键常用词重点练习,纠正南方音模糊音;不背字根照学五笔,提供五笔反查工具; 配有数字键、同声录入等12项职业训练。

金山打字通 2006 更为合理的设计规划,它在各个模块中都有多项改进,目的让用户能在由浅入深出的练习中循序渐进地提高。在英文打字的键位练习中,用户可以选择键位练习课程,分键位进行练习;而且增加了手指图形,不但能提示每个字母在键盘的位置,更可以知道用哪个手指来敲击当前需要键入的字符。

拼音打字从音节练习入手,用户通过对方言模糊音、普通话异读词的练习,可以纠正用户在拼音输入中遇到的错误

金山打字2006 加个性化的设计能真正满足不同用户的需要。该版本为您提供了机械、电子、医学、经贸、计算机、法律等十个专业的中英文词汇和文章;您还可以将自己喜欢的文章或工作中经常用到的内容调入到相应的测试模块,进行专门的练习。

在打字游戏中,新添太空大战游戏,增加角色扮演类的游戏——生死时速,支持网络对决,更为引人入胜。

支持多用户管理,用户登录成功后,能查看个人的学习记录;系统还能提出学习建议、跟踪用户打字速度增长的整个过程。

2.2. 现状

目前的打字系统大多数都是进行单击测试,测试时只能完全依靠自觉,有的学生投机取巧,得到不真实的结果,这样就不便于学校老师对学生打字结果的统计,从而错误的掌握学生对计算机的操作能力。

另外目前市面上的打字软件的界面越来越来美观,功能日趋完善,操作也越来越方便,美中不足的是信息只能在本地存储,并且由老师来记录学生的打字成绩,但是一旦出现一些问题,比如电脑突然死机,或者突然断电,这都会导致学4

重庆理工大学 英文打字测试系统

生或使用者打字成绩的统计变得困难,会带来很多不必要的麻烦。

3. 系统概述

3.1. 系统基本要求和功能描述

使用Java语言编写一款打字练习软件,要求从指定文文件中显示内容,以供用户进行打字练习,并且计算打字速度与正确率。

3.2. 系统实现的内容

用户可以选择自己想要进行打字练习的英文文章,然后进行打字练习。在软件中使用了在开始获取一次时间,结尾获取一次时间的方法,来计算用户打字速度,另外还添加帮助菜单,帮助使用者更好的了解本系统的系列功能。

3.3. 系统的编写目的

为用户提供一个简易的打字练习平台。通过这样的打字练习达到更高效、快速的打字目的。使使用者更好地熟悉键盘以及各个英文字母,学会熟练的使用计算机键盘,进而更好的使用计算机来进行一系列操作,。

4. 系统分析

4.1. 数据分析

系统的数据主要是从指定文件中选取文檔供使用者实现打字练习的范文。此过程中使用了ReadFileUsingJFileChooser函数和setText来选定文文件以及显示在面板上。打字练习的原文可以从系统提供的目录下选取或者用户自己选择指定文章来进行打字练习

4.2. 功能分析

在功能方面,实现了用户自主选择文文件进行打字练习。然后进入打字阶段,对用户打字的速度以及正确率进行计评估。在界面的构造上,使用了不同的布局,使界面变得更加美观,更加贴近用户的使用习惯

4.3. 人员分析

5

重庆理工大学 英文打字测试系统

此系统操作简单,使用人员无需具有专业的计算机操作基础,因此对现有工作人员来说应用此系统是不成问题的。

4.4. 可行性分析

基于JAVA语言开发本系统,使用其GUI组件来构造界面,并实现相应功能,对于现在其发展程度来说比较简单。

5. 系统设计

5.1. 主界面设计

在该界面中,添加了多个JPanel面板,把整个layoutp面板分为左右两部分,再把左边分为bp和lp上下两部分,在bp上添加四个按钮与一个卷标,在lp上添加了两个JLabel标签;用upp与down把右边分为上下两部分,在upp与down两个面板上都添加了JTextArea文本域用以显示文文件和打字练习。同时,使用了ImageIcon与Color类对面板的颜色、背景进行了修改。

还使用JMenu、JMenuBar、JMenuItem添加了菜单栏,使界面更加美观,得到主界面如图5-1:

图5-1 主界面

具体如表5-1。

6

重庆理工大学 英文打字测试系统

JPanel

内容

layoutp

layoutlift

upp

down

lp

bp

JTextArea jtreadtst

jtinput

jtHelp

JMenu FileMenu

HelpMenu

JMenuItem newItem

stopItem

exitItem

helpItem

表5-1主界面设计

5.2. 功能按扭设计

运用Jbutton与ImageIcon、JLabel来实现按钮的制作,实现了“New”、“Stop”、“Help”3个按钮,以及一个插入图片的卷标,单击按钮将会实现相应的功能。得到了下面的界面(如图5-2):

图5-2功能按钮

7

重庆理工大学 英文打字测试系统

5.3. 菜单栏设计

使用JMenu、JMenuBar、JMenuItem组件构造了菜单栏,并在File下添加了三个菜单按钮(New、Stop、Exit),在Help下添加了Help菜单按钮得到界面如下(图5-3,5-4):

图5-3 File菜单

图5-4Help菜单

5.4. 系统流程图

运行

选择文本

显示打字内容并输入

计算并得出成绩

图5-4 系统流程图

6. 系统主要代码实现

6.1. 窗体的代码实现

整体框架构造在mian函数中用构造,界面的主要布局为:实现了两个JTextArea,运用布局管理器(BorderLayout、GridLayout)对界面进行了合理的8

重庆理工大学 英文打字测试系统

安排。对界面进行布局的主要代码如下:

//添加菜单栏

JMenuBar bar = new JMenuBar();

setJMenuBar(bar);

(newItem);

add(FileMenu);

(FileMenu);

//面板操作

JPanel layoutp = new JPanel(new GridLayout(2, 1));

*把右边面板分为上下两个面板*/

JPanel upp = new JPanel();

JPanel down = new JPanel();

(upp);

(down);

JPanel layoutlift = new JPanel(new GridLayout(2, 1));

//把左边的面板分为上下两部分

JPanel bp = new JPanel(new GridLayout(6, 1, 10, 5));

//在把左边上面的面板分为5行1列

JPanel lp = new JPanel(new GridLayout());

//把左边下面的面板分为2行1列

add(layoutlift, );

add(layoutp);

/*显示打字内容面板*/

(jtreadtst);

/*输入面板*/

(jtinput);

6.2. 各个功能键的实现

6.2.1 New功能

该按钮用以用户选择文本进行打字练习,并且开始计算用户打字所用时间,9

重庆理工大学 英文打字测试系统

为New按钮注册一个事件监听器,然后在ButtonListener中实现了点击该按钮将会系统做出的反应,具体代码实现如下:

ReadFileUsingJFileChooser rea =

new ReadFileUsingJFileChooser();

t(()); //读取指定檔的内容

time1 = tTimeMillis();//获取开始的时间并保存

以上代码实现了选取文本进行打字练习的ReadFileUsingJFileChooser这个类的代码如下:

JFileChooser fileChooser = new JFileChooser();

If (enDialog(null)==

E_OPTION) {

// Get the selected file

file = ectedFile();

// Create a Scanner for the file

Scanner input = new Scanner(file);

// Read text from the file

while (t()) {

s = ne();}

();}

else {

n("No file selected"); }

单击该按钮后出现的界面如下(如图6-2):

图6-2选择文本

10

操作,其中

重庆理工大学 英文打字测试系统

6.2.2 Stop功能

该按钮用以结束打字,检索用户输入的字符与原文字符的匹配率,并且显示结果(速度、正确率)

注册一个监听器jbtStopListener,并在类ButtonListener中对该按钮的操作进行了具体的实现,使用了setText()对文本域进行刷新操作,使用户再次使用时可以直接打开文檔进行打字练习,代码如下:

practise p = new practise();

jtinputget = t();

//将输入的内容保存到jtinputget这个字符串中

time2 = tTimeMillis();

//获取结束时的时间

();

t("");

t("");}

其中practise类实现了表示用户打字速度与正确率的模块,代码如下:

class practise {

/*计算打字速度与正确率*/

public void result() {

*计算正确率*/

int wrong = 0;int i = 0;float theRate = 0;

s1 = Array();

s2 = Array();

if ( <= ) {

for (; i < - 1; i++) {

if (s2[i] != s1[i]) {

wrong++;//统计不相同的个数

continue;}}

while (i != ) {

wrong++; i++;}

11

重庆理工大学 英文打字测试系统

NumberFormat numberFormat =centInstance();

imumFractionDigits(2);

time3 = time2 - time1;

time = time3 / 1000 % 60;

double wrongRate=1.0*wrong/;

speed = (int) () / time;

ssageDialog(null,

"Total Words are:"+

+"nYou total input : "+

+"nThe wrongRate is "+(wrongRate)

+ "nYour speed is " + speed +"字/秒");}}}

运行结果得到界面如图6-3所示:

图6-3显示结果

6.2.3 Help 功能

注册了jbtHelpListener这个监听器,并在类classButtonListener中对该按钮的操作进行了具体的实现,代码如下:

lp();

bled(false);

其中Help类是重新构造的一个JFrame类型的框架,用以显示Help中的内容,并将其设置为不可更改,具体代码如下:

JFrame jf = new JFrame();

JLabel jtHelpImage = new JLabel(imageHelpBackground);

nImage(imahelp);

(jtHelpImage);

12

重庆理工大学 英文打字测试系统

其界面如下所示(如图6-4):

图6-4Help界面

6.2.4 Exit功能

用来退出该程序,并在单价该按钮之后弹出一个确认的对话框来询问用户时候确定退出,具体代码实现如下:

if (nfirmDialog(null, "是否退出?") ==

_OPTION) {(0);}

界面如下图(如图6-5):

图6-5退出窗口

13

重庆理工大学 英文打字测试系统

7. 总结

经过了一段时间的开发和设计,打字系统基本完成,其功能基本满足本系统的需求,覆盖了对JAVA中GUI组件的一些组件操作,本系统的实现了选择文本进行打字练习、显示用户打字速度以及正确率等功能,构造了一个比较美观的界面来进行打字练习。在打字程序这个领域,经历了几十年的发展,至今已经达到了一个很高的水平,其应用也在不断的壮大和扩展。随着编程语言与计算机技术的发展,本系统将会变得更加完善。

由于本人才开始涉及java图形化界面,因此只使用了一些简单的构造图形的知识来设计本软件。在创建系统时也遇到一些困难,是经过很多次调试才编写成功,因此在设计过程中可能有不足之处还有待进一步完善,请老师和同学们体谅并提出宝贵意见。

通过编写本程序,使我更加熟练的掌握的JAVA中对GUI组件的一些基本操作,明白了JAVA语言博大精深,还有一段很长的学习之路要走。

14

重庆理工大学 英文打字测试系统

参考文献

[1] (美)Java语言程序设计基础篇(原书第八版).机械工业出版社.2010.

[2] 朱站立.数据结构——Java语言描述.清华大学出版社.2005.

15

重庆理工大学 英文打字测试系统

附上源代码:

package 英文打字测试;

import ;

import r;

import ;

import ;

import .*;

import .*;

import .*;

import .*;

public final class WordsPractice extends JFrame {

/**

*

*/

private static final long serialVersionUID = 1L;

//定义按钮

private JButton jbtNew = new JButton("New");

private JButton jbtExit = new JButton("Exit");

private JButton jbtStop = new JButton("Stop");

private JButton jbtHelp = new JButton("Help");

//定义图片路径

ImageIcon imageLogo = new ImageIcon("images/");

private static ImageIcon imageTitle = new

ImageIcon("D:/Workspaces/MyEclipse 9/课程设计/src/images/");

private static Image ima = ge();

JTextArea jtreadtst = new JTextArea(10,38);

JTextArea jtinput = new JTextArea(10,38);

16

重庆理工大学 英文打字测试系统

String jtinputget;

//定义菜单栏

private JMenu FileMenu = new JMenu("File");

private JMenu HelpMenu = new JMenu("Help");

private JMenuItem newItem = new JMenuItem("New");

private JMenuItem stopItem = new JMenuItem("Stop");

private JMenuItem exitItem = new JMenuItem("Exit");

private JMenuItem helpItem = new JMenuItem("Help");

ReadFileUsingJFileChooser rea = new ReadFileUsingJFileChooser();

public WordsPractice() {

setFrame();//构造窗口、主界面

regeditListener();//注册监听器

}

public void setFrame() {

//添加菜单栏

practise p = new practise();

Help help= new Help();

JMenuBar bar = new JMenuBar();

setJMenuBar(bar);

//File菜单

(newItem);

(stopItem);

(exitItem);

add(FileMenu);

(FileMenu);

17

重庆理工大学 英文打字测试系统

//帮助菜单

(helpItem);

add(HelpMenu);

(HelpMenu);

JPanel panel= new JPanel(new BorderLayout());//构造主面板

//把右边面板分为两行一列

JPanel layoutp = new JPanel(new GridLayout(2, 1));

JPanel upp = new JPanel();

JPanel down = new JPanel();

(upp);

(down);

//设置右边两块面板的颜色

kground();

kground();

//把左边面板分为上下两部分

JPanel layoutlift = new JPanel(new GridLayout(2, 1));

//把左上面板分为6行1列,水平距离为10,垂直艰间距为5

JPanel bp = new JPanel(new GridLayout(6, 1, 10, 5));

JPanel lp = new JPanel(new GridLayout());

(bp);

(lp);

//添加一个标签,并在里面添加一张图片

JLabel jl1 = new JLabel(new ImageIcon("D:/Workspaces/MyEclipse

9/课程设计/src/images/"));

JLabel jlbimage = new JLabel(imageLogo);

18

重庆理工大学 英文打字测试系统

JLabel jl2 = new JLabel("English Speed Test");

(jlbimage);

(jbtNew);

(jbtStop);

(jbtHelp);

(jbtExit);

kground();

kground();

kground();

kground();

(jl2);

(jl1);

setVisible(true);

// setSize(400, 300);

//设置右边上面显示文档的文本域

eWrap(true);

pStyleWord(true);

table(false);

e(625, 250);

eground();

t(new Font("Courier", , 20));

kground();

(jtreadtst);

//设置右边下面出入文档的文本域

(jtinput);

eWrap(true);

19

重庆理工大学 英文打字测试系统

pStyleWord(true);

e(300, 250);

eground();

t(new Font("Courier", , 20));

kground(ay);

bled(false);

//添加左右两块面板到主界面

(layoutlift, );

(layoutp);

add(panel);

}

//注册监听器

public void regeditListener() {

ButtonListener listener = new ButtonListener();

ionListener(listener);

ionListener(listener);

ionListener(listener);

ionListener(listener);

ionListener(listener);

ionListener(listener);

ionListener(listener);

ionListener(listener);

}

//实现监听器类

class ButtonListener implements ActionListener {

20

重庆理工大学 英文打字测试系统

public void actionPerformed(ActionEvent e) {

if (rce() == jbtNew||rce()==newItem) {

try {

t(());

1 = tTimeMillis();

bled(true);

} catch (Exception ex) {

ger(e()).log(,

null, ex);

}

} else if (rce() == jbtStop||rce()

==stopItem) {

jtinputget= t();

2 = tTimeMillis();

();

t("");

t("");

bled(true);

} else if (rce() ==

jbtHelp||rce()==helpItem) {

lp();

bled(false);

} else if (rce() ==

jbtExit||rce()==exitItem) {

if (nfirmDialog(null, "是否退出?")

== _OPTION) {

(0);

21

重庆理工大学 英文打字测试系统

}

}

}

}

//从指定中选取文档

class ReadFileUsingJFileChooser {

String s;

public String read() throws Exception {

JFileChooser fileChooser = new JFileChooser();

if (enDialog(null) ==

E_OPTION) {

// Get the selected file

file = ectedFile();

// Create a Scanner for the file

Scanner input = new Scanner(file);

// Read text from the file

while (t()) {

s = ne();

}

();

} else {

n("No file selected");

}

return s;

22

重庆理工大学

}

}

//计算结果

class practise {

double speed;

long time = 0;

long time1 = 0;

long time2 = 0;

long time3 = 0;

char[] s1;

char[] s2;

public void result() {

int wrong = 0;

int i = 0;

double theRate = 0;

s1 = Array();

s2 = Array();

if ( <= ) {

for (; i < - 1; i++) {

if (s2[i] != s1[i]) {

wrong++;

continue;

}

}

while (i != ) {

wrong++;

i++;

23

英文打字测试系统

重庆理工大学 英文打字测试系统

}

time3= time2-time1;

time = time3 / 1000 % 60;

theRate=1.0*wrong/;

NumberFormat numberFormat =

centInstance();

imumFractionDigits(2);

NumberFormat

tance();

imumFractionDigits(2);

speed = (double) () / (double) time;

ssageDialog(null,

"Total words are:"+

+"nYour total input : "+

wrongRate is

number =

+"nThe

"+(theRate)

+ "nYour speed is " + (speed) +"字/秒");

}

}

}

//显示帮助菜单

class Help extends JFrame {

/**

*

*/

24

重庆理工大学 英文打字测试系统

private static final long serialVersionUID = 1L;

ImageIcon imageHelpTitle = new

ImageIcon("D:/Workspaces/MyEclipse 9/课程设计/src/images/");

Image imahelp = ge();

protected ImageIcon imageHelpBackground = new

ImageIcon("D:/Workspaces/MyEclipse 9/课程设计/src/images/");

public void showHelp() {

JFrame jf = new JFrame();

JLabel jtHelpImage = new JLabel(imageHelpBackground);

nImage(imahelp);

le("帮助");

e(300, 220);

ationRelativeTo(null);

aultCloseOperation(E_ON_CLOSE);

ible(true);

(jtHelpImage);

}

}

//主函数

public static void main(String[] args) throws Exception {

WordsPractice frame = new WordsPractice();

nImage(ima);

le("英文打字练习");

e(800, 550);

ationRelativeTo(null);

aultCloseOperation(_ON_CLOSE);

ible(true);

}

25

重庆理工大学 英文打字测试系统

}

26