C语言课程设计实验报告(万年历)_第1页
C语言课程设计实验报告(万年历)_第2页
C语言课程设计实验报告(万年历)_第3页
C语言课程设计实验报告(万年历)_第4页
C语言课程设计实验报告(万年历)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历〔包括每月的天数和所对应的星期几〕,并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示标准。假定输入的年份在1-9999年之间。2、输入年月,输出该月的月历。3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。即:当前假设正在显示2023年的年历,按下键盘“←〞方向键后,年历变为2023年的。二、使用的所有变量的说明变量说明:〔以下均为整型变量〕year表示年份的变量month表示月份的变量day表示日期的变量select表示菜单项选择择的变量i表示月份的变量j表示一个月中的某一天的变量sum判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[]表示每月天数的数组变量year1系统时间年份的变量month1系统时间月份的变量day1系统时间日期的变量三、程序清单及其说明#include"time.h"/*包含的头文件*/#include"stdio.h"#include"math.h"#include"windows.h"#include"conio.h"#defineKEYNUMUp0x48/*宏定义*/#defineKEYNUMDown0x50#defineKEYNUMLeft0x4b#defineKEYNUMRight0x4d#defineKEYNUMPageUp0x49#defineKEYNUMPageDown0x51inteachyeartotal(intyear,intmonth,intday);/*函数声明*/intcounterdays(intyear,intmonth,intday);intnowtime(intyear,intmonth,intday);intweek(intyear,intmonth,intday);intmaxDay(intyear,intmonth);intisleap(intyear);voidwhatweek(intyear,intmonth,intday);voiddisplay(intyear,intmonth);voiddisplay2(intyear,intmonth);voiddisplay3(intyear,intmonth,intday);voidsetDay1(intyear,intmonth,intday);voidsetDay2(intyear,intmonth,intday);voidsetDay3(intyear,intmonth,intday);voidjieri(intmonth,intday);voiddisplay1(intyear);voidgetmenu();voidmain()/*主函数*/{intyear,month,day,select;while(1){getmenu();printf("请输入相应数字:");/*菜单项选择择*/scanf("%d",&select);system("cls");switch(select){case1:/*中选择为1时显示年历*/printf("年历显示:输入年〔如2023〕:");scanf("%d",&year);if(year>0&&year<10000)/*显示年份从0-10000*/{ display1(year);/*调用函数*/printf("提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1(year,month,day);}elsesystem("cls");printf("输入无效,重新输入!\n");break;case2:/*中选择为2显示月历*/printf("月历显示:输入年月〔如2023,6〕:");scanf("%d,%d",&year,&month);if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf("提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2(year,month,day);}elsesystem("cls");printf("输入无效,重新输入!\n");break;case3:/*中选择为3时显示日期*/printf("日期显示:输入年月日(比方2023,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month)){display3(year,month,day);printf("提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3(year,month,day);}elsesystem("cls");printf("输入无效,重新输入!\n");break;case4:exit(0);default:/*当输入其他数字时,输入无效,重新输入*/system("cls");printf("输入无效,重新输入!\n");}}}intisleap(intyear)/*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return1;elsereturn0;}intmaxDay(intyear,intmonth)/*每月的天数*/{inta[]={31,28,31,30,31,30,31,31,30,31,30,31};/*每个月中的天数*/if(isleap(year))a[1]=29;/*闰年2月份有29天*/returna[month-1];}inteachyeartotal(intyear,intmonth,intday)/*判断某天是一年中的第几天*/{inti,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;returnsum;}intweek(intyear,intmonth,intday)/*对天数进行判断确定是星期几*/{intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7;returnnumber;}voiddisplay(intyear,intmonth)/*输出年月*/{intmax,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n","Sun","Mon","Tue","Wed","Thu","Fri","sat");for(i=0;i<number;i++)printf("");/*1号前的星期补空格*/while(j<=max){printf("%6d",j);if(i%7==6)printf("\n");/*每7格换一行*/i++;j++;}printf("\n\n");}voiddisplay1(intyear)/*输出年历*/{inti;printf("\n");for(i=1;i<=12;i++){printf("%d年%d月\n\n",year,i);display(year,i);}}voiddisplay2(intyear,intmonth)/*输出月历*/{printf("\n%d年%d月\n",year,month);display(year,month);}voiddisplay3(intyear,intmonth,intday)/*输出日历*/{whatweek(year,month,day);jieri(month,day);counterdays(year,month,day);}intcounterdays(intyear,intmonth,intday)/*判断今天距特定日期的天数*/{intyear1,days0,days1,month1,days,day1;time_ttimep;structtm*p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_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天\n\n",year,month,day,days);returndays;}voidwhatweek(intyear,intmonth,intday)/*判断是星期几*/{intnumber;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7;switch(number){case0:printf("\n%d年%d月%d日是星期日",year,month,day);break;case1:printf("\n%d年%d月%d日是星期一",year,month,day);break;case2:printf("\n%d年%d月%d日是星期二",year,month,day);break;case3:printf("\n%d年%d月%d日是星期三",year,month,day);break;case4:printf("\n%d年%d月%d日是星期四",year,month,day);break;case5:printf("\n%d年%d月%d日是星期五",year,month,day);break;case6:printf("\n%d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf("出现错误!\n");}}voidjieri(intmonth,intday)/*判断是否公历节日*/{if(month==1)switch(day){case1:printf(",这天是元旦");}if(month==2)switch(day){case14:printf(",这天是情人节");}if(month==3)switch(day){case8:printf(",这天是妇女节");break;case12:printf(",这天是植树节");}if(month==4)switch(day){case1:printf(",这天是愚人节");}if(month==5)switch(day){case1:printf(",这天是劳动节");break;case4:printf(",这天是青年节");}if(month==6)switch(day){case1:printf(",这天是儿童节");}if(month==7)switch(day){case1:printf(",这天是建党节");}if(month==8)switch(day){case1:printf(",这天是建军节");}if(month==9)switch(day){case10:printf(",这天是教师节");}if(month==10)switch(day){case1:printf(",这天是国庆节");}}voidsetDay1(intyear,intmonth,intday)/*通过键盘“↑〞“↓〞控制年历的变换*/{chark;getch();k=getch();switch(k) {caseKEYNUMUp:/*“↑〞年份减小*/if(year<2){system("cls");printf("警告!超出范围!\n");break;} year--;display1(year);setDay1(year,month,day);break;caseKEYNUMDown:/*“↓〞年份变大*/year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}voidsetDay2(intyear,intmonth,intday)/*通过键盘“←〞“→〞控制月历的变换*/{chark;getch();k=getch();switch(k){caseKEYNUMLeft:/*“←〞月份变小*/if(month<2){month+=12;year--;}if(year<1){ system("cls");printf("警告!超出范围!\n");break;}month--;display2(year,month);setDay2(year,month,day);break;caseKEYNUMRight:/*“→〞月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year,month);setDay2(year,month,day);break;default: system("cls");;}}voidsetDay3(intyear,intmonth,intday)/*通过键盘“PageUp〞“PageDown〞控制日期的变换*/{chark;getch();k=getch();switch(k){caseKEYNUMPageUp:/*“PageUp〞日期变小*/if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf("警告!超出范围!\n");break;}day--;display3(year,month,day);setDay3(year,month,day);break;caseKEYNUMPageDown: /*“PageDown〞日期变大*/day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year,month,day);setDay3(year,month,day);break;default: system("cls");;}}voidgetmenu()/*显示菜单项选择择*/{printf("************主菜单************\n\n");printf("*欢送进入万年历系统*\n\n");printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论