模拟时钟转动程序.doc
如有侵权,请联系网站删除,仅供学习与交流模拟时钟转动程序【精品文档】第 6 页C语言集中上机实验报告题目五: 模拟时钟转动程序 院 系: 班 级: 姓 名: 学 号: 指导教师: 2011 年 12 月 08日目录 1设计思路 2流程图 3使用的主要函数 4程序各功能模块 1调试过程出现的问题 2运行结果一 课程设计的地位、作用与目的为综合应用C语言程序设计理论知识、进一步提高学生综合解决问题、协调工作的能力和良好的软件开发习惯,特安排本实验内容。希望通过该实习能够进一步激发学生的学习热情,培养学生初步编程的能力,为后续的学习和发展奠定基础。二 课程的基本要求能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。三 课程设计的主要设计思路与流程图设计思路:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。每隔一秒读取一次时间,直到键盘有输入为止。流程图开始初始化绘图窗口画表盘 检测是否有键盘输入是否获取系统时间将得到的整数型时间变量转换成字符型并输出计算表针的位置画表针结束使用的主要函数:setlinestyle 设置画线setcolor 设置颜色line(int x1,int y1,int x2,int y2) 画直线circle(int x,int y,int r) 画圆outtextxy(int x,int y,char *textstring) 在指定位置输出字符initgraph(int x, int y); 初始化绘图窗口setwritemode( ); 设置绘图模式kbhit() 检查是否有键盘输入GetLocalTime(&ti); 获取当前时间sleep() 程序暂停若干时间程序各功能模块:1.计算表针的位置并画出表针void Drawzhizhen(int hour, int minute, int second) double a_hour, a_min, a_sec; / 时、分、秒针的弧度值 int x_hour, y_hour, x_min, y_min, x_sec, y_sec; / 时、分、秒针的位置 a_sec = second * 2 * PI / 60; / 计算时、分、秒针的弧度值 a_min = minute * 2 * PI / 60 + a_sec / 60; a_hour= hour * 2 * PI / 12 + a_min / 12; x_sec = int(120 * sin(a_sec); y_sec = int(120 * cos(a_sec); /计算 时、分、秒针的位置 x_min = int(100 * sin(a_min); y_min = int(100 * cos(a_min); x_hour= int(70 * sin(a_hour); y_hour= int(70 * cos(a_hour); setlinestyle(PS_SOLID, NULL, 10); / 画时针 setcolor(WHITE); line(300 + x_hour, 240 - y_hour, 300 - x_hour / 7, 240 + y_hour / 7); setlinestyle(PS_SOLID, NULL, 5);/ 画分针 setcolor(YELLOW); line(300 + x_min, 240 - y_min, 300 - x_min / 5, 240 + y_min / 5); setlinestyle(PS_SOLID, NULL, 2); / 画秒针 setcolor(RED); line(300 + x_sec, 240 - y_sec, 300 - x_sec / 3, 240 + y_sec / 3);2.画表盘void Drawbiaopan() int i,l,x1,x2,y1,y2; setbkcolor(1); circle(300,240,180); circle(300,240,185); circle(300,240,20); for(i=0;i<60;i+) /*划钟点上的短线*/ if(i%5=0) l=15; else l=5; x1=180*sin(i*6*PI/180)+300; y1=180*cos(i*6*PI/180)+240; x2=(180-l)*sin(i*6*PI/180)+300; y2=(180-l)*cos(i*6*PI/180)+240; line(x1,y1,x2,y2); outtextxy(300,80,"12") ; outtextxy(300,390,"6"); outtextxy(140,230,"9"); outtextxy(460,230,"3"); outtextxy(380,100,"1"); outtextxy(220,100,"11"); outtextxy(430,160,"2"); outtextxy(430,310,"4"); outtextxy(380,370,"5"); outtextxy(220,370,"7"); outtextxy(160,160,"10"); outtextxy(160,310,"8");3.将获取的整数型时间变量转换成字符型void ch1(int a,int x) /将年转换成字符型并输出char b,c,d,e;b=(char)(a/1000+48);c=(char)(a%1000)/100+48);d=(char)(a%100)/10+48);e=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);outtextxy(x+20,10,d);outtextxy(x+30,10,e);void ch2(int a,int x) /其他时间转换成字符型并输出char b,c;b=(char)(a/10+48);c=(char)(a%10+48);outtextxy(x,10,b);outtextxy(x+10,10,c);主函数:void main() initgraph(640, 480); / 初始化绘图窗口 Drawbiaopan(); / 绘制表盘 setwritemode(R2_XORPEN); / 设置绘图模式 SYSTEMTIME ti; / 定义ti保存当前时间 while(!kbhit() / 按任意键退出钟表程序 GetLocalTime(&ti); / 获取当前时间 ch1(ti.wYear,10); outtextxy(50,10,"年"); /输出时间 ch2(ti.wMonth,65); outtextxy(85,10,"月"); ch2(ti.wDay,100); outtextxy(120,10,"日"); ch2(ti.wHour,135); outtextxy(155,10,":"); ch2(ti.wMinute,165); outtextxy(185,10,":"); ch2(ti.wSecond,195); Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); / 画表针 Sleep(1000); / 延时 1 秒 Drawzhizhen(ti.wHour, ti.wMinute, ti.wSecond); / 画表针 closegraph(); / 关闭绘图窗口四 程序的调试与运行结果调试过程出现的问题:1.Vc+6.0中没有“graphics.h”解决办法:安装turboc.2.0中的函数库EasyX2.无法获取系统时间 解决办法:使用函数GetLocalTime( );并使用#include <time.h>声明3Outtextxy()函数无法显示整数型时间 解决办法:将整数型时间变量转换为字符型再输出运行结果:五 心得体会 由于C语言没有学过图形方面的知识,很多东西都要去查资料。在设计的过程中遇到很多问题,都需要花很多时间去尝试,去解决。这个程序总体来说不复杂,思路也简单,但是在编写的过程中确实学到了很多东西。