原标题:用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 <1) /*少于1月时退一年*/

{

month = month + 12;

year = year - 1;

}

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

checkdata();

getch(); /*键盘输入*/

key = getch();

}

}

main() /*主函数*/

{

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

{

reno();

str();

system("cls");

}

}

运行结果如下

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

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

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

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

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

责任编辑:

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

  1. R语言ggplot2可视化、在可视化区域中自定义添加多个大小不同矩形阴影区域、自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles)

    R语言ggplot2可视化.在可视化区域中自定义添加多个大小不同矩形阴影区域.自定义配置大小不同矩形阴影区域的颜色(Adding multiple shadows/rectangles) 目录

  2. 圣诞节PNG免扣素材|轻松向现有项目中添加节日元素!

    制作任何东西,从定制的圣诞卡,图标,可以用于网站设计或包装,甚至图形,照片和插图,PNG免扣格式图片素材,无疑可以帮助你有效的完成项目. 节日的装饰不仅仅包括挂一棵圣诞树和添加金属箔.装饰也可以延伸到 ...

  3. 中英翻译机c语言实验报告引言,课程设计--C语言关键字中英翻译机.doc

    课程设计--C语言关键字中英翻译机.doc 课 程 设 计 报 告学院.系 吉林大学珠海学院计算机科学与技术系专业名称 计算机科学与技术课程设计科目 C 语言程序课程设计所在班级 4 班学生学号 04 ...

  4. c语言中ai是什么,AICODE在C语言教学中应用研究.doc

    AICODE在C语言教学中应用研究 AICODE在C语言教学中应用研究 摘要:本文研究了AI-CODE作为一种教学工具在C语言教学中的应用.首先,对传统C语言教学的不足.枯燥.缺乏互动进行了分析.其次 ...

  5. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  6. c语言中错误executing,C语言编程中常见问题解读.doc

    C语言编程中常见问题解读 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link ...

  7. c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...

    怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...

  8. 在计算机桌面上添加小工具日历,实用桌面小工具时钟日历在win7中的添加方法...

    我们在win7系统的使用中,小伙伴们都是知道的系统可以直接选择安装不同的小工具在电脑中使用,比如电脑中的时钟日历等都是可以直接安装在桌面来使用的牡丹石有小伙伴对于时钟日历不知道是在哪里添加到桌面的,对 ...

  9. python工具用什么语言_Python中一些自然语言工具的使用的入门教程

    NLTK 是使用 Python 教学以及实践计算语言学的极好工具.此外,计算语言学与人工 智能.语言/专门语言识别.翻译以及语法检查等领域关系密切. NLTK 包括什么 NLTK 会被自然地看作是具有 ...

  10. 在c语言中 函数的作用是什么,C语言程序中函数的定义

    C语言程序中函数的定义 C语言的函数问题是困扰很多学者的问题的,c程序中什么是函数呢?下面啦小编为大家精心推荐的c程序中函数的定义,希望能够对您有所帮助. C语言读书笔记--函数 先来看看函数的一般形 ...

最新文章

  1. spring 整和activemq
  2. 权限系统设计模型分析(DAC,MAC,RBAC,ABAC)
  3. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...
  4. macbook 下载时睡眠_MacBook进入睡眠状态时如何自动使其静音
  5. PHP无法执行MySQL语句,解决PHP执行批量MySQL语句的问题
  6. Typescript 学习笔记一:介绍、安装、编译
  7. studio 热重载应用_常用钢材型号、特性、应用范围(总结的太好啦)
  8. 云南大学软件学院计算机网络实验三,云南大学 软件学院 计网实验5
  9. BZOJ4133 : Answer的排队
  10. Made in 大产品——技术商业盛典
  11. 超声波传感器测距原理
  12. 运营周期爆发期是什么?
  13. 卡西欧科学计算机使用方法,卡西欧科学计算器使用教程
  14. svnadmin load 遇到E125005 的错误
  15. 关于多线程爬取小说排序混乱的问题
  16. QQ邮箱不显示图片解决方案
  17. js图片转base64
  18. asp毕业设计—— 基于asp+access的网络招聘管理系统设计与实现(毕业论文+程序源码)——网络招聘管理系统
  19. 《模拟电子技术基础》笔记——上交大郑益慧主讲——辅助教材《电子电路原理第四版》—— 要反反复复看直到记住图的推导过程——出错了欢迎指正——由于是快速刷了一遍还是要反复复习——学习这里面的思路
  20. 下载STM32CubeMX软件固件库包的方法

热门文章

  1. 中国LVDT RVDT传感器市场现状研究分析与发展前景预测报告(2022)
  2. 【微信小程序】图库——(小程序篇)
  3. R语言基于方差分析ANOVA检验模型拟合度(Fit Test)实战:检验同一数据集简单模型和复杂模型的拟合度差异
  4. JAVA如何在LINUX里编程,如何使用加多宝(jdb)在linux下调试Java程序
  5. 【笔记本Windows的两个ctrl键失效解决办法大全解】
  6. Delphi对象克隆技术
  7. Codeforces Gym 100015F Fighting for Triangles 状态压缩DP
  8. 服务器winsxs文件夹怎么清理工具,Winsxs文件夹内容怎么清理 Winsxs文件夹瘦身清理教程图解...
  9. iOS-Property follows Cocoa naming convention for returning ‘owned‘ objects
  10. 运行服务器(Tomcat)但是到JDBC这一步,一直报错java.lang.NoClassDefFoundError: Could not initialize class DruidDemo