C语言电子闹钟(显示时间、计时器、闹钟、倒计时、世界时钟、日历、文件读取)C语言大作业 超详细注释 简单易懂

#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);		//绘制秒钟的个位
}

在之前的程序上更新了闹钟设置的个数和文件读取等内容

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值