Java程序设计“打字程序”_第1页
Java程序设计“打字程序”_第2页
Java程序设计“打字程序”_第3页
Java程序设计“打字程序”_第4页
Java程序设计“打字程序”_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 设置测试时间

2、设计84.4 速度和剩余时间设计94.5 显示测试成绩设计105 系统测试115.1 系统测试的方法115.2 程序测试116 设计总结11参考文献12附录121 开发背景和意义1.1 开发背景二十世纪的后半期,尤其是90年代后,计算机取得了飞速的发展。近来,随着网络的发展,计算机已经成为人们生活中不可缺少的一部分。提高人们对计算机的操作能力显得尤为重要。而打字速度是衡量一个人操作熟练的一个重要方面。因此开发一种高效的打字程序显得迫在眉睫。目前大多数打字程序都是只能在Windows下运行,跨平台运行能力不是很强。为了适应当下的需求,格外需要一款能够新的打字程序。本程序使用的开发工具是java1

3、.6,它目前是比较流行的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.sw

9、ing.event.*;javax.swing.filechooser.FileFilter。程序的主类是Typer。需要编写的主要函数有:setWindow()用来设计用户界面,整体的JFrame用BorderLayout进行布局分成北中南三个块。其中北边是一个用GridLayout布局的JPanel分成0行2列,两列中分别是一个JTextField;中间是一个GridLayout布局的JPanel分成2行1列;南边是一个FlowLayout布局的JPanel,里面放两个居中的按钮。setListener()用来设置多种监听,如事件监听,键盘监听,文本监听等。其中事件监听由于实现了接口Act

10、yionListener,直接添加本类,再于函数actionPerformed()来实现,而其它监听都用的是匿名内部类来实现。很成功地完成了多种监听处理功能。putScore()用来结束测试后,统计错误率,并将错误率显示在界面,右上方的JTextField中。其它函数主要用于实现接口或者完成上面函数的部分功能。程序结构设计如图3-2class TyperProgram extends Thread implements ActionListener public void setWindow();public void setListener();public void actionPerfo

