日历界面实现(一次输出三个月)

12 篇文章 0 订阅

直接用循环写
太蠢了 不解释了。
在这里我以 1995年1月1日为标准 所以暂时只能求1995年1月1日以后的年份日历。

bool Getyear(int year)
{
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        return true;
    return false;
}
int GetAllyear(int year)
{
    int _year = 1995;
    int count = 0;
    for (int i = _year; i < year; i++)
        if (Getyear(i))
            count++;
    return count;
}
//1995 1 1 是星期一
int max(int x, int y, int z){
    if (x >= y){
        if (x >= z)
            return x;
        return z;
    }
    else{
        if (y >= z)
            return y;
        return z;
    }
}
void Print()
{
    int arr1[] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
    int arr2[] = { 0,31,60,91,121,152,182,213,244,274,305,335 };
    int month1[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    int month2[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
    char *pstr[] = { "一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月" };
    int _yearr;
    cin >> _yearr;
    int alldays = GetAllyear(_yearr) + 365 * (_yearr - 1995);
    printf("%-d\n",_yearr);
    if (!Getyear(_yearr))
    {
        int k = 0;
        int firstday = alldays % 7;
        int first = firstday;
        int count_day = 0;
        for (k = 0; k < 4; k++)
        {
            printf("%20s", pstr[k*3]);
            printf("%35s", pstr[k*3+1]);
            printf("%35s", pstr[k*3+2]);
            cout << endl;
            cout << endl;
            char *str[] = { "一","二","三","四","五","六","七" };
            for (int j = 0; j < 3; j++)
            {
                for (int i = 0; i < 7; i++)
                    printf("%5s", str[i]);
            }
            cout << endl;

            int first1 = (arr1[k*3] + firstday) % 7;
            int _day1 = month1[k*3];
            int sz1 = (_day1 + first) / 7;
            int su1 = (_day1 + first) % 7;
            if (su1 > 0)
                sz1++;
            int first2 = (arr1[k*3+1] + firstday) % 7;
            int _day2 = month1[k*3+1];
            int sz2 = (_day2 + first) / 7;
            int su2 = (_day2 + first) % 7;
            if (su2 > 0)
                sz2++; 
            int first3 = (arr1[k*3+2] + firstday) % 7;
            int _day3 = month1[k*3+2];
            int sz3 = (_day3 + first) / 7;
            int su3 = (_day3 + first) % 7;
            if (su3 > 0)
                sz3++;
            int count1 = 1;
            int count2 = 1;
            int count3 = 1;
            int sz = max(sz1, sz2, sz3);
            for (int f = 0; f < sz; f++)
            {
                for (int i1 = 0; i1 < 7; i1++)
                {
                    if (first1)
                    {
                        printf("%5s", " ");
                        first1--;
                        continue;
                    }
                    if (count1 > _day1)
                    {
                        for(int ii1=i1;ii1<7;ii1++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count1);
                    count1++;
                }
                for (int i2 = 0; i2 < 7; i2++)
                {
                    if (first2)
                    {
                        printf("%5s", " ");
                        first2--;
                        continue;
                    }
                    if (count2 > _day2)
                    {
                        for (int ii2 = i2; ii2<7; ii2++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count2);
                    count2++;
                }
                for (int i3 = 0; i3 < 7; i3++)
                {
                    if (first3)
                    {
                        printf("%5s", " ");
                        first3--;
                        continue;
                    }
                    if (count3 > _day3)
                    {
                        for (int ii3 = i3; ii3<7; ii3++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count3);
                    count3++;
                }
                cout << endl;
            }
            cout << endl;
        }
    }
    else
    {
        int k = 0;
        int firstday = alldays % 7;
        int first = firstday;
        int count_day = 0;
        for (k = 0; k < 4; k++)
        {
            printf("%20s", pstr[k * 3]);
            printf("%35s", pstr[k * 3 + 1]);
            printf("%35s", pstr[k * 3 + 2]);
            cout << endl;
            cout << endl;
            char *str[] = { "一","二","三","四","五","六","七" };
            for (int j = 0; j < 3; j++)
            {
                for (int i = 0; i < 7; i++)
                    printf("%5s", str[i]);
            }
            cout << endl;

            int first1 = (arr2[k * 3] + firstday) % 7;
            int _day1 = month2[k * 3];
            int sz1 = (_day1 + first) / 7;
            int su1 = (_day1 + first) % 7;
            if (su1 > 0)
                sz1++;
            int first2 = (arr2[k * 3 + 1] + firstday) % 7;
            int _day2 = month2[k * 3 + 1];
            int sz2 = (_day2 + first) / 7;
            int su2 = (_day2 + first) % 7;
            if (su2 > 0)
                sz2++;
            int first3 = (arr2[k * 3 + 2] + firstday) % 7;
            int _day3 = month2[k * 3 + 2];
            int sz3 = (_day3 + first) / 7;
            int su3 = (_day3 + first) % 7;
            if (su3 > 0)
                sz3++;
            int count1 = 1;
            int count2 = 1;
            int count3 = 1;
            int sz = max(sz1, sz2, sz3);
            for (int f = 0; f < sz; f++)
            {
                for (int i1 = 0; i1 < 7; i1++)
                {
                    if (first1)
                    {
                        printf("%5s", " ");
                        first1--;
                        continue;
                    }
                    if (count1 > _day1)
                    {
                        for (int ii1 = i1; ii1<7; ii1++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count1);
                    count1++;
                }
                for (int i2 = 0; i2 < 7; i2++)
                {
                    if (first2)
                    {
                        printf("%5s", " ");
                        first2--;
                        continue;
                    }
                    if (count2 > _day2)
                    {
                        for (int ii2 = i2; ii2<7; ii2++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count2);
                    count2++;
                }
                for (int i3 = 0; i3 < 7; i3++)
                {
                    if (first3)
                    {
                        printf("%5s", " ");
                        first3--;
                        continue;
                    }
                    if (count3 > _day3)
                    {
                        for (int ii3 = i3; ii3<7; ii3++)
                            printf("%5s", " ");
                        break;
                    }
                    printf("%5d", count3);
                    count3++;
                }
                cout << endl;
            }
            cout << endl;
        }
    }
}
int main()
{
    system("mode con cols=110 lines=50");//改变宽高
    system("color F0");//改变颜色
    Print();

    system("pause");
    return 0;
}

测试结果这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值