C语言实现系统日历查询系统

本系统可以实现的功能如下:
1:按年查询该年的年历并显示
2:按年和月查询该年该月的月历并显示
3:计算某年某月某日距离今天多少天,某年某月某日是星期几

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>const char MonName[12][4] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};//月份缩写
int MonNum[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//每月的天数struct Calendar
{int year;//年份int weak[12];//存储每月的第一天(1月1日)是星期几
};typedef struct Calendar Calendar;int LeapYear(int);                 //判断该年是否为闰年
//求公历该年的1月1日是星期几
int week(Calendar* time);
//获取该年每月1号是星期几
void GetEveryMonthWeek(Calendar* time)
{time->weak[0] = week(time);if (LeapYear(time->year))MonNum[1] = 29;elseMonNum[1] = 28;for (int i = 1; i < 12; i++){time->weak[i] = time->weak[i - 1] + MonNum[i - 1] % 7;if (time->weak[i] > 6){time->weak[i] = time->weak[i] % 7;if (time->weak[i] == 0)time->weak[i] = 7;}}
}//打印每月表头
void PrintWeek(int i)
{printf(  "\n                %s\n" , MonName[i - 1]);printf( "------------------------------------        \n ");printf( "   SUN  MON  TUE  WED  THU  FRI  SET       ");printf( "\n ------------------------------------\n" );}
//输出日期
void Print(int mon,int i)
{int x = 0;//控制空格数,对其使用if (mon != 7){for (int i = 0; i < mon * 5; i++){putchar(' ');}}for (int j = 0; j < MonNum[i - 1]; ++j){printf("%5d", j + 1);mon++;++x;if (x == 7||mon==7){putchar('\n');x = 0;}}putchar('\n');
}
void DisPlay(Calendar* time)
{GetEveryMonthWeek(time);printf("\n\n                                                公元%d年年历如下:\n\n", time->year);for (int i = 1; i <= 12; i++){PrintWeek(i);                              switch (time->weak[i-1]){case 1:Print(time->weak[i-1],i);break;case 2:Print(time->weak[i - 1], i);break;case 3:Print(time->weak[i - 1], i);break;case 4:Print(time->weak[i - 1], i);break;case 5:Print(time->weak[i - 1], i);break;case 6:Print(time->weak[i - 1], i);break;case 7:Print(time->weak[i - 1], i);break;default:break;}}}void ShowDate()
{int year ;Calendar time;puts("输入年,范围为1940~2040");scanf("%d", &year);if (year < 1940 || year>2040){puts("年份错误");return;}time.year = year;DisPlay(&time);
}
//输出某年某月的月历
void DisplayMonth(Calendar time, int mon)
{GetEveryMonthWeek(&time);printf("\n\n                                                公元%d年月历如下:\n\n", time.year);for (int i = 1; i <= 12; i++){if (mon == time.weak[i - 1]){PrintWeek(mon);Print(time.weak[mon - 1], mon);break;}}}void ShowMonth()
{int year, mon;puts("输入年");scanf("%d", &year);puts("输入月");scanf("%d", &mon);Calendar time;time.year = year;if (year >= 1940 && year <= 2040 && 1 <= mon && mon <= 12){DisplayMonth(time, mon);}
}
//显示某年某月某日距离今天还有多少天,某年某月某日星期几,
void Show()
{int daySum = 0;time_t now;time(&now);struct tm* time_now;time_now= localtime(&now);int year, mon,day;puts("输入年");scanf("%d", &year);puts("输入月");scanf("%d", &mon);puts("输入日");scanf("%d", &day);//计算天数if (time_now->tm_year+1900 >= year){for (int i = year; i < time_now->tm_year+1900; i++){if (LeapYear(i)){daySum += 366;}else{daySum += 365;}}if (time_now->tm_mon+1 >= mon){for (int i = time_now->tm_mon+1; i !=mon; --i){daySum += MonNum[i];}}else{for (int i = mon; i != time_now->tm_mon+1; --i){daySum += MonNum[i];}}if (time_now->tm_mday >= day){daySum = daySum + time_now->tm_mday - day;}else{daySum = daySum + day - time_now->tm_mday;}printf("距离今天%d天\t", daySum);}else{for (int i = time_now->tm_year + 1900; i < year; i++){if (LeapYear(i)){daySum += 366;}else{daySum += 365;}}if (time_now->tm_mon+1 >= mon){for (int i = time_now->tm_mon+1; i != mon; --i){daySum += MonNum[i];}}else{for (int i = mon; i != time_now->tm_mon+1; --i){daySum += MonNum[i];}}if (time_now->tm_mday >= day){daySum = daySum + time_now->tm_mday - day;}else{daySum = daySum + day - time_now->tm_mday;}printf("距离今天%d天\t ", daySum);}Calendar week;week.year = year;GetEveryMonthWeek(&week);for(int i = 1; i <= 12; i++){if (i == mon){printf(" 星期%d\n", week.weak[i-1]);}}
}//操作菜单
void Menu(void)
{while (1){system("cls");puts("1:显示某一年的日历");puts("2:显示某一年某月的日历");puts("3:显示距离今天还有多少天,星期几,");puts("4,退出");puts("输入选择");int choise;scanf("%d", &choise);switch (choise){case 1:ShowDate();system("Pause");break;case 2:ShowMonth();system("Pause");break;case 3:Show();system("Pause");break;case 4:return;break;}}}int main(void)
{Menu();return 0;
}int LeapYear(int year)
{int leap = 0;if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)leap = 1;return leap;
}//求公历该年的1月1日是星期几
int week(Calendar* time)
{int n = time->year-1;int num = 0;         //num为year到公元元年的闰年数for (int i = 1; i < time->year; i++){if (LeapYear(i) == 1)num++;}n = (n + num) % 7 + 1;return n;
}

