C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷
更新時(shí)間:2019年10月30日 10:52:48 作者:Roninwz
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)萬(wàn)年歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
C語(yǔ)言實(shí)現(xiàn)的萬(wàn)年歷顯示,按下上下左右按鍵來(lái)更換日期和年份,供大家參考,具體內(nèi)容如下
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<conio.h>
typedef struct today
{
int day;
int month;
int year;
} today;
int day_cankao[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
char *week[]=
{
"Sun","Mon","Tue","Wen","Thu","Fir","Sat"
};
struct tm *todayuse;//struct tm定義c語(yǔ)言中time的結(jié)構(gòu)體
today today_current;
int getweekday(today today_usenow)
{
// w = y + [y/4] + [ c/4 ] – 2c+ [13 * (m+1) / 5] + d – 1
//其中,c是年份的前兩位,y是年份的后兩位,m是月份,d是日期,這里需要注意的是,如果是1月和2月,c和y需要按照上一年來(lái)取值。
int w=0;
int year=today_usenow.year;
int month=today_usenow.month;
if(today_usenow.month==1 || today_usenow.month==2)
{
month+=12;
year--;
}
int y=year%100;
int c=year/100;
int m=month;
w=y + y/4 + c/4 - 2*c+ 26* (m+1) / 10 + today_usenow.day -1;
while(w<0)
{
w+=7;
}
return (w%7);
}
int is_leap(int year)
{
if( (year%4==0 && year%100!=0) || (year%400==0))
{
return 1;
}
else
return 0;
}
int getmonthdays(int year,int month)
{
return day_cankao[is_leap(year)][month];
}
void print_calendar(today today_usenow)
{
printf("---------------------------\n");
printf("Sun Mon Tue Wen Thu Fir Sat\n");
int firstday=0;
today today_usehere=today_usenow;
today_usehere.day=1;
int day=getweekday(today_usehere);//日期前
//int daysuseafter
int days=getmonthdays(today_usenow.year,today_usenow.month);//月總數(shù)
// 0 1 2 3 4 5 6 // 6
int daysbefore=0;
if((today_usenow.month-1)==0)
{
//現(xiàn)在為1月,去年的十二月份
daysbefore=getmonthdays(today_usenow.year-1,12);
// printf("%d is",daysbefore);
}
else
{
daysbefore=getmonthdays(today_usenow.year,today_usenow.month-1);
}
int daysbefoeit=daysbefore-day+1;
printf("");
int count=1;
if(day==0)
{
daysbefoeit-=7;
for(int i=0;i<day+7;i++)
{
printf("%d ", daysbefoeit);
daysbefoeit++;
}
printf("\n");
count=7;
}
else
{
for(int i=0;i<day;i++)
{
printf("%d ", daysbefoeit);
daysbefoeit++;
}
count=day;
}
int m=1;
for(int i=0;i<=6-day;i++)
{
if(m<10)
{
printf(" %d ",m);
}
else
{
printf("%d ",m);
}
m++;
}
printf("\n");
if(day==0)
{
count=14;
}
else
{
count=7;
}
int hang=0;
while(m<=days)
{
if(m<10)
{
printf(" %d ",m);
}
else
{
printf("%d ",m);
}
hang++;
if(hang==7)
{
printf("\n");
hang=0;
}
m++;
}
if(day==0)
{
count=days+7;
}
else
{
count=day+days;
}
int newmonth=1;
for(int j=hang;j<7;j++)
{
if(newmonth<10)
{
printf(" %d ",newmonth);
}
else
{
printf("%d ",newmonth);
}
newmonth++;
}
printf("\n");
count=count+7-hang;
for(int j=0;j< 42-count;j++)
{
if(newmonth<10)
{
printf(" %d ",newmonth);
}
else
{
printf("%d ",newmonth);
}
newmonth++;
}
}
//int getmonth
int main()
{
time_t timep;
struct tm *p;
time(&timep);
p =localtime(&timep); //此函數(shù)獲得的tm結(jié)構(gòu)體的時(shí)間,是已經(jīng)進(jìn)行過(guò)時(shí)區(qū)轉(zhuǎn)化為本地時(shí)間
//p = gmtime(&timep); //把日期和時(shí)間轉(zhuǎn)換為格林威治(GMT)時(shí)間的函數(shù)
/*printf("Year: %d\n", 1900+p->tm_year);
printf("Month: %d\n", 1+p->tm_mon);
printf("Day: %d\n", p->tm_mday);
printf("Hour: %d\n", p->tm_hour);
printf("Minute: %d\n", p->tm_min);
printf("Second: %d\n", p->tm_sec);
printf("Weekday: %d\n", p->tm_wday);
printf("Days: %d\n", p->tm_yday);
printf("Isdst: %d\n", p->tm_isdst);
*/
//printf("%d",day_cankao[0][12]);
today_current.year=1900+p->tm_year;
today_current.month=1+p->tm_mon;
today_current.day= p->tm_mday;
today use=today_current;
int c1,c2;
printf(" %d 年 %d 月 %d 日\(chéng)n",today_current.year,today_current.month,today_current.day);
print_calendar(today_current);
while(1)
{
c1 = getch();
if(c1==27)
{
printf("您已經(jīng)退出系統(tǒng)");
break;
}
if(c1==110)
{
printf(" %d 年 %d 月 %d 日\(chéng)n",today_current.year,today_current.month,today_current.day);
//printf("%d \n",getweekday(today_current));
print_calendar(today_current);
use=today_current;
continue;
}
c2 = getch();
//printf( "%d %d",c1,c2);
if(c1==224 && c2==72)
{
use.month+=1;
if(use.month==13)
{
use.month=1;
use.year+=1;
}
printf(" %d 年 %d 月 %d 日\(chéng)n",use.year,use.month,use.day);
//printf("%d \n",getweekday(today_current));
print_calendar(use);
}
if(c1==224 && c2==80)
{
use.month-=1;
if(use.month==0)
{
use.month=12;
use.year-=1;
}
printf(" %d 年 %d 月 %d 日\(chéng)n",use.year,use.month,use.day);
//printf("%d \n",getweekday(today_current));
print_calendar(use);
}
if(c1==224 && c2==75)
{
use.year-=1;
printf(" %d 年 %d 月 %d 日\(chéng)n",use.year,use.month,use.day);
//printf("%d \n",getweekday(today_current));
print_calendar(use);
}
if(c1==224 && c2==77)
{
use.year+=1;
printf(" %d 年 %d 月 %d 日\(chéng)n",use.year,use.month,use.day);
//printf("%d \n",getweekday(today_current));
print_calendar(use);
}
printf("\n");
printf("按上下按鈕,進(jìn)行月份變換\n");
printf("按左右按鈕,進(jìn)行年份變換\n");
printf("按ESC按鍵,退出系統(tǒng)\n");
printf("按N按鈕,查看當(dāng)前日期\n");
}
//上 224 72
//下 224 80
//左 224 75
//右 224 77
//esc 27
// n 110
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)三子棋小游戲的示例代碼
這篇文章主要介紹了如何通過(guò)C語(yǔ)言實(shí)現(xiàn)三子棋小游戲,三子棋小游戲的實(shí)現(xiàn)主要依賴于循環(huán)語(yǔ)句、函數(shù)和數(shù)組,感興趣的小伙伴可以嘗試一下2022-10-10
C語(yǔ)言 structural body結(jié)構(gòu)體詳解用法
C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許您存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要跟蹤圖書館中書本的動(dòng)態(tài),您可能需要跟蹤每本書的下列屬性2021-10-10
關(guān)于C語(yǔ)言 文件讀寫 feof 函數(shù)
這篇文章主要給大家分享的是關(guān)于C語(yǔ)言文件讀寫 feof 函數(shù) ,feof 是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),其功能是檢測(cè)文件結(jié)束符,如果文件結(jié)束,則返回非 0 值,否則返回 0,感興趣的小伙伴請(qǐng)跟小編一起來(lái)看看下面文章的內(nèi)容吧2021-10-10
深入分析為Visual Assist設(shè)置快捷鍵的方法
本篇文章是對(duì)為Visual Assist設(shè)置快捷鍵的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
c++ 內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別
內(nèi)聯(lián)函數(shù)是c++為了提高程序的運(yùn)行速度做的改進(jìn),那么內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是什么,本文就來(lái)詳細(xì)的介紹一下,感興趣的朋友可以了解一下2021-05-05
C++20中的協(xié)程(Coroutine)的實(shí)現(xiàn)
這篇文章主要介紹了C++20中的協(xié)程(Coroutine)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

