请选择 进入手机版 | 继续访问电脑版

[c] 万年历

[复制链接]
丶禁飞 发表于 2021-1-1 10:30:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  1. #include #include #include #define str "   SUN   MON  TUE   WED   THU   FRI   SAT   "void menu();         //操作菜单int leap(int year);        //判定某年是不是闰年int days_month(int year, int month);        //返回某月的天数int someday(int year, int month, int day);    //盘算某天是星期几void search_month(int year, int month);        //输出某月的日历void search_someday(int year, int month, int day);    //查询某日是星期几int main(){        int i, year, month, day;        int k1, k2, k3, k4;    //用于判定输入的数据和操作是否正确,1代表正确,0代表错误        int a = 1;        menu();        do        {                printf("请输入你要举行的操作(1-4):");                scanf_s("%d", &i);                getchar();                switch (i)                {                case 1:                        printf("请输入你要查询的年份:"); scanf_s("%d", &year);                        for (a; a  12 || month < 1)                                {                                        printf("你输入的月份有误,请重新输入!\n");                                        printf("月份:");                                        scanf_s("%d", &month);                                        if (month < 1 || month>12)    k1 = 1;                                }                                else k1 = 0;                        }                        search_month(year, month);                        printf("---------*********************------------\n\n\n");                        break;                case 3:                        printf("请输入你要查询的日期\n");                        printf("年份:"); scanf_s("%d", &year);                        printf("月份:"); scanf_s("%d", &month);                        k2 = 1;                        while (k2)                        {                                if (month > 12 || month < 1)                                {                                        printf("你输入的月份有误,请重新输入!\n");                                        printf("月份:");                                        scanf_s("%d", &month);                                        if (month < 1 || month>12)    k2 = 1;                                }                                else k2 = 0;                        }                        //    printf("%d年%d月有%d天\n",year,month,days_month(year,month));     调试观察输入的日期是否有误,可忽略                        printf("日期:"); scanf_s("%d", &day);                        k3 = 1;                        while (k3)                        {                                if (day > days_month(year, month) || day < 1)                                {                                        printf("你输入的日期有误,请重新输入!\n");                                        printf("日期:");                                        scanf_s("%d", &day);                                        if (day > days_month(year, month) || day < 1)    k3 = 1;                                }                                else k3 = 0;                        }                        search_someday(year, month, day);                        printf("---------*********************------------\n\n\n"); break;                case 4:exit(0);                        printf("---------*********************------------\n\n\n"); break;                default:                        k4 = 1;                        while (k4)                        {                                printf("你输入的数据有误,请重新输入你要举行的操作(1-4):");                                scanf_s("%d", &i);                                if (i < 1 || i>4)    k4 = 1;                                else k4 = 0;                        }                        break;                }        } while (i > 0 && i < 5);        return 0;}void menu(){        int i = 1;        printf("\n\n\t\t----------------------------------------\n");        printf("\t\t|--------------------------------------|\n");        printf("\t\t|           %d.  输出某年的日历         |\n", i);        printf("\t\t|           %d.  输出某月的日历         |\n", i + 1);        printf("\t\t|           %d.  查询某日是星期几       |\n", i + 2);        printf("\t\t|           %d.  退出系统               |\n", i + 3);        printf("\t\t|--------------------------------------|\n");        printf("\t\t----------------------------------------\n\n");}int leap(int year){        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return 1;        else return 0;}int days_month(int year, int month){        int days_month;        switch (month)        {        case  1:        case  3:        case  5:        case  7:        case  8:        case  10:        case  12: days_month = 31; break;        case  4:        case  6:        case  9:        case  11:days_month = 30; break;        case  2:                if (leap(year) == 1)                {                        days_month = 29; break;                }                else days_month = 28; break;        }        return days_month;}int someday(int year, int month, int day){        //该函数运用了特殊的盘算公式,详细可参见 http://blog.163.com/hexin_mars_blog/blog/static/248215040201571351115699/        int someday, m, n, i;  //someday体现查询的日子是星期几        m = year - year / 1000 * 1000;        n = m - m / 100 * 100 - 1;            //用于得到年份的后两位数        int days = 0;        for (i = 1; i < month; i++) days = days + days_month(year, i);        days = days + day;        someday = (n + n / 4 - n / 100 + n / 400 + days) % 7;        return someday;}void search_someday(int year, int month, int day){        char weekname[20];        switch (someday(year, month, day))        {        case 0:strcpy_s(weekname, "星期天"); break;        case 1:strcpy_s(weekname, "星期一"); break;        case 2:strcpy_s(weekname, "星期二"); break;        case 3:strcpy_s(weekname, "星期三"); break;        case 4:strcpy_s(weekname, "星期四"); break;        case 5:strcpy_s(weekname, "星期五"); break;        case 6:strcpy_s(weekname, "星期六"); break;        }        printf("你所要查询的日期是%s\n", weekname);}void search_month(int year, int month){        int i = 0, j, k = 0, m;     //j用于纪录某月的第一天是星期几   m用于纪录某月的天数  k用于换行提示        char x[10] = "      ";        m = days_month(year, month);        j = someday(year, month, 1);        //输出某月的日历        printf("------------------------------------------\n");        printf("%s\n", str);        for (; i < j; i++)        {                printf("%s", x); k++;        }        for (i = 1; i = 10)                        {                                printf("   %d ", i);                                printf("\n");                        }                }                else                {                        if (i < 10)                        {                                printf("    %d ", i);                        }                        else if (i >= 10)                        {                                printf("   %d ", i);                        }                }        }        printf("\n------------------------------------------\n");}void exit(){        exit(0);}
复制代码
 

来源:https://blog.csdn.net/xwh012510/article/details/85989654
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )