C语言中怎么实现万年历效果
创始人
2024-12-24 03:05:03
0次

具体内容如下

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...