2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  11信計(jì)2012-2013(二)</p><p>  《Java程序設(shè)計(jì)》課程設(shè)計(jì)</p><p>  設(shè)計(jì)題目 打字速度測試程序 </p><p>  設(shè)計(jì)時(shí)間  2013.6.24 至 2013.6.29 </p><p>  學(xué)生姓名 

2、 </p><p>  學(xué)生學(xué)號(hào) </p><p>  所在班級(jí)  </p><p>  指導(dǎo)教師  </p><p><b>  摘要</b><

3、;/p><p>  二十世紀(jì)后半期,計(jì)算機(jī)取得了飛速的發(fā)展?,F(xiàn)在,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,計(jì)算機(jī)已經(jīng)成為人們生活中不可或缺的一部分。但是很多人對(duì)于計(jì)算機(jī)的操作能力及認(rèn)知極為匱乏,因此提高人們對(duì)計(jì)算機(jī)的了解以及操作能力已經(jīng)非常重要。而打字速度是用來衡量一個(gè)人操作熟練程度的一個(gè)重要方面。當(dāng)前打字軟件的市場已經(jīng)達(dá)到了一定的高度,本軟件設(shè)計(jì)開發(fā)的方式是僅僅是簡單的使用戶能夠測試自己的打字速度與正確率。 本軟件使用的開發(fā)工具是J

4、AVA,它是當(dāng)前比較流行的開發(fā)工具。在構(gòu)造圖形及其處理方面具有很強(qiáng)的優(yōu)勢,能夠?yàn)橛脩魳?gòu)造一個(gè)比較美觀的打字測試界面,并且能夠很好的測試您的打字速度以及正確率,請(qǐng)用戶放心使用。</p><p>  關(guān)鍵詞:打字速度;正確率;熟練度;JAVA </p><p><b>  目錄</b></p><p>  1 設(shè)計(jì)背景和意義1</p>

5、;<p>  1.1 設(shè)計(jì)背景1</p><p>  1.2 設(shè)計(jì)目的及意義1</p><p><b>  2 需求分析1</b></p><p>  2.1 系統(tǒng)所需完成的任務(wù)1</p><p>  2.2 系統(tǒng)功能需求分析2</p><p><b>  3 總

6、體設(shè)計(jì)2</b></p><p>  3.1 系統(tǒng)設(shè)計(jì)目標(biāo)2</p><p>  3.2 系統(tǒng)體系結(jié)構(gòu)3</p><p>  3.3 程序結(jié)構(gòu)設(shè)計(jì)3</p><p><b>  4 詳細(xì)設(shè)計(jì)4</b></p><p>  4.1 起始界面設(shè)計(jì)5</p><

7、;p>  4.2 添加文件界面設(shè)計(jì)6</p><p>  4.3 設(shè)置測試時(shí)間設(shè)計(jì)7</p><p>  4.4 速度和剩余時(shí)間設(shè)計(jì)8</p><p>  4.5 顯示測試成績?cè)O(shè)計(jì)9</p><p><b>  5 系統(tǒng)測試9</b></p><p>  5.1 系統(tǒng)測試的方法1

8、0</p><p>  5.2 程序測試10</p><p><b>  6 設(shè)計(jì)總結(jié)10</b></p><p><b>  參考文獻(xiàn)11</b></p><p><b>  附錄12</b></p><p><b>  1 設(shè)計(jì)背景

9、和意義</b></p><p><b>  1.1 設(shè)計(jì)背景</b></p><p>  二十世紀(jì)的后半期,尤其是90年代后,計(jì)算機(jī)取得了飛速的發(fā)展。近來,隨著網(wǎng)絡(luò)的發(fā)展,計(jì)算機(jī)已經(jīng)成為人們生活中不可缺少的一部分。提高人們對(duì)計(jì)算機(jī)的操作能力顯得尤為重要。而打字速度是衡量一個(gè)人操作熟練的一個(gè)重要方面。因此開發(fā)一種高效的打字程序顯得迫在眉睫。目前大多數(shù)打字程序

10、都是只能在Windows下運(yùn)行,跨平臺(tái)運(yùn)行能力不是很強(qiáng)。為了適應(yīng)當(dāng)下的需求,格外需要一款能夠新的打字程序。</p><p>  本程序使用的開發(fā)工具是java1.7,它目前是比較流行的java語言開發(fā)工具,在執(zhí)行效率方面表現(xiàn)良好,在跨平臺(tái)方面更是強(qiáng)項(xiàng)。因此用戶可以放心使用。</p><p>  1.2 設(shè)計(jì)目的及意義</p><p>  隨著科學(xué)技術(shù)的不斷提高,計(jì)算

