C语言项目案例分析 源代码
用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语言项目案例分析 源代码相关推荐
- c mysql项目案例_C语言项目案例分析 目录
目录 第1篇 实用工具篇 第1章 万年历(TC 2.0实现) 自学视频.源程序: 配套资源\mr\1\ 2 1.1 万年历概述 3 1.1.1 功能概述 3 1.1.2 万年历效果预览 3 ...
- acm水仙花数java,水仙花数之C语言经典案例分析
水仙花数之C语言经典案例分析 一.[什么是水仙花数] 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI) ...
- 猴子吃桃c语言程序到第n天,猴子吃桃问题之《C语言经典案例分析》
猴子吃桃问题之<C语言经典案例分析> 一.[什么是猴子吃桃] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,有多吃了 ...
- python在工程管理专业的应用案例_Python课程中实际项目案例分析
项目三 内容推荐系统 传统的需求收集方式多是做一些调研,如用户访谈.问卷调查.焦点小组.现场调研等.虽说这是直面用户很好的方式,但是也存在一些局限性, 如样本不够多,投入时间人力成本大,访谈环境对受访 ...
- linux thinkphp 计划任务_ThinkPHP定时任务项目案例分析
定时任务常见的是Linux中的crontab定时任务,这种是通过编写脚本来执行的,它会在后台一直循环执行.但是有时候我们没有服务器权限或者说我们没有独立的服务器,那又该怎么办?其实,定时任务还有一种就 ...
- 科研院所网管开发项目案例分析
1.电力科学研究院 1.1.项目背景 中国电力科学研究院,是国家电网公司直属科研单位,是中国电力行业多学科.综合性的科研机构. 电力科学院在承建电力核心骨干网--光芯片网络系统中,需要开发管理光芯片网 ...
- R语言实用案例分析-1
在日常生活和实际应用当中,我们经常会用到统计方面的知识,比如求最大值,求平均值等等.R语言是一门统计学语言,他可以方便的完成统计相关的计算,下面我们就来看一个相关案例. 1. 背景 最近西安交大大数据 ...
- Android动画了解—一些项目案例分析
文章目录 写在前面 带路径运动的过渡动画 整体缩放的效果 整体宽高改变的过渡效果 两个界面布局的过渡效果 带水波纹布局的效果 几行代码实现转圈圈的效果 界面翻转的效果 写在前面 最近听说MIUI 12 ...
- [机缘参悟-76]:沟通技巧-职场中常见不合适语言的案例分析(尽量避免使用反问式语言)
目录 第一部分:针对他人的用词 避免使用"怎么?" 这样的责难的词. 避免使用"老实说"这样过虚假的词. 避免说"xxx几点左右" 这种的不 ...
最新文章
- ElasticSearch基础知识整理
- ElementUI中的el-table实现多选框不勾选的提示
- 04JavaScript中函数也是对象
- php堆是什么,PHP 堆与堆排序的详解
- 几位无人驾驶领域的杰出科学家
- mac升级10.12后,安全和隐私中没有了安装任何来源的选项的解决办法
- (39)FPGA原语设计(IDDR)
- 26元买4500斤脐橙,农民淘宝店被主播带头薅亏700万,“羊毛党”太狠了!
- 实验二 动态规划算法 最长公共子序列问题
- 【游戏辅助】利用C语言编写《植物大战僵尸》修改阳光值代码
- 自适应波束形成matlab,自适应波束形成matlab
- Alize和NIST中sphere2.7编译问题
- 三宝小精灵机器人_三宝小精灵机器人
- SPSS 中介效应检验(图文+数据集)【SPSS 043期】
- 安装deb程序到linux指定目录,deb文件怎么安装_怎么安装deb软件
- 如何获取HanLP的nature中文名
- 新浪微创投狩猎季:5家LP皆VC大佬 人气日渐高涨
- java 获取星期几_java中获取日期是星期几的两种方法
- CRC查表法——表的由来及Java实现CRC8校验算法
- windows7蓝牙怎么打开_windows7系统如何调整字体大小