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

满足三个需求:

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");

}

}

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将EntityManager.refresh添加到所有Spring数据存储库

在我以前的文章《从Spring Data JPA访问EntityManager》中&#xff0c;我展示了如何扩展单个Spring Data JPA存储库以访问EntityManager.refresh方法。 这篇文章演示了如何将EntityManager.refresh添加到所有Spring Data Repository。 源代码 第一步是定义您的界面- package …

pb 应用 迁移 linux_功能化生物炭应用研究取得系列进展

土壤营养元素流失、重金属污染是当前全球面临的突出环境问题。生物炭因其具有比表面积较大、吸附性能高和成本低等优点而在环境修复领域日益受到广泛关注&#xff0c;被作为水处理吸附剂、土壤修复改良剂广泛应用于农业土壤改良和环境中重金属的修复和钝化。但通常情况下&#…

Java命令行界面(第26部分):CmdOption

由于Tweet&#xff0c;我了解了本系列中第26个基于Java的功能强大的库&#xff0c;该库用于解析命令行参数 。 CmdOption在其GitHub主页上被描述为“一个通过注释配置的&#xff0c;用于Java 5应用程序的简单注释驱动的命令行解析器工具包。” 该项目的副标题是“命令行解析从未…

vector c++ 赋值_面对拷贝赋值时发生的自我赋值的正确态度时接受而不是防止

C.62: Make copy assignment safe for self-assignmentC.62:保证拷贝赋值对自我赋值安全Reason(原因)If x x changes the value of x, people will be surprised and bad errors will occur (often including leaks).如果xx改变了x的值&#xff0c;人们会觉得很奇怪&#xff0…

c语言字符流缓冲区,深入理解C语言的IO及缓冲操作

http://www.shangxueba.com/jingyan/1837313.html2014与文件I/O围绕文件描述符操作不同&#xff0c;标准I/O的操作是围绕流进行的。流&#xff1a;对于流&#xff0c;《C和指针》里有一段解释得很好&#xff1a;ANSI C进一步对I/O的概念进行了抽象。就C程序而言&#xff0c;所有…

maven插件依赖_当Maven依赖插件位于

maven插件依赖问题&#xff1a; 我们进行了一个集成测试&#xff0c;该测试创建了一个Spring ClassPathXmlApplicationContext &#xff0c;同时这样做导致NoSuchMethodError爆炸。 事实证明&#xff0c;我们对Spring构件的依赖版本存在冲突。 这本身不是一个不寻常的问题-使用…

华为编程规范_华为 Java 编程规范出炉,究竟和官方文档有何不同?

来源&#xff1a;blog.csdn.net/chenleixing/article/details/441739851、引言这个标准是衡量代码本身的缺陷&#xff0c;也是衡量一个研发人员本身的价值。华为作为一家全球化的 IT 公司&#xff0c;十几万员工&#xff0c;无论是人事管理&#xff0c;还是代码管理&#xff0c…

变量是否在数组内c语言,函数内创建的数组在调用后,是否就不存在

函数内创建的数组在调用后&#xff0c;是不是就不存在本帖最后由 test_lockxxx 于 2014-04-23 09:31:06 编辑第1种写法&#xff1a;char *getABC(){char str[10];strcpy(str,"12345");return str;}void main(){char *p getABC();printf("%s\n",p); //这…

惯用并发:flatMap()与parallel()– RxJava常见问题解答

简单&#xff0c;有效和安全的并发是RxJava的设计原则之一。 然而&#xff0c;具有讽刺意味的是&#xff0c;它可能是该库中最容易被误解的方面之一。 让我们举一个简单的例子&#xff1a;假设我们有一堆UUID并且对于每个UUID &#xff0c;我们必须执行一组任务。 第一个问题是…

python%20开发工具_20招让你的Python飞起来!

