万年历代码 C语言实现万年历(完整源码)
万年历的C语言实现
各位~
最近看到之前写的代码——万年历
拿出来修改一下,分享给大家
有兴趣可以试试
这是程序运行图,一个完整的日历,可以显示实时的日期、月份和年份,日期定位到今天用方括号,用箭头键查看任意年份和月份的日历。
使用的知识点有:1。数组;2.头文件中系统时间的操作;3.键盘信息与计算机的交互。强调一点:这么小的项目级程序,整个项目框架的构建很重要,就是整个逻辑思维很重要,切记!!!
为了方便大家学习,我给出了整个源代码。这一次不用问有没有源代码。都在下面,在代码的关键点给出了注释。希望你能用慢慢学到的东西培养自己做项目的意识。无论大小,我保证,只有你自己真的做到了,你才能感受到那种成就感。
"
源代码的完整版本:
#include <。stdio.h>。
#include <。conio.h>。
#include <。windows.h>。
#包含“time.h”
int键;
整数年、月;
Intmon [2] [13] = {{0,31,28,31,30,31,31,30,31,30,31,31,31},/*定义每月的天数*/
{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
time _ t lt
Int showtime() /*显示系统时间*/
{
lt =时间(NULL);
Printf("周/月/日时间年n ");
printf(" %s ",ctime(& lt;));/*以字符串形式输出系统时间*/
}
Int nowyear() /*系统年份*/
{
struct tm * local
lt =时间(NULL);
local = local time(& lt;);
返回本地->;TM _ year+1900;/*系统年份从1900年到0年计算*/
}
Int nowmonth() /*系统月*/
{
struct tm * local
lt =时间(NULL);
local = local time(& lt;);
返回本地->;TM _ mon+1;
}
Int nowday() /*系统是哪天*/
{
struct tm * local
lt =时间(NULL);
local = local time(& lt;);
返回本地->;tm _ mday
}
Int getkey1(int year,int key) /*检测键盘的上下箭头键*/
{
如果(72 ==键)/*向上箭头键代码是72*/
{
year++;
}
否则,如果(80 ==键)/*向下键代码是80*/
{
年份-;
}
返回年份;
}
Int getkey2(int month,int key) /*检测键盘的左右方向键*/
{
If (77 == key) /*右向键码是77*/
{
month++;
}
否则,如果(75 ==键)/*左方向键代码是75*/
{
月-;
}
返回月份;
}
Int isleap(int year) /*判断是不是闰年*/
{/*被4整除但不能被100整除的闰年*/
int leap/*除以400是闰年*/
leap =((year % 4 = = 0)amp;& amp(年% 100!= 0)| |(year % 400 = = 0));
返回跳跃;
}
Int是星期(int year,int month,int day)/*确定星期几*/
{
int i,j,week
int all day = 0;
for(I = 0;i <。年份;i++)
{
If (1 = = islap (I))/*闰年有366天*/
{
all day = all day+366;
}
其他
{
all day = all day+365;/*非闰年有365天*/
}
}
for(j = 1;j <。月份;j++)
{
all day = all day+mon[is leap(year)][j];
}
all day = all day+day;
week =(all day-1)% 7;/*计算一周中的某一天,周日到周六为0到6*/
返回周;
}
Int showdata() /*显示系统月份的日历*/
{
int i,z;
int j = 0;
printf(" n ");
Printf(" %d year %d month n ",nowyear(),now month());
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);
《Fri周六周日》;
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);
z = isweek(nowyear(),nowmonth(),1);
for(I = 0;i <。z;i++)
{
printf(" ");
}
for(I = 0;i <。mon[is leap(now year())][now month()];i++)
{
if((I = = now day()-1)amp;& amp(i & lt9)) /*今天标记系统时间[] */
{
printf(" [%d]",I+1);
}
else if (i == nowday() - 1)
{
printf(" [%2d]",I+1);
}
else if (i == nowday())
{
printf("%5d ",I+1);
}
其他
{
printf("%6d ",I+1);
}
if((0 = =(z+I+1)% 7)amp;& amp((i + 1)!= mon[is leap(now year())][now month()]))
{/*每7天更换一次线路*/
j++;
printf(" n ");
}
}
If (j == 3) /*将提示保持在同一行*/
{
printf(" nnnn ");
}
if (j == 4)
{
printf(" nnn ");
}
if (j == 5)
{
printf(" nn ");
}
Printf("按方向键进入查询状态");
}
Int checkdata() /*显示要查询的月份日历*/
{
int i,z;
int j = 0;
printf(" nnn ");
Printf(" %d年%d月n ",年,月);
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);
《Fri周六周日》;
printf(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n”);
z = isweek(年、月、1);
for(I = 0;i <。z;i++)
{
printf(" ");
}
for(I = 0;i <。mon[is leap(year)][month];i++)
{
printf("%6d ",I+1);
if((0 = =(z+I+1)% 7)amp;& amp((i + 1)!= mon[isleap(year)][month])
{
j++;
printf(" n ");
}
}
If (j == 3) /*将提示保持在同一行*/
{
printf(" nnnn ");
}
if (j == 4)
{
printf(" nnn ");
}
if (j == 5)
{
printf(" nn ");
}
Printf("按上下箭头键查询年份,按左右箭头键查询月份n ");
Printf("按ESC键返回系统时间");
}
Int reno() /*刷新系统时间和日历*/研究组(594089997)
{
while(!Kbhit()) /*键盘没有输入时循环*/
{
show time();/*显示时间*/
show data();/*显示挂历*/
睡眠(1000);/* 1秒延迟*/
系统(“cls”);/*清除屏幕*/
}
}
Int str() /*检测键盘并显示要查询的月份日历*/
{
year = now year();/*将年和月初始化为系统时间*/
month = now month();
printf(" nn ");
key = 0;/*初始化密钥记录*/
而(27!=键)/*未按下ESC时循环*/
{
year = getkey1(year,key);/*将键值传递给年和月*/
month = getkey2(month,key);
if(月>;12)
{/* 12个月后加一年*/
month = month % 12
year = year+1;
}
if(月& lt1) /*一年前,不到一月*/
{
月=月+12;
year = year-1;
}
系统(“cls”);/*清除屏幕*/
check data();
getch();/*键盘输入*/
key = getch();
}
}
Int main(void) /*主函数*/
{
While (1) /*无限循环*/
{
Reno();
str();
系统(“cls”);
}
返回0;
}
"