C语言程序设计题目十九:编写一万年历系统

news2024/9/27 8:22:36

文章目录

    • 题目十九:编写一万年历系统
      • calendar.h
      • calendar.c
      • test.c

题目十九:编写一万年历系统

要求: 模仿现实中的挂历,显示当前月的每一天及星期几,当系统日期变为下一个月时,自动翻页到下一个月。

在这里插入图片描述

calendar.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"
#include"time.h"
#include"windows.h"
//判断闰年
int isLeapYear(int year);
//获取每个月的天数
int getDaysInMonth(int year, int month);
//获取某年某月某日的星期几 {星期日:0, 星期一 : 1星期二 : 2, 星期三 : 3, 星期四 : 4, 星期五 : 5, 星期六 : 6}
int getWeekday(int year, int month, int day);
//显示日历
void displayCalender(int year, int month);
// 运行年历系统
void runCalendar();

calendar.c

#include"calendar.h"

//判断闰年
int isLeapYear(int year) {
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

//获取每个月的天数
int getDaysInMonth(int year, int month) {
	switch (month)
	{
	case 1:case 3:case 5:case 7: case 8:case 10:case 12:
		return 31;
	case 4:case 6: case 9: case 11:
		return 30;
	case 2:
		return isLeapYear(year) ? 29 : 28;
	default:
		return 0;
	}
}


//获取某年某月某日的星期几 
// {星期日:0, 星期一 : 1星期二 : 2, 
// 星期三 : 3, 星期四 : 4, 星期五 : 5, 星期六 : 6}
int getWeekday(int year, int month, int day) {
	
	struct tm time_in = { 0 };
	//tm_year是从1900年开始算的
	time_in.tm_year = year - 1900;
	//tm_mon是0到11表示1月到12月
	time_in.tm_mon = month - 1;
	time_in.tm_mday = day;
	//通过mktime函数计算星期几
	mktime(&time_in);
	return time_in.tm_wday;
}

//显示日历
void displayCalender(int year, int month) {
	printf("===== %d年 %d月 =====\n", year, month);
	printf("日 一 二 三 四 五 六\n");

	//计算某年某月有多少天
	int daysInMonth = getDaysInMonth(year, month);
	//计算出某年某月的1号是星期几
	int startDay = getWeekday(year, month, 1);

	//打印空白,一个中文字符占2个空格,间隔是一个空格,所以打印三个空格
	for (int i = 0; i < startDay; i++) {
		printf("   ");
	}
	//打印日期  
	for (int j = 1; j <= daysInMonth; j++) {
		printf("%2d ", j);
		//一星期最后一天换行
		if ((j + startDay) % 7 == 0) {
			printf("\n");
		}
	}
	printf("\n");
}
//运行日历
void runCalendar(){
	time_t now = time(NULL);
	struct tm* t = localtime(&now);

	//获取当年年份
	int currentYear = t->tm_year + 1900;
	//获取当前月份
	int currentMonth = t->tm_mon + 1;

	displayCalender(currentYear, currentMonth);
	
	while (1) {
		time_t newNow = time(NULL);
		struct tm* new_t = localtime(&newNow);

		int newYear = new_t->tm_year + 1900;
		int newMonth = new_t->tm_mon + 1;

		//检查是否进入下一个月
		if (newMonth != currentMonth || newYear != currentYear) {
			currentYear = newYear;
			currentMonth = newMonth;
			displayCalender(currentYear, currentMonth);
		}
		//每隔一分钟检查一次
		Sleep(60000);
	}
}

test.c

获取当前系统时间
计算当前月的1号是星期几。
根据年份和月份,确定该月的天数。(闰年,一月到十二月天数)
显示该月的日历,按星期排列
进入下一个月时,更新日历(调试时间)

#include"calendar.h"
int main(){
	/*
	int test_1 = 0;
	test_1= isLeapYear(2009);
	//2009不是闰年  为0
	printf("%d\n", test_1); 

	int test_2 = 0;
	test_2=getDaysInMonth(2008, 2);
	printf("%d\n", test_2);

	int test_3 = 0;
	//2024年9月26日是星期四
	test_3 = getWeekday(2024, 9, 26);
	printf("%d\n", test_3);
	//输出是4

	int test_4 = 0;
	//2024年9月1日是星期日
	test_4 = getWeekday(2024, 9, 1);
	printf("%d\n", test_4);
	//输出是0

	displayCalender(2024, 9);
	displayCalender(2024, 10);
	*/

	runCalendar();
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第3期】INFINI Easysearch 免费认证培训开放报名

探索 Easysearch 的无限可能&#xff0c;与 INFINI Labs 共赴搜索技术前沿&#xff01; 随着数字化转型的加速&#xff0c;搜索技术已成为企业数据洞察的核心。INFINI Labs 作为搜索创新技术的引领者&#xff0c;诚邀所有对 Easysearch 搜索引擎感兴趣的开发者、技术爱好者及合…

安卓13禁止待机 永不休眠 android13永不休眠

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 设置 =》显示 =》屏幕超时 =》 永不。 我们通过修改系统待机时间配置,来达到设置屏幕超时的配置。像网上好多文章都只写了在哪里改,改什么东西,但是实际上并未写明为什么要改那…

[智能控制】【第2 章 模糊控制的理论基础】

目录 第2章 模糊控制的理论基础 2.1 概述——模糊控制的提出 2.1 概述——模糊控制的特点 2.2 模糊集合 2.2.1 模糊集合 1 特征函数和隶属函数 2 模糊集合的表示 例2.1 例2.2 2.2.2 模糊集合的运算 1 模糊集合的基本运算 &#xff08;1&#xff09;空集…

docker搭建clickhouse并初始化用户名密码

1、新建挂载目录 mkdir -p /home/clickhouse-server/ mkdir -p /home/clickhouse-server/etc/2、拉取镜像 docker pull clickhouse/clickhouse-server3、创建临时容器 docker run -d --rm --name clickhouse-server --ulimit nofile262144:262144 clickhouse/clickhouse-ser…

目标检测流程

流程概述 背景&#xff1a;梳理目标检测标注&#xff0c;训练&#xff0c;部署全流程。供后续初学者快速上手 方案&#xff1a;Ubuntu&#xff08;PC端&#xff09;进行标注&#xff0c;基于OpenMMLab进行训练得到pt模型&#xff0c;pt模型通过转换rknn并部署。 1. 数据集 公…

成都睿明智科技有限公司可靠吗?

在这个短视频风靡的时代&#xff0c;抖音已不仅仅是一个娱乐平台&#xff0c;它更是无数商家眼中的蓝海市场&#xff0c;是电商领域的新宠儿。在这场流量与转化的盛宴中&#xff0c;成都睿明智科技有限公司以其敏锐的市场洞察力和专业的服务能力&#xff0c;正逐步成为抖音电商…

使用three.js 实现着色器草地的效果

使用three.js 实现着色器草地的效果 在线预览https://z2586300277.github.io/three-cesium-examples/#/codeMirror?navigationThreeJS&classifyshader&idgrassShader 在 https://threehub.cn 中还有很多案例 import * as THREE from three import { OrbitControls…

Java基础(Arrays工具类)(asList()方法)(详细)

目录 一、Arrays工具类 &#xff08;1&#xff09;引言 &#xff08;2&#xff09;基本介绍 &#xff08;3&#xff09;主要功能&#xff08;提供的方法&#xff09; &#xff08;I&#xff09;排序&#xff08;Arrays.sort()&#xff09; &#xff08;II&#xff09;搜索(查找…

IDEA自动清理类中未使用的import包

目录 1.建议清理包的理由 2.清理未使用包的方式 2.1 手动快捷键清理 2.2 设置自动清理 1.建议清理包的理由 有时候项目类文件中会有很多包被引入了&#xff0c;但是并没有被使用&#xff0c;这会增加项目的编译时间并且代码可读性也会变差。在开发过程中&#xff0c;建议设…

ISP去噪(3)_图像的高频分量和低频分量

#图像分析# 总是不好确认头发和毛绒玩具到底是低频还是高频分量。现在得出结论&#xff0c;头发和毛绒玩具都是高频信息&#xff0c;因为细节很多。 目录 图像的频率 (1) 什么是低频? (2) 什么是高频? &#xff08;3&#xff09;低频和高频对比 &#xff08;4&#xf…

谷歌今天发布了两款升级版Gemini模型:Gemini-1.5-Pro-002和Gemini-1.5-Flash-002

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

免杀笔记 ---> 无痕Hook?硬件断点 Syscall!

说到Hook&#xff0c;我们有很多Hook&#xff0c;像Inline-Hook&#xff0c;我们也是用的比较多&#xff0c;但是正如我上一篇Blog说的&#xff0c;他会对内存进行修改&#xff0c;如果EDR或者AV增加一个校验机制&#xff0c;不断检验某一块内存&#xff0c;那么就算你用syscal…

Flink 结合kafka 实现端到端的一致性原理

Kafka 事务实现原理 Flink checkpoint 结合kafka 实现端到端的一致性 为啥taskState 的时候要开启一个新事务&#xff0c;因为本来做state 就相当于把barrier之前的状态做一个快照&#xff0c;相当于是一个新的开始&#xff0c;所以开启一个新的事务。那为啥checkpoint 第一步要…

如何在数据分析中处理异常?

在数据分析中&#xff0c;处理异常值是确保数据质量的关键步骤。以下是一些常见的方法&#xff1a; 1. 检测异常值 可视化方法 箱线图&#xff1a;通过matplotlib或seaborn绘制箱线图&#xff0c;识别数据中的异常值。 import seaborn as sns import matplotlib.pyplot as …

新版双向链表,添加了at, front, back, insert, emplace等为了兼容std.

例子&#xff1a; #define _list _DListint main() {list<int> c1 { 1,2,3,4,5,6,7,8,9,10};if (!c1.empty()) {c1.front() 42; //将42赋予c中的一个元素auto& v c1.back(); //获得指向最后一个元素的引用v 1024; //改变c中的元素auto v2 c1.back(); //v2不…

【笔记】Dynamic Taint Analysis 动态污点分析

Dynamic Taint Analysis 动态污点分析 什么是动态污点分析&#xff1f;为什么要搞动态污点分析&#xff1f; “污点”指的是什么&#xff1f; DTA中的“污点”指代的是不可信的输入&#xff0c;比如用户输入、网络请求、文件数据等。比方说&#xff0c;如果把程序看作一个城市&…

知识图谱检索 Graph-Based Retriever:文本块到结构化数据的转换,解决语义检索捕获不了的长尾关系

知识图谱检索 Graph-Based Retriever&#xff1a;文本块到结构化数据的转换&#xff0c;解决语义检索捕获不了的长尾关系 如何理解&#xff1f;如何分析&#xff1f;升维降维梳理为什么这种解法能查到长尾内容&#xff0c;而传统语义不行&#xff1f;解法拆解 如何关联&#xf…

大觅网之综合管理(Comprehensive Management of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

MySQL InnoDB 事务commit逻辑分析

一、前言 事务提交是事务即将落盘的一系列操作&#xff0c;涉及redo\undo log的写盘、bin log的写盘、事务状态的重置、各种参数的改变、无用undo log的清理等方方面面。 在commit过程会有两个阶段&#xff1a;一个是prepare阶段&#xff0c;入口函数为trx_prepare_low&#…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25 1. PromSec: Prompt Optimization for Secure Generation of Functional Source Code with Large Language Models (LLMs) M Nazzal, I Khalil, A Khreishah, NH Phan - arXiv preprint arXiv:2409.12699, 2…