打字練習課程設計分析_第1頁
打字練習課程設計分析_第2頁
打字練習課程設計分析_第3頁
打字練習課程設計分析_第4頁
打字練習課程設計分析_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第第頁打字練習課程設計分析打字練習的課程設計分析以及代碼

打字練習課程設計

單位電氣與電子工程分院(系)專業電氣與電子工程學號同學姓名指導老師

完成日期年月日

打字練習的課程設計分析以及代碼

一個好的打字員也需要經過指法練習的磨練才能成才,同樣,一個好的指法練習系統對一個打字員也是必不可少的工具。以下是用C語言編寫的指法練習系統軟件的設計報告。

一.系統功能

本程序完成簡約的指法練習全程,實現測試打字過程中返回正確錯誤個數的功能,并顯示用戶測試成果。部分功能通過類似window界面實現,完全符合課程設計的要求。

二.系統總框圖及函數定義及說明

系統總框圖:

打字練習的課程設計分析以及代碼

三.設計分析

程序主要以函數為模塊,一個函數實現一個功能或一個設置項,為了閱讀的方便,函數里又包含了自定義函數,最末主函數調用自定義的函數,整個過程清楚,各個函數獨立性強。算法方面主要是產生隨機字符這塊要討論一下,其他的大略也沒什么好討論的,基本都是輸入輸出操作。隨機字符的產生我利用了數組的下標和random()函數,數組先給賦值了,三個數組就三種狀況,達到了設計的要求。還有就是倒計時的實現,由于C語言不能同時執行兩條語句,故在打字的過程中和倒計時不能同時實現,為了解決這個問題,我用了kbhit()假如鍵盤沒輸入就退出這次輸入循環,讓倒計時繼續執行,當有鍵盤的輸入這次的輸入循環也就結束,也是讓倒計時繼續執行,問題解決。

四.程序存在的問題

由于本人水平有限,本程序存在一些問題,主要有以下幾個方面:

1.在打字過程中,當打錯了字時不能刪掉重新輸入,只能繼續打下去,由于這個過程用的

是循環輸入,當每入一字就結束了這個字的輸入不能修改。

2.部分界面的輸入沒考慮用戶各種輸入的狀況,當用戶非正常輸入時,系統可能會中止。3.沒有考慮當用戶選擇背景字體顏色都一樣時的狀況〔這種狀況導致界面沒有東西顯示,

主要就是背景和字體用了一樣的顏色〕,只是用提示語句提示用戶。

五.心得體會

經過兩周的課程設計,對C語言有了更深刻的了解,學到了許多以前沒了解過的函數和算法。一貫以來就認為C語言就是學編程的基礎但用不上場,現在覺得它的確也能用上場了,可以編寫軟件。雖然只有短短的兩周時間,卻讓我感悟許多。只要肯上心去做每件事情,最終的結果都會讓人滿足的。

六.程序源代碼#includebios.h#includeconio.h#includestdio.h#includestdlib.h#includetime.h#defineLEFT0*4b00#defineRIGHT0*4d00#defineDOWN0*5000#defineUP0*4800

打字練習的課程設計分析以及代碼

#defineESC0*011b#defineENTER0*1c0d#defineF10*3B00#defineF20*3C00#defineF30*3D00voidwelcome();

voidmenu();/*初始化界面*/voidSelectitem();/*定義菜單*/

voidEnter(intm,intn);/*菜單項選擇項的詳細功能*/voidDrawFrame(intleft,intup,intright,intdown,intte*tcolor,intbackgroundcolor);/*畫邊框*/

voidDrawSelectitem();/*顯示主菜單*/

voidBlackTe*t(int*,inty,char*z);/*選中菜單*/voidMoveMl(intn,int*);/*菜單項選擇項的掌握*/voidrun();/*詳細操作*/voidStart();charchoosec[1];int*,y;

intfirst,second;voidUser();

charuname[15]=quan;intzz=300;voidBgcolor();

charbgcol[1]={'1',};voidCcolor();

charccol[1]={'7',};voidTime();intm=60;

voidRecore();FILE*fp;charhis[20];voidHelp();voidAbout();voidE*it();

