用C语言编写的“日历表”源代码


“日历”结构

/*日历
*1.显示当前时间
*2.输入并验证输入的内容是否正确,如果错误重新输入
            输入函数
            验证函数
       由于我们要返回 “年” “月” “日” “每月一号星期差” 的四个值,我们使用指针处理

*3.显示要查询的结果
           1.求年差 dy
           2.求月差 dm
           3.求星期差 week

如果输入某年某月 则显示日历表  
如果输入某年某月某日    则显示星期几
*/


头文件    calender.h文件:

#ifndef CALENDER_H_INCLUDED
#define CALENDER_H_INCLUDED#include <stdio.h>
#include <stdlib.h>
#include <time.h>const char week2[7][5]={"一","二","三","四","五","六","日"};
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
typedef struct Calender{int year;int month;int day;int dif;//每个月一号的星期差
}Cal;
Cal cals;
Cal *cal=&cals;
/*显示当前时间*/
void Show_time()
{time_t timep;//定义一个长整型struct tm *p;//定义一个指向tm结构体的指针time(&timep);//把得到的时间储存在timepp=localtime(&timep);//把得到时间化成我们熟悉的形式if(p->tm_wday==0)p->tm_wday='7';printf("=================================\n");printf("当前时间:%d/%d/%d 星期%s %d:%d\n\n",p->tm_year+1900,p->tm_mon+1,p->tm_mday,week2[p->tm_wday-1],p->tm_hour,p->tm_min);
}
/*提取输入中的有效信息*/
void entry()
{char date[30];printf("请输入你查询的年份(2018/5/2):");cal->day=0,cal->month=0,cal->year=0;scanf("%s",date);while(getchar()!='\n')continue;int j=0,d=-1;while(date[j]){if((date[j]=='/'||date[j]=='.')&&d==-1){j++;d=0;continue;}if((date[j]=='/'||date[j]=='.')&&d==0){j++;d=1;continue;}if(d==-1)cal->year=cal->year*10+(date[j]-'0');if(d==0)cal->month=cal->month*10+(date[j]-'0');if(d==1)cal->day=cal->day*10+(date[j]-'0');j++;}
}
/*判断是否为闰年*/
int leap_year()
{int m2;if((cal->year%4==0&&cal->year%100!=0)||(cal->year%400==0&&cal->year%100==0))m2=1;elsem2=0;return m2;
}
/*判断是否是闰月*/
int leap_month()
{if(leap_year()==1)mon[1]=29;elsemon[1]=28;return mon[1];
}
/*验证输入的是否正确*/
int validate()
{mon[1] = leap_month();if(cal->day>mon[cal->month-1]){printf("enter DAY error,please try again:\n");return 1;}if(cal->month<=0||cal->month>12){printf("enter MONTH error,please try again:\n");return 1;}return 0;
}
/*求年差*/
int different_year()
{int d,dy;if(cal->year==2000)dy=0;if(cal->year>2000)d=(cal->year-2000-1)/4-(cal->year-2000-1)/100+(cal->year-2000-1)/400+1;elsed=(cal->year-2000)/4-(cal->year-2000)/100+(cal->year-2000)/400;dy=(cal->year-2000)+d;return dy;
}
/*求月差*/
int different_month()
{int dm,m2;m2=leap_year();switch(cal->month){case 1:dm=0;break;case 2:dm=3;break;case 3:dm=3+m2;break;case 4:dm=6+m2;break;case 5:dm=1+m2;break;case 6:dm=4+m2;break;case 7:dm=6+m2;break;case 8:dm=2+m2;break;case 9:dm=5+m2;break;case 10:dm=m2;break;case 11:dm=3+m2;break;case 12:dm=5+m2;break;}return dm;
}
/*求星期差*/
int different_week()
{int dm,dy,week;dy=different_year();dm=different_month();cal->dif=(dy+dm+6)%7;if(cal->dif<0)cal->dif+=7;week=(dy+dm+cal->day-1+6)%7;if(week<0)week+=7;return week;
}
/*显示输出内容*/
void show()
{int i,week1;week1=different_week();if(cal->day==0){printf("            %d年%d月\n",cal->year,cal->month);printf("=================================\n");printf("Mon  Tue  Wed  Thu  Fri  Sat  Sun\n");cal->dif-=1;for(i=0;i<cal->dif;i++)printf("     ");leap_month();for(i=0;i<mon[cal->month-1];i++){printf("%-5d",i+1);cal->dif++;if(cal->dif%7==0)printf("\n");}printf("\n================================\n");}elseprintf("%d年%d月%d号是星期%s\n",cal->year,cal->month,cal->day,week2[week1-1]);
}
#endif // CALENDER_H_INCLUDED

