C语言课程设计实验报告(万年历)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
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(year>0&&year<10000) /*显示年份从0-10000 */
{
display1(year); /*调用函数*/
printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");
setDay1( year,month, day);
}
else
system("cls");
printf(" 输入无效,重新输入!\n");
break;
case 2: /*当选择为2显示月历*/
printf(" 月历显示:输入年月(如2011,6):");
if(year>0&&year<10000&&month>=1&&month<=12)
{
display2(year,month);
printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");
setDay2( year,month, day);
}
else
system("cls");
printf(" 输入无效,重新输入!\n");
break;
case 3: /*当选择为3时显示日期*/
printf(" 日期显示:输入年月日(比如2011,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);
}
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;