#include <stdio.h>
#include <time.h> //时间函数
#include <conio.h> //字符模式函数
#include <stdlib.h>
#include <windows.h>
#include <mmsystem.h> //与多媒体有关
#pragma comment(lib,"winmm.lib") //将 winmm.lib作为附加的库文件链接到目标可执行文件中
#define N 10 //定义的闹钟个数
FILE* fp = fopen("C:\\Users\\wzt\\OneDrive\\桌面\\c闹钟文件.txt", "r"); //打开文件 文件每行按 HH:MM:SS 的格式写入
typedef struct date
{
int hour;
int min;
int sec;
int month;
int day;
int year;
}Date; //定义日期结构体
typedef struct alarm_clock
{
int hour;
int min;
int sec;
int set;
}Alarm_clock; //定义闹钟时间结构体
void display_time(); //总体显示时间
void start_timer(); //开始计时
void pause_timer(); //暂停计时
void reset_timer(); //重置计时器
void set_alarm(int num); //设置闹钟
void reset_alarm(int pos, int wrong); //重置闹钟
int checking_time(int hour, int min , int sec); //检查闹钟设置时间
void world_clock(); //显示世界时钟
void cal_worldtime(Date country,int diff,int i); //计算世界时间
void countdown_timer(); //设置倒计时
void reset_countdown(); //重置倒计时
void calendar(); //查看日历
int getWeekOfFirstDay(int nowDay, int nowWeek); //推算这月第一天是礼拜几
void set_alarm_by_file(FILE* fp); //读取文件并设置闹钟
void exit_program(); //退出程序
void gotoxy(int x,int y); //光标定位
void dians(); //绘制点号
void draw_numb(int x,int shu); //绘制数字
void draws(char wei,int shu); //绘制时分秒
void show_time(); //电子显示时间
struct tm *curtime; //结构体tm,结构指针curtime,可指向当前日期
time_t t; //时间类型变量t
time_t prev_time = time(NULL); //时间类型变量,表示先前的时间
time_t current_time = time(NULL); //时间类型变量,表示当前的时间
int i;
int timer_running = 0; //计时器运行标志
int pause_timers = 0; //是否暂停的标志
int countdown_running = 0; //倒计时是否在运行
int flag_setcountdown = 0; //设置倒计时时正确输入个数
int start_time = 0; //计时器开始时间
int pause_time = 0; //暂停时的时间
int total_time = 0; //总耗时
int flag_wrongtime = 0; //是否错误设定闹钟时间
int num=0; //当前使用的闹钟个数
int flag_setalarm = 0; //设定闹钟时正确输入个数
Alarm_clock a_clock[N]; //闹钟时间
int countdown_hour,countdown_min,countdown_sec; //倒计时设置的时分秒
int flag_readfile=0; //是否读取过文件
Date london,newyork,moscow,tokyo,paris,los,sydney,toronto; //世界各国日期结构体
char coun[8][20]={"London","Newyork","Moscow","Tokyo","Paris","Los","Sydney","Toronto"}; //国家名称
const char head[] = " Mon Tue Wed Thu Fri Sat Sun"; //表头
int Month[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}}; //非闰年和闰年各月天数
int main()
{
char aws;
while (1)
{ //打印菜单
printf("Clock Program\n");
printf("Press 't' to start or continue timer (开始计时器)\n");
printf("Press 'p' to pause timer (暂停计时器)\n");
printf("Press 'r' to reset timer or alarm or countdown timer (重置计时器或闹钟或倒计时)\n");
printf("Press 'a' to set alarm (设置闹钟)\n");
printf("Press 's' to watch the world clock (查看世界时钟)\n");
printf("Press 'd' to set countdown timer (设置倒计时)\n");
printf("Press 'c' to watch calendar (查看日历)\n");
printf("Press 'f to set alarm by FILE (通过文件设置闹钟)\n");
printf("Press 'x' to exit program (退出)\n");
if(a_clock[0].set!=0) //如果当前设置了闹钟
{
for(i=0;i<=num;i++)
{ //打印当前使用的闹钟
printf("Clock[%d] %02d:%02d:%02d\t",i,a_clock[i].hour, a_clock[i].min, a_clock[i].sec);
}
printf("\n");
}
if(countdown_running == 1) //如果当前使用了倒计时
{
if(countdown_sec >= 0 && countdown_running == 1) //如果倒计时未结束
{
time_t current_time = time(NULL); //获得当前时间
printf("\rCountdown: %02d:%02d:%02d",countdown_hour,countdown_min,countdown_sec);
fflush(stdout); //清空缓冲区
if (current_time - prev_time >= 1)
{ // 每秒更新一次倒计时
countdown_sec--;
prev_time = current_time; //前一秒时间更新为当前时间
}
if(countdown_sec<0 && countdown_min>0) //秒数为0,分钟数不为0时
{
countdown_min=countdown_min-1; //分钟数减1
countdown_sec=59;
}
if(countdown_sec<0 && countdown_min<=0 && countdown_hour>0) //秒数为0,分钟数为0,小时数不为0时
{
countdown_hour=countdown_hour-1; //小时数减1
countdown_min=59;
countdown_sec=59;
}
}
}
printf("\n");
display_time(); //电子显示当前时间
if (kbhit()) //是否有键盘输入
{
char input = getch();
switch (input)
{
case 't':
case 'T':
if (timer_running == 0)
{
printf("\nStart timer\n");
start_timer(); //启动计时器
}
break;
case 'r':
case 'R':
printf("\nPlease input what you want to reset('t':Timer '0':Alarm[0] 'c':Countdown)\n");
aws=getch();
if(aws=='t' && (pause_timers == 1 || timer_running == 1))
{
printf("\nReset Timer\n");
reset_timer(); //重置计时器
pause_timers = 0;
}
else if(aws=='c' && countdown_running == 1)
{
printf("\nReset the Countdown Timer\n");
reset_countdown(); //重置倒计时
}
else if(aws>='0' && aws<='9' && a_clock[aws-'0'].set==1)
{
printf("\nReset the Alarm[%d]\n",aws-'0');
reset_alarm(aws-'0', 0); //重置闹钟
}
else
{
printf("\nInput error!!! or No features are started.\n"); //无法重置
Sleep(2000);
}
break;
case 'p':
case 'P':
if (timer_running == 1)
{
printf("Pause timer\n");
pause_timer(); //暂停计时器
pause_timers=1;
printf("Total timing:%ds \n",total_time);
printf("Press 't' to continue timer or 'r' to reset timer\n");
while(1)
{
if(kbhit())
{
break; //有键盘输入时才关闭页面,防止页面刷新
}
}
}
else
{
printf("\nThe timer did not start, cannot pause\n");
Sleep(1500);
}
break;
case 'a':
case 'A':
if (a_clock[0].set==0) //如果没有设置过闹钟
{
printf("\nSet alarm (24-hour clock, format: HH MM SS)\n");
fflush(stdin);
set_alarm(0); //设置闹钟
flag_wrongtime=checking_time(a_clock[0].hour, a_clock[0].min, a_clock[0].sec); //检查闹钟设置时间是否有错
if(flag_wrongtime == 1) //闹钟设置时间有错的情况
{
printf("Wrong!!! press 'a' again to set alarm\n");
a_clock[0].set = 0;
reset_alarm(0,1); //重置闹钟时间
fflush(stdin); //清空输入缓冲区,将上一次的输入读走
Sleep(1500); //暂停1.5s,方便用户看清
}
if(flag_wrongtime == 0) //正确输入的情况
{
printf("Alarm set for %02d:%02d:%02d\n",a_clock[0].hour, a_clock[0].min, a_clock[0].sec);
Sleep(1500);
}
}
else //已经设置过闹钟
{
printf("\n");
for(i=0;i<=num;i++)
{
printf("Alarm[%d] set for %02d:%02d:%02d\n",i,a_clock[i].hour, a_clock[i].min, a_clock[i].sec);
}
printf("If you want to reset the alarm, press 'r'\n");
printf("If you want to add another clock, press 'g'\n");
Sleep(2500);
}
break;
case 'g':
case 'G': //在已经设置了闹钟的情况下增加一个闹钟
if(a_clock[0].set!=0) //如果设置过闹钟
{
num++; //当前使用闹钟的个数+1
printf("\nSet another alarm (24-hour clock, format: HH MM SS)\n");
set_alarm(num); //设置闹钟
a_clock[num].set=1;
flag_wrongtime=checking_time(a_clock[num].hour, a_clock[num].min, a_clock[num].sec); //检查闹钟设置时间是否有错
if(flag_wrongtime == 1) //闹钟设置时间有错的情况
{
printf("Wrong!!! press 'f' again to set alarm\n");
a_clock[num].set = 0;
reset_alarm(num,1); //重置闹钟时间
num--;
fflush(stdin); //清空输入缓冲区,将上一次的输入读走
Sleep(1500); //暂停1.5s,方便用户看清
}
if(flag_wrongtime == 0) //正确输入的情况
{
printf("Alarm set for %02d:%02d:%02d\n", a_clock[num].hour, a_clock[num].min, a_clock[num].sec);
a_clock[num].set = 1;
Sleep(1000);
}
printf("\n");
for(i=0;i<=num;i++)
{
//a_clock[i].set = 1;
printf("Alarm[%d] set for %02d:%02d:%02d\n",i,a_clock[i].hour, a_clock[i].min, a_clock[i].sec);
}
Sleep(1000);
}
break;
case 's':
case 'S':
world_clock(); //显示世界时间
printf("\nPress Enter Key to go back to the main page\n");
while(1)
{
if(kbhit())
{
break; //按回车键回到主页面
}
}
break;
case 'd':
case 'D':
if(countdown_running == 0)
{
countdown_timer(); //设置倒计时
countdown_running = 1;
}
else
{ //已经设置过倒计时的情况
printf("\nThe countdown has been set, will end for %dHour %dMin %dSec\n",countdown_hour,countdown_min,countdown_sec);
printf("If you want to reset the countdown timer, press 'r'\n");
Sleep(1500);
}
break;
case 'c':
case 'C':
calendar(); //查看日历
printf("\nPress Enter Key to go back to the main page\n");
while(1)
{
if(kbhit())
{
break; //按回车键回到主页面
}
}
break;
case 'f':
case 'F':
if(flag_readfile==0)
{
set_alarm_by_file(fp); //读取文件并设置闹钟
flag_readfile=1;
}
else
{
printf("\nThe file has been read\n");
Sleep(1500);
}
break;
case 'x':
case 'X':
exit_program(); //退出程序
break;
default: //输入错误时 退出当次循环
break;
}
}
Sleep(100); //隔0.1s刷新一次
system("cls");//清屏
}
}
void display_time() //总体显示时间并检查计时器、闹钟、倒计时
{
show_time(); //电子显示时间
char key;
for(int i=0;i<=num;i++) //遍历每一个闹钟
{
if(a_clock[i].set==1 && curtime->tm_hour==a_clock[i].hour && curtime->tm_min==a_clock[i].min && curtime->tm_sec>=a_clock[i].sec)
{ //如果有闹钟到了设置时间
printf("\nAlarm! Alarm! Alarm!\n");
//PlaySound(TEXT("alarm.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐
printf("Press Enter key to pause the alarm or Press 'c' to add 5 minutes\n"); //按回车停止闹钟或'c'键延长5分钟
key=getch();
if(key=='c')
{
a_clock[i].min=a_clock[i].min+5; //闹钟延长5分钟
if(a_clock[i].min>=60)
{
a_clock[i].min=a_clock[i].min%60; //分钟大于60时时钟加1
a_clock[i].hour=a_clock[i].hour+1;
a_clock[i].hour=a_clock[i].hour%24;
}
printf("The alarm has been delayed 5 minutes, will run at %02d:%02d:%02d\n",a_clock[i].hour,a_clock[i].min,a_clock[i].sec);
Sleep(1500);
return;
}
else
{
reset_alarm(i,0); //重置闹钟
a_clock[i].set=0;
}
}
}
if (timer_running == 1)
{ //计时器在运行时
int elapsed_time = (clock() - start_time) / 1000;//将毫秒转换为秒
printf("\n");
printf("\nTimer: %02d:%02d:%02d\n", (elapsed_time + total_time) / 3600, ((elapsed_time + total_time) % 3600) / 60, (elapsed_time + total_time) % 60);
}
if (countdown_running==1 && countdown_sec<0)
{ //倒计时结束时
printf("\nThe time is up!!! The time is up!!!\n");
countdown_running=0; //重置倒计时运行标志
//PlaySound(TEXT("countdown.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); //播放音乐
printf("Press Enter key to pause the Countdown Timer\n"); //按回车退出计时器
while(1)
{
if(kbhit())
{
break;
}
}
}
}
void start_timer() //开始计时
{
timer_running = 1;
start_time = clock();
}
void pause_timer() //暂停计时
{
timer_running = 0;
pause_time = clock();
total_time += (pause_time - start_time) / 1000;
}
void reset_timer() //重置计时器
{
timer_running = 0;
start_time = 0;
pause_time = 0;
total_time = 0;
Sleep(1000);
}
void set_alarm(int num) //设置闹钟
{
flag_setalarm = scanf("%d %d %d", &a_clock[num].hour,&a_clock[num].min, &a_clock[num].sec);
a_clock[num].set=1;
}
void reset_alarm(int pos,int wrong) //重置闹钟 wrong:是否为闹钟设置错误的情况
{
int i;
if(pos==0 && wrong==0 && num==0) //仅设置了一个闹钟时
{
reset_alarm(0,1);
}
else if(wrong==1) //清空当前闹钟的时间
{
a_clock[num].set = 0;
a_clock[num].hour = 0;
a_clock[num].min = 0;
a_clock[num].sec = 0;
}
else if(wrong==0) //完全删除当前闹钟
{
for(i=pos;i<num;i++)
{
a_clock[i]=a_clock[i+1]; //后一个闹钟替代前一个
}
reset_alarm(i+1,1);
num--; //使用闹钟数量减1
}
Sleep(1000);
}
int checking_time(int hour, int min , int sec) //检查闹钟设置时间是否有误
{
int i;
if(hour<0 || hour>24 || min<0 || min>60 || sec<0 || sec>60)
{
return 1; //有错返回1
}
if(flag_setalarm!=3)
{
return 1; //有错返回1
}
for(i=0;i<num;i++)
{
if(hour==a_clock[i].hour && min==a_clock[i].min && sec==a_clock[i].sec)
{ //重复设置的情况
printf("An alarm clock has been set for %02d:%02d:%02d\n",hour,min,sec);
return 1;
}
}
return 0;
}
void world_clock() //世界时钟london,newyork,moscow,tokyo,paris,los,sydney,toronto;
{
cal_worldtime(london,-7,0);
cal_worldtime(newyork,-12,1);
cal_worldtime(moscow,-5,2);
cal_worldtime(tokyo,+1,3);
cal_worldtime(paris,-6,4);
cal_worldtime(los,-15,5);
cal_worldtime(sydney,+2,6);
cal_worldtime(toronto,-12,7);
}
void cal_worldtime(Date country,int diff,int i) //计算每个地区的时间
{
int flag=0;
if((curtime->tm_year%4==0 && curtime->tm_year%100!=0) || curtime->tm_year%400==0 )
{//闰年的情况
flag=1;
}
country.hour=curtime->tm_hour+diff;
country.min=curtime->tm_min;
country.sec=curtime->tm_sec;
country.day=curtime->tm_mday;
country.month=curtime->tm_mon+1; //curtime->tm_mon从0开始计算,所以要+1
country.year=curtime->tm_year+1900; //curtime->tm_year为距1900年的相差年数,所以要+1900
if(curtime->tm_hour+diff<0) //北京时间加时差小时数小于0
{
country.day=curtime->tm_mday-1; //天数减1
country.hour=curtime->tm_hour+24+diff; //小时数补上24
if(curtime->tm_mday-1<1) //天数小于1号
{
country.day=(flag==1) ? Month[0][curtime->tm_mon-1] : Month[1][curtime->tm_mon-1]; //天数为前一月最后一天
country.month=curtime->tm_mon; //月数减1
if(country.month<1) //月数不够减
{
country.month=12;
country.day=Month[0][11];
country.year=curtime->tm_year+1900-1; //年数减1
}
}
}
else if(curtime->tm_hour+diff>24) //北京时间加时差小时数大于24
{
country.day=curtime->tm_mday+1; //天数加1
country.hour=curtime->tm_hour-24+diff; //小时数减24
if(curtime->tm_mday+1 > ((flag==1) ? Month[0][curtime->tm_mon] : Month[1][curtime->tm_mon])) //天数超过当月天数
{
country.month=curtime->tm_mon+2; //月份数加1
country.day=1;
if(country.month>12) //月份数超过12
{
country.month=1;
country.day=1;
country.year=curtime->tm_year+1900+1; //年数加1
}
}
}
printf("\n%s time: %d/%d/%d %02d:%02d:%02d\n",coun[i],country.year,country.month,country.day,country.hour,country.min,country.sec);
}
void countdown_timer() //启动倒计时
{
printf("\nPlease enter the time you want to count down (format: HH MM SS)\n");
while((flag_setcountdown = scanf("%d %d %d",&countdown_hour,&countdown_min,&countdown_sec))!=3) //输入有误时
{
printf("Wrong!!! Please set countdown time again\n");
fflush(stdin); //清空输入缓冲区,将上一次的输入读走
}
printf("countdown %dHour %dMin %dSec\n",countdown_hour,countdown_min,countdown_sec);
Sleep(1000);
}
void reset_countdown() //重置倒计时
{
countdown_hour=0;
countdown_min=0;
countdown_sec=0;
countdown_running=0;
Sleep(1000);
}
void calendar() //日历
{
int flag=0; //判断闰年
int week_of_firstDay; //该月第一天为星期几
int today; //今天的天数
int endday; //该月的天数
int i;
if (curtime->tm_year % 400 == 0 || (curtime->tm_year % 100 != 0 && curtime->tm_year % 4 == 0))
{ //为闰年的情况
flag=1;
}
endday=Month[flag][curtime->tm_mon];
printf("\n\n %s\n", asctime(curtime)); //输出今天的信息
week_of_firstDay=getWeekOfFirstDay(curtime->tm_mday, curtime->tm_wday);
today = curtime->tm_mday;
printf("%s\n", head); // 输出表头
// 输出第一行占位空格
if (week_of_firstDay == 0) //如果是星期天
printf(" ");
for( i = 1; i < week_of_firstDay; i++)
{
printf(" ");
}
// 从一号开始输出到月末
for (i = 1; i <= endday; i++)
{
if (i == today)
printf("%5d*", i);
else
printf("%6d", i);
// 周末输出结束后输出换行
if ((i + week_of_firstDay - 1) % 7 == 0)
puts("");
}
puts("");
}
// 推算这月第一天是礼拜几
// 返回值:[0, 6] (礼拜日, 礼拜一 ~ 礼拜六)
int getWeekOfFirstDay(int nowDay, int nowWeek)
{
int mod = (nowDay - 1) % 7;
int ans = nowWeek - mod;
if (ans >= 0)
return ans;
else
return 7 + ans;
}
void set_alarm_by_file(FILE* fp) //读取文件并设置闹钟
{
//fp = fopen("C:\\Users\\wzt\\OneDrive\\桌面\\c闹钟文件.txt", "r");
char buffer[255]; //一次读多长
int i;
if(fp == NULL)
{ //无法读取的情况
printf("Cannot open file.\n");
return;
}
else
{
printf("\n");
num=0;
while((fgets(buffer, sizeof(buffer), fp)) != NULL) //一直读到文件末尾
{
sscanf(buffer, "%d:%d:%d",&a_clock[num].hour,&a_clock[num].min,&a_clock[num].sec); //按指定格式存入相应数组
a_clock[num].set=1;
num++;
}
num=num-1;
}
//关闭文件
fclose(fp);
printf("The file was read successfully\n");
for(i=0;i<=num;i++)
{
printf("Alarm[%d] set for %02d:%02d:%02d\n",i,a_clock[i].hour, a_clock[i].min, a_clock[i].sec);
}
Sleep(2000);
}
void exit_program() //退出程序
{
//PlaySound(NULL, NULL, 0); //播放音乐
exit(0);
}
void gotoxy(int x,int y) //光标定位函数
{
COORD coord; //表示字符在控制台屏幕上的坐标的结构体
coord.X=x; //横坐标
coord.Y=y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); //定位光标位置
//参数1:句柄(通过GetStdHandle()函数获得句柄)参数2:位置(结构体类型)
}
void dians() //绘制时间之间的点号
{
int x=8;
gotoxy(x*3,14);
printf(" **");
gotoxy(x*3,15);
printf(" **");
gotoxy(x*3,17);
printf(" **");
gotoxy(x*3,18);
printf(" **");
gotoxy(x*6,14);
printf(" **");
gotoxy(x*6,15);
printf(" **");
gotoxy(x*6,17);
printf(" **");
gotoxy(x*6,18);
printf(" **");
}
void draw_numb(int x,int shu)
{ //判断0-9的数据,通过gotoxy显示出来
if(shu==0){ //绘制数字0
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf("* *");
gotoxy(x,14);
printf("* *");
gotoxy(x,15);
printf("* *");
gotoxy(x,16);
printf("* *");
gotoxy(x,17);
printf("* *");
gotoxy(x,18);
printf("* *");
gotoxy(x,19);
printf("* *");
gotoxy(x,20);
printf("*****");
}
if(shu==1){ //绘制数字1
gotoxy(x,12);
printf(" * ");
gotoxy(x,13);
printf(" * ");
gotoxy(x,14);
printf(" * ");
gotoxy(x,15);
printf(" * ");
gotoxy(x,16);
printf(" * ");
gotoxy(x,17);
printf(" * ");
gotoxy(x,18);
printf(" * ");
gotoxy(x,19);
printf(" * ");
gotoxy(x,20);
printf(" * ");
}
if(shu==2){ //绘制数字2
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf(" *");
gotoxy(x,14);
printf(" *");
gotoxy(x,15);
printf(" *");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf("* ");
gotoxy(x,18);
printf("* ");
gotoxy(x,19);
printf("* ");
gotoxy(x,20);
printf("*****");
}
if(shu==3){ //绘制数字3
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf(" *");
gotoxy(x,14);
printf(" *");
gotoxy(x,15);
printf(" *");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf(" *");
gotoxy(x,18);
printf(" *");
gotoxy(x,19);
printf(" *");
gotoxy(x,20);
printf("*****");
}
if(shu==4){ //绘制数字4
gotoxy(x,12);
printf("* *");
gotoxy(x,13);
printf("* *");
gotoxy(x,14);
printf("* *");
gotoxy(x,15);
printf("* *");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf(" *");
gotoxy(x,18);
printf(" *");
gotoxy(x,19);
printf(" *");
gotoxy(x,20);
printf(" *");
}
if(shu==5){ //绘制数字5
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf("* ");
gotoxy(x,14);
printf("* ");
gotoxy(x,15);
printf("* ");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf(" *");
gotoxy(x,18);
printf(" *");
gotoxy(x,19);
printf(" *");
gotoxy(x,20);
printf("*****");
}
if(shu==6){ //绘制数字6
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf("* ");
gotoxy(x,14);
printf("* ");
gotoxy(x,15);
printf("* ");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf("* *");
gotoxy(x,18);
printf("* *");
gotoxy(x,19);
printf("* *");
gotoxy(x,20);
printf("*****");
}
if(shu==7){ //绘制数字7
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf(" *");
gotoxy(x,14);
printf(" *");
gotoxy(x,15);
printf(" *");
gotoxy(x,16);
printf(" *");
gotoxy(x,17);
printf(" *");
gotoxy(x,18);
printf(" *");
gotoxy(x,19);
printf(" *");
gotoxy(x,20);
printf(" *");
}
if(shu==8){ //绘制数字8
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf("* *");
gotoxy(x,14);
printf("* *");
gotoxy(x,15);
printf("* *");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf("* *");
gotoxy(x,18);
printf("* *");
gotoxy(x,19);
printf("* *");
gotoxy(x,20);
printf("*****");
}
if(shu==9){ //绘制数字9
gotoxy(x,12);
printf("*****");
gotoxy(x,13);
printf("* *");
gotoxy(x,14);
printf("* *");
gotoxy(x,15);
printf("* *");
gotoxy(x,16);
printf("*****");
gotoxy(x,17);
printf(" *");
gotoxy(x,18);
printf(" *");
gotoxy(x,19);
printf(" *");
gotoxy(x,20);
printf("*****");
}
}
void draws(char wei,int shu)
{//定义了6个位置 分别是小时的个位十位,分钟的个位十位和秒钟的个位十位
int x=8;
if(wei=='1')
{
draw_numb(x*1,shu); //调用draw_numb函数把x*1(表示第几个位置数),shu(表示要显示的数字)调过去
} //x*1表示第一个位置 即小时的十位
if(wei=='2')
{
draw_numb(x*2,shu); //绘制小时的个位
}
if(wei=='3')
{
draw_numb(x*4,shu); //绘制分钟的十位
}
if(wei=='4')
{
draw_numb(x*5,shu); //绘制分钟的个位
}
if(wei=='5')
{
draw_numb(x*7,shu); //绘制秒钟的十位
}
if(wei=='6')
{
draw_numb(x*8,shu); //绘制秒钟的个位
}
}
void show_time()
{
//system("color 9"); //可以改变颜色
dians(); //将两个点绘制出来
t=time(0); //获取当前的秒数,参数为0则函数返回值即为结果
curtime=localtime(&t); //得到当前系统时间/
if((double)curtime->tm_hour<=12) //午前的处理/
{
gotoxy(1,16); //绘制AM
printf("AM ");
draws('1',((int)curtime->tm_hour)/10); //绘制小时的十位
draws('2',((int)((double)curtime->tm_hour))%10); //绘制小时的个位
}
else //午后的处理
{
gotoxy(1,16);
printf("PM "); //绘制PM
draws('1',(int)curtime->tm_hour/10); //绘制小时的十位
draws('2',((int)((double)curtime->tm_hour))%10); //绘制小时的个位
}
draws('3',(int)curtime->tm_min/10); //绘制分钟的十位
draws('4',(int)curtime->tm_min%10); //绘制分钟的个位
draws('5',(int)curtime->tm_sec/10); //绘制秒钟的十位
draws('6',(int)curtime->tm_sec%10); //绘制秒钟的个位
}
在之前的程序上更新了闹钟设置的个数和文件读取等内容