C语言的日历系统

#include "Calendar.h"

int isLeapYear(int year)
{
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
    {
        return IS_LEAP_YEAR;
    }

    return 0;
}

int inputLegal(int month, int day)
{
    if (month > 12 || month < 1 || day > 31 || day < 1)
    {
        fprintf(stderr,"Input is error\n");
        return -1;
    }

    return 0;
}

/*
 * 记录一个月之中最大的天数
 */
int maxMonthDay(int year, int month)
{
    int ret;
    int m[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

    ret = isLeapYear(year);

    if (ret == IS_LEAP_YEAR)
    {
        m[1] = 29;
    }

#ifdef DEBUG
    printf("month %d has %d day\n",month,m[month - 1]);
#endif

    return m[month - 1];
}

/*
 * 从该年的第一天到这天的总天数
 */
int totalDay(int year, int month, int day)
{
    int sum = 0;

    for (int i = 1;i < month;i++)
    {
        sum += maxMonthDay(year,i);
    }

    sum += day;

#ifdef DEBUG
    printf("Total has %d day %d month\n",sum,month);
#endif

    return sum;
}

/*
 * 计算给出日期是星期几
 */
int weekday(int year, int month, int day)
{
    int d;

    if (month == 1 || month == 2)
    {
        year  -= 1;
        month += 12;
    }

    //吉姆拉尔森日期计算公式
    d = (day + 2*month + 3*(month+1)/5 + year + year/4 - year/100 + year/400 + 1) % 7;

    return d;
}

int displayWeek(int year, int month, int day)
{

    int d = weekday(year,month,day);

    switch (d)
    {
        case 0:
            printf("%d-%d-%d is Sunday\n",year,month,day);
            break;
        case 1:
            printf("%d-%d-%d is Monday\n",year,month,day);
            break;
        case 2:
            printf("%d-%d-%d is Tuesday\n",year,month,day);
            break;
        case 3:
            printf("%d-%d-%d is Wednesday\n",year,month,day);
            break;
        case 4:
            printf("%d-%d-%d is Thursday\n",year,month,day);
            break;
        case 5:
            printf("%d-%d-%d is Friday\n",year,month,day);
            break;
        case 6:
            printf("%d-%d-%d is Saturday\n",year,month,day);
            break;
        default:
            return 0;

    }

    return 0;
}

int displayMonth(int year, int month, int day)
{
    int spaceCount,maxDay;

    printf("\033[44;32m\n\t\t%d 年 %d 月\033[0m\n",year,month);
    printf("SUN\tMON\tTUE\tWED\tTHU\tFRI\tSTA\n");

    spaceCount = weekday(year,month,1);

    for (int i = 0;i < spaceCount;i++)
    {
        printf("\t");
    }

   maxDay = maxMonthDay(year,month);

   for (int i = 1;i <= maxDay;i++)
   {

       if (i != day)
       {
           printf("%d\t",i);

       } else
       {
           printf("\033[44;32m%d\t\033[0m",i);
       }

       if ((spaceCount + i) % 7 == 0)
       {
           printf("\n");
       }

   }

   printf("\n");

   return 0;
}

int run()
{
    int year; int month; int day;

    printf("Input [year month day]:\n");
    scanf("%d%d%d",&year,&month,&day);

    inputLegal(month,day);
    totalDay(year,month,day);
    displayWeek(year,month,day);
    displayMonth(year,month,day);

    return 0;
}

#ifndef CALENDAR_CALENDAR_H
#define CALENDAR_CALENDAR_H
/*
 * C 的学习
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define IS_LEAP_YEAR 1
#define DEBUG
#undef  DEBUG

extern int isLeapYear(int year);
extern int maxMonthDay(int year, int month);
extern int displayMonth(int year, int month, int day);
extern int weekday(int year, int month, int day);
extern int displayWeek(int year,int month, int day);
extern int totalDay(int year, int month, int day);
extern int inputLegal(int month, int day);
extern int run();


#endif
#include "Calendar.h"

int main() {
    run();
    return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值