C语言实现万年历效果

本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define str "  SUN  MON TUE  WED  THU  FRI  SAT  "
 
void menu();     //操作菜单
int leap(int year);    //判断某年是不是闰年
int days_month(int year, int month);    //返回某月的天数
int someday(int year, int month, int day);  //计算某天是星期几
void search_month(int year, int month);    //输出某月的日历
void search_someday(int year, int month, int day);  //查询某日是星期几
 
int main()
{
 int i, year, month, day;
 int k1, k2, k3, k4;  //用于判断输入的数据和操作是否正确,1代表正确,0代表错误
 int a = 1;
 menu();
 do
 {
 printf("请输入你要进行的操作(1-4):");
 scanf_s("%d", &i);
 getchar();
 switch (i)
 {
 case 1:
  printf("请输入你要查询的年份:"); scanf_s("%d", &year);
  for (a; a <= 12; a++)
  {
  printf("\n\n---------*******  %d *******------------\n", a);
  search_month(year, a);
  }
  printf("---------*********************------------\n\n\n");
  break;
 
 
 case 2:
  printf("请输入您所要查询的相关信息.\n");
  printf("年份:"); scanf_s("%d", &year);
  printf("月份:"); scanf_s("%d", &month);
  k1 = 1;
  while (k1)
  {
  if (month > 12 || month < 1)
  {
   printf("你输入的月份有误,请重新输入!\n");
   printf("月份:");
   scanf_s("%d", &month);
   if (month < 1 || month>12)  k1 = 1;
  }
  else k1 = 0;
  }
  search_month(year, month);
  printf("---------*********************------------\n\n\n");
  break;
 
 
 case 3:
  printf("请输入你要查询的日期\n");
  printf("年份:"); scanf_s("%d", &year);
  printf("月份:"); scanf_s("%d", &month);
  k2 = 1;
  while (k2)
  {
  if (month > 12 || month < 1)
  {
   printf("你输入的月份有误,请重新输入!\n");
   printf("月份:");
   scanf_s("%d", &month);
   if (month < 1 || month>12)  k2 = 1;
  }
  else k2 = 0;
  }
  //  printf("%d年%d月有%d天\n",year,month,days_month(year,month));   调试观察输入的日期是否有误,可忽略
  printf("日期:"); scanf_s("%d", &day);
  k3 = 1;
  while (k3)
  {
  if (day > days_month(year, month) || day < 1)
  {
   printf("你输入的日期有误,请重新输入!\n");
   printf("日期:");
   scanf_s("%d", &day);
   if (day > days_month(year, month) || day < 1)  k3 = 1;
  }
  else k3 = 0;
  }
  search_someday(year, month, day);
  printf("---------*********************------------\n\n\n"); break;
 
 
 case 4:exit(0);
  printf("---------*********************------------\n\n\n"); break;
 
 
 default:
  k4 = 1;
  while (k4)
  {
  printf("你输入的数据有误,请重新输入你要进行的操作(1-4):");
  scanf_s("%d", &i);
  if (i < 1 || i>4)  k4 = 1;
  else k4 = 0;
  }
  break;
 }
 } while (i > 0 && i < 5);
 return 0;
}
 
void menu()
{
 int i = 1;
 printf("\n\n\t\t----------------------------------------\n");
 printf("\t\t|--------------------------------------|\n");
 printf("\t\t|      %d. 输出某年的日历     |\n", i);
 printf("\t\t|      %d. 输出某月的日历     |\n", i + 1);
 printf("\t\t|      %d. 查询某日是星期几    |\n", i + 2);
 printf("\t\t|      %d. 退出系统        |\n", i + 3);
 printf("\t\t|--------------------------------------|\n");
 printf("\t\t----------------------------------------\n\n");
 
}
 
int leap(int year)
{
 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return 1;
 else return 0;
}
 
int days_month(int year, int month)
{
 int days_month;
 switch (month)
 {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12: days_month = 31; break;
 
 case 4:
 case 6:
 case 9:
 case 11:days_month = 30; break;
 
 case 2:
 if (leap(year) == 1)
 {
  days_month = 29; break;
 }
 else days_month = 28; break;
 }
 return days_month;
}
 
