在c语言万年历中怎么添加节日,用C实现简单万年历

您所在的位置:网站首页 万年历怎么显示假期 在c语言万年历中怎么添加节日,用C实现简单万年历

在c语言万年历中怎么添加节日,用C实现简单万年历

2024-07-14 19:23:20| 来源: 网络整理| 查看: 265

原标题:用C实现简单万年历

#include "stdio.h"

#include

#include "time.h"

int key;

int year, month;

int mon[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, /*定义各个月的天数*/

{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };

time_t lt;

int showtime() /*显示系统时间*/

{

lt = time(NULL);

printf(" 星期/月/日 时间 年n");

printf(" %s", ctime(

}

int nowyear() /*系统的年份*/

{

struct tm *local;

lt = time(NULL);

local = localtime(

return local->tm_year + 1900; /*系统年份从1900年为0年开始计算*/

}

int nowmonth() /*系统的月份*/

{

struct tm *local;

lt = time(NULL);

local = localtime(

return local->tm_mon + 1;

}

int nowday() /*系统在哪一天*/

{

struct tm *local;

lt = time(NULL);

local = localtime(

return local->tm_mday;

}

int getkey1(int year, int key) /*检测键盘的上下方向键*/

{

if (72 == key) /*上方向键代码是72*/

{

year++;

}

else if (80 == key) /*下方向键代码是80*/

{

year--;

}

return year;

}

int getkey2(int month, int key) /*检测键盘的左右方向键*/

{

if (77 == key) /*右方向键代码是77*/

{

month++;

}

else if (75 == key) /*左方向键代码是75*/

{

month--;

}

return month;

}

int isleap(int year) /*判断是否是闰年*/

{ /*被4整除但不被100整除的年时闰年*/

int leap; /*被400整除的是闰年*/

leap = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));

return leap;

}

int isweek(int year, int month, int day) /*判断X年X月X日是星期几*/

{

int i, j, week;

int allday = 0;

for (i = 0; i < year; i++)

{

if (1 == isleap(i)) /*闰年有366天*/

{

allday = allday + 366;

}

else

{

allday = allday + 365; /*非闰年有365天*/

}

}

for (j = 1; j < month; j++)

{

allday = allday + mon[isleap(year)][j];

}

allday = allday + day;

week = (allday - 1) % 7; /*计算当天为星期几,星期日至六为0至6*/

return week;

}

int showdata() /*显示系统月份的挂历*/

{

int i, z;

int j = 0;

printf("n");

printf(" %d年 %d月n", nowyear(), nowmonth());

printf(" *********************************************n");

printf(" Sun Mon Tues Wed Thur Fri Satn");

printf(" *********************************************n");

z = isweek(nowyear(), nowmonth(), 1);

for (i = 0; i < z; i++)

{

printf(" ");

}

for (i = 0; i < mon[isleap(nowyear())][nowmonth()]; i++)

{

if ((i == nowday() - 1) && (i < 9)) /*在系统时间的今天上做记号【】*/

{

printf(" [%d]", i + 1);

}

else if (i == nowday() - 1)

{

printf(" [%2d]", i + 1);

}

else if (i == nowday())

{

printf("%5d", i + 1);

}

else

{

printf("%6d", i + 1);

}

if ((0 == (z + i + 1) % 7) && ((i + 1) != mon[isleap(nowyear())][nowmonth()]))

{ /*每7天换一行*/

j++;

printf("n");

}

}

if (j == 3) /*令提示语保持在同一行*/

{

printf("nnnn");

}

if (j == 4)

{

printf("nnn");

}

if (j == 5)

{

printf("nn");

}

printf(" 按方向键进入查询状态");

}

int checkdata() /*显示要查询的月份的挂历*/

{

int i, z;

int j = 0;

printf("nnn");

printf(" %d年 %d月n", year, month);

printf(" ********************************************n");

printf(" Sun Mon Tues Wed Thur Fri Satn");

printf(" ********************************************n");

z = isweek(year, month, 1);

for (i = 0; i < z; i++)

{

printf(" ");

}

for (i = 0; i < mon[isleap(year)][month]; i++)

{

printf("%6d", i + 1);

if ((0 == (z + i + 1) % 7) && ((i + 1) != mon[isleap(year)][month]))

{

j++;

printf("n");

}

}

if (j == 3) /*令提示语保持在同一行*/

{

printf("nnnn");

}

if (j == 4)

{

printf("nnn");

}

if (j == 5)

{

printf("nn");

}

printf(" 按上下方向键查询年,按左右方向键查询月n");

printf(" 按ESC键退回系统时间");

}

int reno() /*刷新系统时间和挂历*/学习群(594089997)

{

while (!kbhit()) /*当键盘无输入时进行循环*/

{

showtime(); /*显示时间*/

showdata(); /*显示挂历*/

Sleep(1000); /*延迟1秒*/

system("cls"); /*清除屏幕*/

}

}

int str() /*检测键盘并显示要查询月的挂历*/

{

year = nowyear(); /*初始化年月为系统时间*/

month = nowmonth();

printf("nn");

key = 0; /*初始化按键记录*/

while (27 != key) /*当没有按ESC时循环*/

{

year = getkey1(year, key); /*把按键的值传递给year和month */

month = getkey2(month, key);

if (month >12)

{ /*满12个月就加一年*/

month = month % 12;

year = year + 1;

}

if (month

while (1) /*无限循环*/

{

reno();

str();

system("cls");

}

}

运行结果如下

6df9abd3b819b2d6d48c8c80649b5462.png

代码发出来的话,只是希望能让大家理解,不是去复制黏贴的哈。做出来的这是一个完整的日历,可以实时显示年月日,还可以利用方向键查阅任意年份任意月份的的日历。

运用到的知识点是,1.数组 2.windows头文件 对计算机系统时间的操作 3.键盘与计算机交互 实现方法很简单,但是反复强调,写代码, 逻辑很重要! 逻辑很重要! 逻辑很重要!

关注微信公众号:编程语言

如果对这方面感兴趣或者在学习C/C++的过程中有什么问题的话,可以加群:594089997,群内有大量C/C++资料,也会有人解答问题,大家一起学习,一起交流。希望每位学习C/C++的人都能学有所成。

有更多(C/C++语言,linux,JAVA语言)高手帮助你解决难题,一起互动,提高大家的编程水平返回搜狐,查看更多

责任编辑:



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