11、rmed(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=

13、jf.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(关于);

14、jmiAbout.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

15、 JTextArea()private static final long serialVersionUID = 1L;Override public void paste();jbAdd=new JButton(添加文件);jbAdd.setActionCommand(打开);jpb=new JPanel(new CardLayout(300,80);jpb.add(card,jbAdd);jpc1.add(card1,jpb);jpc1.add(card2,jta1);JLabel jpng=new JLabel(new ImageIcon(image/keyboard.jpg);jpc2

16、=new JPanel(card2);jpc2.add(card1,jpng);jpc2.add(card2,jta2);jpg.add(jpc1);jpg.add(jpc2);cont.add(BorderLayout.CENTER,jpg);jpf=new JPanel();jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0);jb1=new JButton(开始测试);jb1.setActionCommand(开始);jb2=new JButton(结束测试);jb2.setActionCommand(结束);jpf.add(jb1);

17、jpf.add(jb2);cont.add(BorderLayout.SOUTH,jpf);起始界面如图4-1:图4-1 起始界面图4.2 添加文件界面设计添加打开文件用打开对话框,并对对话框添加文件过滤器,代码如下:JFileChooser fileCh=new JFileChooser();fileCh.setCurrentDirectory(new File(files);fileCh.setFileFilter(new FileFilter()public boolean accept(File f)return f.getName().toLowerCase().endsWith(.

18、txt)|f.isDirectory();public String getDescription()return 文本文档 *.txt*;);if(fileCh.showOpenDialog(null)=JFileChooser.CANCEL_OPTION)return;getPath=fileCh.getSelectedFile();if(!getPath.getPath().toLowerCase().endsWith(.txt)JOptionPane.showMessageDialog(null,请选择文本文档,提示,JOptionPane.INFORMATION_MESSAGE);r

19、eturn;添加文件界面设计如图4-2:图4-2 添加文件界面图4.3 设置测试时间设计录入时间设定用一个对话框实现,并接收输入信息,默认录入测试时间为5分钟,主要代码如下:JPanel jp=new JPanel(new GridLayout(2,0);JLabel jlab=new JLabel(设置测试时间(分):);JTextField jtfTime=new JTextField();jtfTime.setText(5);jp.add(jlab);jp.add(jtfTime);int select=JOptionPane.showConfirmDialog(null,jp,设置,J

20、OptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);if(select!=JOptionPane.OK_OPTION)return;strTime=jtfTime.getText();测试时间设置如图4-3图4-3 测试时间设置图4.4 速度和剩余时间设计实时显示录入速度和剩余时间通过实现Runnable接口的一个Timer类来计算实现。当开始录入时获取一个系统时间startTime=System.currentTimeMillis(),然后每隔一秒获取一个系统时间nowTime=System.currentTimeMillis(),同

21、时统计当前录入的字数count=jta2.getText().length(),字数除以用两个时间之差得到速度最后单位换算为(字/分);剩余时间等于设置时间减去花费的时间remainTime=setTime-spendTime最后转换为*分*秒。如图4-4图4-4 测试进行中4.5 显示测试成绩显示录入速度和错误率。录入速度计算同上,错误率等于总的错字数/录入总字数error=(words+l)=0?0:(errorWords+k)*1.0/(words+l)*100(注:如果没有录入就结束测试,错误率为0%)。如图4-5图4-5 测试结束5 系统测试系统测试是一个系统在正式投入到使用运行之前

22、,对于该系统的需求分析、系统的设计规格、程序的可执行代码以及系统各功能模块的使用情况等方面进行全面的审查和验收,从而判断该系统是否能够满足用户的需求,可见系统测试是对系统质量把关过程中至关重要的一步。5.1 系统测试的方法运行程序,测试程序是否能正常运行,是否有错误,或者异常,同时检测程序的cpu和内存的占用率。5.2 程序测试寻找若干名用户,使用本程序进行打字测试,征求改进意义。正常运行顺序如下:添加文件/打开开始测试结束测试,非正常的运行会弹出提示对话框。6 设计总结本次课程设计提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼了我分析解决实际问题的能力。

23、提高我的适应实际,实践编程的能力。本课程设计旨在培养了我的动手能力和学习能力。通过对动手编写本程序,我可以学习更多的实用内容和方法,而这些资料多以英文方式给出,不但锻炼了我的学习能力,而且还锻炼我的阅读和理解能力。此外本程序还存在一些问题待完善,测试过程中录入错字后要没有标记,不能很好的显示出错的字。另外在一些低版本的jdk1.6中,录入时会出现无法录入英文和数字,只能输入中文,也无法退格(backspace)的现象。建议使用较高版本的jdk1.6,或者使用jdk1.7以上版本。随着科学技术的不断提高,计算机科学目渐成熟,计算机怩深入到工作和生活的各个角落,文字录入是学习计算机非常重要的一部分

24、。在手写录入技术和语音识别技术还不完善的同时大部分人还在使用键盘作为文字录入的工具。所以我编了这样一个小程序,同时也是我的面向对象程序设计的课程设计。希望能对电脑初学都和想提高打字速度的朋友们有所帮助。参考文献1 Java大学实用教程.耿祥义编著.电子工业出版社.2005年版2数据库原理及应用教程.陈志泊主编.人民邮电出版社。3数据库实验指导.杨海霞等编著.人民邮电出版社。参考书:Eclipse RCP Tutor,Eclipse组织,网址/rcp附录import java.io.*;import java.awt.*;import java.awt.

25、event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.filechooser.FileFilter;class TyperProgram extends Thread implements ActionListener private JPanel jpc1,jpc2;private JMenuItem jmi,jmiExit,jmiAbout;private JTextField jtf1,jtf2;private JTextArea jta1,jta2;private JButton jb1,j

26、b2,jbAdd;private CardLayout card1,card2;private String state=,strTime=;private StringBuffer strbFile;private int words,errorWords;private double startTime;private File getPath;private BufferedReader buf;private boolean fileOver,lock=true;private class Timer implements Runnablepublic void putScore()j

27、ta2.setEditable(false);String str1,str2;int l1,l2;str1=jta1.getText();l1=str1.length();str2=jta2.getText();l2=str2.length();double error;int k=l1l2?l2-l1:0,l=l1l2?l1:l2;for(int i=0;il;i+)if(str1.charAt(i)!=str2.charAt(i)k+;error=(words+l)=0?0:(errorWords+k)*1.0/(words+l)*100;jtf2.setText(错误率:+Math.c

28、eil(error*100)/100.0+%);errorWords=0;words=0;state=addFile;lock=true;jb1.requestFocus();public void run()double nowTime,spendTime,setTime,speed=0,remainTime;int count,remainMin,remainSec;nowTime=System.currentTimeMillis();spendTime=(nowTime-startTime)/60000;setTime=Double.parseDouble(strTime);while(

29、spendTimesetTime&!state.equals(over)count=jta2.getText().length();speed=(words+count)/spendTime;remainTime=setTime-spendTime;remainMin=(int)remainTime;remainSec=(int)Math.round(remainTime-remainMin)*60);jtf1.setText(当前的速度:+Math.round(speed)+字/分);jtf2.setText(剩余时间:+remainMin+分+remainSec+秒);tryThread.

30、sleep(1000);catch(Exception e)e.printStackTrace();nowTime=System.currentTimeMillis();spendTime=(nowTime-startTime)/60000;jtf1.setText(速度:+Math.round(speed)+字/分);putScore();public void setWindow()JFrame jf=new JFrame(xxx打字高手);Container cont=jf.getContentPane();cont.setLayout(new BorderLayout();Font f

31、t=new Font(新新字体,Font.PLAIN,20);JMenuBar jmb=new JMenuBar();JMenu jm,jmHelp;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(退出);jmiAbo

32、ut=new JMenuItem(关于);jmiAbout.setActionCommand(关于);jm.add(jmi);jm.addSeparator();jm.add(jmiExit);jmHelp.add(jmiAbout);jmb.add(jm);jmb.add(jmHelp);jtf1=new JTextField();jtf1.setFont(ft);jtf1.setEditable(false);jtf2=new JTextField();jtf2.setFont(ft);jtf2.setEditable(false);JPanel jptf=new JPanel(new G

33、ridLayout(0,2);jptf.add(jtf1);jptf.add(jtf2);cont.add(BorderLayout.NORTH,jptf);JPanel jpg,jpf,jpb;jpg=new JPanel();jpg.setLayout(new GridLayout(2,0,0,30);jta1=new JTextArea();jta2=new JTextArea()private static final long serialVersionUID = 1L;Override public void paste();jta1.setFont(ft);jta1.setLin

34、eWrap(true);jta1.setEditable(false);jta1.setBackground(new Color(200,255,200);jta2.setFont(ft);jta2.setLineWrap(true);jta2.setEditable(false);jta2.setBackground(new Color(200,200,255);jbAdd=new JButton(添加文件);jbAdd.setActionCommand(打开);jpb=new JPanel(new CardLayout(300,80);jpb.add(card,jbAdd);card1=n

35、ew CardLayout();jpc1=new JPanel(card1);jpc1.add(card1,jpb);jpc1.add(card2,jta1);JLabel jpng=new JLabel(new ImageIcon(image/keyboard.jpg);card2=new CardLayout();jpc2=new JPanel(card2);jpc2.add(card1,jpng);jpc2.add(card2,jta2);jpg.add(jpc1);jpg.add(jpc2);cont.add(BorderLayout.CENTER,jpg);jpf=new JPane

36、l();jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0);jb1=new JButton(开始测试);jb1.setActionCommand(开始);jb2=new JButton(结束测试);jb2.setActionCommand(结束);jpf.add(jb1);jpf.add(jb2);cont.add(BorderLayout.SOUTH,jpf);jf.setBounds(250,50,810,630);Toolkit toolkit = jf.getToolkit();Image image = toolkit.getIm

37、age(image/chen.png);jf.setIconImage(image);jf.setJMenuBar(jmb);jf.setVisible(true);jbAdd.requestFocus();jf.setResizable(false);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public void readyFile()String strFile=;FileReader in=null;tryString strLine=;in=new FileReader(getPath);buf=new BufferedRea

38、der(in);strLine=buf.readLine();while(strLine!=null)strFile+=strLine;strLine=buf.readLine();catch(IOException e1)e1.printStackTrace();strbFile=new StringBuffer(strFile);fileOver=false;public void readFile()String strPart=; int n=320;if(strbFile.length()=n)jta1.setText(strbFile+n);fileOver=true;return

39、;strPart=strbFile.substring(0,n);strbFile=strbFile.delete(0,n);jta1.setText(strPart+n);public void addFile()JFileChooser fileCh=new JFileChooser();fileCh.setCurrentDirectory(new File(files);fileCh.setFileFilter(new FileFilter()public boolean accept(File f)return f.getName().toLowerCase().endsWith(.t

40、xt)|f.isDirectory();public String getDescription()return 文本文档 *.txt*;);if(fileCh.showOpenDialog(null)=JFileChooser.CANCEL_OPTION)return;getPath=fileCh.getSelectedFile();if(!getPath.getPath().toLowerCase().endsWith(.txt)JOptionPane.showMessageDialog(null,请选择文本文档,提示,JOptionPane.INFORMATION_MESSAGE);re

41、turn;readyFile();readFile();state=addFile;card1.show(jpc1,card2);jb1.requestFocus();public boolean isDigit(String str)int k=0;if(str.equals()return false;for(int i=0;istr.length();i+)if(str.charAt(i)=.&k+=0)i+;if(!Character.isDigit(str.charAt(i)return false;return true;public void setstart()JPanel j

42、p=new JPanel(new GridLayout(2,0);JLabel jlab=new JLabel(设置测试时间(分):);JTextField jtfTime=new JTextField();jtfTime.setText(5);jp.add(jlab);jp.add(jtfTime);int select=JOptionPane.showConfirmDialog(null,jp,设置,JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);if(select!=JOptionPane.OK_OPTION)return;

43、strTime=jtfTime.getText();if(isDigit(strTime)if(jta1.getText()!=null)readyFile();readFile();card2.show(jpc2,card2);jta2.setText(null);jta2.setEditable(true);jta2.requestFocus();state=start;lock=false;startTime=System.currentTimeMillis();Timer ti=new Timer();Thread t=new Thread(ti);t.start();elseJOptionPane.showMessageDialog(null,请输入数字,提示,JOptionPane.INFORMATION_MESSAGE);public void setListener()jmi.addActionListener(this);jmiExit.addActionListener(this);jmiAbout.addActionListener(this);jbAdd.addActionListener(t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论