《Java程序设计“打字程序”【精校版本】》由会员分享,可在线阅读,更多相关《Java程序设计“打字程序”【精校版本】(22页珍藏版)》请在金锄头文库上搜索。
1、成绩 徐州工程学院综 合 训 练 报 告 课 程 名 称 面向对象程序设计综合设计 专 业 计算机科学与技术(单) 班 级 09计单 学 生 姓 名 黄晨 学 号 2009*44 设 计 题 目 打字速度测试程序 指 导 教 师 * 设计起止时间:2011 年12月21日至 2012年 1月6日 目录1 开发背景和意义21.1 开发背景21.2 设计目的及意义22 需求分析22.1 系统所需完成的任务22.2 系统功能需求分析33 总体设计33.1 系统设计目标33.2 系统体系结构33.3 程序结构设计44 详细设计54.1 起始界面设计54.2 添加文件界面设计74.3 设置测试时间设计8
2、4.4 速度和剩余时间设计94.5 显示测试成绩设计105 系统测试115.1 系统测试的方法115.2 程序测试116 设计总结11参考文献12附录121 开发背景和意义1.1 开发背景二十世纪的后半期,尤其是90年代后,计算机取得了飞速的发展。近来,随着网络的发展,计算机已经成为人们生活中不可缺少的一部分。提高人们对计算机的操作能力显得尤为重要。而打字速度是衡量一个人操作熟练的一个重要方面。因此开发一种高效的打字程序显得迫在眉睫。目前大多数打字程序都是只能在Windows下运行,跨平台运行能力不是很强。为了适应当下的需求,格外需要一款能够新的打字程序。本程序使用的开发工具是java1.6,
3、它目前是比较流行的java语言开发工具,在执行效率方面表现良好,在跨平台方面更是强项。因此用户可以放心使用。1.2 设计目的及意义随着科学技术的不断提高,计算机科学目渐成熟,计算机怩深入到工作和生活的各个角落,文字录入是学习计算机非常重要的一部分。在手写录入技术和语音识别技术还不完善的同时大部分人还在使用键盘作为文字录入的工具。所以我编了这样一个小程序,同时也是我的面向对象程序设计的课程设计。希望能对电脑初学都和想提高打字速度的朋友们有所帮助。本系统构建学生打字练习系统,基于所开发的打字程序界面友好,图形复杂。打字练习程序中应用到eclipse最新版本,java1.6以上版本的jdk。对于打字
4、测试进入整体的部署。完成打字练习程序开发,培养程序设计和开发能力。2 需求分析2.1 系统所需完成的任务打字速度测试程序。要求设计一款打字速度测试程序,要求界面良好,实现从磁盘上寻找打开一个文件、设置打字时间、时实显示打字速度和剩余时间等功能,应用到GUI,多线程,文件的输入输出等知识。需要从磁盘打开要录入文件的样本,录入前可以设定录入练习时间,录入时需要实时显示录入速度和剩余时间,录入结束后,显示录入速度和错误率。录入结束方式可以通过点击“结束测试”按钮结束测试,文章录入完成也自动结束录入,到达设置时间也自动结束录入。最后要求图形界面,界面良好美观。根据任务要求主要遇到的问题在于如何很好的监
5、听按键菜单事件,监听部分键盘如(ctrl+o和enter);如何在打开文件对话框中过滤只显示txt和目录文件,读取文件后如何一部一部地显示并能正确统计录入字数和错误字数;如何在录入文章时,同时监控系统时间,并能尽量减少cpu占用。2.2 系统功能需要分析经过对现有一般打字程序的使用者的调查与分析,得出若要编写此打字程序,本程序必需主要实现的管理功能如下:1. 添加文件。从磁盘添加现有的文本文件显示在程序界面上方。2. 设置测试时间。在打字开始前,可以设置测试时间,方便快捷地结束测试。3. 显示测试结果。结果主要包括:打字速度和错误率。4. 在录入过程中,显示当前速度和剩余时间。为了时实提醒用户
6、打字速度和打字时间必需可以时实提示打字速度和剩余时间(剩余时间是设置的测试时间减掉已使用的时间)。5. 使用菜单栏。要求菜单栏可以从“文件打开”添加文件,可以从“文件退出”退出程序,可以从“帮助关于”了解程序信息。6. 多情况结束测试。1、当测试结束时,结束测试。2、当点击“结束测试”按钮结束测试。3、当文章录入完成结束测试。3 总体设计3.1 系统设计目标从磁盘添加现有的文本文件显示在程序界面上方。在打字开始前,可以设置测试时间,方便快捷地结束测试。显示测试结果。结果主要包括:打字速度和错误率。在录入过程中,显示当前速度和剩余时间。为了时实提醒用户打字速度和打字时间必需可以时实提示打字速度和
7、剩余时间(剩余时间是设置的测试时间减掉已使用的时间)。使用菜单栏。要求菜单栏可以从“文件打开”添加文件,可以从“文件退出”退出程序,可以从“帮助关于”了解程序信息。多情况结束测试。1、当测试结束时,结束测试。2、当点击“结束测试”按钮结束测试。3、当文章录入完成结束测试。文字录入是学习计算机非常重要的一部分。在手写录入技术和语音识别技术还不完善的同时大部分人还在使用键盘作为文字录入的工具。所以我编了这样一个小程序,同时也是我的面向对象程序设计的课程设计。3.2 系统体系结构本程序主要分为以下几个子模块:添加文件、打开、退出、关于、开始测试、结束测试等。系统结构设计图如图3-1所示。打字速度测试
8、程序退出结束测试开始测试关于打开添加文件图3-1系统功能模块图3.3 程序结构设计根据分析最后决定本程序整体是用一个Typer主类和用一个TyperProgram类完成图形界面和监听响应事件,在内部用Timer类实现对系统时间监控显示和完成录入后的成绩计算。其中监听键盘和文本输入用匿名内部类来实现,TyperProgram和Timer用多线程来实现并发运行。当程序运行时TyperProgram的对象先运行,当点击开始按钮时Timer对象开始运行。主要应用到的API类有:java.io.*;java.awt.*;java.awt.event.*;javax.swing.*;javax.swing
9、.event.*;javax.swing.filechooser.FileFilter。程序的主类是Typer。需要编写的主要函数有:setWindow()用来设计用户界面,整体的JFrame用BorderLayout进行布局分成北中南三个块。其中北边是一个用GridLayout布局的JPanel分成0行2列,两列中分别是一个JTextField;中间是一个GridLayout布局的JPanel分成2行1列;南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮。setListener()用来设置多种监听,如事件监听,键盘监听,文本监听等。其中事件监听由于实现了接口Actyio
10、nListener,直接添加本类,再于函数actionPerformed()来实现,而其它监听都用的是匿名内部类来实现。很成功地完成了多种监听处理功能。putScore()用来结束测试后,统计错误率,并将错误率显示在界面,右上方的JTextField中。其它函数主要用于实现接口或者完成上面函数的部分功能。程序结构设计如图3-2class TyperProgram extends Thread implements ActionListener public void setWindow();public void setListener();public void actionPerforme
11、d(ActionEvent e)public void run()setWindow();setListener();private class Timer implements Runnablepublic void putScore()public void run()public class Typerpublic static void main(String args)TyperProgram tp=new TyperProgram();tp.start();图3-2 程序结构模块图4 详细设计4.1 起始界面设计窗口为一个添加菜单栏的JFrame,菜单栏包括主要有文件和帮助两个部分
12、,整体的JFrame用BorderLayout进行布局分成北中南三个块。其中北边是一个用GridLayout布局的JPanel分成0行2列,两列中分别是一个JTextField;中间是一个GridLayout布局的JPanel分成2行1列,每行分别为一个CardLayout布局的JPanel,其中第一行里放了一个带按钮的JPanel和一个JTextArea,第二行里为一带图片的JPanel和和个JTextArea;南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮。主要代码如下:JFrame jf=new JFrame(xxx打字高手);Container cont=jf.
13、getContentPane();cont.setLayout(new BorderLayout();jm=new JMenu(文件);jmHelp=new JMenu(帮助);jmi=new JMenuItem(打开);jmi.setActionCommand(打开);jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK);jmiExit= new JMenuItem(退出);jmiExit.setActionCommand(退出);jmiAbout=new JMenuItem(关于);jmi
14、About.setActionCommand(关于);jm.add(jmi);jm.addSeparator();jm.add(jmiExit);jmHelp.add(jmiAbout);jmb.add(jm);jmb.add(jmHelp);JPanel jptf=new JPanel(new GridLayout(0,2);jptf.add(jtf1);jptf.add(jtf2);cont.add(BorderLayout.NORTH,jptf);jpg.setLayout(new GridLayout(2,0,0,30);jta1=new JTextArea();jta2=new JTextArea()private static final long serialVersionUID = 1L;Override public void paste();jbAdd=new JButton(添加