今天分享的这篇文章&#xff0c;文字不多&#xff0c;代码为主。绝对干货&#xff0c;童叟无欺&#xff0c;主要分享了提升 Python 性能的 20 个技巧&#xff0c;教你如何告别慢Python。原文作者 开元&#xff0c;全栈程序员&#xff0c;使用 Python, Java, PHP和C。1. 优化算法…

c语言万能预编译,Objective-C学习笔记

import 指令(将文件的内容在预编译的时候拷贝到写指令的地方)import Foundation 框架NSLog 函数 NSLog("Hello, World!");NSString语法: NSString *str "jack";字符串占位符: %数据类型C 语言支持的数据类型基本数据类型int double float char构造类型数组…

Java命令行界面(第19部分):jClap

本系列中第19篇文章的重点是从Java代码解析命令行参数是jClap &#xff08; Java命令行参数解析器 &#xff09;&#xff0c;不应将它与称为JCLAP的库相混淆&#xff0c;而JCLAP库是我本系列先前文章的重点。 在以前的帖子覆盖JCLAP 1.4加尔斯吉尔温斯坦利&#xff08; snaq.ne…

使用Arquillian和LocalStack脱机测试AWS云堆栈

在AWS云堆栈 &#xff08;例如DynamoDB&#xff0c;S3等&#xff09;上构建应用程序时&#xff0c;需要针对这些组件编写测试。 您可能首先想到的是拥有一个用于生产的环境和一个用于测试的环境&#xff0c;然后针对该环境运行测试。 这对于集成测试&#xff0c;部署测试&…

python取文本中间_Python读取两个字符串之间的特定文本行

我无法让python读取特定的行。我正在做的事情是这样的&#xff1a;lines of data not neededlines of data not neededlines of data not needed--------------------------------------***** REPORT 1 *****--------------------------------------[key] lines of interest ar…

c语言7.5return的值是,这个真心搞不懂了。求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼回复 15楼. 假如你每天签到拿4经验&#xff0c;300000/475000天&#xff0c;如果从1岁开始签到&#xff0c;那100年36500天&#xff0c;你差不多要活200年保持每天签到(谁知道200年后还有没有签到这玩意)&#xff0c;如果你每天再水…

Java命令行界面(第22部分):argparser

John Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外&#xff0c;还提供了指向基于Javadoc的API文档 &#xff0c;JAR文件&#xff0c;ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系列的前二十…

python中布尔类型的值包括0和1_Python中布尔型变量的值为0和1。( )

【单选题】以下哪个不能作为字典的键。【多选题】以下哪些元素是可变序列。【单选题】已知 x[1,2,3,4,5,6,7],执行语句x.pop()的结果是()。【多选题】以下哪几个可以作为字典的键。【单选题】以下哪个属于列表的定界符。【多选题】以下哪几个选项类型属于元组。【单选题】下面代…

如何粗暴地下载huggingface_hub指定数据文件

参考这里&#xff1a; https://huggingface.co/docs/huggingface_hub/guides/download 可见下载单个文件&#xff0c;下载整个仓库文件都是可行的。 这是使用snapshot_download下载的一个例子&#xff1a; https://qq742971636.blog.csdn.net/article/details/135150482 sn…

顺序表输入栈元素c语言,C语言数据结构之栈简单操作

C语言数据结构之栈简单操作实验&#xff1a;编写一个程序实现顺序栈的各种基本运算&#xff0c;并在此基础上设计一个主程序&#xff0c;完成如下功能&#xff1a;(1)初始化顺序栈(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈分析:栈的顺序存储结构简称…

rete_Rete之外的生活– RIP Rete 2013 :)

rete我只是对我的新算法做最后的修改。 它融合了Leaps &#xff0c; 面向集合的Match和Left / Right取消链接的概念 &#xff0c;以及我自己的一些想法。 该代码已提交&#xff0c;但我正在积累工作并编写更多测试。 我将在一周左右的时间内写一个完整的博客&#xff0c;详细介…