资源描述
《C 语言程序设计课程设计报告》
《C语言程序设计》课程设计
实验报告
题目: 图形时钟
班级:
学号:
姓名:
成绩:
指导教师:
完成日期: 2011 年 1 月 25 日
目 录
§1.系统功能模块结构图﹣﹣﹣﹣﹣ P2-4
§2. 程序结构(画流程图)﹣﹣﹣﹣﹣﹣ P4
§3. 数据结构设计及用法说明﹣﹣﹣ P5
§4. 试验结果(包括输入数据和输出结果)﹣﹣P5
§5.体会 ﹣﹣﹣﹣﹣﹣﹣﹣﹣﹣﹣﹣ P6
§6.参考文献 ﹣﹣﹣﹣﹣﹣﹣﹣﹣﹣﹣P7
§7.附录:程序清单及源程序﹣﹣﹣﹣ P7-8
§1.系统功能模块结构图
---各模块的功能及程序分析
(1) void Drawclock函数
void DrawClock(int x,int y,int color)
{ int r=150;
float th;
setcolor(color);
circle(x,y,r);
circle(x,y,2);
}
作用:画表盘
r为表盘的半径 x.y为圆心的坐标
(2) void DrawHand 函数
void DrawHand(int x,int y,float th,int l,int color)
{
int x1,y1;
x1=x+l*sin(th);
y1=y-l*cos(th);
setcolor(color);
line(x,y,x1,y1);
}
作用:画指针
x:直线起点的横坐标 y:直线起点的纵坐标
x1:直线终点的横坐标 y1:直线终点的纵坐标
(3) void main() 函数
Part ①: int gdriver=DETECT,gmode;
struct time curtime; - - - - - - - -类型和最高分辨率
float th_hour,th_min,th_sec;
initgraph(&gdriver,&gmode,"");
(用于配适器类型未知的情况)
Graphdriver - - -配适器 graphmode - - - 显示模式
Part ②:setbkcolor(0); - - - - - - - - - - - - - - - - - 背景色
Part ③: while(! kbhit())
{
DrawClock(x0,y0,14); - - - - - - - - - - -函数(1)
gettime(&curtime); - - - - - - - - - - - - -得到当前系统时间
gotoxy(35,20); - - - - - - - - - - - - - - - -定位输出位置
Part ④: if((float)curtime.ti_hour<=12) - - - - - - - - - - - -上午的时间处理
{printf("AM ");
if((float)curtime.ti_hour<10) printf("0"); - - - - 十点之前在小时数前加零
printf("%.0f:",(float)curtime.ti_hour); - - - - - - - 输出小时
}
else - - - - - - - - - - - -下午的时间处理
{printf("PM ");
if((float)curtime.ti_hour-12<10) printf("0");- - - - - - - 如果时间减去12小时小于10
printf("%.0f:",(float)curtime.ti_hour-12); - - - - - - - - 输出小时
}
Part ⑤:
if((float)curtime.ti_min<10) printf("0"); - - - - - - - - - - - 相当于小时的计算方法
printf("%.0f:",(float)curtime.ti_min); - - - - - - - - - - - 输出分钟(同part ④)
if((float)curtime.ti_sec<10) printf("0"); - - - - - - - - - - -
printf("%.0f",(float)curtime.ti_sec);- - - - - - - - - - - - - -
Part ⑥:
以下三行计算表针转动角度,以竖直向上为起点,顺时针为正
th_sec=(float)curtime.ti_sec*0.1047197551;
- - - - - - - - - - - - - *(2π/60=0.1047197551)
th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0;
th_hour=(float)curtime.ti_hour*0.523598775+th_min/12.0;
- - - - - - - - - - - - *(2π/12=0.5235987755)
Part ⑦: 画指针
DrawHand(x0,y0,th_hour,70,2); - - - - - - - - - - 画时针
DrawHand(x0,y0,th_min,110,3); - - - - - - - - - - 画分针
DrawHand(x0,y0,th_sec,140,12); - - - - - - - - - - 画秒针
Part ⑧ : settextstyle(2,0,3); - - - - - - - - - -设置字体
2-----文字的字体
0-----文字的方向
3-----文字的大小
outtextxy(270,160,"MADE BY:SDW"); - - - - - - - - - -输出字体
MADE BY:SDW
(270,160)为字体的坐标
Part ⑨ : sleep(1); - - - - - - - - - - 延时一秒后刷新
cleardevice(); - - - - - - - - - - 清除图形屏幕
}
closegraph(); - - - - - - - - - -关闭图形系统,退出图形方式
§2.程序结构
§3.数据结构设计 用法说明 试验结果
本程序设计分三步:
1、是对时钟程序做全面的分析,即对程序要使用的编写方法
功能,运行方式进行分析,并做出正确的解决方案。
2、是程序的编写。由于该程序所涉
及的信息内容比较广泛 ,所以程序的编写也有 些复杂。程序的编写是一 项困难的任务 ,完成此程序必须运用书 中的大部分知识,而且要 有清晰的思路和较强的 语言组织能力 。
3、是程序的检查和系统的调用。当程序运行后,显示出 一个时钟,
用法说明:第一步,用编辑程序把编制的源程序按照一定的书写格式送到计算机中。
第二步,把送入的源程序 翻译成机器语言,即 用编译程序对源程序进行语 法检查并将符合语法规则的源程 序语句翻译成计算机能 识别的“语言”。
第三步,使用计算机中的 连接程序,把翻译好 的计算机语言程序连接起 来,并扶植成一个计算机能真正运 行的程序。
第四步,将修改后的程序运行。(保存)
第五步,以后使用时双击clock.exe文件即可
试验结果:在屏幕上显示一个时钟,(包括:时针,分针,秒针) 时针所显示的时间为系统时间,用户可以通过修改系统的时间来修改时钟的时间。
§5.体会
图
- 6 -
形钟这个程序的设计,需要
我们理解并掌握了 C 语言基本编程方
法并, 掌握一些函数的使用方法。这次
的课程设计是珍贵的一次实践机会,是
我们大学开学以来第一次完全依靠自己
一步一步地上网搜索,从一开始的毫无
头绪到后来一个模块又一个模块慢慢地
研究,理解并为我所用,直到最后完成
设计任务。这次的课程设计不仅使我们
的理论知识在实践中得到了巩固,个人
能力得到了提升,也使自己从摸索中学
到了许多课本上所没有的内容与知识。
如果 没有这次机会,我想 我也许会一
直停留在对 C 语言略知皮毛的阶段
上,而现在我可以把 知识应用起来,设
计一个小 程序。从闻所未闻的画图函
数,文字处理函数,各个图形所对应的
函数名称,大体的理解,到每一条程序
所包含的意义及功能的研究。从画表盘,
画指
针开始,到从系统调用时间进而准确地表现到指针上。从程序的大体布局到每一条
程序中各条数学函数的转化运算,一个小小的程序看起来简单,但真正到了自己做
才会觉得是那么的复杂。程序虽然简单,但通过自己完成的喜悦是其他人所永远感
受不到的。经过一段时间的上机的不断调试,也才终于顺利的完成 了设计任务。
在研究设计过 程中,我不仅增强了自学的能力。对一些软件开发模式有了更加深
刻的认识,对C语言应用软件的熟练程度有所提高,也学会了如何进行设计一个
综合完整的软件。使自己的知识不再停留在书本的层面上。本次的实践中认识自己
的不足,包括在声音,背景及表盘创新方面的工作,还有很大的提升空间和余地。
希望在今后的学习过 程中能明确自己的奋斗目标并为此努力学习,踏踏实实学好
专业知识,也是为将来的就业做好充分的准备工作。
§6.参考文献
1.张基温.C 语言程序设计案例教程.清华大学出版社,2005
2.王德银实用 C 语言程序设计.人民邮电出版社,2005
3.谭浩强.C 语言程序设计教程.高等教育出版社,2006
4. 段兴.C言实用程序设计 100 例.人民邮电出版社,2002
5.杨旭.C 语言程序设计案例教程.中国铁道工业出版社,2004
6.网上,论坛,百度知道等等,2011。
§7.附:源程序
#include<graphics.h>
#include<math.h>
#include<dos.h>
#define PI 3.1415926
#define x0 320
#define y0 240
void DrawClock(int x,int y,int color)
{
float th;
setcolor(color);
circle(x,y,171);
circle(x,y,172);
circle(x,y,170);
circle(x,y,173);
circle(x,y,174);
circle(x,y,2);
circle(x,y,175);
circle(x,y,3);
circle(x,y,1); circle(x,y,4);
}
void Drawxy()
{
setcolor(6);
circle(393,93,3);circle(383,113,3);
circle(447,177,3);circle(467,167,3);
circle(447,293,3);circle(467,303,3);
circle(383,367,3);circle(393,387,3);
circle(237,387,3);circle(247,367,3);
circle(173,313,3);circle(193,303,3);
circle(173,157,3);circle(193,167,3);
circle(237,93,3);circle(247,113,3);
}
void DrawHand(int x,int y,float th,int l,int color)
{
int x1,y1;
x1=x+l*sin(th);
y1=y-l*cos(th);
setcolor(color);
line(x,y,x1,y1);
}
void main()
{int gdriver=DETECT,gmode;
struct time curtime;
float th_hour,th_min,th_sec;
initgraph(&gdriver,&gmode,"");
setbkcolor(9);
while(! kbhit())
{
DrawClock(x0,y0,14);
Drawxy();
gettime(&curtime);
gotoxy(35,20);
if((float)curtime.ti_hour<=12)
{printf("AM ");
if((float)curtime.ti_hour<10) printf("0"); /*十点之前在小时数前加零*/
printf("%.0f:",(float)curtime.ti_hour);
}
else
{printf("PM ");
if((float)curtime.ti_hour-12<10) printf("0");
printf("%.0f:",(float)curtime.ti_hour-12);
}
if((float)curtime.ti_min<10) printf("0");
printf("%.0f:",(float)curtime.ti_min);
if((float)curtime.ti_sec<10) printf("0");
printf("%.0f",(float)curtime.ti_sec);
/*以下三行计算表针转动角度,以竖直向上为起点,顺时针为正*/
th_sec=(float)curtime.ti_sec*0.1047197551; /*2π/60=0.1047197551*/
th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0;
th_hour=(float)curtime.ti_hour*0.523598775+th_min/12.0;
/* 2π/12=0.5235987755 */
DrawHand(x0,y0,th_hour,70,2);
DrawHand(x0,y0,th_min,110,3);
DrawHand(x0,y0,th_sec,140,12);
setcolor(2);
settextstyle(2,0,3);
outtextxy(270,160,"MADE BY:SDW");
settextstyle(2,0,12);
outtextxy(320,80,"12");
outtextxy(480,240,"3");
outtextxy(320,400,"6");
outtextxy(160,240,"9");
sleep(1);
cleardevice();
}
closegraph();
}
- 9 -
展开阅读全文