满足三个需求:

1.输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。

2.输入年月,输出该月的日历。

3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

最终完善版代码:

#include

#include

#include

#include

#include

int year , month , day ;

int day_of_month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

//char wek[7]={'周日','周一','周二','周三','周四','周五','周六'};

int current_year,current_month,current_day;

/************************************通用关键函数**************************************************/

void cls_screen()

{

printf("请按任意键返回!\n");

getchar();

getchar();

system("cls");

}

void get_current_time()   //获取当前时间

{

time_t timep;

struct tm *p;

time(&timep);

p = gmtime(&timep);

current_year=1900+p->tm_year;

current_month=1+p->tm_mon;

current_day=p->tm_mday;

}

int judgement (int y)

{

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

return 1 ;

else return 0 ;

}

int show_week (int year , int month , int day)

{

/*

公式:w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7

*/

int w ,k;   //记录周几

int year_last=year %100,c=year/100 , m = month;

if (month==1 )

{

year_last-=1 ;

m=13 ;

}

else if (month==2)

{

year_last-=1;

m=14;

}

w = (year_last + year_last/4 + c/4 - 2*c +26*(m+1)/10+day-1); // abs  绝对值

if (w<0)

{

k=(w%7+7)%7;

}

else k=w%7;

return k ;

}

/************************************第一部分**************************************************/

void print_year (int year)

{

int i , k ,x ,first_week;

printf ("请输入想要查询的年月(格式如2012):");

scanf ("%d",&year);

printf("=======================%d年===========================\n",year);

printf("\n");

if (judgement(year))

{

day_of_month[1]=29;

}

else day_of_month[1]=28;

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

{

first_week = show_week(year,i,1);

printf("=====================%d月日历如下========================\n",i);

printf ("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");

for (x=1;x<=first_week;x++)

{

printf("\t");

if (x%7==0) printf ("\n");

}

for (k=1;k<=day_of_month[i-1];k++)

{

printf("%d\t",k);

if (x%7==0) printf ("\n");

x++;

}

printf("\n");

printf("\n");

printf("\n");

}

}

/************************************第二部分**************************************************/

void print_year_month ()

{

int k ,x ,first_week;

printf ("请输入想要查询的年月(格式如2012 12):");

do

{

scanf ("%d %d",&year,&month);

if (month<1||month>12)

{

printf("您输入的月份有误哦~请输入正确的月份\n");

printf ("请输入想要查询的年月(格式如2012 12):");

}

}while(1>month||month>12);

printf("=====================%d年%d月======================\n",year,month);

if (judgement(year))

{

day_of_month[1]=29;

}

else day_of_month[1]=28;

first_week = show_week(year,month,1);

printf ("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");

for (x=1;x<=first_week;x++)

{

printf("\t");

if (x%7==0) printf ("\n");

}

for (k=1;k<=day_of_month[month-1];k++)

{

printf("%d\t",k);

if (x%7==0) printf ("\n");

x++;

}

printf("\n");

}

/************************************第三部分**************************************************/

int year_before_sumdays (int year,int month, int day)