11、機(jī)科學(xué)目漸成熟,計(jì)算機(jī)怩深入到工作和生活的各個(gè)角落,文字錄入是學(xué)習(xí)計(jì)算機(jī)非常重要的一部分。在手寫錄入技術(shù)和語音識(shí)別技術(shù)還不完善的同時(shí)大部分人還在使用鍵盤作為文字錄入的工具。所以我編了這樣一個(gè)小程序,同時(shí)也是我的面向?qū)ο蟪绦蛟O(shè)計(jì)的課程設(shè)計(jì)。希望能對(duì)電腦初學(xué)都和想提高打字速度的朋友們有所幫助。</p><p>  本系統(tǒng)構(gòu)建學(xué)生打字練習(xí)系統(tǒng),基于所開發(fā)的打字程序界面友好,圖形復(fù)雜。打字練習(xí)程序中應(yīng)用到eclipse最

12、新版本,java1.7以上版本的jdk。對(duì)于打字測試進(jìn)入整體的部署。完成打字練習(xí)程序開發(fā),培養(yǎng)程序設(shè)計(jì)和開發(fā)能力。</p><p><b>  2 需求分析</b></p><p>  2.1 系統(tǒng)所需完成的任務(wù)</p><p>  打字速度測試程序。要求設(shè)計(jì)一款打字速度測試程序,要求界面良好,實(shí)現(xiàn)從磁盤上尋找打開一個(gè)文件、設(shè)置打字時(shí)間、時(shí)實(shí)顯

13、示打字速度和剩余時(shí)間等功能,應(yīng)用到GUI,多線程,文件的輸入輸出等知識(shí)。</p><p>  需要從磁盤打開要錄入文件的樣本,錄入前可以設(shè)定錄入練習(xí)時(shí)間,錄入時(shí)需要實(shí)時(shí)顯示錄入速度和剩余時(shí)間,錄入結(jié)束后,顯示錄入速度和錯(cuò)誤率。錄入結(jié)束方式可以通過點(diǎn)擊“結(jié)束測試”按鈕結(jié)束測試,文章錄入完成也自動(dòng)結(jié)束錄入,到達(dá)設(shè)置時(shí)間也自動(dòng)結(jié)束錄入。最后要求圖形界面,界面良好美觀。</p><p>  根據(jù)任

14、務(wù)要求主要遇到的問題在于如何很好的監(jiān)聽按鍵菜單事件,監(jiān)聽部分鍵盤如(ctrl+o和enter);如何在打開文件對(duì)話框中過濾只顯示txt和目錄文件,讀取文件后如何一部一部地顯示并能正確統(tǒng)計(jì)錄入字?jǐn)?shù)和錯(cuò)誤字?jǐn)?shù);如何在錄入文章時(shí),同時(shí)監(jiān)控系統(tǒng)時(shí)間,并能盡量減少cpu占用。</p><p>  2.2 系統(tǒng)功能需要分析</p><p>  經(jīng)過對(duì)現(xiàn)有一般打字程序的使用者的調(diào)查與分析,得出若要編寫此

15、打字程序,本程序必需主要實(shí)現(xiàn)的管理功能如下:</p><p>  添加文件。從磁盤添加現(xiàn)有的文本文件顯示在程序界面上方。</p><p>  設(shè)置測試時(shí)間。在打字開始前,可以設(shè)置測試時(shí)間,方便快捷地結(jié)束測試。</p><p>  顯示測試結(jié)果。結(jié)果主要包括:打字速度和錯(cuò)誤率。</p><p>  在錄入過程中,顯示當(dāng)前速度和剩余時(shí)間。為了時(shí)實(shí)

16、提醒用戶打字速度和打字時(shí)間必需可以時(shí)實(shí)提示打字速度和剩余時(shí)間(剩余時(shí)間是設(shè)置的測試時(shí)間減掉已使用的時(shí)間)。</p><p>  使用菜單欄。要求菜單欄可以從“文件——>打開”添加文件,可以從“文件——>退出”退出程序,可以從“幫助——>關(guān)于”了解程序信息。</p><p>  多情況結(jié)束測試。1、當(dāng)測試結(jié)束時(shí),結(jié)束測試。2、當(dāng)點(diǎn)擊“結(jié)束測試”按鈕結(jié)束測試。3、當(dāng)文章錄入完

17、成結(jié)束測試。</p><p><b>  3 總體設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)設(shè)計(jì)目標(biāo)</p><p>  從磁盤添加現(xiàn)有的文本文件顯示在程序界面上方。在打字開始前,可以設(shè)置測試時(shí)間,方便快捷地結(jié)束測試。顯示測試結(jié)果。結(jié)果主要包括:打字速度和錯(cuò)誤率。在錄入過程中,顯示當(dāng)前速度和剩余時(shí)間。為了時(shí)實(shí)提醒用戶打字速度和打字時(shí)間必需可

