万年历软件可以实现日历显示,日历查询,日历修改,日期备忘录,信息帮助这些功能:
#include<stdio.h>
#include"CalendarTable.h"
#include<stdlib.h>
int main()
{
CalendarTable();
system("pause");
return 0;
}
/****************************************************************************************/
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include"time.h"
#include<assert.h>
#include<stdlib.h>
#include<string.h>
void CalendarTable();
void CalculateDay();
void ShowEveryMonth();
int JudgeLeapYear();
int JudgeMonth();
void AlterCalendarTable();
/**************************************************************************/
void ShowEveryMonth(int year)
{
int month=1;
while (month <= 12)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//是闰年
{
//printf("是闰年\n");
printf("************************\n");
//printf("本月日历\n");
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)//1 3 5 7 8 10 12月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (month == 4 || month == 6 || month == 9 || month == 11)//4 6 9 11月的日历
{
//printf("其他月份\n");
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else//2月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29\n");
}
}
else
{
//printf("不是闰年\n");
printf("************************\n");
//printf("本月日历\n");
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)//1 3 5 7 8 10 12月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (month == 4 || month == 6 || month == 9 || month == 11)//4 6 9 11月的日历
{
//printf("其他月份\n");
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else//2月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
}
}
month++;
}
}
void CalculateDay(int year,int month,int day)//计算天数
{
//int year;
//int month;
//int day;
//printf("请输入要查询的日期\n");
//scanf("%d/%d/%d", &year, &month, &day);
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900 + local->tm_year;
int ThisDay = local->tm_mday;
int ThisWeek = local->tm_wday;
int Next1ThisYear = ThisYear - 1;//现实时间大
int Next2ThisYear = ThisYear + 1;//现实时间小
int ThisMonth = 1 + local->tm_mon;
int Next1ThisMonth = ThisMonth - 1;
int Next2ThisMonth = ThisMonth + 1;
int Next1Month = month + 1;
int Next2Month = month - 1;
int TotalGapDay = 0;
int TotalGapLeapYear = 0;
int TotalGapYear = 0;
int BigMonth = 0;
int LittleMonth = 0;
int SecondMonth = 0;
int WeekResult = 0;
int RetMonth = 0;
int InputDay = 0;
int InputThisDay = 0;
int LeapSecondMonth = 0;
int NotLeapSecondMonth = 0;
if (Next1ThisYear >= year)
{
while (Next1ThisYear > year)
{
int ret;
ret = JudgeLeapYear(Next1ThisYear);
if (ret == 1)
{
TotalGapLeapYear++;
}
else
{
TotalGapYear++;
}
Next1ThisYear--;
}
}
else
{
while (Next2ThisYear < year)
{
int ret;
ret = JudgeLeapYear(Next2ThisYear);
if (ret == 1)
{
TotalGapLeapYear++;
}
else
{
TotalGapYear++;
}
Next2ThisYear++;
}
}
while (Next1ThisMonth >= 1 && year<ThisYear)
{
while (year < ThisYear&&Next1Month <= 12)//输入不是本年的月份情况
{
if (Next1Month == 1 || Next1Month == 3 || Next1Month == 5 || Next1Month == 7
|| Next1Month == 8 || Next1Month == 10 || Next1Month == 12)
{
BigMonth++;
}
else if (Next1Month == 4 || Next1Month == 6 || Next1Month == 9 || Next1Month == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1Month++;
}
if (Next1ThisMonth == 1 || Next1ThisMonth == 3 || Next1ThisMonth == 5 || Next1ThisMonth == 7
|| Next1ThisMonth == 8 || Next1ThisMonth == 10 || Next1ThisMonth == 12)
{
BigMonth++;
}
else if (Next1ThisMonth == 4 || Next1ThisMonth == 6 || Next1ThisMonth == 9 || Next1ThisMonth == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(ThisYear);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1ThisMonth--;
}
while (Next2Month >= 1 && year > ThisYear)
{
while (year >ThisYear&&Next2ThisMonth <= 12)//不是本年输入年份的月份情况
{
if (Next2ThisMonth == 1 || Next2ThisMonth == 3 || Next2ThisMonth == 5 || Next2ThisMonth == 7
|| Next2ThisMonth == 8 || Next2ThisMonth == 10 || Next2ThisMonth == 12)
{
BigMonth++;
}
else if (Next2ThisMonth == 4 || Next2ThisMonth == 6 || Next2ThisMonth == 9
|| Next2ThisMonth == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(ThisYear);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2ThisMonth++;
}
if (Next2Month == 1 || Next2Month == 3 || Next2Month == 5 || Next2Month == 7
|| Next2Month == 8 || Next2Month == 10 || Next2Month == 12)
{
BigMonth++;
}
else if (Next2Month == 4 || Next2Month == 6 || Next2Month == 9 || Next2Month == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2Month--;
}
if (year == ThisYear)
{
if (month > ThisMonth)
{
while (Next2Month > ThisMonth)
{
if (Next2Month == 1 || Next2Month == 3 || Next2Month == 5 || Next2Month == 7
|| Next2Month == 8 || Next2Month == 10 || Next2Month == 12)
{
BigMonth++;
}
else if (Next2Month == 4 || Next2Month == 6 || Next2Month == 9 || Next2Month == 11)
{
LittleMonth++;
}
else if (Next2Month == 2)
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2Month--;
}
}
else if (month < ThisMonth)
{
while (Next1Month < ThisMonth)
{
if (Next1Month == 1 || Next1Month == 3 || Next1Month == 5 || Next1Month == 7
|| Next1Month == 8 || Next1Month == 10 || Next1Month == 12)
{
BigMonth++;
}
else if (Next1Month == 4 || Next1Month == 6 || Next1Month == 9 || Next1Month == 11)
{
LittleMonth++;
}
else if (Next1Month == 2)
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1Month++;
}
}
else
{
if (day >= ThisDay)
{
printf("同年同一个月,相差%d天\n", day - ThisDay);
TotalGapDay = day - ThisDay;
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((TotalGapDay % 7 + ThisWeek) <= 7)
{
WeekResult = TotalGapDay % 7 + ThisWeek;
}
else
{
WeekResult = TotalGapDay % 7 + ThisWeek - 7;
}
}
printf("今天是星期%d\n", WeekResult);
return;
}
else
{
printf("同年同一个月,相差%d天\n", ThisDay - day);
TotalGapDay = ThisDay - day;
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((ThisWeek - TotalGapDay % 7) >= 0)
{
WeekResult = ThisWeek - TotalGapDay % 7;
}
else
{
WeekResult = 7 - TotalGapDay % 7 + ThisWeek;
}
}
printf("今天是星期%d\n", WeekResult);
return;
}
}
}
if (year < ThisYear)
{
InputThisDay = ThisDay;
RetMonth = JudgeMonth(month);
if (RetMonth == 1)
{
InputDay = 31 - day;
}
else if (RetMonth == 0)
{
InputDay = 30 - day;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputDay = 29 - day;
}
else
{
InputDay = 28 - day;
}
}
}
else if (year > ThisYear)
{
InputDay = day;
RetMonth = JudgeMonth(ThisMonth);
if (RetMonth == 1)
{
InputThisDay = 31 - ThisDay;
}
else if (RetMonth == 0)
{
InputThisDay = 30 - ThisDay;
}
else
{
int ret = JudgeLeapYear(ThisYear);
if (ret == 1)
{
InputThisDay = 29 - ThisDay;
}
else
{
InputThisDay = 28 - ThisDay;
}
}
}
else
{
if (month < ThisMonth)
{
InputThisDay = ThisDay;
RetMonth = JudgeMonth(month);
if (RetMonth == 1)
{
InputDay = 31 - day;
}
else if (RetMonth == 0)
{
InputDay = 30 - day;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputDay = 29 - day;
}
else
{
InputDay = 28 - day;
}
}
}
else if (month > ThisMonth)
{
InputDay = day;
RetMonth = JudgeMonth(ThisMonth);
if (RetMonth == 1)
{
InputThisDay = 31 - ThisDay;
}
else if (RetMonth == 0)
{
InputThisDay = 30 - ThisDay;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputThisDay = 29 - ThisDay;
}
else
{
InputThisDay = 28 - ThisDay;
}
}
}
}
TotalGapDay = TotalGapYear * 365 + TotalGapLeapYear * 366 + BigMonth * 31 + LittleMonth * 30 + LeapSecondMonth * 29 + NotLeapSecondMonth * 28 + InputThisDay + InputDay;
printf("相差%d天\n", TotalGapDay);
}
int JudgeMonth(int month)//判断月份
{
int ret = 0;
if (month == 1 ||month == 3 ||month == 5 || month == 7
|| month == 8 || month == 10 || month == 12)
{
ret = 1;
return ret;
}
else if (month == 4 || month == 6 || month == 9 || month == 11)
{
return ret;
}
else
{
ret = -1;
return ret;
}
}
int JudgeLeapYear(int year)//判断是否为闰年
{
int ret=0;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
ret = 1;
return ret;
}
else
{
return ret;
}
}
void ReturnMenu()//回主菜单
{
CalendarTable();
}
void ShowData()//显示当前日期
{
struct tm *local;
time_t t;
t = time(NULL);
local = localtime(&t);
printf("%d", 1900 + local->tm_year);
printf("/");
printf("%d", 1 + local->tm_mon);
printf("/");
printf("%d\n", local->tm_mday);
}
void ShowTime()//显示当前时间
{
struct tm *local;
time_t t;
t = time(NULL);
local = localtime(&t);//local->tm_hour, local->tm_min, local->tm_sec
printf("%d:", local->tm_hour);
printf("%d:", local->tm_min);
printf("%d\n", local->tm_sec);
}
void ShowDataTime()//显示日期时间
{
struct tm *local;
time_t t;
t = time(NULL);
local = localtime(&t);
printf("%d:", local->tm_hour);
printf("%d:", local->tm_min);
printf("%d\n", local->tm_sec);
printf("%d", 1900 + local->tm_year);
printf("/");
printf("%d", 1 + local->tm_mon);
printf("/");
printf("%d\n", local->tm_mday);
}
void ShowDynamicTime()//动态显示时间
{
while (1)
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
printf("%d/%d/%d %d:%d:%d\n", 1900 + local->tm_year, 1 + local->tm_mon,
local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec);
Sleep(1000);
}
}
void ShowMonth()//显示本月日历表
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900+local->tm_year;
printf("%d\n", ThisYear);
int ThisMonth = 1 + local->tm_mon;
if ((ThisYear %4 == 0 && ThisYear %100 != 0)||(ThisYear % 400 == 0))//是闰年
{
printf("是闰年\n");
printf("************************\n");
printf("本月日历\n");
if (ThisMonth == 1 || ThisMonth == 3 || ThisMonth == 5 || ThisMonth == 7 || ThisMonth == 8 || ThisMonth == 10 || ThisMonth == 12)//1 3 5 7 8 10 12月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (ThisMonth == 4 || ThisMonth == 6 || ThisMonth == 9 || ThisMonth == 11)//4 6 9 11月的日历
{
printf("其他月份\n");
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else//2月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29\n");
}
}
else
{
printf("不是闰年\n");
printf("************************\n");
printf("本月日历\n");
if (ThisMonth == 1 || ThisMonth == 3 || ThisMonth == 5 || ThisMonth == 7 || ThisMonth == 8 || ThisMonth == 10 || ThisMonth == 12)//1 3 5 7 8 10 12月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (ThisMonth == 4 || ThisMonth == 6 || ThisMonth == 9 || ThisMonth == 11)//4 6 9 11月的日历
{
printf("其他月份\n");
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else//2月的日历
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
}
}
}
/**************************/
void CheckWeek()//查询***是星期几
{
int year;
int month;
int day;
printf("请输入要查询的日期\n");
scanf("%d/%d/%d", &year, &month, &day);
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900 + local->tm_year;
int ThisDay = local->tm_mday;
int ThisWeek = local->tm_wday;
int Next1ThisYear = ThisYear - 1;//现实时间大
int Next2ThisYear = ThisYear + 1;//现实时间小
int ThisMonth = 1 + local->tm_mon;
int Next1ThisMonth = ThisMonth - 1;
int Next2ThisMonth = ThisMonth+1;
int Next1Month = month + 1;
int Next2Month = month - 1;
int TotalGapDay = 0;
int TotalGapLeapYear = 0;
int TotalGapYear = 0;
int BigMonth = 0;
int LittleMonth = 0;
int SecondMonth = 0;
int WeekResult = 0;
int RetMonth = 0;
int InputDay = 0;
int InputThisDay = 0;
int LeapSecondMonth = 0;
int NotLeapSecondMonth = 0;
if (Next1ThisYear >= year)
{
while (Next1ThisYear > year)
{
int ret;
ret = JudgeLeapYear(Next1ThisYear);
if (ret == 1)
{
TotalGapLeapYear++;
}
else
{
TotalGapYear++;
}
Next1ThisYear--;
}
}
else
{
while (Next2ThisYear < year)
{
int ret;
ret = JudgeLeapYear(Next2ThisYear);
if (ret == 1)
{
TotalGapLeapYear++;
}
else
{
TotalGapYear++;
}
Next2ThisYear++;
}
}
while (Next1ThisMonth >= 1&&year<ThisYear)
{
while (year < ThisYear&&Next1Month <= 12)//输入不是本年的月份情况
{
if (Next1Month == 1 || Next1Month == 3 || Next1Month == 5 || Next1Month == 7
|| Next1Month == 8 || Next1Month == 10 || Next1Month == 12)
{
BigMonth++;
}
else if (Next1Month == 4 || Next1Month == 6 || Next1Month == 9 || Next1Month == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1Month++;
}
if (Next1ThisMonth == 1 || Next1ThisMonth == 3 || Next1ThisMonth == 5 || Next1ThisMonth == 7
|| Next1ThisMonth == 8 || Next1ThisMonth == 10 || Next1ThisMonth == 12)
{
BigMonth++;
}
else if (Next1ThisMonth == 4 || Next1ThisMonth == 6 || Next1ThisMonth == 9 || Next1ThisMonth == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(ThisYear);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1ThisMonth--;
}
while (Next2Month >= 1 && year > ThisYear)
{
while (year >ThisYear&&Next2ThisMonth <=12)//不是本年输入年份的月份情况
{
if (Next2ThisMonth == 1 || Next2ThisMonth == 3 || Next2ThisMonth == 5 || Next2ThisMonth == 7
|| Next2ThisMonth == 8 || Next2ThisMonth == 10 || Next2ThisMonth == 12)
{
BigMonth++;
}
else if (Next2ThisMonth == 4 || Next2ThisMonth == 6 || Next2ThisMonth == 9
|| Next2ThisMonth == 11)
{
LittleMonth++;
}
else
{
int ret=0;
ret=JudgeLeapYear(ThisYear);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2ThisMonth++;
}
if (Next2Month == 1 || Next2Month == 3 || Next2Month == 5 || Next2Month == 7
|| Next2Month == 8 || Next2Month == 10 || Next2Month == 12)
{
BigMonth++;
}
else if (Next2Month == 4 || Next2Month == 6 || Next2Month == 9 || Next2Month == 11)
{
LittleMonth++;
}
else
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2Month--;
}
if (year == ThisYear)
{
if (month > ThisMonth)
{
while (Next2Month > ThisMonth)
{
if (Next2Month == 1 || Next2Month == 3 || Next2Month == 5 || Next2Month == 7
|| Next2Month == 8 || Next2Month == 10 || Next2Month == 12)
{
BigMonth++;
}
else if (Next2Month == 4 || Next2Month == 6 || Next2Month == 9 || Next2Month == 11)
{
LittleMonth++;
}
else if (Next2Month==2)
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next2Month--;
}
}
else if (month < ThisMonth)
{
while (Next1Month < ThisMonth)
{
if (Next1Month == 1 || Next1Month == 3 || Next1Month == 5 || Next1Month == 7
|| Next1Month == 8 || Next1Month == 10 || Next1Month == 12)
{
BigMonth++;
}
else if (Next1Month == 4 || Next1Month == 6 || Next1Month == 9 || Next1Month == 11)
{
LittleMonth++;
}
else if (Next1Month == 2)
{
int ret = 0;
ret = JudgeLeapYear(year);
if (ret == 1)
{
LeapSecondMonth++;
}
else
{
NotLeapSecondMonth++;
}
}
Next1Month++;
}
}
else
{
if (day >= ThisDay)
{
printf("同年同一个月,相差%d天\n", day - ThisDay);
TotalGapDay = day - ThisDay;
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((TotalGapDay % 7 + ThisWeek) <= 7)
{
WeekResult = TotalGapDay % 7 + ThisWeek;
}
else
{
WeekResult = TotalGapDay % 7 + ThisWeek - 7;
}
}
printf("今天是星期%d\n", WeekResult);
return;
}
else
{
printf("同年同一个月,相差%d天\n", ThisDay - day);
TotalGapDay = ThisDay - day;
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((ThisWeek - TotalGapDay % 7) >= 0)
{
WeekResult = ThisWeek - TotalGapDay % 7;
}
else
{
WeekResult = 7 - TotalGapDay % 7 + ThisWeek;
}
}
printf("今天是星期%d\n", WeekResult);
return;
}
}
}
if (year < ThisYear)
{
InputThisDay = ThisDay;
RetMonth = JudgeMonth(month);
if (RetMonth == 1)
{
InputDay = 31 - day;
}
else if (RetMonth == 0)
{
InputDay = 30 - day;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputDay = 29 - day;
}
else
{
InputDay = 28 - day;
}
}
}
else if (year > ThisYear)
{
InputDay = day;
RetMonth = JudgeMonth(ThisMonth);
if (RetMonth == 1)
{
InputThisDay = 31 - ThisDay;
}
else if (RetMonth == 0)
{
InputThisDay = 30 -ThisDay;
}
else
{
int ret = JudgeLeapYear(ThisYear);
if (ret == 1)
{
InputThisDay = 29 - ThisDay;
}
else
{
InputThisDay = 28 - ThisDay;
}
}
}
else
{
if (month < ThisMonth)
{
InputThisDay = ThisDay;
RetMonth = JudgeMonth(month);
if (RetMonth == 1)
{
InputDay = 31 - day;
}
else if (RetMonth == 0)
{
InputDay = 30 - day;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputDay = 29 - day;
}
else
{
InputDay = 28 - day;
}
}
}
else if (month > ThisMonth)
{
InputDay = day;
RetMonth = JudgeMonth(ThisMonth);
if (RetMonth == 1)
{
InputThisDay = 31 - ThisDay;
}
else if (RetMonth == 0)
{
InputThisDay = 30 - ThisDay;
}
else
{
int ret = JudgeLeapYear(year);
if (ret == 1)
{
InputThisDay = 29 - ThisDay;
}
else
{
InputThisDay = 28 - ThisDay;
}
}
}
}
TotalGapDay = TotalGapYear * 365 + TotalGapLeapYear * 366 + BigMonth * 31 + LittleMonth * 30 + LeapSecondMonth * 29+NotLeapSecondMonth*28 + InputThisDay + InputDay;
printf("相差%d天\n", TotalGapDay);
if (year < ThisYear)
{
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((ThisWeek - TotalGapDay % 7) >= 0)
{
WeekResult = ThisWeek - TotalGapDay % 7;
}
else
{
WeekResult = 7 - TotalGapDay % 7 + ThisWeek;
}
}
printf("今天是星期%d\n", WeekResult);
}
else
{
if (TotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((TotalGapDay % 7 + ThisWeek) <= 7)
{
WeekResult = TotalGapDay % 7 + ThisWeek;
}
else
{
WeekResult = TotalGapDay % 7 + ThisWeek - 7;
}
}
printf("今天是星期%d\n", WeekResult);
}
}
void CheckWeekLater()//查询***几天之后是星期几
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisWeek = local->tm_wday;
int LaterTotalGapDay = 0;
int WeekResult = 0;
printf("输入今天后的天数\n");
scanf("%d", &LaterTotalGapDay);
if (LaterTotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((LaterTotalGapDay % 7 + ThisWeek) <= 7)
{
WeekResult = LaterTotalGapDay % 7 + ThisWeek;
}
else
{
WeekResult = LaterTotalGapDay % 7 + ThisWeek - 7;
}
}
printf("今天是星期%d\n", WeekResult);
}
void CheckWeekBefore()//查询***几天之前是星期几
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisWeek = local->tm_wday;
int BeforeTotalGapDay = 0;
int WeekResult = 0;
printf("输入今天前的天数:\n");
scanf("%d", &BeforeTotalGapDay);
if (BeforeTotalGapDay % 7 == 0)
{
WeekResult = ThisWeek;
}
else
{
if ((ThisWeek - BeforeTotalGapDay % 7) >= 0)
{
WeekResult = ThisWeek - BeforeTotalGapDay % 7;
}
else
{
WeekResult = 7 - BeforeTotalGapDay % 7 + ThisWeek;
}
}
printf("今天是星期%d\n", WeekResult);
}
void CheckMonth()//查询***月的日历表
{
int year;
int month;
int ReturnYear;
int ReturnMonth;
printf("输入某年份的某月:");
scanf("%d%d",&year,&month);
ReturnMonth = JudgeMonth(month);
if (ReturnMonth == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (ReturnMonth == 0)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else
{
ReturnYear = JudgeLeapYear(year);
if (ReturnYear == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29\n");
}
else
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
}
}
}
void CheckYear()//查询***年的日历表
{
int year;
printf("输入要显示的年份:\n");
scanf("%d",&year);
ShowEveryMonth(year);
}
void CheckDays()//查询***距离现在多少天
{
int year;
int month;
int day;
printf("请输入要查询的日期\n");
scanf("%d/%d/%d", &year, &month, &day);
CalculateDay(year, month, day);
}
/****************************/
void LastMonth()//上一个月
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisMonth = 1+local->tm_mon;
int ThisYear = 1900+local->tm_year;
if (ThisMonth > 1)
{
int NextMonth = ThisMonth - 1;
int ReturnMonth = JudgeMonth(NextMonth);
if (ReturnMonth == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (ReturnMonth == 0)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else
{
int ReturnYear = JudgeLeapYear(ThisYear);
if (ReturnYear == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29\n");
}
else
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
}
}
}
else if (ThisMonth == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
}
void NextMonth()//下一个月
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisMonth = 1+local->tm_mon;
int ThisYear = 1900+local->tm_year;
if (ThisMonth <12)
{
int NextMonth = ThisMonth+1;
int ReturnMonth = JudgeMonth(NextMonth);
if (ReturnMonth == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
else if (ReturnMonth == 0)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30\n");
}
else
{
int ReturnYear = JudgeLeapYear(ThisYear);
if (ReturnYear == 1)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29\n");
}
else
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
}
}
}
else if (ThisMonth == 12)
{
printf("1 2 3 4 5 6 7\n");
printf("8 9 10 11 12 13 14\n");
printf("15 16 17 18 19 20 21\n");
printf("22 23 24 25 26 27 28\n");
printf("29 30 31\n");
}
}
void LastYear()//上一年
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900 + local->tm_year;
int NextYear = ThisYear - 1;
ShowEveryMonth(NextYear);
}
void NextYear()//下一年
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900 + local->tm_year;
int NextYear = ThisYear + 1;
ShowEveryMonth(NextMonth);
}
void SaveCalendar()//保存当前日历
{
time_t t;
struct tm *local;
time(&t);
local = localtime(&t);
int ThisYear = 1900 + local->tm_year;
int ThisMonth = 1 + local->tm_mon;
int ThisDay = local->tm_mday;
FILE *fOut;
char strYear[15] = {'a'};
char strMonth[3]={'a'};
char strDay[3] = {'a'};
int i = 0;
int n = 0;
_itoa(ThisYear, strYear, 10);
_itoa(ThisMonth, strMonth, 10);
_itoa(ThisDay, strDay, 10);
strcat(strYear, strMonth);
strcat(strYear, strDay);
n = strlen(strYear);
if ((fOut = fopen("rili.txt", "w")) != NULL)
{
for (i = 0; i < n;i++)
{
fputc(strYear[i], fOut);
}
fputc('\0', fOut);
printf("日期保存成功\n");
}
else
{
printf("打开文件失败\n");
}
fclose(fOut);
}
/********************************/
void AddMemorandum()//添加备忘录信息
{
int count = 0;
char message[30];
char data[10];
int i = 0;
int k = 0;
FILE *fOut=fopen("beiwang.txt","wb");
printf("是否要添加\n");
while (1)
{
scanf("%d", &i);
if (i == 1)
{
printf("请输入添加备忘录的信息:\n");
scanf("%s", data);
scanf("%s", message);
int LenData = strlen(data)+1;
int LenMessage = strlen(message)+1;
int j = 0;
if (fOut!= NULL)
{
for (j = 0; j < LenData; j++)
{
fputc(data[j], fOut);
}
fputc('\n',fOut);
for (j = 0; j < LenMessage; j++)
{
fputc(message[j], fOut);
}
fputc('\n', fOut);
}
else
{
printf("打开文件失败\n");
}
count++;
printf("成功添加一个备忘录\n");
}
else
{
fclose(fOut);
printf("不再添加\n");
break;
}
}
}
void DelateMemorandum()//删除备忘录信息
{
FILE *fIn = fopen("beiwang.txt", "wb");
if (fIn != NULL)
{
remove("beiwang.txt");
}
else
{
printf("打开文件失败\n");
}
fclose(fIn);
}
void ChangeMemorandum()//更改备忘录信息
{
FILE *fOut = fopen("output.txt", "wb");
FILE *fIn = fopen("beiwang.txt", "rb");
char str[10];
printf("输入要修改备忘录的日期:\n");
scanf("%s",str);
if (fOut == NULL || fIn == NULL)
{
printf("打开文件失败\n");
}
else
{
char message[100];
while (fgets(message,100,fIn))
{
int ret = 1;
ret = strcmp(str, message);
if (ret == 0)
{
int i = 0;
printf("修改本天的备忘信息:\n");
char NewStr[100];
scanf("%s", NewStr);
fputs(message, fOut);
fgets(message, 100, fIn);
while (NewStr[i] != '\0')
{
fputc(NewStr[i],fOut);
i++;
}
fputc('\0', fOut);
}
else
{
fputs(message, fOut);
fgets(message, 100, fIn);
fputs(message, fOut);
}
}
}
fclose(fIn);
fclose(fOut);
}
void CheckMemorandum()//查询备忘录信息
{
FILE *fIn = fopen("beiwang.txt", "rb");
char str[100];
char CheckStr[10];
scanf("%s", CheckStr);
if (fIn != NULL)
{
while (1)
{
int ret = 1;
fgets(str, 100, fIn);
ret = strcmp(CheckStr, str);
if (ret == 0)
{
fgets(str, 100, fIn);
printf("本天应该做的:");
printf("%s\n", str);
break;
}
else
{
if (fgets(str, 100, fIn) == NULL)
{
printf("本天没有备忘信息\n");
break;
}
else
{
}
}
}
}
else
{
printf("打开文件失败\n");
}
}
void ShowMemorandum()//展示备忘录信息
{
FILE *fIn = fopen("beiwang.txt", "rb");
char str[50];
while ((fgets(str, 50, fIn))!=NULL)
{
printf("%s\n", str);
}
}
/**************************************************************************/
void Memorandum()//日期备忘录
{
int k;
scanf_s("%d", &k);
switch (k)
{
case 1:
printf("添加备忘录信息\n");
AddMemorandum();
break;
case 2:
printf("删除备忘录信息\n");
DelateMemorandum();
break;
case 3:
printf("更改备忘录信息\n");
ChangeMemorandum();
break;
case 4:
printf("查询备忘录信息\n");
CheckMemorandum();
break;
case 5:
printf("备忘录信息展示\n");
ShowMemorandum();
break;
case 0:
printf("退出备忘录\n");
ReturnMenu();
break;
}
}
/******************************/
void AlterCalendarTable()//修改日历
{
int key1=0;
int key2 = 0;
key1 = getch();
key2 = getch();
switch (key2)
{
case 72:
printf("上一个月:\n");
LastMonth();
break;
case 80:
printf("下一个月:\n");
NextMonth();
break;
case 75:
printf("上一年:\n");
LastYear();
break;
case 77:
printf("下一年:\n");
NextYear();
break;
case 71:
printf("保存当前日历\n");
SaveCalendar();
break;
case 79:
printf("返回主菜单\n");
ReturnMenu();
break;
}
}
/****************************/
void CheckCalendarTable()//日历查询
{
int j;
scanf_s("%d",&j);
switch (j)
{
case 1:
printf("查询***是星期几\n");
CheckWeek();
break;
case 2:
printf("查询***几天之后是星期几\n");
CheckWeekLater();
break;
case 3:
printf("查询***几天之前是星期几\n");
CheckWeekBefore();
break;
case 4:
printf("查询***月的日历表\n");
CheckMonth();
break;
case 5:
printf("查询***年的日历表\n");
CheckYear();
break;
case 6:
printf("查询***距离现在多少天\n");
CheckDays();
break;
case 0:
printf("返回主菜单\n");
ReturnMenu();
break;
}
}
/***************************/
void ShowCalendarTable()//日历显示
{
int m;
scanf_s("%d", &m);
switch (m)
{
case 1:
printf("显示当前日期\n");
ShowData();
break;
case 2:
printf("显示当前时间\n");
ShowTime();
break;
case 3:
printf("显示日期时间\n");
ShowDataTime();
break;
case 4:
printf("动态显示时间\n");
ShowDynamicTime();
break;
case 5:
printf("显示本月日历表\n");
ShowMonth();
break;
case 0:
printf("返回主菜单\n");
ReturnMenu();
break;
}
}
/*********************************/
void HelpMessage()//信息帮助
{
char str1[] = "1的功能是显示相应的日历表,里面的不同键又可以实现更详细的功能";
char str2[] = "2的功能是查询相应的日历表,里面的不同键又可以实现更详细的功能";
char str3[] = "3的功能是修改相应的日历表,里面的不同键又可以实现更详细的功能";
char str4[] = "4的功能是日历表的备忘录,里面的不同键又可以实现更详细的功能";
char str5[] = "5的功能是信息帮助";
char str0[] = "0的功能是直接退出日历表";
FILE *fOut = fopen("HelpMessage.txt", "wb");
if (fOut == NULL)
{
printf("打开文件失败\n");
}
else
{
int i = 0;
while (str1[i] != '\0')
{
fputc(str1[i], fOut);
i++;
}
fputc('\n', fOut);
i = 0;
while (str2[i] != '\0')
{
fputc(str2[i], fOut);
i++;
}
fputc('\n', fOut);
i = 0;
while (str3[i] != '\0')
{
fputc(str3[i], fOut);
i++;
}
fputc('\n', fOut);
i = 0;
while (str4[i] != '\0')
{
fputc(str4[i], fOut);
i++;
}
fputc('\n', fOut);
i = 0;
while (str5[i] != '\0')
{
fputc(str5[i], fOut);
i++;
}
fputc('\n', fOut);
i = 0;
while (str0[i] != '\0')
{
fputc(str0[i], fOut);
i++;
}
fputc('\n', fOut);
fclose(fOut);
}
}
/**************************************************************************/
void CalendarTable()
{
int n;
scanf_s("%d", &n);
switch (n)
{
case 1:
printf("日历显示\n");
ShowCalendarTable();
break;
case 2:
printf("日历查询\n");
CheckCalendarTable();
break;
case 3:
printf("修改日历\n");
AlterCalendarTable();
break;
case 4:
printf("日历备忘录\n");
Memorandum();
break;
case 5:
printf("信息帮助\n");
HelpMessage();
break;
case 0:
printf("退出系统\n");
exit(0);
break;
}
}
只是实现了软解的各接口功能,要想有更好的用户体验还有改进的地方。