C语言毕业课程设计报告范例.docx

上传人:b****6 文档编号:7133258 上传时间:2023-01-21 格式:DOCX 页数:25 大小:21.71KB
下载 相关 举报
C语言毕业课程设计报告范例.docx_第1页
第1页 / 共25页
C语言毕业课程设计报告范例.docx_第2页
第2页 / 共25页
C语言毕业课程设计报告范例.docx_第3页
第3页 / 共25页
C语言毕业课程设计报告范例.docx_第4页
第4页 / 共25页
C语言毕业课程设计报告范例.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

C语言毕业课程设计报告范例.docx

《C语言毕业课程设计报告范例.docx》由会员分享,可在线阅读,更多相关《C语言毕业课程设计报告范例.docx(25页珍藏版)》请在冰豆网上搜索。

C语言毕业课程设计报告范例.docx

C语言毕业课程设计报告范例

(此文档为word格式,下载后您可任意编辑修改!

一个好的打字员也必须经过指法练习的磨练才能成才,同样,一个好的指法练习系统对一个打字员也是必不可少的工具。

以下是用C语言编写的指法练习系统软件的设计报告。

一.系统功能

本程序完成简单的指法练习全程,实现测试打字过程中返回正确错误个数的功能,能记录用户的最高成绩。

部分功能通过类似window界面的下拉式菜单实现,通过键盘能实现各项功能的设置。

完全符合课程设计的要求。

二.系统总框图及函数定义及说明

系统总框图:

filehelp

setting

Uesrrecore

 

bgcolor

chrcolortime

 

自定义函数和系统函数:

自定义函数

系统函数

welcome()

实现欢迎界面

textbackground()

Textcolor()

gotoxy()

Window()

sleep()

randomize()

clock()

time(NULL)

getch()

putchar()

sound()

delay()

nosound()

kbhit()

random()

difftime(int,int)

exit()

cputs()

wherex()

wherex()

menu()

画window的窗口界面

Selectitem()

定义菜单

DrawSelectitem()

显示主单名

RedText(intx,inty,char*z)

正常显示菜单

BlackText(intx,inty,char*z)

显示选中菜单

DrawFrame(intl,intu,intr,intd,inttcolor,intbcolor)

画边框函数

DrawMl(intn)

显示具体下拉选择项目

MoveMl(intn,intx)

菜单选项的控制,n决定水平项,x决定下拉的选项

Enter(intm,intn)

菜单选项的具体功能

run()

按键操作过程

Start()

开始打字

User()

输入名字,模式,字数

Bgcolor()

背景颜色

Ccolor()

字体颜色

Time()

设定时间

Recore()

用户记录

Help()

系统帮助

About()

系统信息

Exit()

退出系统

三.设计分析

程序主要以函数为模块,一个函数实现一个功能或一个设置项,为了阅读的方便,函数里又包含了自定义函数,最后主函数调用自定义的函数,整个过程清晰,各个函数独立性强。

算法方面主要是产生随机字符这块要研究一下,其他的大概也没什么好研究的,基本都是输入输出操作。

随机字符的产生我利用了数组的下标和random()函数,数组先给赋值了,三个数组就三种情况,达到了设计的要求。

还有就是倒计时的实现,因为C语言不能同时执行两条语句,故在打字的过程中和倒计时不能同时实现,为了解决这个问题,我用了kbhit()如果键盘没输入就退出这次输入循环,让倒计时继续执行,当有键盘的输入这次的输入循环也就结束,也是让倒计时继续执行,问题解决。

四.程序存在的问题

由于本人水平有限,本程序存在一些问题,主要有以下几个方面:

1.在打字过程中,当打错了字时不能删掉重新输入,只能继续打下去,因为这个过程用的是循环输入,当每入一字就结束了这个字的输入不能修改。

2.部分界面的输入没考虑用户各种输入的情况,当用户非正常输入时,系统可能会中止。

3.没有考虑当用户选择背景字体颜色都一样时的情况(这种情况导致界面没有东西显示,主要就是背景和字体用了一样的颜色),只是用提示语句提醒用户。

五.心得体会

经过两周的课程设计,对C语言有了更深刻的了解,学到了很多以前没了解过的函数和算法。

一直以来就认为C语言就是学编程的基础但用不上场,现在觉得它的确也能用上场了,可以编写软件。

虽然只有短短的两周时间,却让我感悟很多。

只要肯用心去做每件事情,最终的结果都会让人满意的。

六.程序源代码

#include

voidDrawFrame(intleft,intup,intright,intdown,inttextcolor,intbackgroundcolor);*画边框*

voidDrawSelectitem();*显示主菜单*

voidBlackText(intx,inty,char*z);*选中菜单*

voidMoveMl(intn,intx);*菜单选项的控制*

voidrun();*具体操作*

voidStart();

charchoosec[1];

intx,y;

intfirst,second;

voidUser();

charuname[15]="quan";

intzz=300;

voidBgcolor();

charbgcol[1]={'1',};

voidCcolor();

charccol[1]={'7',};

voidTime();

intm=60;

voidRecore();

FILE*fp;

char;}ml[3];*选项数*