18、以時(shí)實(shí)提示打字速度和剩余時(shí)間(剩余時(shí)間是設(shè)置的測試時(shí)間減掉已使用的時(shí)間)。使用菜單欄。要求菜單欄可以從“文件——>打開”添加文件,可以從“文件——>退出”退出程序,可以從“幫助——>關(guān)于”了解程序信息。多情況結(jié)束測試。1、當(dāng)測試結(jié)束時(shí),結(jié)束測試。2、當(dāng)點(diǎn)擊“結(jié)束測試”按鈕結(jié)束測試。3、當(dāng)文章錄入完成結(jié)束測試。文字錄入是學(xué)習(xí)計(jì)算機(jī)非常重要的一部分。在手寫錄入技術(shù)和語音識(shí)別技術(shù)還不完善的同時(shí)大部分人還在使用鍵盤作為文字錄入

19、的工具。所以我編了這樣一個(gè)小程序,同時(shí)也是我的面向?qū)ο蟪绦蛟O(shè)計(jì)的課程設(shè)計(jì)。</p><p>  3.2 系統(tǒng)體系結(jié)構(gòu)</p><p>  本程序主要分為以下幾個(gè)子模塊:添加文件、打開、退出、關(guān)于、開始測試、結(jié)束測試等。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)圖如圖3-1所示。</p><p>  圖3-1系統(tǒng)功能模塊圖</p><p>  3.3 程序結(jié)構(gòu)設(shè)計(jì)</

20、p><p>  根據(jù)分析最后決定本程序整體是用一個(gè)Typer主類和用一個(gè)TyperProgram類完成圖形界面和監(jiān)聽響應(yīng)事件,在內(nèi)部用Timer類實(shí)現(xiàn)對(duì)系統(tǒng)時(shí)間監(jiān)控顯示和完成錄入后的成績計(jì)算。其中監(jiān)聽鍵盤和文本輸入用匿名內(nèi)部類來實(shí)現(xiàn),TyperProgram和Timer用多線程來實(shí)現(xiàn)并發(fā)運(yùn)行。當(dāng)程序運(yùn)行時(shí)TyperProgram的對(duì)象先運(yùn)行,當(dāng)點(diǎn)擊開始按鈕時(shí)Timer對(duì)象開始運(yùn)行。</p><p&

21、gt;  主要應(yīng)用到的API類有:</p><p>  java.io.*;java.awt.*;java.awt.event.*;javax.swing.*;javax.swing.event.*;javax.swing.filechooser.FileFilter。程序的主類是Typer。</p><p>  需要編寫的主要函數(shù)有:</p><p>  setW

22、indow()用來設(shè)計(jì)用戶界面,整體的JFrame用BorderLayout進(jìn)行布局分成北中南三個(gè)塊。其中北邊是一個(gè)用GridLayout布局的JPanel分成0行2列,兩列中分別是一個(gè)JTextField;中間是一個(gè)GridLayout布局的JPanel分成2行1列;南邊是一個(gè)FlowLayout布局的JPanel,里面放兩個(gè)居中的按鈕。</p><p>  setListener()用來設(shè)置多種監(jiān)聽,如事件監(jiān)

23、聽,鍵盤監(jiān)聽,文本監(jiān)聽等。其中事件監(jiān)聽由于實(shí)現(xiàn)了接口ActyionListener,直接添加本類,再于函數(shù)actionPerformed()來實(shí)現(xiàn),而其它監(jiān)聽都用的是匿名內(nèi)部類來實(shí)現(xiàn)。很成功地完成了多種監(jiān)聽處理功能。</p><p>  putScore()用來結(jié)束測試后,統(tǒng)計(jì)錯(cuò)誤率,并將錯(cuò)誤率顯示在界面,右上方的JTextField中。</p><p>  其它函數(shù)主要用于實(shí)現(xiàn)接口或者完

24、成上面函數(shù)的部分功能。</p><p>  程序結(jié)構(gòu)設(shè)計(jì)如圖3-2</p><p>  圖3-2 程序結(jié)構(gòu)模塊圖</p><p><b>  4 詳細(xì)設(shè)計(jì)</b></p><p>  4.1 起始界面設(shè)計(jì)</p><p>  窗口為一個(gè)添加菜單欄的JFrame,菜單欄包括主要有文件和幫助兩個(gè)部分,

25、整體的JFrame用BorderLayout進(jìn)行布局分成北中南三個(gè)塊。其中北邊是一個(gè)用GridLayout布局的JPanel分成0行2列,兩列中分別是一個(gè)JTextField;中間是一個(gè)GridLayout布</p><p>  局的JPanel分成2行1列,每行分別為一個(gè)CardLayout布局的JPanel,其中第一行里放了一個(gè)帶按鈕的JPanel和一個(gè)JTextArea,第二行里為一個(gè)JTextArea;南

26、邊是一個(gè)FlowLayout布局的JPanel,里面放兩個(gè)居中的按鈕。主要代碼如下:</p><p>  JFrame jf=new JFrame(“11控制云堯作品——打字軟件”);</p><p>  Container cont=jf.getContentPane();</p><p>  cont.setLayout(new BorderLayout());

