《C语言程序设计万年历》由会员分享,可在线阅读,更多相关《C语言程序设计万年历(35页珍藏版)》请在人人文库网上搜索。
1、综合性程序设计报告设计题目: 万年历 指导教师: 班 级: 学 号: _ 设 计 者: 成 绩: 设计时间: 6 月 8 日题目描述用于利用计算机实现万年历功能,包括日期对星期的转换,根据指定日期对N天后是什么日期的计算。和显示当前日期,纪念日提醒等功能。主要功能:1. 日期推算2. 日期显示3. 纪念日提醒功能模块分解及说明根据题目要求,可以用结构体实现,这个系统可以分为:年历显示、月历查询、日期查询和日期推算四个部分。其中在日期查询中包括纪念日提醒。(1) 主函数main()主函数利用while(1)循环使得执行完每个部分之后还能回到主菜单,并利用switch函数当输入不同的值。
2、时调用不同的模块。主函数如下:void main() /*主函数*/int year,month,day,select; while(1)dushijian();printf(n);getmenu();printf( 请输入相应数字:); /*菜单选择 */scanf(%d,&select);system(cls);switch(select)case 1: /*当选择为1时显示年历*/printf( 年历显示:输入年(如):);scanf(%d,&year);if(year0&year0&year=1&month0&year=1&month=1&daytm_year) ;month1。
3、=(1+p-tm_mon) ;day1=(p-tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1);days=days0-days1; /*计算出两个日期之间的时间差*/printf(n 今天距%d年%d月。
4、%d日还有%d天nn,year,month,day,days);return days;void whatweek(int year,int month,int day) /*判断是星期几*/ int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;switch( number)case 0:printf( n %d年%d月%d日是星期日,year,month,day);break;case 1:printf( n %d年%d月%。
5、d日是星期一,year,month,day);break;case 2:printf( n %d年%d月%d日是星期二,year,month,day);break;case 3:printf( n %d年%d月%d日是星期三,year,month,day);break;case 4:printf( n %d年%d月%d日是星期四,year,month,day);break;case 5:printf( n %d年%d月%d日是星期五,year,month,day);break;case 6:printf( n %d年%d月%d日是星期六,year,month,day);break;defaul。
6、t:system(cls);printf( 出现错误!n );void jieri(int month,int day) /*判断是否公历节日*/if(month=1)switch(day)case 1:printf(,这天是元旦); if(month=2)switch(day)case 14:printf(,这天是情人节);if(month=3)switch(day)case 8:printf(,这天是妇女节);break;case 12:printf(,这天是植树节);if(month=4)switch(day)case 1:printf(,这天是愚人节); if(month=5)swit。
7、ch(day) case 1:printf(,这天是劳动节);break;case 4:printf(,这天是青年节);if(month=6)switch(day)case 1:printf(,这天是儿童节);if(month=7)switch(day) case 1:printf(,这天是建党节);if(month=8)switch(day) case 1:printf(,这天是建军节);if(month=9)switch(day) case 10:printf(,这天是教师节);if(month=10)switch(day) case 1:printf(,这天是国庆节);(5) 日期推算i。
8、f (info/10000000)0) xyear = info/10000;xmonth = (info - xyear*10000)/100;xday = info - xyear*10000 - xmonth*100;printf(您要查询的是%d年%d月%d日。n,xyear, xmonth, xday);counter = getwDay(xyear,xmonth,xday);printf(%d年%d月%d日是星期,xyear, xmonth, xday);if (counter = 0)counter = 7;printf(%dn, counter);day_differ = Th。
9、e_day(xyear,xmonth,xday);printf(距离今天相差%d天n,day_differ);int The_day(int year,int month,int day) /*判断要查询的日期据今天的时间*/int Year,Month,Day,flag,i,q;long sum=0;struct tm *gmt=getDay();Year = gmt-tm_year+1900; /*系统当前年*/Month = gmt-tm_mon+1; /*系统的当前月份*/Day = gmt-tm_mday; /*系统当前天*/if(year!=Year)if(yearYear)q=y。
10、ear;year=Year;Year=q;q=month;month=Month;Month=month;q=day;day=Day;Day=day;for(i=year;i=1;i-)sum=sum+daysOfMonthflagi-1;sum = sum+Day;else if(year=Year)flag = checkYear(year);if(month!=Month)if(monthMonth)q=month;month=Month;Month=q;q=day;day=Day;Day=day;for(i=month+1;i11)month-=12;year+;if(yearmaxD。
11、ay(year,month)day=1;month+;if(month12)month-=12;year+;if(year0&year0&year=1&month0&year=1&month=1&daytm_year) ;month1=(1+p-tm_mon) ;day1=(p-tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1);days=days0-days1; /*计算出两个日期之间的时间差*/printf(n 今天距%d年%d月%d日还有%d天nn,year,month,day,days);return days;void whatweek(int year,int month,int day) /*判断是星期几。