intte*t*,te*ty;/*光標坐標,*行,y列*/structmenustruct/*菜單用的結構體*/{charname[12];/*主菜單名*/charstr[10][20];/*選項*/intn;}ml[3];/*選項數*/intkey;/*按鍵變量*/inti,j;

charsave[4096];/*保存文本區域空間*/charc[4096];/*清屏專用空間*/

打字練習的課程設計分析以及代碼

/***主函數****/main(){

welcome();menu();run();}

voidwelcome(){

te*tbackground(BLUE);te*tcolor(7);

window(1,1,80,25);clrscr();goto*y(20,8);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);goto*y(20,9);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);goto*y(20,10);

printf(\1\1\1\1\1\1);goto*y(20,11);

printf(\1\1\1\1\1\1);goto*y(20,12);

printf(\1\1\1WELCOMETOMYTYPESYSTEM!\1\1\1);goto*y(20,13);

printf(\1\1\1Copyright(c)2022byQuan\1\1\1);goto*y(20,14);

printf(\1\1\1\1\1\1);goto*y(20,15);

printf(\1\1\1\1\1\1);goto*y(20,16);

printf(\1\1\1\1\1\1);goto*y(20,17);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);goto*y(20,18);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);goto*y(3,19);

printf(Pressanykeytocontine);getch();}

打字練習的課程設計分析以及代碼