实现文件  main.c文件:

#include "calender.h"
int main()
{int m;Show_time();while(1){do{entry();m=validate();}while(m!=0);show();}}

实现效果:

1.输入界面

2.查询某年某月某日

3.查询某年某月

C语言项目案例分析 源代码相关推荐

  1. c mysql项目案例_C语言项目案例分析 目录

    目录 第1篇  实用工具篇 第1章  万年历(TC 2.0实现) 自学视频.源程序: 配套资源\mr\1\ 2 1.1  万年历概述 3 1.1.1  功能概述 3 1.1.2  万年历效果预览 3 ...

  2. acm水仙花数java,水仙花数之C语言经典案例分析

    水仙花数之C语言经典案例分析 一.[什么是水仙花数] 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI) ...

  3. 猴子吃桃c语言程序到第n天,猴子吃桃问题之《C语言经典案例分析》

    猴子吃桃问题之<C语言经典案例分析> 一.[什么是猴子吃桃] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,有多吃了 ...

  4. python在工程管理专业的应用案例_Python课程中实际项目案例分析

    项目三 内容推荐系统 传统的需求收集方式多是做一些调研,如用户访谈.问卷调查.焦点小组.现场调研等.虽说这是直面用户很好的方式,但是也存在一些局限性, 如样本不够多,投入时间人力成本大,访谈环境对受访 ...

  5. linux thinkphp 计划任务_ThinkPHP定时任务项目案例分析

    定时任务常见的是Linux中的crontab定时任务,这种是通过编写脚本来执行的,它会在后台一直循环执行.但是有时候我们没有服务器权限或者说我们没有独立的服务器,那又该怎么办?其实,定时任务还有一种就 ...

  6. 科研院所网管开发项目案例分析

    1.电力科学研究院 1.1.项目背景 中国电力科学研究院,是国家电网公司直属科研单位,是中国电力行业多学科.综合性的科研机构. 电力科学院在承建电力核心骨干网--光芯片网络系统中,需要开发管理光芯片网 ...

  7. R语言实用案例分析-1

    在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等.R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例. 1. 背景 最近西安交大大数据 ...

  8. Android动画了解—一些项目案例分析

    文章目录 写在前面 带路径运动的过渡动画 整体缩放的效果 整体宽高改变的过渡效果 两个界面布局的过渡效果 带水波纹布局的效果 几行代码实现转圈圈的效果 界面翻转的效果 写在前面 最近听说MIUI 12 ...

  9. [机缘参悟-76]:沟通技巧-职场中常见不合适语言的案例分析(尽量避免使用反问式语言)

    目录 第一部分:针对他人的用词 避免使用"怎么?" 这样的责难的词. 避免使用"老实说"这样过虚假的词. 避免说"xxx几点左右" 这种的不 ...

最新文章

  1. ElasticSearch基础知识整理
  2. ElementUI中的el-table实现多选框不勾选的提示
  3. 04JavaScript中函数也是对象
  4. php堆是什么,PHP 堆与堆排序的详解
  5. 几位无人驾驶领域的杰出科学家
  6. mac升级10.12后,安全和隐私中没有了安装任何来源的选项的解决办法
  7. (39)FPGA原语设计(IDDR)
  8. 26元买4500斤脐橙,农民淘宝店被主播带头薅亏700万,“羊毛党”太狠了!
  9. 实验二 动态规划算法 最长公共子序列问题
  10. 【游戏辅助】利用C语言编写《植物大战僵尸》修改阳光值代码
  11. 自适应波束形成matlab,自适应波束形成matlab
  12. Alize和NIST中sphere2.7编译问题
  13. 三宝小精灵机器人_三宝小精灵机器人
  14. SPSS 中介效应检验(图文+数据集)【SPSS 043期】
  15. 安装deb程序到linux指定目录,deb文件怎么安装_怎么安装deb软件
  16. 如何获取HanLP的nature中文名
  17. 新浪微创投狩猎季:5家LP皆VC大佬 人气日渐高涨
  18. java 获取星期几_java中获取日期是星期几的两种方法
  19. CRC查表法——表的由来及Java实现CRC8校验算法
  20. windows7蓝牙怎么打开_windows7系统如何调整字体大小

热门文章

  1. 华为模拟器eNSP练习题-静态路由、缺省路由
  2. STFT短时傅里叶变换的实现
  3. Python2.7+PyQt5的安装
  4. 融媒体网络营销WSEO案例分享:两天内与大型网站有相同排名
  5. ChatGPT聊天app(基于autojs)
  6. 43份ChatGTP报告分享
  7. Python jieba库的安装
  8. 远端rlogin服务
  9. Python--进程池与线程池
  10. matlab如何求矩阵行列式