找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9134|回复: 0
打印 上一主题 下一主题
收起左侧

C语言编写万年历程序源代码

[复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-16 05:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. #include<stdio.h>
  2. #include <time.h>
  3. #include<stdlib.h>
  4. #include"string.h"
  5. #include"math.h"
  6. char S[1000]={" "};//记事本存放
  7. /**********************************************************************************
  8. *                            函数声明
  9. ***********************************************************************************/
  10. int Leap_year(int year);
  11. int Month_Day(int year,int month);
  12. int Year_Day(int year,int month,int day);
  13. int Week_Day1(int year,int month,int day);
  14. char *Week_Day2(int number);
  15. void Menu1(int year,int month,int day);
  16. void Menu2(int year,int month);
  17. int Menu3(int year,int month,int day);
  18. void Month_Display(int year,int month);
  19. void Lunar_Calendar(int year ,int month,int day);
  20. char *Festival(int month,int day);
  21. //char  *Solar_terms(char Month,char Day);
  22. void Day_Display(int year,int month,int day);
  23. void Shutdown(void );
  24. void RTC(void);
  25. void Rubbish(void);
  26. /*******************************************************************************
  27. *   函数名:闰年判断
  28. *   入口参数:year
  29. *   返回参数:闰年返回1 否则返回0
  30. ********************************************************************************/
  31. int Leap_year(int year)/*定义变量*/
  32. {
  33. if(year%4==0&&year%100!=0||year%400==0) /*利用函数判断输入年份是闰年还是平年*/
  34. return 1;
  35. else
  36. return 0;
  37. }
  38. /**********************************************************************************
  39. *  函数名:月份天数确定
  40. *  入口参数:year,month
  41. *  返回参数:今年该月的天数
  42. *  调用函数:int Leap_year(int year)
  43. **********************************************************************************/
  44. int Month_Day(int year,int month)
  45. {
  46. int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*定义数组确定12个月每个月的天数*/
  47. if(Leap_year(year)) /*如果输入年份是闰年*/
  48. a[1]=29;/*二月29天*/
  49. return a[month-1];
  50. }
  51. /*************************************************************************************
  52. *  函数名:天数查询->查询该天是今年的第几天
  53. *  入口参数:year,month,day
  54. *  返回参数:该天是今年的第几天
  55. *  调用函数:day1(int year,int month)
  56. **************************************************************************************/
  57. int Year_Day(int year,int month,int day)
  58. {
  59. int i,sum=0;
  60. for(i=1;i<month;i++)
  61. {
  62. sum+=Month_Day(year,i);
  63. }
  64. sum+=day;
  65. return sum;
  66. }
  67. /****************************************************************************************
  68. *   函数名:天数查询->查询该天是本周的第几天
  69. *   入口参数:year,month,day
  70. *   返回参数:返回该天是本周的第几天
  71. *   调用函数:day2(int year,int month,int day)
  72. ****************************************************************************************/
  73. int Week_Day1(int year,int month,int day)
  74. {
  75. int number=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;//基姆拉尔森计算公式
  76. //number%=7;
  77. return number+1;
  78. }
  79. /***********************************************************************************
  80. *  函数名:星期查询
  81. *  入口参数:number
  82. *  返回参数:星期
  83. **********************************************************************************/
  84. char *Week_Day2(int number)
  85. {
  86. switch(number)/*分类一周七天*/
  87. {
  88. case 0:
  89. return "星期日";
  90. case 1:
  91. return "星期一";
  92. case 2:
  93. return "星期二";
  94. case 3:
  95. return "星期三";
  96. case 4:
  97. return "星期四";
  98. case 5:
  99. return "星期五";
  100. case 6:
  101. return "星期六";
  102. default:
  103. return "错误!请您重新输入。";/*不符和上面七种情况的报错提示*/
  104. }
  105. }
  106. /*****************************************************************************
  107. *   函数名:菜单1年历查询->输出年,月,日,星期,节日,农历
  108. *   入口参数:year month day
  109. *   调用函数:int week1(int year,int month,int day)
  110. *             int runnian(int year)
  111. *     char *Week2(int number)
  112. *****************************************************************************/
  113. void Menu1(int year,int month,int day)
  114. {
  115. int number=Week_Day1(year,month,day);
  116. if(Leap_year(year))printf("闰年");/*年份为闰年则输出“闰年“*/
  117. else printf("平年");
  118. printf(" %d 年  %d 月 %d 日%10s %s",year,month,day,Week_Day2(number), Festival(month,day));/*按年 月 日输出结果*/
  119. Lunar_Calendar( year , month,day);//输出当前日期的农历
  120. }
  121. /*******************************************************************************************
  122. *   函数名:菜单2月历查询->生成日历格式
  123. *   入口参数:year,month
  124. *   调用函数:int day1(int year,int month)
  125. *             int week1(int year,int month,int day)
  126. *******************************************************************************************/
  127. void Menu2(int year,int month)
  128. {
  129. int max,number,i,j=1;
  130. max=Month_Day(year,month);//计算该月总天数
  131. number=Week_Day1(year,month,1);
  132. printf("%2s%2s%2s%2s%2s%2s%2s\n","  星期日 ","  星期一 ","  星期二","  星期三 "," 星期四 ","  星期五 "," 星期六 ");/*按照间隔打印日历*/
  133. for(i=0;i<number;i++)
  134. {
  135. printf("        ");
  136. }
  137. while(j<=max)//该月的天数
  138. {
  139. printf("%8d",j);
  140.   if(i%7==6)
  141.   {
  142.    printf("\n");
  143.   }
  144. i++;
  145. j++;
  146. }
  147. printf("\n\n");
  148. }
  149. /*****************************************************************************
  150. *  函数名:菜单3日历查询->输入参数检查
  151. *  入口参数:year,month,day
  152. *  返回参数 当输入无效时返回0 否则返回1
  153. *****************************************************************************/
  154. int Menu3(int year,int month,int day)
  155. {
  156. if(year<0||month<1||month>12||day<1||day>Month_Day(year,month))/*当输入值出现这些情况时*/
  157. return 0;/*返回0*/
  158. else
  159. return 1;/*返回1*/
  160. }
  161. /*********************************************************************************
  162. *  函数名:年历查询
  163. *  入口参数:year
  164. *  调用函数:int Leap_year(int year)
  165. *********************************************************************************/
  166. void Year(int year)
  167. {
  168. int i;
  169. printf("\n");
  170. for(i=1;i<=12;i++)
  171. {
  172.   Month_Display(year,i);
  173. }
  174. }
  175. /*************************************************************************************
  176. *  函数名:月历查询
  177. *  入口参数:year,month
  178. *  调用函数:int Leap_year(int year)
  179. *           void x2(int year,int month)
  180. *  输出:年月并输出日历格式
  181. *************************************************************************************/
  182. void Month_Display(int year,int month)
  183. {
  184. if(Leap_year(year))
  185. printf("闰年");
  186. else printf("平年");
  187. printf(" %d 年 %d 月\n\n",year,month);
  188. Menu2(year,month);
  189. }
  190. /*********************************************************************************************
  191. *   函数名:节日查询
  192. *   入口参数:month,day
  193. *********************************************************************************************/
  194. char *Festival(int month,int day)
  195. {
  196.   switch(month)
  197.   {
  198.   case 1: if(day==1)
  199.     {  return "元旦";break;}
  200.    else
  201.       return "";
  202.   case 2: if(day==14)
  203.     {  return "情人节";break;}
  204.    else
  205.           return "";
  206.   case 3:
  207.    {
  208.     switch(day)
  209.     { case 5:  return "学雷锋日";break;
  210.       case 8: return "妇女节";break;
  211.       case 12: return "植树节";break;
  212.       case 15:return "消费者权益日"; break;
  213.       default:
  214.             return "";
  215.     }
  216.     break;
  217.    }
  218.   case 4:
  219.    {
  220.          switch(day)
  221.    {
  222.     case 1: return "愚人节";break;      
  223.     default:
  224.           return "";
  225.    }
  226.          break;
  227.    }
  228.   case 5:
  229.    {
  230.         switch(day)
  231.   {
  232.   case 1:return "劳动节";break;
  233.   case 4:return "青年节";break;
  234.    default:
  235.           return "";
  236.   }
  237.   break;
  238.    }
  239.   case 6:
  240.    {
  241.       switch(day)
  242.    {
  243.    case 1: return "儿童节";break;
  244.    default:
  245.       return "";
  246.    }
  247.    break;
  248.    }
  249.   case 7:
  250.    {
  251.          switch(day)
  252.    {
  253.    case 1:return "建党节";break;
  254.       default:
  255.          return "";
  256.    }
  257.    break;
  258.    }
  259.   case 8:
  260.    {
  261.        switch(1)
  262.     {
  263.     case 1: return "建军节";break;
  264.     default:
  265.        return "";
  266.     }
  267.     break;
  268.    }
  269.   case 9:
  270.    {
  271.     switch(day)
  272.     {
  273.     case 10:return "教师节";break;
  274.     case 18:return "九一八纪念日";break;
  275.     default:
  276.           return "";
  277.     }
  278.    }
  279.   case 10:
  280.   
  281.         switch(day)
  282.   {
  283.   case 1: return "国庆节";break;
  284.      default:
  285.         return "";
  286.   }
  287.   break;
  288.   
  289.   case 11:
  290.   
  291.        switch(day)
  292.     {
  293.        case 1: return "万圣节";break;
  294.     case 11: return "光棍节";break;
  295.        default:
  296.        return "";
  297.     }
  298.     break;
  299.   
  300.   case 12:
  301.   
  302.       switch(day)
  303.    {
  304.    case 24: return "平安夜";break;
  305.    case 25: return "圣诞节";break;
  306.     default:
  307.           return "";
  308.    }
  309.    break;
  310. default:
  311. return "错误!请您重新输入。";
  312.   }
  313. }
  314. /*************************************************************************************
  315. *   函数名:农历查询
  316. *   入口参数:year,month,day
  317. *   调用函数:
  318. *************************************************************************************/
  319. void Lunar_Calendar(int year ,int month,int day)
  320. {
  321. /*天干名称*/
  322. const char *cTianGan[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
  323. /*地支名称*/
  324. const char *cDiZhi[] = {"子","丑","寅","卯","辰","巳","午",
  325. "未","申","酉","戌","亥"};
  326. /*属相名称*/
  327. const char *cShuXiang[] = {"鼠","牛","虎","兔","龙","蛇",
  328. "马","羊","猴","鸡","狗","猪"};
  329. /*农历日期名*/
  330. const char *cDayName[] = {"*","初一","初二","初三","初四","初五",
  331. "初六","初七","初八","初九","初十",
  332. "十一","十二","十三","十四","十五",
  333. "十六","十七","十八","十九","二十",
  334. "廿一","廿二","廿三","廿四","廿五",
  335. "廿六","廿七","廿八","廿九","三十"};
  336. /*农历月份名*/
  337. const char *cMonName[] = {"*","正","二","三","四","五","六",
  338. "七","八","九","十","十一","腊"};
  339. /*公历每月前面的天数*/
  340. const int wMonthAd[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
  341. /***************************************************************
  342. *农历数据计算方式:用十进制保存
  343. *例如:1、农历每个月的大小;2、今年是否有闰月,闰几月以及闰月的大小。
  344. 用一个整数来保存这些信息就足够了。具体的方法是:用一位来表示一个月的大
  345. 小,大月记为1,小月记为0,这样就用掉12位(无闰月)或13位(有闰月),再
  346. 用高4位来表示闰月的月份,没有闰月记为0。比如说,2000年的信息数据是是0xC96
  347. 化为十进制就是3222,化成二进制就是110010010110B,表示的含义是指1、2、5、8、10、11月大,其余月小;
  348. 数字和4095的关系好像是 如果小于会扣掉一个月(应该就是这一年没有闰月)这里注意一下4095的12位全是1
  349. 数字和65536的关系好像是 LunarData[m]/65536+1保存闰月是几月(好像闰月数量挺多啊)
  350. ****************************************************************/
  351. /*农历数据*/
  352. const int wNongliData[100] =
  353. {2635,333387,1701,1748,267701,694,2391,133423,1175,396438
  354. ,3402,3749,331177,1453,694,201326,2350,465197,3221,3402
  355. ,400202,2901,1386,267611,605,2349,137515,2709,464533,1738
  356. ,2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
  357. ,2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
  358. ,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
  359. ,1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
  360. ,1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
  361. ,268949,3402,3493,133973,1386,464219,605,2349,334123,2709
  362. ,2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};

  363. static int wCurYear,wCurMonth,wCurDay;
  364. static int nTheDate,nIsEnd,m,k,n,i,nBit;
  365. char szNongli[30], szNongliDay[10],szShuXiang[10];
  366. /*—取当前公历年、月、日—*/
  367. wCurYear = year;
  368. wCurMonth = month;
  369. wCurDay = day;
  370. /*—计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)—*/
  371. /*1921年 鸡年 辛酉年*/
  372. nTheDate = (wCurYear-1921) * 365 + (wCurYear-1921) / 4 + wCurDay + wMonthAd[wCurMonth-1]-38;
  373. if((!(wCurYear % 4)) && (wCurMonth > 2)) //如今年阳历是闰年(2月有29天),而且当前月份大于2月,经历的总天数加1
  374. nTheDate = nTheDate + 1;
  375. /*–计算农历天干、地支、月、日—*/
  376. nIsEnd = 0;
  377. m = 0;
  378. while(nIsEnd != 1)
  379. {
  380.       if(wNongliData[m] < 4095) //4095:111111111111 判断是否有闰月  小于则没有闰月 扣掉一个月
  381.        k = 11;
  382.        else
  383.              k = 12;
  384.              n = k;
  385.      while(n>=0)
  386.   {
  387.         //获取wNongliData(m)的第n个二进制位的值
  388.          nBit = wNongliData[m];
  389.            for(i=1;i<n+1;i++) //大小月确定
  390.            nBit = nBit/2;
  391.            nBit = nBit % 2; //取出农历数据前12位的二进制数据
  392.           if (nTheDate <= (29 + nBit))//若为1则是大月 天数有30天
  393.     {
  394.             nIsEnd = 1; //大月
  395.             break;
  396.     }
  397.            nTheDate = nTheDate-29-nBit;//天数
  398.            n = n-1;
  399.   }
  400.      if(nIsEnd)
  401.        break;
  402.       m = m + 1;
  403. }   
  404. wCurYear =1921 + m;
  405. wCurMonth =k-n + 1; //农历月份
  406. wCurDay = nTheDate; //农历天数
  407. if (k == 12) //存在闰月
  408. {
  409.        if (wCurMonth == wNongliData[m] / 65536 + 1)//保存闰月是几月
  410.        wCurMonth =1-wCurMonth;
  411.        else if (wCurMonth > wNongliData[m] / 65536 + 1)
  412.        wCurMonth = wCurMonth-1;
  413. }
  414. /*–生成农历天干、地支、属相 ==> wNongli–*/
  415. /************************************************************************
  416. * 计算公式: 天干:(农历年份-3)Mod 10
  417. * 地支:(农历年份-3)Mod 12
  418. * 生肖:(Year-3) Mod 12
  419. ************************************************************************/
  420. printf(" %s年 ",cShuXiang[(wCurYear - 4) % 12]);//属相
  421. printf("%s",cTianGan[(wCurYear - 4)  % 10]);//天干
  422. printf("%s年 ",cDiZhi[(wCurYear - 4) % 12]);//地支
  423. /*–生成农历月、日 ==> wNongliDay–*/
  424. if (wCurMonth < 1) //闰月
  425. {
  426. printf("闰");
  427. printf("%s",cMonName[-1 * wCurMonth]);//农历月份确定
  428. printf("月");
  429. printf("%s",cDayName[wCurDay]);//农历日期确定
  430. printf(" %s\n",Week_Day2(Week_Day1(year,month,day)));//星期的确定
  431. }
  432. else
  433. {
  434. printf("%s",cMonName[wCurMonth]);
  435. printf("月 ");
  436. printf("%s",cDayName[wCurDay]);
  437. printf(" %s\n",Week_Day2(Week_Day1(year,month,day)));
  438. }
  439. }
  440. /**********************************************************************
  441. *   函数名:日历显示
  442. *   入口参数:year,month,day
  443. *   调用函数:void Menu1(int year,int month,int day)
  444. **********************************************************************/
  445. void Day_Display(int year,int month,int day)
  446. {
  447. printf("\n");
  448. Menu1(year,month,day);
  449. }
  450. /***************************************************************************************
  451. *  函数名:获取当前系统时间
  452. *  调用函数:localtime();
  453. *  输出:当前系统时间,星期,农历,假日
  454. ***************************************************************************************/
  455. void RTC()
  456. {
  457. int Year,Month,Day,hour,min,sec,F;
  458. struct tm * tmptr;
  459. time_t secnow;
  460. time(&secnow);
  461. tmptr = localtime(&secnow);
  462. Year=tmptr->tm_year+1900;
  463. Month=tmptr->tm_mon+1;
  464. Day=tmptr->tm_mday;
  465. F=tmptr->tm_wday;
  466. hour = tmptr->tm_hour;
  467. min = tmptr->tm_min;
  468. printf("         当前时间:%d年%d月%d日 %02d:%02d  ",Year,Month,Day,hour,min);
  469. // printf("  %s", Week_Day2(F));
  470. Lunar_Calendar(Year,Month,Day);
  471. printf(" %s", Festival(Month,Day));
  472. }
  473. /****************************************************************************************************
  474. *    函数名:定时关机/重启工具
  475. *    作者:祝浩
  476. *****************************************************************************************************/
  477. void Shutdown(void )
  478. {
  479. int num,num_end;
  480.       int seconds, minutes;
  481.       char string_seconds[5];
  482.       char close[] = "shutdown -s -t 0";      //关机
  483.       char result[] = "shutdown -r -t 0";//重启
  484.       printf("请输入命令 1:关机 2:重启 3:取消计划 4:退出\n");
  485.      scanf("%d",&num);
  486.   while( num !=1 && num !=2&& num!=3 && num!=4 )           
  487.       {
  488.             printf("输入序号错误,请重新输入:");
  489.             scanf("%d",&num);
  490.       }
  491. if ( num == 1 )//定时关机
  492.       {
  493.             printf("\n请输入关机时间(0~600分):");
  494.            
  495.             scanf("%d",&minutes);
  496.             printf("\n");
  497.            
  498.             while ( minutes < 0 || minutes > 600 )
  499.             {
  500.                   printf("输入时间错误,请重新输入:");
  501.                   scanf("%d",&minutes);
  502.                   printf("\n");
  503.                  
  504.             }
  505.            
  506.             seconds = minutes * 60;             //将输入的分钟转化为秒
  507.             itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
  508.             system(strcat(close,string_seconds));//stract函数拼接字符串
  509.            
  510.             printf("执行成功! %d分钟后,电脑将自动关闭...\n\n",minutes);
  511.             printf("请及时保存相关的操作!关机计时中...\n\n");
  512.       }
  513. else  if( num == 2 )//定时重启
  514.       {
  515.             printf("请输入重启时间(0~600分):");
  516.            
  517.             scanf("%d",&minutes);
  518.             printf("\n");
  519.            
  520.             while ( minutes < 0 || minutes > 600 )
  521.             {
  522.                   printf("输入时间错误,请重新输入:");
  523.                   scanf("%d",&minutes);
  524.                   printf("\n");
  525.                  
  526.             }
  527.             seconds = minutes * 60;             //将输入的分钟转化为秒
  528.             itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
  529.             system(strcat(result,string_seconds));//stract函数拼接字符串
  530.            
  531.             printf("执行成功! %d分钟后,电脑将自动重启...\n\n",minutes);
  532.             printf("请及时保存相关的操作!重启计时中...\n\n");
  533.            
  534.       }
  535.   else if(num==3)
  536.   {
  537.    system("shutdown /a");//取消关机/重启计划
  538. printf("取消成功,欢迎下次使用!\n");
  539.   }
  540.   else if(num==4)
  541.   {
  542.    exit(0);
  543.   }
  544. }
  545. /****************************************************************************************************
  546. *   函数名:系统垃圾清理工具
  547. *   调用函数:windows系统函数
  548. ****************************************************************************************************/
  549. void Rubbish()
  550. {
  551. printf(" 正在清除系统垃圾文件,请稍等...... \n");
  552. system("del /f /s /q %systemdrive%\\*.tmp");
  553. system("del /f /s /q %systemdrive%\\*._mp");
  554. system("del /f /s /q %systemdrive%\\*.log");
  555. system("del /f /s /q %systemdrive%\\*.gid");
  556. system("del /f /s /q %systemdrive%\\*.chk");
  557. system("del /f /s /q %systemdrive%\\*.old");
  558. system("del /f /s /q %windir%\\*.bak");
  559. system("del /f /s /q %windir%\\prefetch\\*.*");
  560. system("rd /s /q %windir%\\temp");
  561. system("md %windir%\\temp");
  562. system("del /f /s /q \"%appdata%\\Microsoft\\Windows\\cookies\\*.*\"");
  563. system("del /f /s /q \"%userprofile%\\Local Settings\\Temporary Internet Files\\*.*\"");
  564. system("del /f /s /q \"%userprofile%\\Local Settings\\Temp\\*.*\"");
  565. system("rd /s /q \"%userprofile%\\Local Settings\\Temp\"");
  566. system("md \"%userprofile%\\Local Settings\\Temp\"");
  567. system("del /f /s /q \"%appdata%\\Microsoft\\Windows\\Recent\\*.*\"");
  568. system("pause");
  569. printf("系统垃圾清理完成!欢迎下次使用\n");
  570. }
  571. /**********************************************************************************************
  572. *    函数名:主函数
  573. *    时间:2012/12/17
  574. *    作者:祝浩
  575. **********************************************************************************************/
  576. void main()
  577. {
  578. int year,month,day,a,b,i;
  579. int Event,Event1,Event2;
  580. char name[20];
  581. FILE *fp;
  582. printf("                         *                            *                   \n");
  583. printf("                        * *                          * *                 \n");
  584. printf("                       *   *                        *   *                \n");
  585. printf("                      *     *                      *     *         \n\n\n\n");


  586. printf("                                    *     *                               \n");
  587. printf("                                     *   *                                \n");
  588. printf("                                      * *                                \n");
  589. printf("                                       *                                  \n");
  590. printf("             **********************************************************\n");
  591. printf("                             *           *             *                   \n");
  592. printf("                             * 欢迎进入万年历查询系统  *                 \n");
  593. printf("                             *           *             *                  \n");
  594. printf("             **********************************************************\n\n");
  595. while(1)
  596. {
  597. RTC();
  598. printf("\n\n请按任意键进入查询系统...........");
  599. getch();
  600. printf("\n\n");
  601. printf("          1 年历 2 月历 3 日历 4 农历查询                \n");
  602. printf("          5 记事本 6:定时关机工具 7:系统垃圾清理 8:退出 \n");
  603. printf("               请输入您的选择<1~8>,按回车键确定: ");
  604. scanf("%d",&b);
  605. /****************************************************************************************************************
  606. *                                        菜单选项
  607. ****************************************************************************************************************/
  608. switch(b)
  609. {
  610. case 1:/*选择1时*/
  611.              printf("\n请输入您要查的年份: ");/*给出输入提示*/
  612.               scanf("%d",&year);/*输入查询的年份*/   
  613.               a=Menu3(year,1,1);//输入参数检查
  614.               if(a==0)
  615.      {
  616.                 printf("错误!请您重新输入。\n");/*输入值异常时报错*/
  617.                 break;
  618.      }
  619.      Year( year);
  620.      /*for(i=1;i<=12;i++)
  621.      {
  622.               Month_Display(year,i);
  623.      }*/
  624.                 break;
  625. case 2:/*选择二时*/
  626.               printf("\n请输入您要查的年和月,年月之间用空格隔开: ");/*给出输入提示*/
  627.               scanf("%d%d",&year,&month);/*输入需要查询的年 月*/
  628.               a=Menu3(year,month,1);
  629.              if(a==0)
  630.     {
  631.               printf("错误!请您重新输入。\n");
  632.               break;
  633.     }
  634.               Month_Display(year,month);
  635.              break;
  636. case 3:/*选择3时*/
  637.              printf("\n请输入您要查的年月日,年月日之间用空格隔开: ");/*给出输入提示*/
  638.                 scanf("%d%d%d",&year,&month,&day);/*输入年 月 日*/
  639.                 a=Menu3(year,month,day);
  640.                if(a==0)
  641.       {
  642.                 printf("错误!请您重新输入!\n");/*输入值异常时报错*/
  643.                 break;
  644.       }
  645.                Day_Display(year,month,day);
  646.                break;
  647. case 4:   /*选择4时*/
  648.        printf("请输入您需要查询的日期,年月日中间用空格隔开");
  649.          scanf("%d%d%d",&year,&month,&day);
  650.    if(month>12||day>31)
  651.    {
  652.              printf("错误!请您重新输入\n");
  653.              break;
  654.    }
  655.             Lunar_Calendar(year,month,day);
  656.    break;
  657. case 5:  /*选择5时*/
  658.      while(1)
  659. {
  660.        printf("欢迎使用记事本,请输入日期,年月日中间用空格隔开\n");
  661.     scanf("%d%d%d",&year,&month,&day);
  662. //if(month<12&&day<31)
  663. // {
  664.             sprintf(name,"%d%d%d",year,month,day);
  665.    strcat(name,".txt");//文件已存放时间命名
  666.       if((fp=fopen(name,"rt"))==NULL||sizeof(S)==0)
  667.    {
  668.             printf("not !");
  669.       printf("是否需要添加记事?0:否 1:是\n");
  670.                scanf("%d",&Event1);
  671.          if(Event1==1)
  672.       {
  673.                  printf("请输入事件\n");
  674.            scanf("%s",&S);//将输入的记事存放的临时变量中
  675.                  if((fp=fopen(name,"w"))==NULL)
  676.      {
  677.                printf("not !");
  678.      }
  679.                 fputs(S,fp);//将临时变量写入到文本中存放
  680.                 fclose(fp);//保存并关闭文本
  681.           printf("添加成功");
  682.           printf("是否退出记事本功能?  0:否 1:是\n");
  683.           scanf("%d",&Event2);
  684.            if(Event2==1)
  685.      {
  686.      printf("退出记事本\n");
  687.      exit(0);
  688.      }
  689.       }
  690.       else if(Event1==0){printf("退出系统\n"); exit(0);}
  691.       else printf("输入错误\n");
  692.    }
  693.    
  694.     /*******************************有记事,是否删除************************************/
  695.     else
  696.     {
  697.      if((fp=fopen(name,"r"))==NULL)
  698.      { printf("not !");}   
  699.         fputs(fp,name);//读文件
  700.               fgets(S,1000,fp);//将从文件中读到的信息放到字符串临时变量S中
  701.               fclose(fp);//关闭文件
  702.               printf("%d-%d-%d:%s\n",year,month,day,S);
  703.      if(sizeof(S)!=0)
  704.      {
  705.               printf("有记事,是否需要删除?0:否(退出记事本),1:是");
  706.         scanf("%d",&Event);
  707.          if(Event==1)
  708.       {  
  709.       memset(S, 0, sizeof(S));
  710.        if((fp=fopen(name,"w"))==NULL)
  711.        { printf("not !");}   
  712.                    fputs(S,fp);//将输入事件写入文本  
  713.        fclose(fp);
  714.        if(remove)
  715.        {
  716.        //printf("删除失败!退出记事本\n");
  717.        }
  718.     else
  719.      //printf("删除成功!退出记事本");
  720.         exit(0);
  721.       }
  722.       else
  723.       {
  724.        printf("退出记事本\n");
  725.           exit(0);
  726.       }
  727.      }
  728.     }  
  729. }
  730. case 6: Shutdown();break;
  731. case 7:Rubbish();break;
  732. case 8: exit(0);break;//退出         
  733. default:
  734.         printf("错误!请您重新输入!\n\n");
  735. }
  736. }
  737. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表