分享一个简单的小程序,看看如何打印万年历吧~

程序打开时时这样的,输入一个年份:

比如输入2016再回车,效果如下:

下面我们来看看实现这个程序的代码吧:

#include

#include

#define Mon 1

#define Tues 2

#define Wed 3

#define Thur 4

#define Fri 5

#define Sat 6

#define Sun 0

#define January_days 31

#define February_days 28

#define March_days 31

#define April_days 30

#define May_days 31

#define June_days 30

#define July_days 31

#define August_days 31

#define September_days 30

#define October_days 31

#define November_days 30

#define December_days 31

#define first1month January_days

#define first2month January_days+February_days

#define first3month January_days+February_days+March_days

#define first4month January_days+February_days+March_days+April_days

#define first5month January_days+February_days+March_days+April_days+May_days

#define first6month January_days+February_days+March_days+April_days+May_days+June_days

#define first7month January_days+February_days+March_days+April_days+May_days+June_days \

+July_days

#define first8month January_days+February_days+March_days+April_days+May_days+June_days \

+July_days+August_days

#define first9month January_days+February_days+March_days+April_days+May_days+June_days \

+July_days+August_days+September_days

#define first10month January_days+February_days+March_days+April_days+May_days+June_days \

+July_days+August_days+September_days+October_days

#define first11month January_days+February_days+March_days+April_days+May_days+June_days \

+July_days+August_days+September_days+October_days+November_days

int known_weekday = Tues;

int known_year = 1901;

int konwn_month = 1;

int known_day = 1;

int day_count(int month)

{

switch(month)

{

case 1: return 0;break;

case 2: return first1month;break;

case 3: return first2month;break;

case 4: return first3month;break;

case 5: return first4month;break;

case 6: return first5month;break;

case 7: return first6month;break;

case 8: return first7month;break;

case 9: return first8month;break;

case 10: return first9month;break;

case 11: return first10month;break;

case 12: return first11month;break;

}

}

/*char * month_name(int month)

{

switch(month)

{

case 1:

return "January";

break;

case 2:

return "February";

break;

case 3:

return "March";

break;

case 4:

return "April";

break;

case 5:

return "May";

break;

case 6:

return "June";

break;

case 7:

return "July";

break;

case 8:

return "August";

break;

case 9:

return "September";

break;

case 10:

return "October";

break;

case 11:

return "November";

break;

case 12:

return "December";

break;

default:

break;

}

}*/

char * month_name(int month)

{

switch(month)

{

case 1:

return "一月";

break;

case 2:

return "二月";

break;

case 3:

return "三月";

break;

case 4:

return "四月";

break;

case 5:

return "五月";

break;

case 6:

return "六月";

break;

case 7:

return "七月";

break;

case 8:

return "八月";

break;

case 9:

return "九月";

break;

case 10:

return "十月";

break;

case 11:

return "十一月";

break;

case 12:

return "十二月";

break;

default:

break;

}

}

/*按格式打印某年某月名称*/

void first_line_print(int month, int year)

{

//printf("%20s %d \n",month_name(month),year);

printf("%8d年 %s \n",year, month_name(month));

}

/*按格式打印星期名称*/

void week_print()

{

//printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n","Sun.", "Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");

printf("%-3s%-3s%-3s%-3s%-3s%-3s%-3s\n","日", "一", "二", "三", "四", "五", "六");

}

/*计算该年该月份与已知日子之间的距离天数*/

int date_distance_count(int month, int year)

{

int leap_year_count = 0;

int i;

int distance;

if (year > known_year)

{

for (i=known_year; i

{

if(((i%4 == 0) && (i%100 != 0) ) || (i%400 == 0))

{

leap_year_count++;

}

}

if (month > 2)

{

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

{

leap_year_count++;

}

}

}

else

if (year == known_year)

{

if (month > 2)

{

leap_year_count = 1;

}

}

distance = (year - known_year)*365 + leap_year_count + day_count(month);

return distance;

}

/*确定该月份第一天是星期几*/

int makesure_firstday_weekday(int month, int year)

{

int date_distance = 0;

int weekday;

date_distance = date_distance_count(month, year);

weekday = (known_weekday + date_distance)%7;

return weekday;

}

/*依次打印出该月份的日子*/

void print_in_turn(int month, int firstday, int year)

{

int i = 1;

int weekday;

switch(firstday)

{

case Sun:

break;

case Mon:

printf("%-3s","");

break;

case Tues:

printf("%-6s","");

break;

case Wed:

printf("%-9s","");

break;

case Thur:

printf("%-12s","");

break;

case Fri:

printf("%-15s","");

break;

case Sat:

printf("%-18s","");

break;

}

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

{

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

{

weekday = (firstday + i)%7;

printf("%-3d",i+1);

if(weekday == Sat)

{

printf("\n");

}

}

break;

}

case 2:

{

if(((year%4 == 0) && (year%100 != 0) ) || (year%400 == 0)) /*闰年*/

{

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

{

weekday = (firstday + i)%7;

printf("%-3d",i+1);

if(weekday == Sat)

{

printf("\n");

}

}

break;

}

else /*平年*/

{

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

{

weekday = (firstday + i)%7;

printf("%-3d",i+1);

if(weekday == Sat)

{

printf("\n");

}

}

break;

}

}

case 4:

case 6:

case 9:

case 11:

{

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

{

weekday = (firstday + i)%7;/*计算该天是星期几*/

printf("%-3d",i+1);

if(weekday == Sat)

{

printf("\n");/*如果是星期六,则换行*/

}

}

break;

}

}

}

void date_print(int month, int year)

