小目标---时钟的实现

来源:互联网 发布:audition mac无法验证 编辑:程序博客网 时间:2024/06/06 03:26

利用一个类,将时钟封装起来,只将运行接口暴露在外,从而达到数据的封装。
思路:
(1)在类中的构造函数中,利用时间函数获取目前的时间
(2)在运行函数中,需要一个显示函数与一个更新数据的时间的函数
(3)在更新数据的函数中,需要一个清屏函数,从而使得显示不会占满屏幕。
(4)在数据更新函数中,每一次判断是否到达临界状态。
具体实现如下所示:

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;#include<time.h>#include<iomanip>#include<windows.h>//#include<unistd.h>class Clock{public:    //构造函数    Clock()    {        time_t t = time(NULL);        struct tm ti1 = *localtime(&t);        //struct tm * gmtime(const time_t *timer);        struct tm ti2 = *localtime(&t);        year = ti2.tm_year+1900;        month = ti1.tm_mon + 1;        day2 = ti1.tm_mday;        day1 = ti1.tm_wday;        hor = ti1.tm_hour;        min = ti1.tm_min;        sec = ti1.tm_sec;    }    void run()    {        while (1)        {            //显示函数            show();            //数据更新函数            review();        }    }private:    void show()    {        system("cls");//清屏函数        cout << "星期" << setw(1) << day1 << "   ";        cout << setw(4) << year << "-";        cout << setw(2) << month << "-";        cout << setw(2) << day2 << "   ";        cout << setw(2) << hor << ":";        cout << setw(2) << min << ":";        cout << setw(2) << sec << " ";        /*time_t lt;        lt = time(NULL);        printf(ctime(&lt));*/    }    void review()    {        Sleep(1000);        if (++sec == 60)        {            sec = 0;            min += 1;            if (min == 60)            {                min = 0;                hor += 1;                if (hor == 24)                {                    hor = 0;                    day1 += 1;                    day2 += 1;                    if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))                    {                        if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)                        {                            if (day2 == 31||day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                {                                    month = 1;                                    year += 1;                                }                            }                        }                        else if (month == 2)                        {                            if (day2 == 29 || day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                {                                    month = 1;                                    year += 1;                                }                            }                        }                        else//不是上面两种情况                        {                            if (day2 == 30 || day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                {                                    month = 1;                                    year += 1;                                }                            }                        }                    }                    else//不是闰年                    {                        if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)                        {                            if (day2 == 31 || day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                {                                    month = 1;                                    year += 1;                                }                            }                        }                        else if (month == 2)                        {                            if (day2 == 28 || day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                {                                    month = 1;                                    year += 1;                                }                            }                        }                        else//不是上面两种情况                        {                            if (day2 == 30 || day1 == 7)                            {                                day1 = 1;                                day2 = 1;                                month += 1;                                if (month == 12)                                 {                                    month = 1;                                    year += 1;                                }                            }                        }                    }                }            }        }    }private:    int year;    int month;    int day1;//表示显示星期    int day2;//表示显示月    int hor;//时    int min;//分    int sec;//秒};int main(){    Clock c;    c.run();    system("pause");    return 0;}

在这个实现中,如果可以将每一个分支封装在函数中,或许会更加有利于可读性,对于这一点,在以后的优化中,会依次提到。

原创粉丝点击