27、</p><p>  jm=new JMenu("文件");</p><p>  jmHelp=new JMenu("幫助");</p><p>  jmi=new JMenuItem("打開");</p><p>  jmi.setActionCommand("打開&

28、quot;);</p><p>  jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL _MASK));</p><p>  jmiExit= new JMenuItem("退出");jmiExit.setActionCommand("退出");</

29、p><p>  jmiAbout=new JMenuItem("關(guān)于");jmiAbout.setActionCommand("關(guān)于");</p><p>  jm.add(jmi);jm.addSeparator();jm.add(jmiExit);</p><p>  jmHelp.add(jmiAbout);</p&g

30、t;<p>  jmb.add(jm);jmb.add(jmHelp);</p><p>  JPanel jptf=new JPanel(new GridLayout(0,2));</p><p>  jptf.add(jtf1);jptf.add(jtf2);</p><p>  cont.add(BorderLayout.NORTH,jptf);

31、</p><p>  jpg.setLayout(new GridLayout(2,0,0,30));</p><p>  jta1=new JTextArea();</p><p>  jta2=new JTextArea(){</p><p>  private static final long serialVersionUID = 1

32、L;</p><p>  @Override public void paste(){}</p><p><b>  };</b></p><p>  jbAdd=new JButton("添加文件");jbAdd.setActionCommand("打開");</p><p> 

33、 jpb=new JPanel(new CardLayout(300,80));</p><p>  jpb.add("card",jbAdd);</p><p>  jpc1.add("card1",jpb);jpc1.add("card2",jta1);</p><p>  JLabel jpng=ne

34、w JLabel(new ImageIcon("image/keyboard.jpg"));</p><p>  jpc2=new JPanel(card2);</p><p>  jpc2.add("card1",jpng);jpc2.add("card2",jta2);</p><p>  jpg.ad

35、d(jpc1);jpg.add(jpc2);</p><p>  cont.add(BorderLayout.CENTER,jpg);</p><p>  jpf=new JPanel();</p><p>  jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0));</p><p>  j

36、b1=new JButton("開始測試");jb1.setActionCommand("開始");</p><p>  jb2=new JButton("結(jié)束測試");jb2.setActionCommand("結(jié)束");</p><p>  jpf.add(jb1);jpf.add(jb2);</p&

37、gt;<p>  cont.add(BorderLayout.SOUTH,jpf);</p><p>  起始界面如圖4-1:</p><p>  圖4-1 起始界面圖</p><p>  4.2 添加文件界面設(shè)計(jì)</p><p>  添加打開文件用打開對(duì)話框,并對(duì)對(duì)話框添加文件過濾器,代碼如下:</p><

38、p>  JFileChooser fileCh=new JFileChooser();</p><p>  fileCh.setCurrentDirectory(new File("files"));</p><p>  fileCh.setFileFilter(new FileFilter(){</p><p>  public bool

39、ean accept(File f){</p><p>  return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory();</p><p><b>  }</b></p><p>  public String getDescription(){&

40、lt;/p><p>  return "文本文檔 *.txt*";</p><p><b>  }</b></p><p><b>  });</b></p><p>  if(fileCh.showOpenDialog(null)==JFileChooser.CANCEL_OPTI

41、ON)return;</p><p>  getPath=fileCh.getSelectedFile();</p><p>  if(!getPath.getPath().toLowerCase().endsWith(".txt")){</p><p>  JOptionPane.showMessageDialog(null,"請(qǐng)選擇

42、文本文檔","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  添加文件界面設(shè)計(jì)如圖4-2:</p><p>  圖4-2 添加文件

43、界面圖</p><p>  4.3 設(shè)置測試時(shí)間設(shè)計(jì)</p><p>  錄入時(shí)間設(shè)定用一個(gè)對(duì)話框?qū)崿F(xiàn),并接收輸入信息,默認(rèn)錄入測試時(shí)間為5分鐘,主要代碼如下:</p><p>  JPanel jp=new JPanel(new GridLayout(2,0));</p><p>  JLabel jlab=new JLabel("

44、;設(shè)置測試時(shí)間(分):");</p><p>  JTextField jtfTime=new JTextField();</p><p>  jtfTime.setText("5");</p><p>  jp.add(jlab);jp.add(jtfTime);</p><p>  int select=JO

45、ptionPane.showConfirmDialog(null,jp,"設(shè)置",JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);</p><p>  if(select!=JOptionPane.OK_OPTION)return;</p><p>  strTime=jtfTime.getText();&

46、lt;/p><p>  測試時(shí)間設(shè)置如圖4-3</p><p>  圖4-3 測試時(shí)間設(shè)置圖</p><p>  4.4 速度和剩余時(shí)間設(shè)計(jì)</p><p>  實(shí)時(shí)顯示錄入速度和剩余時(shí)間通過實(shí)現(xiàn)Runnable接口的一個(gè)Timer類來計(jì)算實(shí)現(xiàn)。當(dāng)開始錄入時(shí)獲取一個(gè)系統(tǒng)時(shí)間startTime=System.currentTimeMillis(),

47、然后每隔一秒獲取一個(gè)系統(tǒng)時(shí)間nowTime=System.currentTimeMillis(),同時(shí)統(tǒng)計(jì)當(dāng)前錄入的字?jǐn)?shù)count=jta2.getText().length(),字?jǐn)?shù)除以用兩個(gè)時(shí)間之差得到速度最后單位換算為(字/分);剩余時(shí)間等于設(shè)置時(shí)間減去花費(fèi)的時(shí)間remainTime=setTime-spendTime最后轉(zhuǎn)換為*分*秒。如圖4-4</p><p><b>  圖4-4測試進(jìn)行中&