{

int days=0 ,i,judgement1;

int temp_day=0 ,sum_days;       //

//printf ("%d,%d\n",current_year,current_month);

judgement1=judgement(year);

/*===================比当前少=====================*/

if (year < current_year )

{

for (i = year+1;i < current_year ;i++)

{

if (judgement(i))

{

days=days+356;

}

else days+=355;

}

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

{

days=days+day_of_month[i-1];

}

days = days + day_of_month[month-1]-day;           //指定日子距离当年结束还有多少天

//printf("去年还有%d\n",days);

for (i = 0;i < current_month-1;i++ )

{

if (judgement1)

{

day_of_month[1]=29;

}

temp_day = temp_day + day_of_month[i];

}

//当前日子是这一年的多少天

temp_day = temp_day + current_day;

//printf("今天是第%d天\n",temp_day);

sum_days=temp_day + days ;

}

/*===================比当前多=====================*/

if (year > current_year )

{

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

{

if (judgement(i))

{

days=days+356;

}

else days+=355;

}

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

{

days=days+day_of_month[i-1];

}

days = days + day_of_month[month-1]-current_day;           //指定日子距离当年结束还有多少天

//printf("去年还有%d\n",days);

for (i = 0;i

{

if (judgement1)

{

day_of_month[1]=29;

}

temp_day = temp_day + day_of_month[i];

}

//当前日子是这一年的多少天

temp_day = temp_day + day;

//printf("今天是第%d天\n",temp_day);

sum_days=temp_day + days ;

}

/*===================比当前一样=====================*/

if (year == current_year )

{

if(month

{

for (i=month+1;i

{

if (judgement1)

{

day_of_month[1]=29;

}

days = days + day_of_month[i];

}

sum_days = days + current_day + day_of_month[month-1] - day ;

}

if (month>current_month)

{

for (i=current_month+1;i

{

if (judgement1)

{

day_of_month[1]=29;

}

days = days + day_of_month[i];

}

sum_days = days + day + day_of_month[month-1] - current_day ;

printf("%d\n",days);

}

if (month==current_month)

{

sum_days= abs(day-current_day);

}

}

return sum_days ;

}

void print(int year,int month,int day)

{

int week;

printf ("请输入想要查询的年月(格式如2012 12 12 ):");

do

{

scanf ("%d %d %d",&year,&month,&day);

if (judgement(year))

{

day_of_month[1]=29;

}

printf("\n");

if (day<=0 || day >day_of_month[month-1])

printf ("%d月没有%d,请重新输入(格式如2012 12 12 ):",month,day);

}while(day<=0 || day >day_of_month[month-1]);

week=show_week (year,month ,day);

printf("\n");

switch(month)//判断查找天是否阳历节日先由月份判断是否有节日的月份再由日判断是否为节日

{

case 1:switch(day)

{

case 1:printf("元旦") ;break;

default:printf("不是阳历节日");

}break;

case 2:switch(day)

{

case 14:printf("情人节(Valentines Day)");break;

default:printf("不是阳历节日");

}break;

case 3:switch(day)

{

case 8:printf("妇女节¨(Women's Day)");break;

case 12:printf("植树节(Arbor Day)");break;

default:printf("不是阳历节日");

}break;

case 4:switch(day)

{

case 1:printf("愚人节(April Fools Day)");break;

case 5:printf("清明节(Tomb-sweeping Day)");break;

default:printf("不是阳历节日");

}break;

case 5:switch(day)

{

case 1:printf("劳动节(Labor Day)");break;

case 4:printf("中国青年节(Chinese Youth Day)");

default:printf("不是阳历节日");

}break;

case 6:switch(day)

{

case 1:printf("儿童节(Children's Day)");break;

default:printf("不是阳历节日");

}break;

case 8:switch(day)

{

case 1:printf("建军节(the Army's Day)");break;

default:printf("不是阳历节日");

}break;

case 9:switch(day)

{

case 10:printf("教师节(Teacher's Day)");break;

default:printf("不是阳历节日");

}break;

case 10:switch(day)

{

case 1:printf("国庆节(National Day)");break;

case 31:printf("万圣节(Helloween Day)");break;

default:printf("不是阳历节日");

}break;

case 12:switch(day)

{

case 25 :printf("圣诞节(Christmas Day)");break;

default:printf("不是阳历节日");

}break;

}

printf("\n");

printf("%d年%d月%d号是:",year,month,day);

switch(week)//判断所查找天是星期几

{

case 0:printf("Sunday");break;

case 1:printf("Monday");break;

case 2:printf("Tuesday");break;

case 3:printf("Wednesday");;break;

case 4:printf("Thursday");break;

case 5:printf("Friday");break;

case 6:printf("Saturday");break;

}

printf("\n");

printf("距离今天有%d天\n",year_before_sumdays ( year, month, day));

printf("\n");

}

/********************************************************************************************/

void main ()

{

int choice,year,month,day,flag=1;

char c , k;

for(;1;)//显示程序菜单,为永真,每次查找完回到程序菜单ì

{

printf("===================================菜单选项===================================\n");

printf("请选择:\n");

printf("* * * * * * * *               1.查找某一年的年历              * * * * * * * *\n");

printf("* * * * * * * *               2.查找某一月的月历              * * * * * * * *\n");

printf("* * * * * * * *               3.查找某一天                    * * * * * * * *\n");

printf("* * * * * * * *               0.退出                          * * * * * * * *\n");

printf("==============================================================================\n");

printf("请输入您的选择:   ");

do

{

if (flag)

{

c=getche();

printf("\n");

printf("确定选择%c吗? (y/Y )或者(n/N):   ",c);

}

if (flag )

{

k=getche();

//  printf("\n");

}

if (k == 'y' || k == 'Y')

{

printf("\n");

if (c=='\n')

{

printf("\n");

printf("输入有误,请输入数字\n");

printf("\n");

printf("请输入您的选择:   ");

}

else if (!isdigit(c))

{

printf("\n");

printf("输入有误,请输入数字\n");

printf("\n");

printf("请输入您的选择:   ");

}

else if (isdigit(c))

{

choice = c-'0' ;

if (choice < 0 || choice > 3 )

{

printf("输入有误,请输入0-3之间的数字\n");

}

else break ;

}

}

else if (k=='n' || k=='N')

{

printf("\n");

printf("你选择了否,请重新输入选项:   ");

flag=1;

}

if ((k != 'y'&& k!='Y'&& k!= 'n'&& k!='N'))

{

printf("\n");

printf("请输入y/n:   ");

flag=0;

if (flag == 0)

{

k=getche();

printf("\n");

//getchar();

}

}

}while(1);

if (choice==1)

{

print_year(year);

cls_screen();

}

else if (choice==2)

{

print_year_month ();

cls_screen();

}

else if (choice==3)

{

get_current_time();

print(year,month,day);

cls_screen();

}

else if (choice==0)

break;

else

{

printf ("您的输入有误,请重新输入\n");

}

}

}

以上就是本文所述的全部内容了,希望大家能够喜欢。

c语言编写日历作业,c语言实现一个简单日历相关推荐

  1. java做一个日历程序_java实现的一个简单日历

    先贴代码,之后的文章慢慢总结分析. 首先是日历的每个格子作为一个对象,建立的一个类DayBox.java import java.awt.Color; import javax.swing.JButt ...

  2. C语言编写程序:从键盘输入一个小写字母,该字母加密后变成其后继第2个字母输出。

    C语言编写程序:从键盘输入一个小写字母,该字母加密后变成其后继第2个字母输出. 例如:a加密后变成c,b加密后变成d,z加密后变成b. 实验代码: #include<stdio.h> in ...

  3. 用C语言编写万年历6,C语言编写万年历

    <C语言编写万年历>由会员分享,可在线阅读,更多相关<C语言编写万年历(8页珍藏版)>请在人人文库网上搜索. 1.C语言编写万年历 [要求]:1 程序运行后,首先在屏幕上显示主 ...

  4. C语言及实验作业,C语言作业及参考答案

    <C语言作业及参考答案>由会员分享,可在线阅读,更多相关<C语言作业及参考答案(65页珍藏版)>请在人人文库网上搜索. 1.C语言及实验作业参考做法分支程序设计上机作业:标题 ...

  5. c语言编写系统服务程序,C语言Windows服务程序编写-ServiceMain

    C语言编写的Windows服务程序,可以类比Linux/Unix环境下的daemon进程. 一下是VS2010环境下的demo: // windows_service.cpp : 定义控制台应用程序的 ...

  6. C语言 编写程序:由键盘输入一个字符判断是字母数字还是其他符号。

    c语言程序题 编写程序:由键盘输入一个字符判断是字母数字还是其他符号. #include<stdio.h> void main() {char a;scanf("%c" ...

  7. c语言编写modbus程序,C语言编写modbus协议

    <C语言编写modbus协议>由会员分享,可在线阅读,更多相关<C语言编写modbus协议(23页珍藏版)>请在人人文库网上搜索. 1.include / 字地址 0 - 25 ...

  8. c语言编写计算机软件,基于C语言的计算机软件编程分析.doc

    基于C语言的计算机软件编程分析.doc 基于C语言的计算机软件编程分析 摘要:C语言是一种重要的编程语言,在当今IT业的运用十分广泛.使用C语言来编写的程序简单.直接.准确,极大地推动了计算机软件的更 ...

  9. 用c语言编写字母循环,C语言输入循环字母

    广告 提供50多种云计算产品,包括云服务器和云. 创建一站式云产品试用服务,以帮助开发人员和企业以零门槛进入云环境. 是否有一种简单的方法来调用c脚本,以查看用户是否输入了英文字母中的字母?我在想这样 ...

  10. c语言编写五子棋报告,c语言报告五子棋.pdf

    C 语言课程设计报告 c 题目: 简单的 五子棋 设计者: 方阳 专业班级: 软件工程1303班 学号: 311309060324 指导老师: 刘洁 所属系部: 计算机学院 2014年6月25 日 河 ...

最新文章

  1. 向vSphere迁移虚拟机,Converter需要升级至4.0.1
  2. dede调用sql语句的方法
  3. Android studio导入第三方库的各种方法和eclipse的导入方式对比
  4. phpstudy mysql端口_完美解决phpstudy安装后mysql无法启动(无需删除原数据库,无需更改任何配置,无需更改端口)直接共存...
  5. 转:华为副总裁一封信:透露年薪千万的工作感悟,太震撼了!
  6. scanf(“%s“)真的只开读入字符串大小就可以了吗??
  7. MD5加密方式-工具类
  8. Cocoapods的Podfile常见语法总结
  9. 【LeetCode】【HOT】287. 寻找重复数(抽象环形链表)
  10. openjdk7的ImageIO.read()导致jvm异常crash
  11. php sql注入审计,php审计基础一:sql注入
  12. indesign排版实例教程,如何更改页面大小?
  13. 算法(一):智能小车速度控制(PID模糊控制)
  14. HIMSS 对EHR的定义
  15. video.js在react中实现视频播放(video.js)
  16. 【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
  17. 2021总结:万千热爱,初心不负,三餐烟火暖,四季皆安然。
  18. codeblocks编译器报错Id returned 1 exit status
  19. android放微信短视频文件,参考微信实现的短视频录像
  20. js 模拟from提交post

热门文章

  1. 3DMax提示:单位不匹配
  2. 前端Vue简单编写一个幸运大转盘抽奖游戏
  3. 云服务器如何重新装系统,云服务器可以重新安装系统
  4. 如何快速开发实用的应用软件?
  5. bzoj4695 最佳女选手
  6. 第十八届深圳文博会今日开幕,江苏馆携手卓易紫砂街数字文化惊艳亮相!
  7. 软件开发中 前台、中台、后台英文_实战思考(一):如何搭建业务中台?
  8. VBA提取字符串纯数字的方法
  9. 【uniapp】icon图标的使用
  10. Java模拟消息队列