C语言实现万年历(完整源码)

article/2025/6/9 0:54:59

C语言实现万年历

各位~

最近看到以前写的代码——万年历

拿出来修改了一下,跟大家分享

有兴趣的可以试试

这是程序运行图,一个完整的日历,可以显示实时的年月日,用方括号把日定位到今天,还可以利用方向键查阅任意年份任意月份的日历。

运用的知识点有:1.数组;2.头文件中对系统时间的操作;3.键盘信息与计算机的交互。强调一点:像这种小项目级别的程序,整个项目框架的构建很重要,也就是整体逻辑思维很重要,记大家记住住!!!

为了方便大家学习,我把整个源码都给出了,这次大家也不用问有没有源码了,所有的都在下面,代码关键处都给出了注释,希望大家慢慢培养自己用所学知识做项目的感觉,不管大小,我保证只有你自己真正做出来才能感受到那种成就感。

完整版源码:

#include <stdio.h>

#include <conio.h>

#include <windows.h>

#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();

}

}

int main(void) /*主函数*/

{

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

{

reno();

str();

system("cls");

}

return 0;

}


http://www.hkcw.cn/article/IKLonCZCpL.shtml

相关文章

美食 | 10道法国最佳传统菜肴,在巴黎就能吃到!

一直以来,法国都以埃菲尔铁塔,卢浮宫博物馆等著名景点和奢侈品牌闻名于世。但不要忘记,去法国还有一个重要的目的——品尝美食。随着文化和历史的不断发展演变,法国的食物因地区而异,即便如此,在巴黎就可以尝试许多地道的法国菜。一直以来,法国都以埃菲尔铁塔,卢浮宫博…

国粹馆—北京十大独具特色的婚礼场地之一

每个girl都有一个婚礼的梦想... ... 所以... 我们从3岁起开始收集美丽的糖纸; 5岁的时候开始远离脏兮兮的男孩; 9岁,每次邻班的男孩路过,总要捋下头发到耳后; 12岁,感叹秋天的第一次别离,和从未相识的可爱男生; 15岁,男生都傻里傻气并且粗鲁无趣,除了他; 17岁,把收…

如何合理化设计度假村的空间布局?

合理化设计度假村的空间布局需要考虑以下几个方面: 规划原则:首先,要明确度假村的规划原则,包括突出自然特色、保护生态环境、营造舒适氛围、满足不同游客需求等。在规划过程中,需要将游客的需求放在首位,充分考虑游客的体验和满意度。 空间布局:根据度假村的地形地貌、…

5㎡卫生间装修灵感,15款小户型典范,打造精致卫浴空间!

卫生间装修的确需要精心规划,即使在小户型中,5平米的空间也足以打造出一个实用且舒适的卫生间。以下我为大家精选的15个小户型卫生间案例,或许能为您的装修计划带来一些宝贵的灵感。让我们一同探索,如何将每一寸空间都利用得恰到好处,打造出一个既美观又实用的卫浴空间。▲…

8道孕妇必吃美食,孕期高营养不长胖!

8道孕妇必吃美食,孕期高营养不长胖! 孕期☀长胎不长肉 科学搭配,美味营养,8道餐单,建议收藏! 怀孕之后,为了宝宝营养吸收,大部分准妈妈都会非常关注自己的日常饮食。但让姐妹们比较头痛的是,养胎的同时,自己身上的肉也增加了,走形的身材让人头痛不已。 长胎不长肉成…

最新消息|商丘市一中方域路分校及一实小方域路分校

人生是不断的选择,但第一步已决定了方向 学校规划好,孩子的未来加倍好 润泓崇文院 可安家,亦可安心 2024年4月2日,商丘市第一初级中学方域路分校及商丘市第一实验小学方域路分校建设项目招标公告发布。标志着在不久的将来,在润泓崇文院项目旁,将崛起一座现代化的学校,标…

【完整版】小学五年级数学下册期末测试卷及答案,摸底考试!

5升6六年级数学公众号 王老师整理了最新小学五年级数学下册期末测试卷,有答案,同学们快来做一做,考试100分! 五年级数学下册期末测试卷 一、填一填。 1.12有(  )个因数,17有(  )个因数。 2.能同时被2、3、5整除的最大两位数是(  )。 3.已知a =2235,b =257,a …

点了这么多的“外卖”,你知道英语叫餐怎么说吗?

在中国,最令外国人感到惊叹的事情之一,就是国内极度便利的物流网(logistics net)。 只要几天全世界的好物,就能邮寄到家;只需不到1个小时,周边的特色美食就能配送上门 … 可是,收了那么多次的快递、点过那么多家的外卖,你知道它们如何用英语表达吗?1 “有你的快递”怎么…

儒雅大气的诗意好名

儒雅大气的诗意好名 导语不少父母在给宝宝起文雅,有诗意的名字时,都会从《诗经》、《楚辞》中寻找灵感,但是因为这些文章距今比较久远,其中有很多词汇的意思也与现代含义相去甚远,部分词汇晦涩难懂。因此用来起名也有一定难度,而且撞名的概率也比较大。 取自《滕王阁序》…

