问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++【类与对象】【基础】日历问题 【日期和时间】

发布网友 发布时间:2023-05-03 23:24

我来回答

5个回答

热心网友 时间:2023-10-23 04:22

#include<iostream>
using namespace std;
class date
{
private:
    int year,month,day,index;
public:
    date(){}
    void set(int sum);
    void display()
    {
        char days[][10]={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday","Sunday"};
        cout<<year<<"-"<<month<<"-"<<day<<" "<<days[index]<<endl;
    }
};
void date::set(int sum)
{
    year=2000;
    int totol = sum;
    while(sum)
    {
        if((year%4==0 && year%100!=0) || year%400==0)
            if(sum>366) sum-=366;
                else 
            break;
        else
             if(sum>365) sum-=365;
                else
            break;
        year++;
    }
    int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    month = 1;
    while(sum)
    {
        if(sum<days[month])
            break;
        sum -= days[month++];
    }
    day = sum;
    index = (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;
}
void main()
{
    date d;
    int sum;
    while(cin>>sum,sum!=-1)
    {
        d.set(sum);
        d.display();
    }
}

 

热心网友 时间:2023-10-23 04:22

Tool.h


#ifndef __TOOL_H__

#define __TOOL_H__


#define Sunday1

#define Monday2

#define Tuesday3

#define Wednesday4

#define Thursday5

#define Friday6

#define Saturday7


class Calendar

{

public:

Calendar(int num);

~Calendar();

void calculate(char* ret);

protected:


private:

bool if_leap_year(int year);

private:

int calc_num;

int start_year;

int start_week;

};


#endif//__TOOL_H__


Tool.cpp


#include <iostream>

#include "Tool.h"


Calendar::Calendar(int num)

{

calc_num = num;

start_year = 2001;

start_week = Sunday;

}


Calendar::~Calendar()

{


}


void Calendar::calculate(char* ret)

{

int day_tmp = 0;

int day_remain = 0;

int month_day_unleep[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int month_day_leep[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int act_year, act_month, act_day, act_week;


for (int i = start_year; ;i++)

{

if (day_tmp >= calc_num)

{

act_year = i - 1;

break;

}

day_remain = calc_num - day_tmp;

day_tmp += if_leap_year(i) ? 366 : 365;

}


day_tmp = 0;

for (int i = 0; i<13; i++)

{

if (day_tmp >= day_remain)

{

act_month = i;

break;

}

act_day = day_remain - day_tmp;

day_tmp += if_leap_year(act_year) ? month_day_leep[i] : month_day_unleep[i];

}

act_week = calc_num%7;

char tmp[30]= {0};

sprintf_s(tmp, "%d-%d-%d", act_year, act_month, act_day);

switch (act_week)

{

case 1:

sprintf_s(tmp, "%s  %s", tmp, "Sunday");

break;

case 2:

sprintf_s(tmp, "%s  %s", tmp, "Monday");

break;

case 3:

sprintf_s(tmp, "%s  %s", tmp, "Tuesday");

break;

case 4:

sprintf_s(tmp, "%s  %s", tmp, "Wednesday");

break;

case 5:

sprintf_s(tmp, "%s  %s", tmp, "Thursday");

break;

case 6:

sprintf_s(tmp, "%s  %s", tmp, "Friday");

break;

case 0:

sprintf_s(tmp, "%s  %s", tmp, "Saturday");

break;

}

memcpy(ret, tmp, sizeof(tmp));

}


bool Calendar::if_leap_year(int year)

{

if (year%4 == 0)

{

if (year%100 == 0 && year%400 != 0)

{

return false;

}

return true;

}

return false;

}


void main()

{

int i;

char tmp[30];

char print[2048] = {0};

while (1)

{

scanf("%d", &i);

if (i == -1)

{

break;

}

Calendar cal(i);

cal.calculate(tmp);

sprintf_s(print, "%s%s\n", print, tmp);

}

printf("%s", print);

return;

}



热心网友 时间:2023-10-23 04:23

看看准标准库的 boost 库的date_time模块,里面就有你要的功能。
你可以引入boost,直接使用就行了。 你只需要做的就是写个main函数的输入输出一些控制代码就可以了。

热心网友 时间:2023-10-23 04:23

带有一点点注释,应该能看懂的

热心网友 时间:2023-10-23 04:24

先提一个问题,关于这个你是否要求关于历法的转变,我记得以前编这个的时候好像要求在1582年实现儒略历向格里历的转化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
n95安装凯立德导航软件时出现“证书错误”是怎么回事?该如何解决? 轻松实现Linux软件反编译必备工具及使用技巧linux反编译工具 安岳县金源养老服务有限公司怎么样? 国庆期间淮南到四川安岳自驾可以吗,自驾旅游四川安岳 书房坝水库在四川排第几,安岳县朝阳水库周边旅游 ...到excel,有的有16M都不卡,有的里面数据不多,才5M就卡的要死,想复 ... 梦见自己牙齿掉光,在此说破,保佑家人平平安安,健健康康。阿弥陀佛... 速腾和宝来1.4T运动版的哪个好呢? 大陆地区党务、行政、军事或具政治性机关(构)、团体之职务或为其成员... 有没有大学负责党务工作的老师?我去年毕业的,只是优秀积极分子,现在... C#中显示一张日历表怎么制作? 锦鲤讲感情慧玲最后怎么样了丶 蹑履的成语蹑履的成语是什么 铁将军tt5n和tt7n区别 摩托车电瓶12v7n-3B中的3B代表什么 摩托车电池12v7n一4a同12v7n一4b区别 摩托车12v9n电池同12v7n区别,通用吗? 7n3h什么意思 7.n表示什么 微信上的怎么设置 微信上的怎么设置 小说书名有“毒”字的有哪些 观看下面三幅图片并阅读后面的解说文字,回答问题。 图一:蹴鞠起源于战国时期,唐宋时 打球[dǎ qiú]什么意思?近义词和反义词是什么?英文翻译是什么? 浑圆的解释浑圆的解释是什么 谷浑的解释谷浑的解释是什么 移动送的和目摄像头能连接电信wifi吗? 2020全年新建开通5g基站超60万个这对带动经济发展起着什么作用 5g需要网络机站吗 请教怎么黑别人的电脑 用什么软件练瑜伽好 嗔鱼的引证解释嗔鱼的引证解释是什么 脊椎病该怎么治疗 治疗方法有哪些 更生的词语更生的词语是什么 微信视频老是旋转哪里可以把它关掉 什么叫得失随缘? 得失要随缘,心宽人自安什么意思 人生就是一场游戏,玩得起的人收放自如,得失随缘。什么意思? 蓬莱客小说集有哪些? 网络作家蓬莱客是男是女 求穿越之妇道txt蓬莱客 高发区域是什么意思 高危地区高危人群高危人员的区别 摩托车变更颜色 摩托车改色规定是什么? 摩托车变更颜色,车号牌,要换吗? 摩托车改色交通规定 摩托车更改车身颜色 车管所变更摩托车颜色要上牌多久后才可以办 关于摩托车换颜色问题