明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

數(shù)字小鍵盤指法練習

[摘要]數(shù)字小鍵盤指法練習是用來練習指法的一個小軟件,當初我之所以編寫這個軟件是因為我要參加今年夏天四川省的高考通分工作,我的指法太爛,速度太慢了,而且還因為不滿學校給我們提供的用來練習指法的軟件,是這樣的,在高考的通分中,大部分分數(shù)就不帶小數(shù)點,帶小數(shù)點也是只有.5小數(shù)點,而學校給我們的那個軟件在產(chǎn)生數(shù)...
數(shù)字小鍵盤指法練習是用來練習指法的一個小軟件,當初我之所以編寫這個軟件是因為我要參加今年夏天四川省的高考通分工作,我的指法太爛,速度太慢了,而且還因為不滿學校給我們提供的用來練習指法的軟件,是這樣的,在高考的通分中,大部分分數(shù)就不帶小數(shù)點,帶小數(shù)點也是只有.5小數(shù)點,而學校給我們的那個軟件在產(chǎn)生數(shù)據(jù)的時候全部帶有小數(shù)點如:52.1、68.3、69.4等,這個還可以忍受,更讓人感覺不好的居然那個軟件有時間限制,我們在打開它的時候它就自動關閉了,而老師給我們的提示是叫我們改變系統(tǒng)時間來進行指法練習,我當然不滿這種做法了,于是自己寫了這個軟件,好了下面我就來介紹一下我是如何實現(xiàn)的,先還是來介紹一下它的功能吧,然后在介紹是如何進行編碼的:



該軟件具有如下功能:

1、具有數(shù)字鍵指法練習的一般功能即能夠進行指法練習

2、具有“選項”參數(shù)設置功能,選項參數(shù)如下:

A: 輸入數(shù)據(jù):數(shù)據(jù)是否帶有小數(shù)點,是否部分數(shù)據(jù)帶有.5小數(shù)點等

B: 測試速度:擊鍵速度和單詞速度

C: 其它屬性:測試時間、顯示輸入錯誤的信息的延遲時間、是否屏蔽非數(shù)字鍵

3、具有“選項”參數(shù)記憶功能,它能夠記住用戶上一次的選項設置,它會按照用戶上一次的設置來初始化程序



數(shù)據(jù)的產(chǎn)生:

       既然是數(shù)字鍵指法練習,那練習時的數(shù)據(jù)來源肯定是重中之重了,我是通過一個函數(shù)來實現(xiàn)的,它根據(jù)接受的整型參數(shù)來產(chǎn)生滿足要求的數(shù)據(jù),其中用到了random()這個函數(shù)來產(chǎn)生隨機數(shù),通過該函數(shù)代碼如下:



AnsiString __fastcall TfrmMain::RandNum(int Flag)

{

    //TODO: Add your source code here

    double RandNum;

    switch (Flag)

    {

      case 1:   //全部數(shù)字不帶有小數(shù)點

            RandNum=random (100);

            break;

      case 2:   //部分數(shù)字帶有小數(shù)點

            RandNum=random (100);

            if (rand()%2)

            {

                RandNum=RandNum+(rand()%10)/double(10);

            }

            break;

      case 3:

            RandNum=random (100);

            RandNum=RandNum+(rand()%10)/double(10);

            break;

      case 4:

            RandNum=random (100);

            RandNum=RandNum+0.5;

            break;

      case 5:

            RandNum=random (100);

            if(rand()%2)

            {

                RandNum=RandNum+0.5;

            }

            break;

      default:  //全部數(shù)字不帶有小數(shù)點

            RandNum=random (100);

    }

    return AnsiString(RandNum);

}



測試速度:

       該軟件的速度測試分兩種:擊鍵速度和單詞速度,擊鍵速度表示用戶每分鐘用戶的擊鍵書,而單詞速度則表示用戶每分鐘用戶所輸入的數(shù)字個數(shù),測試速度的取得我也是通過一個函數(shù)來實現(xiàn)的,該函數(shù)代碼如下:

void __fastcall TfrmMain::Stat(int flagSpeed)

{

    //TODO: Add your source code here

    dwTimeElapse=timeGetTime()-dwTimeStart;

    

    stTime->Caption="剩余時間:"+AnsiString(tmTest-dwTimeElapse/1000)+" 秒";

    switch (flagSpeed)

    {

      case 1: //擊鍵速度

        if (dwTimeElapse>0)

        {

        long int temp1=(60*1000*(NumCount)/dwTimeElapse);

        stSpeed->Caption="擊鍵速度:"+AnsiString(temp1)+"/分";

            //紀錄速度

        recSpeed=temp1;

        }

        stWordNum->Caption="擊鍵數(shù):"+AnsiString(NumCount);

       break;

      case 2: //單詞速度

        if (dwTimeElapse>0)

        {

        long int temp2=(60*1000*(NumCount)/dwTimeElapse);

        stSpeed->Caption="單詞速度:"+AnsiString(temp2)+"/分";

            //紀錄速度

        recSpeed=temp2;

        }

        stWordNum->Caption="單詞數(shù):"+AnsiString(wordNum);

        //ShowMessage(flagSpeed);

        break;

    }  



    if (wordNum>0)

    {

        long int temp=100*(wordNum-WrongNum)/wordNum;

        stCorrRate->Caption="正確率:"+AnsiString(temp)+"%";

            //紀錄正確率

        recCorrRate=temp;

    }

    else

    {

        stCorrRate->Caption="正確率:"+AnsiString(0)+"%";

            //紀錄正確率

        recCorrRate=0;

    }

}

上面的代碼種用到了一個Win32 API函數(shù)timeGetTime(),它的作用是取得系統(tǒng)自啟動到現(xiàn)在所經(jīng)歷的時間,以毫秒為單位,它的聲明如下:



DWORD timeGetTime(VOID);



“選項”參數(shù)記憶功能:

       該軟件具體參數(shù)屬性的記憶功能,能夠?qū)崿F(xiàn)的方式非常多,如可以通過ini文件,一般文件來達到記憶的功能,還可以通過注冊表來完成該功能,我在實現(xiàn)的時候選擇了通過通過注冊表來實現(xiàn),我主要用到了getKeyValue()和setKeyValue()兩個函數(shù)來完成該功能,getKeyValue()的功能是取得注冊表中某個鍵的值,而setKeyValue()的功能則是設置注冊表中某項的值代碼如下:

getKeyValue()函數(shù):

AnsiString getKeyValue(AnsiString RegPath,AnsiString Key)

{

    //TODO: Add your source code here

    TRegistry *Registry = new TRegistry;

    AnsiString Result="";

    try

    {

        Registry->OpenKey(RegPath,false);

        Result=Registry->ReadString(Key);

    }

    __finally

    {

        delete  Registry;

    }

    return Result;

}

setKeyValue()函數(shù):

bool setKeyValue(AnsiString RegPath,AnsiString Key,AnsiString Value)

{

    //TODO: Add your source code here

    TRegistry *Registry = new TRegistry;

    try

    {

        Registry->OpenKey(RegPath,true);

        Registry->WriteString(Key,Value);

    }

     __finally

    {

        delete Registry;

    }

    return true;

}



以上介紹的只是該軟件中的一些比較重要功能的實現(xiàn),其實作為一個軟件,它還有許多方面可以沒有介紹或者是很難說清楚,如果你對該軟件感興趣的話可以下載該軟件的所有源碼,網(wǎng)址:http://www.zccfamily.com/zqget/, 它是用Borland C++ Builder開發(fā)的,如果你對該軟件有任何意見或建議,或者想與我共同探討,交流想法的話,我的聯(lián)系方式: email:zqget@msn.com