/*畫window的界面*/voidmenu(){

te*tbackground(BLUE);window(1,1,80,25);clrscr();goto*y(1,2);

printf(%c,218);/*畫左上角*/for(i=0;i78;i++)

printf(%c,196);/*畫水平直線*/printf(%c,191);/*畫右上角*/for(i=3;i=23;i++){

goto*y(1,i);

printf(%c,179);/*畫垂直線*/goto*y(80,i);printf(%c,179);}

printf(%c,192);/*畫左下角*/for(i=0;i78;i++)printf(%c,196);

printf(%c,217);/*畫右下角*/goto*y(1,1);te*tcolor(7);for(i=0;i80;i++)

cprintf(%c,219);/*用符號實現畫主菜單的灰色背景區*/Selectitem();/*調用選項函數*/DrawSelectitem();/*畫選項*/

gette*t(2,3,78,23,c);/*保存當前文本區域*/goto*y(3,5);

printf(namerightrate);

if((fp=fopen(recore.t*t,r))==NULL){

goto*y(3,6);

printf(cannotopenfile);return;}

fread(his,20,1,fp);goto*y(3,6);

printf(%s,his);sleep(2);

window(1,1,80,25);

打字練習的課程設計分析以及代碼

/*定義菜單*/

voidSelectitem(){

strcpy(ml[0].name,File(F1));/*下面的詳細選項補空格是為了各菜單黑色背景相同*/

strcpy(ml[0].str[0],Start);strcpy(ml[0].str[1],E*it);

ml[0].n=2;/*strcpy(ml[1].name,setting(F2));

strcpy(ml[1].str[0],User);strcpy(ml[1].str[1],Bgcolor);strcpy(ml[1].str[2],Charcolor);strcpy(ml[1].str[3],Time);strcpy(ml[1].str[4],Recore);ml[1].n=5;

strcpy(ml[2].name,Help(F3));/*strcpy(ml[2].str[0],Helptopic);strcpy(ml[2].str[1],About);ml[2].n=2;}

/*顯示主單名*/

voidDrawSelectitem(){

for(i=0;i3;i++)

RedTe*t(i,1,ml[i].name);/*}

/*正常顯示菜單*/

RedTe*t(int*,inty,char*z){

te*tbackground(7);/*goto*y(3+**20,y);for(j=0;z[j];j++){

if(j==0)

te*tcolor(RED);/*else

te*tcolor(BLACK);

cprintf(%c,z[j]);/*}}

保存菜單的項數*/系統援助*/顯示主菜單名,且首字母為紅色*/設置背景顏色為淺灰色*/第一個字母顯示紅色*/輸出菜單名*/

打字練習的課程設計分析以及代碼

/*顯示選中菜單*/

voidBlackTe*t(int*,inty,char*z){

te*tbackground(14);te*tcolor(15);

goto*y(3+20**,y);/*定位坐標*/

cputs(z);/*輸出菜單名字符串*/}

/*畫邊框函數*/

voidDrawFrame(intl,intu,intr,intd,inttcolor,intbcolor){

te*tbackground(bcolor);/*背景顏色*/te*tcolor(bcolor);/*文本顏色*/for(i=l;i=r;i++)/*輸出背景區域*/{

for(j=u;j=d;j++){

goto*y(i,j);

printf(%c,219);/*輸出背景字符*/}}

te*tcolor(tcolor);/*邊框顏色*/

for(i=u+1;id;i++)/*在背景區域內輸出邊框線*/{

goto*y(l,i);

cprintf(%c,179);/*垂直線*/goto*y(r,i);

cprintf(%c,179);}

for(i=l+1;ir;i++){

goto*y(i,u);

cprintf(%c,196);/*水平線*/goto*y(i,d);

cprintf(%c,196);}

goto*y(l,u);

cprintf(%c,218);/*左上角*/goto*y(r,u);

cprintf(%c,191);/*右上角*/goto*y(l,d);

cprintf(%c,192);/*左下角*/

打字練習的課程設計分析以及代碼

goto*y(r,d);

cprintf(%c,217);/*右下角*/

/*gette*t(l+1,u+1,r-1,d-1,save1);*//*保存邊框內區域*/}

/*顯示詳細下拉選擇項目*/voidDrawMl(intn){

gette*t(1,1,80,25,save);/*保存被掩蓋的地方*/BlackTe*t(n,1,ml[n].name);/*反選顯示主菜單*/DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);/*下拉菜單的邊框*/for(i=3;i3+ml[n].n;i++)/*輸出所選菜單各選項*/{

if(i==3)

BlackTe*t(n,i,ml[n].str[i-3]);/*默認選中第一項*/else

RedTe*t(n,i,ml[n].str[i-3]);/*其余各項首字符紅色顯示*/}

goto*y(79,1);

MoveMl(n,3);/*菜單項選擇項的掌握*/}

/*菜單項選擇項的掌握,n決斷水平項,*決斷下拉的選項*/voidMoveMl(intn,int*){

intflag=1;while(flag){

goto*y(79,1);

key=bioskey(0);/*接收按鍵*/goto*y(79,1);switch(key){

caseESC:/*退出循環*/

putte*t(1,1,80,25,save);/*復原打開菜單前的樣子*/flag=0;break;

caseLEFT:/*移到左邊的選項*/

putte*t(1,1,80,25,save);/*復原打開菜單前的樣子*/

if(n==0)/*往左移動越界的話移到最末一個選項*/DrawMl(2);else

DrawMl(n-1);flag=0;

打字練習的課程設計分析以及代碼

break;

caseRIGHT:/*移動右邊的選項*/

putte*t(1,1,80,25,save);/*復原打開菜單前的樣子*/if(n==2)/*往右移動越界的話移到第一個選項*/DrawMl(0);else

DrawMl(n+1);flag=0;break;

caseUP:/*詳細選項往上移動*/

RedTe*t(n,*,ml[n].str[*-3]);/*輸出紅色字體*/if(*==3)/*移到最上面再按上鍵,就移到最下面*/*=3+ml[n].n-1;else

*--;/*移動到新的要顯示的內容*/

BlackTe*t(n,*,ml[n].str[*-3]);/*輸出黑色字體*/flag=1;break;

caseDOWN:/*詳細選項往下移動*/RedTe*t(n,*,ml[n].str[*-3]);

if(*==(3+ml[n].n-1))/*移動到最底下再按下鍵就移到最上面*/*=3;else

*++;/*移動到新的要顯示的內容*/BlackTe*t(n,*,ml[n].str[*-3]);flag=1;break;caseENTER:

putte*t(1,1,80,25,save);/*復原打開菜單前的樣子*/Enter(n,*-3);/*菜單項選擇項的詳細功能*/flag=0;break;}

goto*y(79,1);}}

/*菜單項選擇項的詳細功能*/voidEnter(intm,intn){

switch(m){

case0:switch(n)/*選擇了Start菜單項選擇項*/{

打字練習的課程設計分析以及代碼

case0:Start();break;/*開始打字測試*/case1:E*it();break;/*結束*/}break;/*退出系統*/

case1:switch(n)/*選擇了Setting菜單項選擇項*/{

case0:User();break;/*定義用戶*/

case1:Bgcolor();break;/*轉變背景顏色*/case2:Ccolor();break;/*轉變字體*/

case3:Time();break;/*轉變測試時間*/case4:Recore();/*顯示全部用戶記錄*/}break;

case2:switch(n)/*選擇了援助菜單項選擇項*/{

case0:Help();break;case1:About();

}break;/*退出系統*/}}

/*按鍵操作過程*/voidrun(){

while(1){

goto*y(te*ty,te*t*);

key=bioskey(0);/*接收按鍵*/switch(key){

caseESC:

caseF1:DrawMl(0);break;/*file*/

caseF2:DrawMl(1);break;/*顯示下拉菜單setting*/caseF3:DrawMl(2);break;/*顯示下拉菜單help*/}}}

/*開始打字*/voidStart()

{intj,i,total=0;

floatright=0.0,wrong=0.0;

charch1[]=abcdefghijklmnopqrstuvw*yz;

charch2[]=ABCDEFGHIJKLMNOPQRSTUVW*YZabcdefghijklmnopqrstuvw*yz;

打字練習的課程設計分析以及代碼

char

ch3[]=ABCDEFGHIJKLMNOPQRSTUVW*YZabcdefghijklmnopqrstuvw*yz1234567890~!@#$%^*()_+`./-=[]?,{}\|;':;chargch[300],out[300];charkey;

charrename[10];

floatrerate;clock_tbegin,end;

te*tbackground(bgcol[0]);te*tcolor(ccol[0]);window(2,3,79,23);clrscr();randomize();goto*y(1,1);

switch(choosec[0]){

case'1':

{for(j=0;jzz;j++){

i=random(26);if(j%77==0)

printf(\n\n\263);printf(%c,ch1[i]);out[j]=ch1[i];}}break;case'2':

{for(j=0;jzz;j++){

i=random(52);if(j%77==0)

printf(\n\n\263);printf(%c,ch2[i]);out[j]=ch2[i];}}break;case'3':

{for(j=0;jzz;j++){

i=random(94);if(j%77==0)

printf(\n\n\263);printf(%c,ch3[i]);

打字練習的課程設計分析以及代碼

out[j]=ch3[i];}}break;default:

{for(j=0;jzz;j++){

i=random(26);if(j%77==0)

printf(\n\n\263);printf(%c,ch1[i]);out[j]=ch1[i];}}}

goto*y(2,4);begin=clock();first=time(NULL);j=0;do{

*=where*();y=wherey();

second=time(NULL);

if(difftime(second,first)==1){

goto*y(12,19);printf(%3d,m);m--;

first=second;}

goto*y(3,19);

printf(Resttime:);if(total!=0)

{goto*y(18,19);

printf(Rightrate:%4.4f%%\t\tpressentertoe*it,right/(right+wrong));}goto*y(3,20);

printf(Yourname:);goto*y(12,20);

printf(%s,uname);goto*y(27,20);

printf(right:%3.0fwrong:%3.0ftotal:%3d,right,wrong,total);goto*y(*,y);if(kbhit()!=0){

gch[j]=getch();

打字練習的課程設計分析以及代碼

putchar(gch[j]);if((j+1)%77==0)

printf(\n\n\263);line:if(gch[j]=='\015')

{te*tbackground(RED);te*tcolor(GREEN);window(20,14,60,20);clrscr();goto*y(1,1);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);

goto*y(1,2);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);

goto*y(1,3);

printf(\1\1\1\1\1\1);goto*y(1,4);

printf(\1\1\1\1\1\1);goto*y(1,5);

printf(\1\1\1\1\1\1);goto*y(1,6);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);

goto*y(1,7);

printf(\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1);

goto*y(8,4);

printf(Areyousuretoe*it?(Y/N));goto*y(1,27);key=0;

while(key!='Y'key!='y'key!='N'key!='n'){key=getch();putchar(key);getch();

if(key=='N'||key=='n'){

te*tbackground(bgcol[0]);clrscr();

te*tbackground(bgcol[0]);te*tcolor(7);

打字練習的課程設計分析以及代碼

window(2,3,79,23);goto*y(*,y);gch[j]=getch();putchar(gch[j]);if(gch[j]==out[j])right++;

elsewrong++;wrong--;}

if(key=='Y'||key=='y')e*it(0);}

gotoline;}

if(gch[j]==out[j])right++;else{

wrong++;sound(140);

delay(90000000);nosound();}j++;

total=right+wrong;}

end=clock();}

while((j!=zz)(m!=0));goto*y(27,20);printf(right:%3.0fwrong:%3.0fusetime:%3.0fS,right,wrong,total,(end-begin)/CLK_TCK);if((fp=fopen(recore.t*t,w))==NULL){goto*y(4,18);

printf(cannotopenfile);return;}

fscanf(fp,%c%5.4f,rename,rerate);if(strcmp(uname,rename)==0)

if(rerate(right/(right+wrong)))

fprintf(fp,%c5.4f%,uname,right/(right+wrong));else

fprintf(fp,%c5.4f%,uname,right/(right+wrong));fclose(fp);

window(1,1,80,25);

total:%3d

打字練習的課程設計分析以及代碼

}