intkey;*按键变量*

inti,j;

charsave[4096];*保存文本区域空间*

charc[4096];*清屏专用空间*

***主函数****

main()

{

welcome();

menu();

run();

}

voidwelcome()

{

textbackground(BLUE);

textcolor(7);

window();

clrscr();

gotoxy(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");

gotoxy(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");

gotoxy(20,10);

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

gotoxy(20,11);

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

gotoxy(20,12);

printf("\1\1\1WELCOMETOMYTYPESYSTEM!

\1\1\1");

gotoxy(20,13);

printf("\1\1\1Copyright(c)2004byQuan\1\1\1");

gotoxy(20,14);

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

gotoxy(20,15);

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

gotoxy(20,16);

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

gotoxy(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");

gotoxy(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");

gotoxy(3,19);

printf("Pressanykeytocontine......");

getch();

}

*画window的界面*

voidmenu()

{

textbackground(BLUE);

window();

clrscr();

gotoxy(1,2);

printf("%c",218);*画左上角*

for(i=0;i<78;i++)

printf("%c",196);*画水平直线*

printf("%c",191);*画右上角*

for(i=3;i<=23;i++)

{

gotoxy(1,i);

printf("%c",179);*画垂直线*

gotoxy(80,i);

printf("%c",179);

}

printf("%c",192);*画左下角*

for(i=0;i<78;i++)

printf("%c",196);

printf("%c",217);*画右下角*

gotoxy(1,1);

textcolor(7);

for(i=0;i<80;i++)

cprintf("%c",219);*用符号实现画主菜单的灰色背景区*

Selectitem();*调用选项函数*

DrawSelectitem();*画选项*

gettext(c);*保存当前文本区域*

gotoxy(3,5);

printf("namerightrate");

if((fp=fopen("recore.txt","r"))==NULL)

{

gotoxy(3,6);

printf("cannotopenfile");

return;

}

fread(&=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;i<3;i++)

RedText(i,1,ml[i].name);*显示主菜单名,且首字母为红色*

}

*正常显示菜单*

RedText(intx,inty,char*z)

{

textbackground(7);*设置背景颜色为浅灰色*

gotoxy(3+x*20,y);

for(j=0;z[j];j++)

{

if(j==0)

textcolor(RED);*第一个字母显示红色*

else

textcolor(BLACK);

cprintf("%c",z[j]);*输出菜单名*

}

}

*显示选中菜单*

voidBlackText(intx,inty,char*z)

{

textbackground(14);

textcolor(15);

gotoxy(3+20*x,y);*定位坐标*

cputs(z);*输出菜单名字符串*

}

*画边框函数*

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

{

textbackground(bcolor);*背景颜色*

textcolor(bcolor);*文本颜色*

for(i=l;i<=r;i++)*输出背景区域*

{

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

{

gotoxy(i,j);

printf("%c",219);*输出背景字符*

}

}

textcolor(tcolor);*边框颜色*

for(i=u+1;i

{

gotoxy(l,i);

cprintf("%c",179);*垂直线*

gotoxy(r,i);

cprintf("%c",179);

}

for(i=l+1;i

{

gotoxy(i,u);

cprintf("%c",196);*水平线*

gotoxy(i,d);

cprintf("%c",196);

}

gotoxy(l,u);

cprintf("%c",218);*左上角*

gotoxy(r,u);

cprintf("%c",191);*右上角*

gotoxy(l,d);

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

gotoxy(r,d);

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

*gettext(l+1,u+1,r-1,d-1,save1);**保存边框内区域*

}

*显示具体下拉选择项目*

voidDrawMl(intn)

{

gettext(save);*保存被掩盖的地方*

BlackText(n,1,ml[n].name);*反选显示主菜单*

DrawFrame(3+20*n-1,2,3+20*n+19,3+ml[n].n,0,7);*下拉菜单的边框*

for(i=3;i<3+ml[n].n;i++)*输出所选菜单各选项*

{

if(i==3)

BlackText(n,i,ml[n].str[i-3]);*默认选中第一项*

else

RedText(n,i,ml[n].str[i-3]);*其余各项首字符红色显示*

}

gotoxy(79,1);

MoveMl(n,3);*菜单选项的控制*

}

*菜单选项的控制,n决定水平项,x决定下拉的选项*

voidMoveMl(intn,intx)

{

intflag=1;

while(flag)

{

gotoxy(79,1);

key=bioskey(0);*接收按键*

gotoxy(79,1);

switch(key)

{

caseESC:

*退出循环*

puttext(save);*恢复打开菜单前的样子*

flag=0;

break;

caseLEFT:

*移到左边的选项*

puttext(save);*恢复打开菜单前的样子*

if(n==0)*往左移动越界的话移到最后一个选项*

DrawMl

(2);

else

DrawMl(n-1);

flag=0;

break;

caseRIGHT:

*移动右边的选项*

puttext(save);*恢复打开菜单前的样子*

if(n==2)*往右移动越界的话移到第一个选项*

DrawMl(0);

else

DrawMl(n+1);

flag=0;

break;

caseUP:

*具体选项往上移动*

RedText(n,x,ml[n].str[x-3]);*输出红色字体*

if(x==3)*移到最上面再按上键,就移到最下面*

x=3+ml[n].n-1;

else

x--;*移动到新的要显示的内容*

BlackText(n,x,ml[n].str[x-3]);*输出黑色字体*

flag=1;

break;

caseDOWN:

*具体选项往下移动*

RedText(n,x,ml[n].str[x-3]);

if(x==(3+ml[n].n-1))*移动到最底下再按下键就移到最上面*

x=3;

else

x++;*移动到新的要显示的内容*

BlackText(n,x,ml[n].str[x-3]);

flag=1;

break;

caseENTER:

puttext(save);*恢复打开菜单前的样子*

Enter(n,x-3);*菜单选项的具体功能*

flag=0;

break;

}

gotoxy(79,1);

}

}

*菜单选项的具体功能*

voidEnter(intm,intn)

{

switch(m)

{

case0:

switch(n)*选择了Start菜单选项*

{

case0:

Start();break;*开始打字测试*

case1:

Exit();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)

{

gotoxy(texty,textx);

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[]="abcdefghijklmnopqrstuvwxyz";

charch2[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

charch3[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!

@#$%^&*()_+`.<>-=[]?

{}\|;':

";

chargch[300],out[300];

charkey;

charrename[10];

floatrerate;

clock_tbegin,end;

textbackground(bgcol[0]);

textcolor(ccol[0]);

window();

clrscr();

randomize();

gotoxy(1,1);

switch(choosec[0])

{

case'1':

{for(j=0;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;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;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;j

{

i=random(26);

if(j%77==0)

printf("\n\n\263");

printf("%c",ch1[i]);

out[j]=ch1[i];

}

}

}

gotoxy(2,4);

begin=clock();

first=time(NULL);

j=0;

do{

x=wherex();

y=wherey();

second=time(NULL);

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

{

gotoxy(12,19);

printf("%3d",m);

m--;

first=second;

}

gotoxy(3,19);

printf("Resttime:

");

if(total!

=0)

{gotoxy(18,19);

printf("Rightrate:

%4.4f%%\t\tpressentertoexit",right(right+wrong));}

gotoxy(3,20);

printf("Yourname:

");

gotoxy(12,20);

printf("%s",uname);

gotoxy(27,20);

printf("right:

%3.0fwrong:

%3.0ftotal:

%3d",right,wrong,total);

gotoxy(x,y);

if(kbhit()!

=0)

{

gch[j]=getch();

putchar(gch[j]);

if((j+1)%77==0)

printf("\n\n\263");

line:

if(gch[j]=='\015')

{textbackground(RED);

textcolor(GREEN);

window();

clrscr();

gotoxy(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");

gotoxy(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");

gotoxy(1,3);

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

gotoxy(1,4);

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

gotoxy(1,5);

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

gotoxy(1,6);

printf("\1\1\1\1\1\1\

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1