![]() ![]() |
|
数字小键盘指法练习 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:39:08 文章录入:杜斌 责任编辑:杜斌 | |
|
|
该软件具有如下功能: 1、具有数字键指法练习的一般功能即能够进行指法练习 2、具有“选项”参数设置功能,选项参数如下: A: 输入数据:数据是否带有小数点,是否部分数据带有.5小数点等 B: 测试速度:击键速度和单词速度 C: 其它属性:测试时间、显示输入错误的信息的延迟时间、是否屏蔽非数字键 3、具有“选项”参数记忆功能,它能够记住用户上一次的选项设置,它会按照用户上一次的设置来初始化程序 数据的产生: 既然是数字键指法练习,那练习时的数据来源肯定是重中之重了,我是通过一个函数来实现的,它根据接受的整型参数来产生满足要求的数据,其中用到了random()这个函数来产生随机数,通过该函数代码如下: AnsiString __fastcall TfrmMain::RandNum(int Flag) { //TODO: Add your source code here double RandNum; switch (Flag) { case 1: //全部数字不带有小数点 RandNum=random (100); break; case 2: //部分数字带有小数点 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: //全部数字不带有小数点 RandNum=random (100); } return AnsiString(RandNum); } 测试速度: 该软件的速度测试分两种:击键速度和单词速度,击键速度表示用户每分钟用户的击键书,而单词速度则表示用户每分钟用户所输入的数字个数,测试速度的取得我也是通过一个函数来实现的,该函数代码如下: 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="击键数:"+AnsiString(NumCount); break; case 2: //单词速度 if (dwTimeElapse>0) { long int temp2=(60*1000*(NumCount)/dwTimeElapse); stSpeed->Caption="单词速度:"+AnsiString(temp2)+"/分";
//纪录速度 recSpeed=temp2; } stWordNum->Caption="单词数:"+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函数timeGetTime(),它的作用是取得系统自启动到现在所经历的时间,以毫秒为单位,它的声明如下: DWORD timeGetTime(VOID); “选项”参数记忆功能: 该软件具体参数属性的记忆功能,能够实现的方式非常多,如可以通过ini文件,一般文件来达到记忆的功能,还可以通过注册表来完成该功能,我在实现的时候选择了通过通过注册表来实现,我主要用到了getKeyValue()和setKeyValue()两个函数来完成该功能,getKeyValue()的功能是取得注册表中某个键的值,而setKeyValue()的功能则是设置注册表中某项的值代码如下: getKeyValue()函数: 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()函数: 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; } |
|
![]() ![]() |