长沙金毛事件后续|金毛被棒杀,竟然是老人用老命碰瓷未果的惨剧!

前言小枫 微信号:15721630973 不是老人变坏了,而是坏人变老了! 正文开始:现在是2018年,农历狗年 在2017年的12月31日 也就是2017年的最后一天 大家都沉醉在跨年的欢乐中 但这只金毛却永远到不了2018年了 展开全文2017年12月31日下午 湖南长沙芙蓉路 上浦园公交站水…

来自美国的“紫罗兰翡翠”高大上?别闹了,地摊货而已

喜欢翡翠的朋友们应该都知道紫罗兰翡翠,俗话说红翡绿翠紫为尊,紫罗兰翡翠因其独特的颜色和光泽,一直以来都是翡翠中最受欢迎的品种之一,被人们称之为“春色翡翠”。而业内也有俗话说:十春九木,说的就是紫罗兰翡翠颜色好的大多没有水头,看起来很是干涩僵硬,可最近在一些…

pvc走线槽如何安装使用?你有好建议吗?

PVC线槽的安装是一个系统性的过程,需要遵循一定的步骤和规范。以下是PVC线槽安装的详细步骤和注意事项:一、安装前的准备确定安装位置和线槽长度:根据实际需求,通过测量和标记,确定所需的线槽长度,并确保线槽长度与墙面或地面的尺寸相匹配。清理安装区域:确保安装区域干…

中国医药行业现状与增长动力:深度分析与趋势预测

伴随着社会经济的不断发展,医药行业作为关系民生和社会安定的主要行业日益显示出其重要的作用。从政策方面来看,国家出台了一系列支持医药产业发展的政策,逐步构建起覆盖城乡居民的基本卫生医疗体系,建立社会化管理的医疗保障制度,未来医药市场将不断扩容。从宏观因素来看…

原创《唐探2》口碑很好,躲过了张钧甯,却被身高178的女4号惊艳到了

《唐探2》的口碑超级好,全都是因为那个身高178的女四号,简直惊艳到了!张钧甯虽然也不错,但是她就被比了下去。 一句话说,悬疑网剧正当红。比如,《漫长的季节》就是一个典型的例子,导演辛爽把悬疑题材拍得让人眼前一亮。而《唐探2》更是让人大开眼界,尤其是第一个故事单…

营销战记 | 15年前的楼盘营销案例,放到今天也难超越

当你在听着赵雷沧漫的《成都》,在玉林西路的小酒馆门口,拉着心爱的人走一走时。在2003年,小酒馆们有另一个称谓:成都地下文化的代表。 接受一些粉丝的建议,以后将不定期的写一些以往的案例。以让“观念研究院”的观点更加贴近实际工作。选择将“博客公社”这个案例放到第一…

最贵一幅画40万?这个村靠画虎脱贫,年入过亿,一年售出10万幅!

琴棋书画历来是文人雅士所为, 然而河南的一个1366人的村子里,竟然有900多位农民走出田野、走进画坛。 靠画虎脱贫致富,家家户户都住上新房,过上小康生活。 他们的绘画作品不仅行销全国,而且还一举跃上世界的舞台,出口至东南亚、韩国、日本、美国等国家和地区。 每年销售…

深圳龙华这个小区一个月涨价近20%!位置在...

申明:文内所有数据均来源于各大中介平台,大家可自行查询辨别,本文无任何引导意图,仅供参考!买房需慎重! 2024年以来,深圳二手房成交量上涨的消息时不时传来。 最近几个月,深圳已经连续3个月获得5000套左右的二手房录得量。 但最关键的成交价,却还是在走着下坡路。6月,…

9月深圳、香港珠宝钟表展

2024年9月,珠宝钟表行业将迎来一波盛宴! 首先是香港钟表展,700+参展商齐聚一堂,共享行业风采。这里,你将有机会欣赏到全球最先进的手表技术,体验到专业导购的细致服务。其次是深圳珠宝展,共计600+参展商,为你的珠宝收藏找寻更多设计灵感。在这里,你可以遇见来自世界各…

“断网”风波中的电信:故障原因尚未公布,一季度营收超千亿

6月8日下午,广东电信突发网络故障,登上热搜。9日,广东电信回应南都记者称,截至目前,广东区域的电信用户手机信号已全面恢复。用户如需申请损失赔偿,可提供业务号码至广东电信客服,客服反馈至费用部门核实后,会有工作人员跟进赔偿事宜。截至目前,官方尚未公布此次故障原…

安防系统集成项目经理怎么考呢?报考流程是什么呢?好考吗?

安防系统集成项目经理是指负责规划、设计、实施和维护安全防范系统的专业人员,他们不仅需要掌握安防技术,还需要具备项目管理能力。成为一名安防系统集成项目经理,通常需要具备一定的教育背景、专业技能和实践经验。以下是成为一名安防系统集成项目经理的一般路径、报考流程…