/*輸入名字,模式,字數*/voidUser(){

te*tbackground(GREEN);te*tcolor(7);

window(2,3,79,23);clrscr();goto*y(2,3);

printf(Pleaseenteryourname:);goto*y(25,3);gets(uname);goto*y(2,4);

printf(Instruction:1.(veryeasy)OnlyLowercase.);goto*y(2,5);

printf(2.(easy)LowercaseandUppercase.);goto*y(2,6);

printf(3.(hard)Mi*turewithLowercase,Uppercase,NumberandSymbol.);goto*y(2,7);

printf(Pleasechoosethete*tmode(1-3):);goto*y(34,7);gets(choosec);goto*y(2,8);

printf(Pleaseenterthecount(1-300):);scanf(%d,zz);goto*y(2,9);

printf(Thete*tmodeyouchooesis:%s,choosec);goto*y(2,10);

printf(Yournameis:);printf(%s,uname);goto*y(2,11);

printf(Thecountyouchooseis:%d,zz);window(1,1,80,25);}

/*背景顏色*/voidBgcolor(){bgcol[0]=1;

te*tbackground(GREEN);te*tcolor(7);

window(2,3,79,23);clrscr();

打字練習的課程設計分析以及代碼

goto*y(2,3);

printf(Colorinstruction:);goto*y(2,4);

printf(0-BLACK);goto*y(2,5);

printf(1-BLUE);goto*y(2,6);

printf(2-GREEN);goto*y(2,7);

printf(3-CYAN);goto*y(2,8);

printf(4-RED);goto*y(2,9);

printf(5-MAGENTA);goto*y(2,10);

printf(6-BROWN);goto*y(2,11);

printf(7-LIGHTGRAY);goto*y(2,12);

printf(Note:Te*tcolorandte*tbackgroundmustbedifferent!!!!!);goto*y(2,13);

printf(Pleaseenterthete*tbackground(0-7):);*=where*();y=wherey();

bgcol[0]=getch();if(bgcol[0]!='\033')putchar(bgcol[0]);

line1:if(bgcol[0]=='\033'){

goto*y(50,21);

printf(Areyousuree*it?(Y/N));goto*y(73,21);key=0;

while(key!='Y'key!='y'key!='N'key!='n'){key=getch();putchar(key);getch();

if(key=='N'||key=='n'){goto*y(50,21);

printf();goto*y(*,y);

bgcol[0]=getch();putchar(bgcol[0]);}

打字練習的課程設計分析以及代碼

if(key=='Y'||key=='y')e*it(0);}gotoline1;}

goto*y(2,15);

printf(TheTe*tbackgroundyouchooseis:%c,bgcol[0]);window(1,1,80,25)

溫馨提示

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

評論

0/150

提交評論