#要求
输入任意一年将显示出该年的所有月份日期,对应的星期
其显示格式要求如下
1、月份用中文显示
2、下一行显示星期,从周日到周六,中英文都可以
3、下一行开始显示日期,从一号开始,并按其实周期实际情况与上面的星期数垂直对齐
4、可以查询闰年

#函数功能
(1)函数 welcome(),欢迎界面。
(2)函数 all_month() ,月历输出函数,循环输出该年一月到十二月的月历
(3)函数 putm() ,输出中文月份
(4)函数 leap_year(),判断是否为闰年

#模块设计
主功能模块:all_month()

输入年份
定义数组month[12]用来存放非闰年时,每月天数,如果是闰年则month[1]=29 定义数组ri[12]用于存放某一年每个月的第一天是星期几.ri[0]=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+leap_year(year))%7计算某一年1月1日为星期几ri[m]=((month[m-1]-(7-ri[m-1]))%7)第一个值来推出该年其他月份第一天是周几并存入数组
用for循环循环输出1到12月的月历,先根据ri[12]输出每月第一日前的空格,再根据month[12]输出每月的日期e=e+1;if(e%7==0){ printf("\n"); printf("\n"); printf(" "); } 因为月历的第一个星期是星期天,所以月历的第一行到了 星期六就要换行了。逢七换行 ,就是到了星期六就会换行, 换行的下一个星期是星期天

源代码:

#include<stdio.h>
#include<conio.h>
#include<windows.h>//清屏
char welcome();//欢迎界面
void all_month(int year);//月历输出函数
void putm(int m);//输出中文月份
int leap_year(int year);//判断是否为闰年
int main()
{int a,b,c,year,month;
char number;
number=welcome();
number=welcome();if(number == '1')//如果number是1则判断闰年
{system("cls");//清屏printf("请输入年份:\n");scanf("%d",&year);if(year>1000000000 && year<-1000000000){printf("年份计算错误");}//防止计算量过大 else{if(leap_year(year) ==366)//闰年判断 {printf("%d年是闰年\n",year);}else
{printf("%d年是平年\n",year);}}printf("\n");printf("是否继续?(y/n):\n");number = getch();if(number == 'y')//判断是否继续 {system("cls");main();}//继续,清屏并且主函数调用主函数本身 else{system("cls");}//否则,清屏结束 }else if(number == '2')//如果number是2就输出该年的全部月历{system("cls");//清屏printf("* Input the year: *\n");scanf("%d",&year);//输入年份if(year>1000000000)//防止计算量过大{printf("年份计算错误");}else{printf("* The calendar of the year:%d *\n",year); printf("\n");all_month(year);}//输出该年的全部月历printf("\n");printf("是否继续?(y/n):\n");number = getch();if(number == 'y')//判断是否继续 {system("cls");main();}//继续,清屏并且主函数调用主函数本身else{system("cls");}//否则,清屏结束  } else if(number == '3'){//待续 }return 0;    } char welcome()//设置欢迎界面  {printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("                                ******************************************************\n");printf("                                **         *                           *           **\n");printf("                                **         *    欢迎来到万年历系统     *           **\n");printf("                                **         *                           *           **\n");printf("                                *****************************************************\n");  printf("                                           *-------请选择你的操作------* \n");printf("                                           *     1.查询闰年            *\n");printf("                                           *     2.查询某年全部日期    *\n");// 通过不同的选项进行操作 printf("                                           *     3.退出                *\n");printf("\n");char number;//定义用户输入字符  number = getch();return number;} void all_month(int year)//输出全部月历 {int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//非闰年时,每月天数 int ri[12];//定义数组,用于存放某一年每个月的第一天是星期几int e,i,j,flag,m,b;if(leap_year(year) == 366){month[1]=29;//如果是闰年则二月有29天}ri[0]=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+leap_year(year))%7;//计算某一年1月1日为星期几的递推公式 for(m=1;m<12;m++){ri[m]=((month[m-1]-(7-ri[m-1]))%7);} //用上一个递推公式可以算出第一个月的一号是周几//用第一个值来推出该年其他月份第一天是周几并存入数组 for(b=1;b<13;b++)//循环输出 {e=ri[b-1];//e表示在该年某个月第一天是周几i=b-1;putm(b);//输出中文的月份 printf("                              ******************************************************\n");printf("\n");printf("                                  Sun    Mon    Tue    Wed    Thu    Fri    Sat\n");printf("                                  日     一     二     三     四     五     六\n");flag=1;printf("                               ");for(j=0;j<e;j++){printf("       ");//输出每月第一日前的空格}while(flag<=month[i])//输出每月的日期 {printf("  %3d  ",flag);//输出第一天 flag++;//日期增加 e=e+1;//该月的第一天也跟着增加       if(e%7==0){printf("\n");printf("\n");printf("                               ");}/**因为月历的第一个星期是星期天,所以月历的第一行到了星期六就要换行了。逢七换行 ,就是到了星期六就会换行,换行的下一个星期是星期天 */ }printf("\n");printf("\n");printf("                                  =============================================\n");printf("\n");printf("\n");}printf("\n");}void putm(int m)//输出中文月份 {switch(m)//使用switch函数 {case 1:printf("                        一月:\n"); printf("\n"); break;case 2:printf("                        二月:\n"); printf("\n"); break;case 3:printf("                        三月:\n"); printf("\n"); break;case 4:printf("                        四月:\n"); printf("\n"); break;case 5:printf("                        五月:\n"); printf("\n"); break;case 6:printf("                        六月:\n"); printf("\n"); break;case 7:printf("                        七月:\n"); printf("\n"); break;case 8:printf("                        八月:\n"); printf("\n"); break;case 9:printf("                        九月:\n"); printf("\n"); break;case 10:printf("                       十月:\n"); printf("\n"); break;case 11:printf("                       十一月:\n"); printf("\n"); break;case 12:printf("                       十二月:\n"); printf("\n"); break;default:printf("Error!");} } int leap_year(int year)//判断闰年 {int i;if(year%4 == 0 && year%100 != 0) {i=366;}else if(year%1000 == 0 && year%400 == 0){i=366;}else{i=365;}return i;//单一出口原则}

##后记
课程设计是检验C语言学习的一个炼金石,也同样是整合所学知识的一次训练,课程设计的过程中,有无数道Bug等着你,无论是语法上的还是逻辑上的,在这个过程中是很锻炼人的耐心的,只有将他们一一降伏,你才会发现走过的路也不过如此,通过一个课程设计,可以说你已经就此简单入门,但是C语言学习的路还很长,还需继续努力。

C语言 我的第一次课程设计---万年历相关推荐

  1. c语言课程设计万年历,C语言课程设计--万年历.doc

    C语言课程设计--万年历 C 语 言 课 程 设 计 报 告 设计题目:学生姓名:学生学号:专业班级:学院名称:同组人姓名:指导老师:姚 兰 年 月 日 1 需求分析 问题描述输入数据要求 /*如果给 ...

  2. c语言课程下载模板,万年历C语言课程设计万年历

    万年历C语言课程设计万年历Tag内容描述: 1.摘 要本设计应用AT89C52芯片作为核心,采用C语言进行编程,实现以下功能:小时.分.秒.年.月.日.星期的显示和实时温度检测.该设计的电子时钟系统由 ...

  3. ★C/C++语言期末课程设计★——万年历显示系统(详细报告+源代码+详细注释)

    万年历显示系统报告 一.描述         大家好!我是小浝仔,今天给大家分享C/C++语言期末课程设计--万年历显示系统,这个程序是用C/C++语言程序编写的,运行环境为VisualC++6.0, ...

  4. 2019春第一次课程设计实验报告

    2019春第一次课程设计实验报告 一.实验项目名称 反弹球消砖块 二 .实验项目功能描述 用c语言编写一个反弹球小游戏,可以自己改变游戏的各项数据,可以通过键盘的 "a",&quo ...

  5. c语言标准化考试系统课程设计,c语言标准化考试系统课程设计

    1.课课 程程 报报 告告课课 程程 名名 称:称: 标准化考试系统 专专 业业 班班 级级 : 学学 生生 姓姓 名名 : 学学 号号 : 任任 课课 教教 师师 : 学学 期期 : 课程报告任务书 ...

  6. 2109春第一次课程设计实验报告

    2019春第一次课程设计实验报告 一.实验项目名称: 飞机游戏的编写 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现控制飞机的移动功能,增加其实用度, 同时还实现发射子弹和出现敌机的操 ...

  7. c语言仓库管理系统链表,仓库管理系统 C语言 C++ 数据结构 链表 课程设计

    仓库管理系统 C语言 C++ 数据结构 链表 课程设计 #include #include #include #include #define MAX 64 typedef struct node{ ...

  8. C语言《程序设计基础课程设计》题库

    C语言<程序设计基础课程设计>题库 要求: 学生须按学号最后两位选择对应题目. 采用单链表和文件实现系统. 具体实现要求: (1) 从文件中读出数据,创建带头结点的单链表;将单链表中的数据 ...

  9. 计算机课程设计收费管理系统,C语言机房收费管理系统课程设计

    <C语言机房收费管理系统课程设计>由会员分享,可在线阅读,更多相关<C语言机房收费管理系统课程设计(15页珍藏版)>请在人人文库网上搜索. 1.课程设计报告课程设计题目:机房收 ...

最新文章

  1. node开发环境(mac)和线上环境(linux)搭建
  2. layui选项卡嵌套选项卡_在ProtoPie中使用嵌套组件构建选项卡栏
  3. md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?
  4. kotlin将对象转换为map_Kotlin程序将哈希映射(HashMap)转换为列表(List)
  5. 下载腾讯视频里的视频_手机腾讯视频如何升级新版本
  6. c语言封闭曲线分割平面_餐饮空间设计之平面合理布局
  7. 剑指Offer 64 求1+2+...+n
  8. eWebEditor浏览器兼容 ie8 ie7
  9. web前端性能优化的技巧
  10. HTML5开发手机项目—个人总结
  11. @EnableWebMvc引发的swagger-ui.html的灾难
  12. IntelliJ IDEA2021.2搭建struts2框架
  13. 大数据Hadoop(三十):Hadoop3.x的介绍
  14. 股票分时量能分析 概念定义
  15. C语言-投票选举问题
  16. MPB:西湖大学鞠峰组-​​微生物群落定量宏基因组和宏转录组
  17. 解决Retrying connect to server: 192.168.x.x:8032. Already tried 0 time(s); retry policy is...
  18. 2.4 旋转曲面 (2)
  19. TensorFlow学习笔记12----Creating Estimators in tf.contrib.learn
  20. [活动预告]倒数1天!开源世界高峰论坛将于北京举行,偶数科技将进行主题演讲和产品展示

热门文章

  1. 【Gazebo仿真·一】Gazebo + Moveit + ur5e机械臂仿真
  2. 计算机毕业设计ssm成都某S店销售管理系统
  3. 《C++ 沉思录》学习笔记——上篇
  4. 破解网页禁止复制的方法
  5. 瑞信研报:甲骨文跑赢大盘 目标价格38美元
  6. 《画解数据结构》哈希表
  7. 2018高教社杯B题 RGV动态调度 c++模拟
  8. GAMES101笔记(九)
  9. 打通上下游产业链 助大数据产业发展
  10. PU learning算法简介