下面是在VS2022上面运行的结果:
菜单界面:

功能1:

功能2:

功能3:

C语言实现系统日历查询系统相关推荐

  1. 数据结构与算法课程设计——C语言《职员薪资查询系统》

    数据结构与算法课程设计--C语言<职员薪资查询系统> 温馨提示:课设要自己去操作,自己写代码,可以借鉴他人代码,学习思路和一些操作,切不可完全抄袭!!! 总体说明:设计一个职员薪资查询系统 ...

  2. c语言成绩查询系统源代码,C语言版简单成绩查询系统源代码概要.doc

    C语言版简单成绩查询系统源代码概要 // // main.c // xueshengchengji // // Created by lxb on 13-9-16. // Copyright (c) ...

  3. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc

    课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...

  4. 【C语言】LOL英雄查询系统

    [C语言]英雄联盟英雄查询系统plus 用C语言的窗口模拟了一下英雄联盟角色查询系统 可查看按照走位分类查看英雄,也可搜索,并且显示详细信息 程序介绍:[[C语言]英雄联盟英雄查询系统plus 代码链 ...

  5. 学生成绩查询c#语言,C#学生成绩查询系统.doc

    ????学院 毕 业 论 文(设 计) 论文(设计)题目:学生成绩查询系统 所属系别: 信息工程系 专业班级:06计算机网络技术1班 姓 名: 常 军 玲 学 号: 200608090830129 指 ...

  6. C语言课程设计——图书馆查询系统

    为了方便图书查询,我们编写了这个图书馆查询系统,通过将图书的信息输入进这个系统,我们便可以直到图书的相关情况.图书管理员存入图书信息,使用者可以通过选项实现查询图书借阅信息,借取图书,归还图书,查看图 ...

  7. 练习---景点查询系统/旅游查询系统

    景点查询系统: import requests import json while 1:print('---------------景点查询系统-------------')name=input('请 ...

  8. C语言 日历查询系统 成品

    #include<stdio.h> #include<string.h> #include<time.h> //#include<conio.h> #i ...

  9. 日历查询系统c语言1,C语言 日历查询系统 成品

    #include #include #include //#include #include #include int isleapyear(int year) //判断该年是 闰年 还是 平年 { ...

  10. 公交查询系统c语言数据结构,公交路线查询系统(基于数据结构和C语言)

    该系统可用于查询公交线路,有多种方式,如查询某条线路上的各个站点.换乘最少的线路.站最少的线路等. #include #include #include #include #define max 30 ...

最新文章

  1. Mean Shift+聚类
  2. golang 随机数 math/rand包 crypto/rand包
  3. Linux常用命令----文件处理命令
  4. python3.7 安装pip3_Ubuntu16.04 安装python3.7和pip3
  5. 计算机体系结构 -- 第一章3 -- 设计的定量4个原则
  6. django基于存储在前端的token用户认证
  7. 想打ACM?想刷题?来这些online judge!
  8. 魅蓝2 android 8,魅蓝E2和魅蓝2哪个好
  9. c++ log函数_高斯拉普拉斯算子(Laplacian of Gaussian, LoG)
  10. 使用zlib库实现gzip格式压缩
  11. leetcode958. Check Completeness of a Binary Tree
  12. CentOS7--Firewalld防火墙
  13. mysql数据库增删改操作不自动提交事务
  14. 质子和中子数量的一点疑问
  15. 双网卡上网冲突解决_交换机如何设置,控制IP地址冲突故障
  16. 免费OCR文字识别软件,识别图片文字
  17. 读书笔记(10)网络规划与设计
  18. 【PS】证件照修改尺寸
  19. openwrt系统安装到云服务器,云服务器安装openwrt
  20. 标题、首图、详情页:三位一体的搜索优化技巧

热门文章

  1. 超简单微信登录(微信SDK接入、友盟SDK接入)
  2. springtboot 操作es
  3. numpy 矩阵对角线_python – 使用numpy将矩阵更高的对角线清零
  4. C# Halcon 图像放大缩小代码
  5. Windows上必备的7个国产小众软件,每一个都是良心推荐,建议常备使用哦。
  6. 购买服务器 架设代理服务器 Android studio设置代理
  7. python爬虫爬取巨潮资讯网的pdf文件
  8. oa怎么修改服务器地址,致远oa如何设置服务器地址
  9. HTML 下拉式菜单
  10. Hola Stduio导入RUBE配置的过程