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

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

(0)

相关推荐

  • C语言实现的一个万年历小程序

    该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历. #include<stdio.h> #define Mon 1 #define Tues 2 #define Wed 3 #define Thur 4 #define Fri 5 #define Sat 6 #define Sun 0 #define January_days 31 #define February_days 28 #define March_days 31 #define April_day

  • C语言实现万年历小程序

    一.杂谈 大一学了C之后一直困惑,C到底怎么用?它不像HTML那么直观,也没有SQL那么常用,更没有Java那么功能强大,那他为何还存在,并依然火热呢? 答案很简单:编程语言是一家,C语言结构简单,但所蕴含的逻辑思维和其他语言大致相同,适合初学者. 编程不是一蹴而就,能力需要日积月累,推荐想我一样的初学者,大家自己动手玩玩简单的C程序! 二.万年历 像这样一个简单的全年日历,仔细观察不难发现由每个月的日历组成,每个月有最多6行,占6周,每周7天: 程序如下: 设定日历大小: int date[1

  • C语言实现万年历源码

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 主函数所在源码 #include <stdio.h> #include <stdlib.h> #include <string.h> int GetWeek(int year,int month,int day);//求今天是周几.周四就返回 4 .周日 返回 0:非法返回 -1: int GetDaysInMonth(int year,int month);/*求指定月总共多少天*/ int C

  • C语言实现万年历程序

    本文实例为大家分享了C语言实现万年历程序,供大家参考,具体内容如下 #include <stdio.h> int year(int y) { if ((y%4==0) && (y%100!=0) || y%400==0) return 366; else return 365; } int main() { int y; int i,j,sum=0; int begin,week; int days[12]={31,28,31,30,31,30,31,31,30,31,30,3

  • C语言实现万年历

    C语言实现的万年历显示,按下上下左右按键来更换日期和年份,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <time.h> #include<conio.h> typedef struct today { int day; int month; int year; } today; int day_cankao[2][13]={ {0,31,28,31,30,31,30,31,31,3

  • 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)

  • C语言实现万年历小功能

    本文实例为大家分享了C语言实现万年历的具体代码,供大家参考,具体内容如下 一.学了C语言,相信大家都可以做出来.我们要实现的就是用户输入年,月,日.然后打印出来. 二.需要用到的知识点 1.for循环.2.if判断.3.函数的调用 如果您们学了图形库的话,可以贴图上去,效果更加好看.我没有素材,所以,直接用C语言来完成. 三.运行结果 四.我们用C语言代码实现 /*******************************************************************

  • C语言实现流星雨效果流程

    目录 一.头文件 二.结构体 三.初始化 四.绘制函数 五.移动函数 六.界面设计 七.主函数 总结 视频讲解 感谢 序 再亮眼的流星,也会一闪而过. 嗨!这里是狐狸~~ 没错,我又来了,上次的"烟花"表白程序你学废了吗,这次我次我又来给大家支招啦,学会了"烟花",我们一起来看"流星雨"吧!!! 直接上界面 上次忘记说了,因为我们是用C语言写的所以是控制台程序,创造不出来界面,那怎么办呢,我们就要用Windows的远房表亲EasyX图形库来建界面

  • Java实现万年历效果

    本文实例为大家分享了Java实现万年历效果的具体代码,供大家参考,具体内容如下 要求: 综合运用GUI编程.事件处理.Calendar类应用等知识设计一款月历,要求能通过输入(或选择)年月的方式正确显示当前月份的所有日期. 一.分析需求: 1.设计一个窗体,该窗体为BorderLayout布局:2.窗体的中心添加一个Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49个标签,用来显示日历:3.实现判断是否是闰年:4.计算某一个月的天数:5.明白一个月

  • 易语言做弹幕效果的方法总结

    下面就是小编带给大家的易语言怎么做弹幕效果方法操作,希望能够给你们带来一定的帮助,谢谢大家的观看. 1.只是没有那些弹幕网站做的那么好,可以用时钟+进度条+动画框+动画物体(标签也可以,只要有文字的都可以)实现,利用判断. 2.比如:进度条1.位置=进度条1.位置+1,如果真(进度条1.位置=10),标签1.左边=标签1.左边-1,具体的可以自己实践思考,我也没做过易语言弹幕,但是这样也是可以实现的. 3.实现的效果大概是这样,每发送一条弹幕,会从容器的右边向左边移动,移动速度在一定范围内随机,

  • 易语言软件满天星效果制作教学

    易语言制作全屏满天星效果,类似于屏保的作用,当然特效还可以做得更好,可以自行深入,其原理是利用画板,在画板上不同的位置画出不同彩色点,模仿满天星的效果! 1.创建一个新的windows窗口程序,并将窗口边框设置为无边框效果 2.在组件栏中增加画板组件,画板背景色设置为黑色 3.在组件栏中增加时钟组件,并设置时钟的时钟周期为1,当然也可以设置为其他值,合适即可! 4.代码部分,设置一个程序集变量数组,用来存放颜色值,这里以11种颜色为例,所以数组设为11:启动窗口下置随机种子,并启动窗口和画板的宽

随机推荐