48、lt;/b></p><p>  4.5 顯示測試成績</p><p>  顯示錄入速度和錯(cuò)誤率。錄入速度計(jì)算同上,錯(cuò)誤率等于總的錯(cuò)字?jǐn)?shù)/錄入總字?jǐn)?shù)error=(words+l)==0?0:((errorWords+k)*1.0/(words+l))*100(注:如果沒有錄入就結(jié)束測試,錯(cuò)誤率為0%)。如圖4-5</p><p>  圖4-5 測試結(jié)束<

49、;/p><p><b>  5 系統(tǒng)測試</b></p><p>  系統(tǒng)測試是一個(gè)系統(tǒng)在正式投入到使用運(yùn)行之前,對(duì)于該系統(tǒng)的需求分析、系統(tǒng)的設(shè)計(jì)規(guī)格、程序的可執(zhí)行代碼以及系統(tǒng)各功能模塊的使用情況等方面進(jìn)行全面的審查和驗(yàn)收,從而判斷該系統(tǒng)是否能夠滿足用戶的需求,可見系統(tǒng)測試是對(duì)系統(tǒng)質(zhì)量把關(guān)過程中至關(guān)重要的一步。</p><p>  5.1 系統(tǒng)測試

50、的方法</p><p>  運(yùn)行程序,測試程序是否能正常運(yùn)行,是否有錯(cuò)誤,或者異常,同時(shí)檢測程序的cpu和內(nèi)存的占用率。</p><p><b>  5.2 程序測試</b></p><p>  尋找若干名用戶,使用本程序進(jìn)行打字測試,征求改進(jìn)意義。正常運(yùn)行順序如下:添加文件/打開——>開始測試——>結(jié)束測試,非正常的運(yùn)行會(huì)彈出提示

51、對(duì)話框。</p><p><b>  6 設(shè)計(jì)總結(jié)</b></p><p>  本次課程設(shè)計(jì)提供了一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來,鍛煉了我分析解決實(shí)際問題的能力。提高我的適應(yīng)實(shí)際,實(shí)踐編程的能力。本課程設(shè)計(jì)旨在培養(yǎng)了我的動(dòng)手能力和學(xué)習(xí)能力。通過對(duì)動(dòng)手編寫本程序,我可以學(xué)習(xí)更多的實(shí)用內(nèi)容和方法,而這些資料多以英文方式給出,不但鍛

52、煉了我的學(xué)習(xí)能力,而且還鍛煉我的閱讀和理解能力。</p><p>  此外本程序還存在一些問題待完善,測試過程中錄入錯(cuò)字后要沒有標(biāo)記,不能很好的顯示出錯(cuò)的字。另外在一些低版本的jdk1.6中,錄入時(shí)會(huì)出現(xiàn)無法錄入英文和數(shù)字,只能輸入中文,也無法退格(backspace)的現(xiàn)象。建議使用較高版本的jdk1.6,或者使用jdk1.7以上版本。</p><p>  隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)

53、科學(xué)目漸成熟,計(jì)算機(jī)怩深入到工作和生活的各個(gè)角落,文字錄入是學(xué)習(xí)計(jì)算機(jī)非常重要的一部分。在手寫錄入技術(shù)和語音識(shí)別技術(shù)還不完善的同時(shí)大部分人還在使用鍵盤作為文字錄入的工具。所以我編了這樣一個(gè)小程序,同時(shí)也是我的面向?qū)ο蟪绦蛟O(shè)計(jì)的課程設(shè)計(jì)。希望能對(duì)電腦初學(xué)都和想提高打字速度的朋友們有所幫助。</p><p><b>  參考文獻(xiàn)</b></p><p>  《Java大學(xué)

54、實(shí)用教程》..耿祥義編著.電子工業(yè)出版社.2005年版</p><p>  2.《數(shù)據(jù)庫原理及應(yīng)用教程》.陳志泊主編.人民郵電出版社。</p><p>  3.《數(shù)據(jù)庫實(shí)驗(yàn)指導(dǎo)》.楊海霞等編著.人民郵電出版社。</p><p>  參考書:《Eclipse RCP Tutor》,Eclipse組織,網(wǎng)址http://www.eclipse.org/rcp</p

