资源描述
小画板课程设计报告黑龙江东方学院电子信息专业课程设计报告 课程名称 C语言课程设计 设计题目 小画板课程设计 学生姓名 学 号 专业班级 电子信息一班 指导教师 2010年 12 月 22 日 目录第一章 概述(2)1.1课程设计目的(2)1.2课程设计要求(2)1.3设计要求具体说明(2)1.4功能描述(2)第二章 软件设计相关基础知识介绍(3)2.1书写程序时应遵循的规则(3)2.2数据类型及其他格式控制变量(3) 2.3Getch和printf函数(4)2.4If.else语句及实例说明(4)2.5For语句及实例说明(6)2.6Wihile语句及实例说明(7)2.7Goto语句及用goto语句构成循环(8)2.8Switch语句及实例说明(8)第三章 详细设计说明(10)3.1 项目设计流程(10)3.2 系统模块图(10)3.3 图形绘制流程(10)3.4 函数功能描述(11)3.5 源程序(11)第四章 程序说明(14)4.1 运行图例(14)4.2 程序设计说明(14)第五章 课程设计总结(15)第六章 附录(参考文献)(15) 第一章 概述Windows系统自带的画图板简单灵巧,深受Windows用户的喜爱,其占用资源少,操作简单,功能齐全等特点为用户的小型图形开发带来了很多便利。为此,也出现了很多利用VC等可视化开发工具的模仿Windows的画图板,这次课程设计我就用C语言设计了一个简易的画图板,该画板可以画出任意图形。操作也简单易懂。1.1 课程设计目的1.巩固和加深学生对C语言课程的基本知识的理解和掌握;2.掌握C语言编程和程序调试的基本技能;3.利用C语言进行基本的软件设计;4.掌握书写程序设计说明文档的能力5.提高运用C语言解决实际问题的能力。1.2 课程设计要求1.分析课程设计题目的要求;2.写出详细设计说明;3.编写程序代码,调试程序使其能正确运行;4.设计完成的软件要便于操作和使用,有整齐、美观的使用界面;5.设计完成后提交课程设计报告和源代码文件的电子文档。1.3 设计要求具体说明1.在指导书提供的课程设计题目中选择一题或自选题目(需经指导教师认可);2.每个题目限一人完成,题目选定后不可更换;3.用户提供的主操作界面应该方便用户的操作。4.最后提交的课程设计成果包括:a)课程设计报告电子稿;b)源程序文件;c)可执行程序文件。1.4 功能描述 用C语言编程实现的画图板,具有基本的画图功能。本程序可以通过见大门的鼠标按动,移动画出任意的图形。具有简洁,易懂,方便的特点。 第二章 软件设计相关知识介绍2.1书写程序是应遵循的规则从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则:1) 一个说明或一个语句占一行。2) 用括起来的部分,通常表示了程序的某一层次结构,一般与该结构语句的第一个字幕对齐,并单独占一行。3) 低一层次的语句或说明可比高一层的语句或说明缩进若干格后书写。一边看起来更加清晰,增加程序的可读性。4) 在编程时应力求遵循这些规则,以养成良好的编程风格。2.2数据类型以及格式控制变量类型说明符字节数值范围字符型char1C字符集基本整型int2-3276832767短整型short int2-3276832767长整型long int4-214783648214783647无符号型unsigned2065535无符号长整型unsigned long404294967295单精度实型float43/4E-383/4E+38双精度实型double81/7E-3081/7E+308表(1)格式变量用于输入输出数字或字符时应与数据类型保持一致。int、long int和char是本程序的用的最多的格式变量%d是十进制数据输入和输出时的格式变量如要输出已整数100则printf(“%d”,100),若将%d改为%x则输出的将会是十六进制的64,getch()的格式控制变量则是%c所以格式控制变量应与要输入和输出的数据类型保持一致。除此之外本程序还用到了另外的一些控制变量如a、b、n、r。a:蜂鸣,响铃当程序执行到带有a的语句时系统将会发出带有警示的声音,以告诉人们应该慎重地操作,或操作时出现了错误等。b用于回退向后退一格,独立使用则没有什么大的作用和空格一起使用则可以将屏幕上以显示的字符删去。n、r用于换行或回车等。2.3 getch和printf函数·3·在前两个例子中用到了输入和输出函数getch和 printf,在以后要详细介绍。这里我们先简单介绍一下它们的格式,getch和 printf这两个函数分别称为格式输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数中的printf括号中的参数表由以下两部分组成:“格式控制串” ,参数表 格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。各种类型的格式表示法可参照上表1所列举的格式变量,在printf函数中还可以在格式控制串内出现非格式控制字符,这时在显示屏幕上将原文照印。括号的双引号中有多少个格式变量,后面的参数表中就应该有多少个参量。当有多个量时,用逗号间隔。:例: printf("max %lf min %lfn",x,s);其中%lf为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了x和s两个变量。其余字符为非格式字符则照原样输出在屏幕上上面例中程序的功能是由用户输入两个整数,程序执行后max和min原样输出。本例子由两个参数组成,x和s参数。参数之间是并列关系。getch和printf函数的应用实例如下:main()char ch;while(1)printf(“请输入一组字符串:”);ch=getch();printf(“%c”,ch);if(ch=13)break;首先在屏幕上显示提示字符串,请用户输入一组字符串,用户可以循环地输入回车后由break语句结束循环。2.4 if- else 语句及实例说明if语句的三种形式1. 第一种形式为基本形式:if(表达式) 语句其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。例1:main()int a,b,max;printf("n input two numbers: ");scanf("%d%d",&a,&b);max=a;if (max<b) max=b;printf("max=%d",max);本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。·4·2. 第二种形式为: if-elseif(表达式) 语句1; else 语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。例2:main()int a, b;printf("input two numbers: ");scanf("%d%d",&a,&b);if(a>b)printf("max=%dn",a);elseprintf("max=%dn",b);输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。3. 第三种形式为if-else-if形式前二种形式的 if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1)语句1;else if(表达式2) 语句2;else if(表达式3) 语句3; else if(表达式m) 语句m;else 语句n;·5·其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。 2.5 for语句及实例说明在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:for(表达式1;表达式2;表达式3) 语句它的执行过程如下:(1) 先求解表达式1。(2) 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步;若其值为假(0),则结束循环,转到第(5)步。(3) 求解表达式3。(4) 转回上面第(2)步继续执行。(5) 循环结束,执行for语句下面的一个语句。for语句最简单的应用形式如for(循环变量赋初值;循环条件;循环变量增量) 语句循环变量赋初值总是一个赋值语句,它用来给循环控制变量赋初值, 循环条件是一个关系表达式,它决定什么时候退出循环,循环变量增量,定义循环控制变量每循环一次后 按什么方式变化。这三个部分之间用“;”分开。例::for(i=1; i<=100; i+)sum=sum+i;先给i赋初值1,判断i是否小于等于100, 若是则执行语句,之后值增加1。再重新判断, 直到条件为假,即i>100时,结束循环。2.6 while语句及实例说明while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句具体应用:例 while语句求用1100的和算法,main()int i=1,sum=0;i=1;while(i<=100)·6·sum=sum+i;i+;printf("%dn",sum);例 统计从键盘输入一行字符的个数。#include <stdio.h>main()int n=0;printf("input a string:n");while(getchar()!='n') n+;printf("%d",n);本例程序中的循环条件为getchar()!='n',其意义是, 只要从键盘输入的字符不是回车就继续循环。循环体n+完成对输入字符个数计数。从而程序实现了对输入一行字符的字符个数计数。2.7 goto语句以及用goto语句构成循环goto语句是一种无条件转移语句, goto 语句的使用格式为:goto 语句标号;其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用, 当满足某一条件时, 程序跳到标号处运行。例 用goto语句和if语句构成循环,。main()int i,sum=0;i=1;loop: if(i<=100)sum=sum+i;i+;goto loop;printf("%dn",sum);·7·2.8 switch语句及实例说明 语言还提供了另一种用于多分支选择的switch语句,其一般形式为:switch(表达式) case常量表达式1: 语句1;case常量表达式2: 语句2;case常量表达式n: 语句n;default : 语句n+1;其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。例main()int a;printf("input integer number: ");scanf("%d",&a);switch (a) case 1:printf("Mondayn"); break;case 2:printf("Tuesdayn"); break;case 3:printf("Wednesdayn"); break;case 4:printf("Thursdayn"); break;case 5:printf("Fridayn"); break;case 6:printf("Saturdayn"); break;case 7:printf("Sundayn"); break;default:printf("errorn"); break;本程是输入一个数字,输出一个英文单词,与switch一起使用的还有break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在每一case语句之后增加一个break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。第三章 总体设计3.1 项目设计流程1. 学习获得鼠标坐标方法及相关函数2. 程序控制界面绘制线条方法及相关函数3. 项目设计图规划设计4. 代码编写3.2系统模块图本系统只需要两个模块,即图形绘制模块。如图3.1.1所示. 画图板图形绘制模块鼠标控制模块绘制任意图形 图3.1.1(1) 图形绘制模块。该模块主要包括图形的绘制功能,可以绘制直线。矩形。圆等任意图形。(2) 鼠标控制模块。该模块主要实现鼠标状态的获取,鼠标位置的设置,以及鼠标的绘制等。3.3图形绘制流程程序首先捕获鼠标,当用户单击鼠标右键时,开始画图,随着鼠标的移动,图形将被画出,直到松开右键。结束操作时,只要单击鼠标左键即可。具体流程图如图3.1.2所示单击右键开始绘图移动鼠标开始绘图右键松开?单击左键?结束开始否是否是图3.1.2 图形绘制流程图3.4函数功能描述1)mouseStatus()函数原型:int mouseStatus(int* x,int* y)mouseStatus()函数用于获取鼠标的状态,即鼠标的按键情况,1表示鼠标按下左键,2表示鼠标按下右键。2)DrawMouse()函数原型:void DrawMouse(float x,float y)DrawMouse()函数用于绘制鼠标。x,y分别表示鼠标指针所处的位置。3.5源程序#include <graphics.h>#include <stdlib.h>#include <conio.h>#include <stdio.h>#include <dos.h>#include <bios.h>#include <math.h>#include <alloc.h>int mouseStatus(int* x,int* y) union REGS inregs,outregs; int status; status=0; inregs.x.ax=3; int86(0x33,&inregs,&outregs); *x=outregs.x.cx; *y=outregs.x.dx; if(outregs.x.bx&1) status=1; else if(outregs.x.bx&2) status=2; return (status);void DrawMouse(float x,float y) line(x,y,x+5,y+15); line(x,y,x+15,y+5); line(x+5,y+15,x+15,y+5); line(x+11,y+9,x+21,y+19); line(x+9,y+11,x+19,y+21); line(x+22,y+19,x+20,y+21);void main() int gdriver,gmode; int x0,y0,x1,y1; int last_x,last_y; int i; int status_m; x0=250; y0=250; gdriver=DETECT; initgraph(&gdriver,&gmode,""); setbkcolor(0); setcolor(14); rectangle(5,30,630,445); setfillstyle(1,2); floodfill(10,10,14); setwritemode(1); while( 1) status_m=mouseStatus(&x1,&y1); if(last_x!=x1|last_y!=y1) setcolor(RED); DrawMouse(last_x,last_y); DrawMouse(x1,y1); last_x=x1; last_y=y1; if(status_m=2) if(x1!=x0 | y1!=y0 ) putpixel(x1, y1, 25); x0=x1;y0=y1; if(status_m=1) break; 第四章 程序说明4.1程序图例(1)开始界面图一(2)开始绘图4.2程序运行说明设计程序过程中包括获得鼠标坐标方法及相关函数, 程序控制界面绘制线条方法及相关函数其中利用了打点的命令。若果鼠标移动的一点和前一点的横坐标或纵坐标不一样,则打出一点。这样利用打点会出图形。第五章 课程设计总结 1、调试分析 (1)刚编译完后有好多错误和警告,运行失败,然后经过修改错误警告慢慢减少,最终可以运行。 (2)该程序中可能还存在一些小问题。例如删除学生信息后没有提醒已删除成功等。我在编译的过程中发现自己存在好多毛病,有粗心,不注意细节,其实自己也知道细节决定成败,以后我会注意。 2、设计总结经过两周的课程设计,我学到了很多东西:巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。通过课程设计,培养了我严肃认真的学习作风,逐步建立正确的生产观念、经济观念和全局观念。课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。 设计过程中,通过闵老师的指导,我不仅学到了有关此次设计课题的相关知识,更学到了怎样去思考C语言编程中遇到的问题,一个问题我自己想了一天多。可是在闵老师指导过程中,我发现其实只要换个思考方式,问题就迎刃而解了。再次感谢我的指导教师闵昆龙。希望还可以有很多的机会得到闵老师的指导。第六章 参考文献【1】 姜灵芝 榆健 C语言课程设计案例精编【2】 郭俊凤 朱景福 C程序设计案例教程- 16 -
展开阅读全文