{

int firstday;

firstday = makesure_firstday_weekday(month, year);

print_in_turn(month, firstday, year);

printf("\n");

}

void main_month(int month, int year)

{

first_line_print(month, year);

week_print();

date_print(month, year);

printf("\n\n");

}

void main_calendar(int year)

{

int i;

for(i=1; i<=12; i++)

{

main_month(i, year);

}

}

int main()

{

int year;

system("title c语言研究中心 www.dotcpp.com");

printf("请输入年份:year = ");

scanf("%d",&year);

printf("\n");

while(year < 1902)

{

printf("请输入大于1901的年份\n");

printf("请输入年份:year = ");

scanf("%d",&year);

printf("\n");

}

main_calendar(year);

scanf(" ");

return 0;

}

C语言研究中心(www.dotcpp.com)

C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言小程序实现万年历!

c语言万年历查询程序代码,C语言小程序实现万年历相关推荐

  1. c++小程序代码_# 微信小程序的原生框架和taro对比 ##

    微信小程序的原生框架和taro对比 小程序历史(为什么会出现?) 2007年 iPhone H5 大家知道现在手机端主要是iOS.Android两大系统,实际上在早期有3大系统竞争,还有一个就是诺基亚 ...

  2. 签到java小程序代码_微信小程序全栈项目:签到打卡小程序 + 后端实现

    [实例简介] 签到打卡小程序 + 后端实现 : 后端是 springmvc + mybatis + mysql实现 [实例截图] [核心代码] Calendar `-- Calendar |-- Ca ...

  3. python有趣小程序代码,简单的小程序代码

    谁能用python帮我写一个小程序,让用户输入任意9个数字,然后输出排序后的结果. 我只写一个函数:>>> def littleFunc(): data =[] #初始化列表 for ...

  4. 如何在微信小程序代码里面新增小程序直播插件?

    以来客推开源代码为例子: 修改小程序端代码,在app.json里面新增如下代码: 在"sitemapLocation": "sitemap.json" 这一段的 ...

  5. python入门小程序代码_Python入门小程序(二)

    学习了Python编程从入门到实践的第九章,本次的内容是类的创建.对象的实例化以及继承等内容. 1. 创建一个名为Restaurant的类,其方法__init__()设置两个属性:restaurant ...

  6. 微信小程序----第一天(小程序 - 起步)

    一.小程序简介 1. 小程序与普通网页开发的区别 1.1 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 2. API 不同 由于运行环境的不同,所以小程序中, 无法调用 DOM 和 B ...

  7. 从微信小程序到抖音小程序:转换指南

    抖音小程序是一种新兴的小程序平台,与微信小程序类似,都是基于小程序框架的开发,不过两者的开发环境和API有所不同.如果你已经开发了一款微信小程序,想要将其转换为抖音小程序,可以按照以下步骤进行: 1. ...

  8. 微信小程序跳转微信小程序,使用微信开发者工具的测试记录

    微信小程序跳转微信小程序,使用微信开发者工具的测试记录 A小程序 跳转 B小程序 编写A小程序代码 参数解释 编写B小程序接收参数代码 微信开发者工具测试 A小程序 跳转 B小程序 编写A小程序代码 ...

  9. c语言学籍管理系统小程序,学籍业务办理系统(开源 v2.0发布 优化代码,增加小程序端)...

    更新说明: 1.此2.0版,大幅度优化代码,增加小程序端方便使用 2.v1.0测试地址已关,请勿测试 学生在校期间避免不了要和各种证明打交道,比如学籍证明.转专业申请.休学申请.退学申请等等.此类业务 ...

  10. python 禁用网卡_C#语言实现定时开启或禁用网卡小程序

    C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...

最新文章

  1. 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
  2. JQuery对selecte中的元素的操作
  3. linux部署DM数据库的DEM系统
  4. TurboLinux11system»adjtimex简介
  5. idea打不了断点红点没对号_你可能不知道的 IDEA 高级调试技巧
  6. iOS学习笔记之正则表达式
  7. CString Char* 转换 - C++学习
  8. 【转】Delphi7程序调用C#写的DLL解决办法
  9. 06 OPENMV中的AT指令集操作
  10. 大气压力换算公式_大气压换算公式(大气压与温度换算公式)
  11. SweepProfile for 3dMax石膏线生成插件使用教程
  12. 开源 == 文化:红帽社区开放日图文回顾
  13. PS: Deep Neural Networks Are Easily Fooled___CVPR2015
  14. NBA表格_巅峰乔丹的进攻水平,是NBA常规赛历史最佳么?
  15. 小鸭五笔 3.3 版
  16. OVERLAPPED I/O 异步APC
  17. 第五届蓝帽杯初赛:冬奥会_is_coming
  18. 什么是DC / AC / OC 机房?
  19. 支付宝VR Pay,马云爸爸带来的又一个VR购物惊喜
  20. 在Python中使用pandas进行文件读取和写入方法详解

热门文章

  1. oracle登录tns串区别,tns 连接问题
  2. Uni-app Android 离线打包集成 uni-push(个推)消息推送
  3. 【母亲节特别篇】成长,但是Java,并且祝福
  4. SPL-安装与基本使用(二)
  5. 设计模式大杂烩(24种设计模式的总结及学习设计模式的几点建议)
  6. 输入三角形的三边,判断能否构成三角形,若可以则输出三角形的类型
  7. Dede列表页调用TAG标签的方法
  8. 【Android开发】范例2-开启新线程实现电子广告牌
  9. 如果不能深爱我会微笑离开
  10. oracle手工快照,oracle快照原理及如何实现生成快照