已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。假定输入的年份在1-9999年之间。2、输入年月,输出该月的月历。3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。即:当前若正在显示2011年的年历,按下键盘“”方向键后,年历变为2010年的。二、使用的所有变量的说明变量说明:(以下均为整型变量)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#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/ int year,month,day,select; while(1) getmenu(); printf( 请输入相应数字:); /*菜单选择 */ scanf(%d,&select); system(cls); switch(select) case 1: /*当选择为1时显示年历*/ printf( 年历显示:输入年(如2011):); scanf(%d,&year); if(year0&year0&year=1&month0&year=1&month=1&day=maxDay(year,month) display3(year,month,day); printf( 提示 按PageUp:前一天 按PageDown:后一天 按其他键:返回菜单nn); setDay3( year,month, day); else system(cls); printf( 输入无效,重新输入!n); break; case 4: exit(0); default: /*当输入其他数字时,输入无效,重新输入*/ system(cls); printf( 输入无效,重新输入!n); int isleap(int year) /*判断是否为闰年*/ if(year%4=0&year%100!=0|year%400=0) return 1; else return 0; int maxDay(int year,int month) /*每月的天数*/ int a=31,28,31,30,31,30,31,31,30,31,30,31; /*每个月中的天数*/ if(isleap( year) a1=29; /*闰年2月份有29天*/ return amonth-1; int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ int i,sum=0; for(i=1;imonth;i+) sum+=maxDay(year,i); sum+=day; return sum; int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400 +eachyeartotal(year,month,day); number=number%7 ; return number;void display(int year ,int month) /*输出年月*/ int max,number,i,j=1; max=maxDay(year,month); number=week(year,month,1); printf( %4s %4s %4s %4s %4s %4s %4sn,Sun,Mon,Tue,Wed, Thu,Fri,sat); for(i=0;inumber;i+) printf( ); /*1号前的星期补空格*/ while(j=max) printf(%6d,j); if (i%7=6) printf(n); /* 每7格换一行*/ i+; j+; printf(nn);void display1(int year) /*输出年历*/ int i; printf(n); for(i=1;itm_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) /*判断是星期几*/ 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月%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; default: 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) switch(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(,这天是国庆节); void setDay1(int year,int month,int day) /*通过键盘“”“”控制年历的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMUp: /*“”年份减小*/ if(year2) system(cls); printf( 警告!超出范围!n); break; year-; display1(year); setDay1(year,month,day); break; case KEYNUMDown: /*“”年份变大*/ year+; display1(year); setDay1(year,month,day); break; default: system(cls); void setDay2(int year,int month,int day) /*通过键盘“”“”控制月历的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMLeft: /*“”月份变小*/ if(month2) month+=12; year-; if(year11) month-=12; year+; if(year9999); month+; display2(year , month); setDay2(year,month,day); break; default: system(cls); ; void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day2) month-; day=maxDay(year,month); if(month1) month+=12; year-; if(yearmaxDay(year,month) day=1; month+; if(month12) month-=12; year+; if(year10000); display3(year , month,day); setDay3(year,month,day); break; default: system(cls); ; void getmenu() /* 显示菜单选择*/ printf( *主菜单*nn); printf( * 欢迎进入万年历系统 *nn); printf( * 1、年历显示 *nn); printf( * 2、月历查询 *nn); printf( * 3、日期查询 *nn); printf( * 4、退出系统 *nn); printf( *nn);四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示 (2)输入年份2011,显示2011年的年历如下 (3)按键盘显示上一年(2010年)的年历,显示如下(4)按键盘显示上一年(2012年)的年历,显示如下 2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下 (2)按键盘显示上一个月(5月)的月历,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙科版高中信息技术必修22026年《传感与控制》第二课时教学设计
- 小学三年级综合实践活动《好电视节目对我们的影响》教学设计
- 高中一年级信息技术3.3计算机程序与程序设计语言教学设计
- 初中九年级英语“五育并举”主题写作教学设计
- 【知识清单】初中地理八年级 东北的自然特征与农业速记
- 高中一年级劳动技术课教学设计-西红柿炒鸡蛋的烹饪实践与劳动素养培育
- 高中一年级信息技术《做信息时代的合格公民》教学设计
- 宝鸡文理课程设计招聘
- 2026年代销业务资格考试试卷及答案
- 2026年cmac资格考试试卷及答案
- CJT 297-2016 桥梁缆索用高密度聚乙烯护套料
- DLT 5175-2021 火力发电厂热工开关量和模拟量控制系统设计规程-PDF解密
- 讲述红色故事
- 智能制造概论(高职)全套教学课件
- 潍柴雷沃线上测评题
- 《地理信息系统概论》教案
- 郑州财税金融职业学院招聘真题
- 急性胃炎临床路径(2017年县医院适用版)
- 抑郁病诊断证明书
- 水生生物学绪论HJJ
- 维克多高中英语3500词汇
评论
0/150
提交评论