c语言编程模拟机械钟表行走,C语言模拟时钟转动课设报告-附代码

模拟时针转动程序

姓名: 学号:

完成日期:2012年12月

设计目的

加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。

能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。

总体设计

电子时钟 动画显示模块 转动时针处理模块 数字时钟处理模块 电子时钟的功能描述

开始

进入图形模式 进入主体界面 显示动态图像

转动时钟数字时钟的显示 退出系统显示 结束

电子时钟流程图 模块描述

动画处理模块 在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。

转时针动处理模块 指针式的时钟表盘为椭圆形并且圆周上有分布均

匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。

数字时钟处理模块 数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。

详细设计

time结构体 strume time {

usigned char ti_min; usigned char ti_hour; usigned char ti_hud; usigned char ti_sec; };

time 结构体定义在dos.h文件中,可以保存系统的当前时间。

全局变量

double h,m,s;这三个变量分别保存小时,分钟,秒。

double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。

struct time t[1];定义一个time结构类型的数组。

函数功能的描述

1. def()

函数原型: void def()

def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。

2. abc()

函数原型: void abc()

abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。

3 .digitclock()

函数原型:void digitclock()

digitclock函数用于在(x,y)位置显示clock值,clock值为时分秒。

4. clockhandle()

函数原型:void clockhandle()

clockhandle()函数用于完成时针转动和数字时钟的显示,包括时针转动角度的运算,还有对声音的输出。

5 . main()

函数原型: void main()

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言代码实现,基于Windows环境,使用了BGI图形库: ``` #include <graphics.h> #include <time.h> #include <conio.h> #include <stdio.h> #define pi 3.1415926 void drawClock(int hour, int minute, int second); void drawTime(int hour, int minute, int second); void drawHands(int hour, int minute, int second); void drawAlarm(int hour, int minute); void alarm(int hour, int minute); int main() { int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, ""); while(1) { // 获取当前时间 time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); // 绘制时钟界面 cleardevice(); drawClock(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); // 绘制当前时间 drawTime(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); // 绘制指针 drawHands(timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); // 整点报时 if(timeinfo->tm_min == 0 && timeinfo->tm_sec == 0) { alarm(timeinfo->tm_hour, timeinfo->tm_min); } // 设置闹钟 if(kbhit()) { char c = getch(); if(c == 27) // ESC键退出程序 { break; } else if(c == 'a') // 设置闹钟 { int hour, minute; printf("请输入闹钟时间(格式:小时 分钟):"); scanf("%d %d", &hour, &minute); drawAlarm(hour, minute); while(1) { time(&rawtime); timeinfo = localtime(&rawtime); if(timeinfo->tm_hour == hour && timeinfo->tm_min == minute) { alarm(hour, minute); break; } } } } delay(1000); // 延时1秒 } closegraph(); return 0; } void drawClock(int hour, int minute, int second) { setcolor(GREEN); setfillstyle(SOLID_FILL, GREEN); circle(300, 200, 150); floodfill(300, 200, GREEN); int i; for(i = 1; i <= 12; i++) { int x = 300 + 120 * sin(i * pi / 6); int y = 200 - 120 * cos(i * pi / 6); char str[2]; sprintf(str, "%d", i); outtextxy(x, y, str); } setcolor(WHITE); circle(300, 200, 155); setcolor(YELLOW); line(300, 200, 300 + 100 * sin(hour * pi / 6 + minute * pi / 360), 200 - 100 * cos(hour * pi / 6 + minute * pi / 360)); line(300, 200, 300 + 130 * sin(minute * pi / 30), 200 - 130 * cos(minute * pi / 30)); setcolor(RED); line(300, 200, 300 + 130 * sin(second * pi / 30), 200 - 130 * cos(second * pi / 30)); } void drawTime(int hour, int minute, int second) { char str[10]; sprintf(str, "%02d:%02d:%02d", hour, minute, second); settextstyle(2, 0, 8); outtextxy(200, 350, str); } void drawHands(int hour, int minute, int second) { setcolor(YELLOW); line(300, 200, 300 + 100 * sin(hour * pi / 6 + minute * pi / 360), 200 - 100 * cos(hour * pi / 6 + minute * pi / 360)); line(300, 200, 300 + 130 * sin(minute * pi / 30), 200 - 130 * cos(minute * pi / 30)); setcolor(RED); line(300, 200, 300 + 130 * sin(second * pi / 30), 200 - 130 * cos(second * pi / 30)); } void drawAlarm(int hour, int minute) { setcolor(RED); setfillstyle(SOLID_FILL, RED); circle(600, 200, 50); floodfill(600, 200, RED); char str[10]; sprintf(str, "%02d:%02d", hour, minute); settextstyle(2, 0, 4); outtextxy(580, 190, str); } void alarm(int hour, int minute) {

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值