int someday(int year, int month, int day)
{
 //该函数运用了特殊的计算公式,详细可参见 http://blog.163.com/hexin_mars_blog/blog/static/248215040201571351115699/
 int someday, m, n, i; //someday表示查询的日子是星期几
 m = year - year / 1000 * 1000;
 n = m - m / 100 * 100 - 1;      //用于获得年份的后两位数
 int days = 0;
 for (i = 1; i < month; i++) days = days + days_month(year, i);
 days = days + day;
 someday = (n + n / 4 - n / 100 + n / 400 + days) % 7;
 return someday;
}
 
void search_someday(int year, int month, int day)
{
 char weekname[20];
 switch (someday(year, month, day))
 {
 case 0:strcpy_s(weekname, "星期天"); break;
 case 1:strcpy_s(weekname, "星期一"); break;
 case 2:strcpy_s(weekname, "星期二"); break;
 case 3:strcpy_s(weekname, "星期三"); break;
 case 4:strcpy_s(weekname, "星期四"); break;
 case 5:strcpy_s(weekname, "星期五"); break;
 case 6:strcpy_s(weekname, "星期六"); break;
 }
 printf("你所要查询的日期是%s\n", weekname);
}
 
void search_month(int year, int month)
{
 int i = 0, j, k = 0, m;   //j用于记录某月的第一天是星期几  m用于记录某月的天数 k用于换行提示
 char x[10] = "   ";
 m = days_month(year, month);
 j = someday(year, month, 1);
 
 //输出某月的日历
 printf("------------------------------------------\n");
 printf("%s\n", str);
 for (; i < j; i++)
 {
 printf("%s", x); k++;
 }
 for (i = 1; i <= m; i++)
 {
 k++;
 if (k % 7 == 0)
 {
  if (i < 10)
  {
  printf("  %d ", i);
  printf("\n");
  }
  else if (i >= 10)
  {
  printf("  %d ", i);
  printf("\n");
  }
 }
 else
 {
  if (i < 10)
  {
  printf("  %d ", i);
  }
  else if (i >= 10)
  {
  printf("  %d ", i);
  }
 }
 }
 printf("\n------------------------------------------\n");
}
 
void exit()
{
 exit(0);
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关推荐:

mysql+c语言+API如何访问数据库

小编给大家分享一下mysql+c语言+API如何访问数据库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  #include <winsock2.h> #include &quot...

C语言怎么实现贪吃蛇小游戏程序

这篇文章主要介绍“C语言怎么实现贪吃蛇小游戏程序”,在日常操作中,相信很多人在C语言怎么实现贪吃蛇小游戏程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现贪吃蛇小游戏程序”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!代码如下:#include&nbs...

如何用C语言制作贪吃蛇游戏

小编给大家分享一下如何用C语言制作贪吃蛇游戏,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨方法吧!这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下#include<stdio.h> #include<stdlib.h> #include<windows...

【C语言小游戏】 贪吃蛇

windows编译运行源代码:/*这是一个贪吃蛇代码,运行环境VC++6.0(亲测完美运行)*/ /*该程序在dos系统下运行,不需要graphics.h头文件*/ #include <windows.h> #include <stdlib.h> #inc...

Linux中怎么用c语言删除某个目录下的文件

这篇文章主要介绍了Linux中怎么用c语言删除某个目录下的文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux中怎么用c语言删除某个目录下的文件文章都会有所收获,下面我们一起来看看吧。利用c语言删除目录下文件最近这段时间工作内容是关于linux下的简单文件操作,...

怎么用C语言制作贪吃蛇小游戏

今天小编给大家分享一下怎么用C语言制作贪吃蛇小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。直接上代码#include <stdio.h> #include&...

怎么用C语言写推箱子游戏

本篇内容介绍了“怎么用C语言写推箱子游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#include<stdio.h>#include<stdlib.h>#include&l...

如何使用C语言编写推箱子游戏

这篇文章主要介绍了如何使用C语言编写推箱子游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了C语言推箱子游戏的具体实现代码,供大家参考,具体内容如下#include <stdio.h> #in...