55、><p><b>  附錄:</b></p><p><b>  源程序:</b></p><p>  import java.io.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p&

56、gt;<p>  import javax.swing.*;</p><p>  import javax.swing.event.*;</p><p>  import javax.swing.filechooser.FileFilter;</p><p>  class TyperProgram extends Thread implements

57、ActionListener {</p><p>  private JPanel jpc1,jpc2;</p><p>  private JMenuItem jmi,jmiExit,jmiAbout;</p><p>  private JTextField jtf1,jtf2;</p><p>  private JTextArea j

58、ta1,jta2;</p><p>  private JButton jb1,jb2,jbAdd;</p><p>  private CardLayout card1,card2;</p><p>  private String state="",strTime="";</p><p>  pri

59、vate StringBuffer strbFile;</p><p>  private int words,errorWords;</p><p>  private double startTime;</p><p>  private File getPath;</p><p>  private BufferedReader buf

60、;</p><p>  private boolean fileOver,lock=true;</p><p>  private class Timer implements Runnable{</p><p>  public void putScore(){</p><p>  jta2.setEditable(false);</

61、p><p>  String str1,str2;int l1,l2;</p><p>  str1=jta1.getText();l1=str1.length();</p><p>  str2=jta2.getText();l2=str2.length();</p><p>  double error;</p><p&g

62、t;  int k=l1<l2?l2-l1:0,l=l1<l2?l1:l2;</p><p>  for(int i=0;i<l;i++)</p><p>  if(str1.charAt(i)!=str2.charAt(i))</p><p><b>  k++;</b></p><p>  erro

63、r=(words+l)==0?0:((errorWords+k)*1.0/(words+l))*100;</p><p>  jtf2.setText("錯(cuò)誤率:"+Math.ceil(error*100)/100.0+"%");</p><p>  errorWords=0;words=0;</p><p>  state=

64、"addFile";lock=true;</p><p>  jb1.requestFocus();</p><p><b>  }</b></p><p>  public void run(){</p><p>  double nowTime,spendTime,setTime,speed=0,

65、remainTime;</p><p>  int count,remainMin,remainSec;</p><p>  nowTime=System.currentTimeMillis();</p><p>  spendTime=(nowTime-startTime)/60000;</p><p>  setTime=Double.p

66、arseDouble(strTime);</p><p>  while(spendTime<setTime&&!state.equals("over")){</p><p>  count=jta2.getText().length();</p><p>  speed=(words+count)/spendTime;&l

67、t;/p><p>  remainTime=setTime-spendTime;</p><p>  remainMin=(int)remainTime;</p><p>  remainSec=(int)Math.round((remainTime-remainMin)*60);</p><p>  jtf1.setText("當(dāng)前的

68、速度:"+Math.round(speed)+"字/分");</p><p>  jtf2.setText("剩余時(shí)間:"+remainMin+"分"+remainSec+"秒");</p><p><b>  try{</b></p><p>  Thr

69、ead.sleep(1000);</p><p>  }catch(Exception e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  nowTime=System.currentTimeMillis();</p><p

70、>  spendTime=(nowTime-startTime)/60000;</p><p><b>  }</b></p><p>  jtf1.setText("速度:"+Math.round(speed)+"字/分");</p><p>  putScore();</p>&l

71、t;p><b>  }</b></p><p><b>  }</b></p><p>  public void setWindow(){</p><p>  JFrame jf=new JFrame("11控制云堯作品——打字軟件");</p><p>  Contai

72、ner cont=jf.getContentPane();</p><p>  cont.setLayout(new BorderLayout());</p><p>  Font ft=new Font("新新字體",Font.PLAIN,20);</p><p>  JMenuBar jmb=new JMenuBar();</p>

73、<p>  JMenu jm,jmHelp;</p><p>  jm=new JMenu("文件");</p><p>  jmHelp=new JMenu("幫助");</p><p>  jmi=new JMenuItem("打開");jmi.setActionCommand("

74、;打開");</p><p>  jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));</p><p>  jmiExit= new JMenuItem("退出");jmiExit.setActionCommand("退出");<

75、/p><p>  jmiAbout=new JMenuItem("關(guān)于");jmiAbout.setActionCommand("關(guān)于");</p><p>  jm.add(jmi);jm.addSeparator();jm.add(jmiExit);</p><p>  jmHelp.add(jmiAbout);</p&

76、gt;<p>  jmb.add(jm);jmb.add(jmHelp);</p><p>  jtf1=new JTextField();</p><p>  jtf1.setFont(ft);</p><p>  jtf1.setEditable(false);</p><p>  jtf2=new JTextField()

77、;</p><p>  jtf2.setFont(ft);</p><p>  jtf2.setEditable(false);</p><p>  JPanel jptf=new JPanel(new GridLayout(0,2));</p><p>  jptf.add(jtf1);jptf.add(jtf2);</p>

78、<p>  cont.add(BorderLayout.NORTH,jptf);</p><p>  JPanel jpg,jpf,jpb;</p><p>  jpg=new JPanel();</p><p>  jpg.setLayout(new GridLayout(2,0,0,30));</p><p>  jta1=ne

79、w JTextArea();</p><p>  jta2=new JTextArea(){</p><p>  private static final long serialVersionUID = 1L;</p><p>  @Override public void paste(){}</p><p><b>  };<

80、;/b></p><p>  jta1.setFont(ft);</p><p>  jta1.setLineWrap(true);</p><p>  jta1.setEditable(false);</p><p>  jta1.setBackground(new Color(200,255,200));</p>&l

81、t;p>  jta2.setFont(ft);</p><p>  jta2.setLineWrap(true);</p><p>  jta2.setEditable(false);</p><p>  jta2.setBackground(new Color(200,200,255));</p><p>  jbAdd=new JB

82、utton("添加文件");</p><p>  jbAdd.setActionCommand("打開");</p><p>  jpb=new JPanel(new CardLayout(300,80));</p><p>  jpb.add("card",jbAdd);</p><p

83、>  card1=new CardLayout();</p><p>  jpc1=new JPanel(card1);</p><p>  jpc1.add("card1",jpb);jpc1.add("card2",jta1);</p><p>  card2=new CardLayout();</p>

84、<p>  jpc2=new JPanel(card2);</p><p>  jpc2.add("card2",jta2);</p><p>  jpg.add(jpc1);jpg.add(jpc2);</p><p>  cont.add(BorderLayout.CENTER,jpg);</p><p>

85、  jpf=new JPanel();</p><p>  jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0));</p><p>  jb1=new JButton("開始測試");jb1.setActionCommand("開始");</p><p>  jb2=new

86、 JButton("結(jié)束測試");jb2.setActionCommand("結(jié)束");</p><p>  jpf.add(jb1);jpf.add(jb2);</p><p>  cont.add(BorderLayout.SOUTH,jpf);</p><p>  jf.setBounds(250,50,810,630)

87、;</p><p>  Toolkit toolkit = jf.getToolkit();</p><p>  Image image = toolkit.getImage("image/chen.png");</p><p>  jf.setIconImage(image);</p><p>  jf.setJMenu

88、Bar(jmb);</p><p>  jf.setVisible(true);</p><p>  jbAdd.requestFocus();</p><p>  jf.setResizable(false);</p><p>  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</

89、p><p><b>  }</b></p><p>  public void readyFile(){</p><p>  String strFile="";</p><p>  FileReader in=null;</p><p><b>  try{</

90、b></p><p>  String strLine="";</p><p>  in=new FileReader(getPath);</p><p>  buf=new BufferedReader(in);</p><p>  strLine=buf.readLine();</p><p&

91、gt;  while(strLine!=null){</p><p>  strFile+=strLine;</p><p>  strLine=buf.readLine();</p><p><b>  }</b></p><p>  }catch(IOException e1){</p><p&g

92、t;  e1.printStackTrace();</p><p><b>  }</b></p><p>  strbFile=new StringBuffer(strFile);</p><p>  fileOver=false;</p><p><b>  }</b></p>&

93、lt;p>  public void readFile(){</p><p>  String strPart=""; int n=320;</p><p>  if(strbFile.length()<=n){</p><p>  jta1.setText(strbFile+"\n");</p>&

94、lt;p>  fileOver=true;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  strPart=strbFile.substring(0,n);</p><p>  strbFile=strbFile.delete(0

95、,n);</p><p>  jta1.setText(strPart+"\n");</p><p><b>  }</b></p><p>  public void addFile(){</p><p>  JFileChooser fileCh=new JFileChooser();</p

96、><p>  fileCh.setCurrentDirectory(new File("files"));</p><p>  fileCh.setFileFilter(new FileFilter(){</p><p>  public boolean accept(File f){</p><p>  return f.g

97、etName().toLowerCase().endsWith(".txt")||f.isDirectory();</p><p><b>  }</b></p><p>  public String getDescription(){</p><p>  return "文本文檔 *.txt*";&l

98、t;/p><p><b>  }</b></p><p><b>  });</b></p><p>  if(fileCh.showOpenDialog(null)==JFileChooser.CANCEL_OPTION)return;</p><p>  getPath=fileCh.getSele

99、ctedFile();</p><p>  if(!getPath.getPath().toLowerCase().endsWith(".txt")){</p><p>  JOptionPane.showMessageDialog(null,"請(qǐng)選擇文本文檔","提示",JOptionPane.INFORMATION_MESSA

100、GE);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  readyFile();</p><p>  readFile();</p><p>  state="addFile";</p

101、><p>  card1.show(jpc1,"card2");</p><p>  jb1.requestFocus();</p><p><b>  }</b></p><p>  public boolean isDigit(String str){</p><p><

102、b>  int k=0;</b></p><p>  if(str.equals(""))return false;</p><p>  for(int i=0;i<str.length();i++){</p><p>  if(str.charAt(i)=='.'&&k++==0)i++;

103、</p><p>  if(!Character.isDigit(str.charAt(i)))return false;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  pub

104、lic void setstart(){</p><p>  JPanel jp=new JPanel(new GridLayout(2,0));</p><p>  JLabel jlab=new JLabel("設(shè)置測試時(shí)間(分):");</p><p>  JTextField jtfTime=new JTextField();</p

105、><p>  jtfTime.setText("5");</p><p>  jp.add(jlab);jp.add(jtfTime);</p><p>  int select=JOptionPane.showConfirmDialog(null,jp,"設(shè)置",JOptionPane.OK_CANCEL_OPTION,JOpt

106、ionPane.PLAIN_MESSAGE);</p><p>  if(select!=JOptionPane.OK_OPTION)return;</p><p>  strTime=jtfTime.getText();</p><p>  if(isDigit(strTime)){</p><p>  if(jta1.getText()!

107、=null){</p><p>  readyFile();</p><p>  readFile();</p><p><b>  }</b></p><p>  card2.show(jpc2,"card2");</p><p>  jta2.setText(null);&

108、lt;/p><p>  jta2.setEditable(true);</p><p>  jta2.requestFocus();</p><p>  state="start";</p><p>  lock=false;</p><p>  startTime=System.currentTime

109、Millis();</p><p>  Timer ti=new Timer();</p><p>  Thread t=new Thread(ti);</p><p>  t.start();</p><p><b>  }</b></p><p><b>  else{</b&

110、gt;</p><p>  JOptionPane.showMessageDialog(null,"請(qǐng)輸入數(shù)字","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  }</b></p><p><b>  }</b></p&

111、gt;<p>  public void setListener(){</p><p>  jmi.addActionListener(this);</p><p>  jmiExit.addActionListener(this);</p><p>  jmiAbout.addActionListener(this);</p><

112、p>  jbAdd.addActionListener(this);</p><p>  jb1.addActionListener(this);</p><p>  jb2.addActionListener(this);</p><p>  jbAdd.addKeyListener(new KeyListener(){</p><p&g

113、t;  public void keyPressed(KeyEvent e1){</p><p>  if(e1.getKeyCode()==KeyEvent.VK_ENTER)</p><p>  addFile();</p><p><b>  }</b></p><p>  public void keyRelea

114、sed(KeyEvent e2){}</p><p>  public void keyTyped(KeyEvent e2){}</p><p><b>  });</b></p><p>  jta2.getDocument().addDocumentListener(new DocumentListener(){</p>&l

115、t;p>  public void insertUpdate(DocumentEvent e1){</p><p>  String str1=jta1.getText();</p><p>  String str2=jta2.getText();</p><p>  if(str1.length()==str2.length()&&str2

116、.endsWith("\n")){</p><p>  if(fileOver){</p><p>  state="over";</p><p><b>  }</b></p><p><b>  else{</b></p><p>

117、  words+=str2.length();</p><p>  for(int i=0;i<str2.length();i++)</p><p>  if(str1.charAt(i)!=str2.charAt(i))</p><p>  errorWords++;</p><p>  EventQueue.invokeLater(

118、new Runnable(){</p><p>  public void run() {</p><p>  jta2.setText(null);</p><p><b>  }</b></p><p><b>  });</b></p><p>  readFile()

119、;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public void changedUpdate(DocumentEvent e2){}</p><p> 

120、 public void removeUpdate(DocumentEvent e3){}</p><p><b>  });</b></p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e){</p><p>

121、  String strAction=e.getActionCommand();</p><p>  if(strAction=="打開"&&lock){</p><p>  addFile();</p><p><b>  }</b></p><p>  else if(strAct

122、ion=="退出"){</p><p>  System.exit(1);</p><p><b>  }</b></p><p>  else if(strAction=="關(guān)于"){</p><p>  String str="版權(quán)所有(c):云堯";<

123、;/p><p>  JOptionPane.showMessageDialog(null,str,"關(guān)于",JOptionPane.PLAIN_MESSAGE);</p><p><b>  }</b></p><p>  else if(strAction=="開始"&&lock){<

124、/p><p>  if(!state.equals("addFile"))</p><p>  JOptionPane.showMessageDialog(null,"你還沒有添加有效文檔","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  el

125、se</b></p><p>  setstart();</p><p><b>  }</b></p><p>  else if(strAction=="結(jié)束"){</p><p>  if(!state.equals("start"))</p>&l

126、t;p>  JOptionPane.showMessageDialog(null,"你還沒有測試","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  else</b></p><p>  state="over";</p><p

127、><b>  }</b></p><p><b>  }</b></p><p>  public void run(){</p><p>  setWindow();</p><p>  setListener();</p><p><b>  }</

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論