Win32计算器:输入出生年月日,输出周岁,星座以及距离下一次生日的天数

Win32计算器

  • 实验要求:

1、完成一个win32计算器,具体实现的功能为:输入出生年月日,可以输出对应的周岁,星座,距离下一个生日的天数;

2、提交内容为:设计思路的文档、项目代码和可执行程序release版本;

  • 实验思路

1、首先了解如何获取系统当前的时间:

C++中获取当前系统时间的方法

系统时间相关的函数C++定义在<ctime>头文件中。

1.1 time(time_t*)函数

 函数定义如下:

 time_t time (time_t* timer);

 获取系统当前日历时间 UTC 1970-01-01 00:00:00开始的unix时间戳

 参数:timer 存取结果的时间指针变量,类型为time_t,指针变量可以为null。如果timer指针非null,则time()函数返回值变量与timer指针一样,都指向同一个内存地址;否则如果timer指针为null,则time()函数返回一个time_t变量时间。

 返回值,如果成功,获取当前系统日历时间,否则返回 -1。

1.2、结构体 struct tm

变量 类型 说明 范围

tm_sec int 每分钟的秒数 [0 - 61]

tm_min int 每小时后面的分钟数 [0 - 59]

tm_hour int 凌晨开始的小时数 [0 - 23]

tm_mday int 从每月份开始算的天数 [1 - 31]

tm_mon int 从一月份开始的月份数 [0 - 11]

tm_year int 从1900年开始的年数  

tm_wday int 从每周天开始算的天数 [0 - 6]

tm_yday int 一年的第几天,从零开始 [0 - 365]

tm_isdst int 夏令时         

 1.3、本地时间转换函数localtime(time_t*)

 函数原型 struct tm * localtime (const time_t * timer);

 将日历时间转换为本地时间,从1970年起始的时间戳转换为1900年起始的时间数据结构

二根据要求设计思路

  1. 输入出生年月日,先让用户输入出生年月日,再输出用于的年月日

定义一个日期的类Date,属性有年(m_Year) ,月 (m_Month),日 (m_Day)

定义当前的年月日 n_Date类,属性有 当前年(n_Year),当前月(n_Month),当前日期 (n_Day)

先输入,再输出

//定义出生日期类

class Date

{

public:

int m_year;//出生年

int m_Month;//出生月

int m_Day;//出生日

};

//输出当前时间函数

tm timing()

{

time_t nowtime;

struct tm *p;

time(&nowtime);

p = localtime(&nowtime);

//tm_year是从1900年开始的年数,tm_mon是从一月份开始的的月份数所以分别+1900和+1

cout << "今天是" << p->tm_year + 1900 << "年" << p->tm_mon + 1 << "月" << p->tm_mday << "日" << endl;

    tm o;

o.tm_year = p->tm_year;

o.tm_mon = p->tm_mon;

o.tm_mday = p->tm_mday;

return o;

}

//请用户输入自己的出生年月日

void userBorn()

{

cout << "----------------------------------" << endl;

cout << "请您输入自己的出生年月日" << endl;

}

//打印用户的出生年月日

void userBorn(Date d)

{

cout << "----------------------------------" << endl;

cout << "您出生于"<<d.m_year<<"年"<<d.m_Month<<"月"<<d.m_Day<<"日"<< endl;

};

  1. 可以输出对应的周岁,判断用户的出生年月日,输出用户的周岁

在日期类里面再定义一个年龄的属性(m_Age),用现在的年份(n_Year)-出生的年份(m_Year)来得到年龄

判断:当前的年份(n_Year)减去出生时的年份(m_Year),得到的数字设为(m_Age),再比较出生的月份(m_Month)和日期(m_Day),如果当前的月日在你的生日之前,那么周岁就是(m_Age)-1岁,如果当前的月日在你的生日之后,那么周岁就是(m_Age)岁。

//判断用户是否生日已经过了,并打印用户周岁

int isBirth(Date d,tm &p)

{

int Age;

int temp;//当temp == 1时输出周岁为当前年份-出生年份 当temp==-1时 输出周岁为当前年份-出生月份-1

//先判断月份

//当前的月份比出生月份大 周岁为 直接输出 当前年份-出生年份

if(p.tm_mon>d.m_Month)

{

temp = 1;

}

//当前的月份比出生月份小 周岁为 直接输出 当前年份-出生月份-1

else if(p.tm_mon < d.m_Month)

{

temp = -1;

}

//当前的月份与出生月份相等 再判断日 若当前日大于出生日 周岁为直接输出 当前年份-出生年份-1 若当前日小于出生日 周岁为直接输出 当前年份-出生年份

else if (p.tm_mon == d.m_Month)

{

if (p.tm_mday > d.m_Day)

{

temp = -1;

}

else temp = 1;

}

Age =  p.tm_year -d.m_year+1900;

return temp;

}

//输出用户的周岁

void zhouyear(int &nn,Date &dd,tm &pp)

{

int A = 0;

A =pp.tm_year - dd.m_year + 1900;

if (nn == 1)

{

cout << "您的周岁为" << A <<"岁"<< endl;

}

else

{

cout << "您的周岁为" << A - 1 <<"岁"<< endl;

}

  1. }输出星座,

定义一个星座类,判断输入的月份日期在哪一个区间,还要先定义各个星座在哪个区间

通过比较来确定区间:使用if语句

class star:public Date

{

public:

//判断用户是哪个星座

int IsStar(int &mm, int &dd)

{

      int i = 1;

  if ((mm == 12 && dd >= 22) || (mm == 1 && dd <= 19)) { i = 11; }

            else if ((mm == 1 && dd >= 20) ||(mm == 2 && dd <= 18)){ i =0 ; }

else if ((mm == 2 && dd >= 19) ||(mm == 3 && m_Day <= 20)){ i =1 ; }

else if ((mm == 3 && m_Day >= 21) || (mm == 4 && m_Day <= 19)){ i =2 ; }

else if ((mm == 4 && m_Day >= 20) || (mm == 5 && m_Day <= 20)){ i = 3; }

else if ((mm == 5 && m_Day >= 21) || (mm == 6 && m_Day <= 21)){ i = 4; }

else if ((mm == 6 && m_Day >= 22) || (mm == 7 && m_Day <= 22)){ i = 5; }

else if ((mm == 7 && m_Day >= 23) || (mm == 8 && m_Day <= 22)){ i =6; }

else if ((mm == 8 && m_Day >= 23) || (mm == 9 && m_Day <= 22)){ i = 7; }

else if ((mm == 9 && m_Day >= 23) || (mm == 10 && m_Day <= 23)) { i = 8; }

else if ((mm == 10 && m_Day >= 24) || (mm == 11 && m_Day <= 22)){ i = 9; }

else if ((mm == 11 && m_Day >= 23) || (mm == 12 && m_Day <= 21)){ i = 10; }

  return i;

}

//输出用户的星座

     void userStar(int t)

    {

 cout << "您的星座是" <<st[t]<< endl;

    }

string st[12] = { "水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","摩羯座" };

};

 

  1. 输出距离下一个生日的天数;

定义一个生日的类,用生日的天数-当下的天数。

先定义一个有关于月份的数组month[]={}

  1. 、要清楚现在的年份的每个月的天数

  1. 判断是否为闰年--》2月为多少天 润年为29 非闰年为28

int isRun(int &r)

{

int zz;

//判断条件能被4整除但不能被100整除,或者直接被100整除

if ((r % 4 == 0 && r % 100 != 0)||r%400==0)

{

zz = 1;//是闰年

}

else

zz = 0;//不是闰年

return zz;

}

void changeFeb(int &zzz,int bir)

{

if (zzz = 1) { bir = 29; }

else { bir = 28; }

}

  1. 、判断生日是否在现在的年份已经过去

若没有过,用输入的月日(前几个月的天数相加再加上生日的那天日期)-现在的月日(前几个月的天数相加,再加上本月的日期)

若过了,用现在年份的天数-现在的月日天数+下一年生日的月份日的天数

int isBirth(Date d,tm &p)

{

int Age;

int temp;//当temp == 1时输出周岁为当前年份-出生年份 当temp==-1时 输出周岁为当前年份-出生月份-1

//先判断月份

//当前的月份比出生月份大 周岁为 直接输出 当前年份-出生年份

if(p.tm_mon>d.m_Month)

{

temp = 1;

}

//当前的月份比出生月份小 周岁为 直接输出 当前年份-出生月份-1

else if(p.tm_mon < d.m_Month)

{

temp = -1;

}

//当前的月份与出生月份相等 再判断日 若当前日大于出生日 周岁为直接输出 当前年份-出生年份-1 若当前日小于出生日 周岁为直接输出 当前年份-出生年份

else if (p.tm_mon == d.m_Month)

{

if (p.tm_mday > d.m_Day)

{

temp = -1;

}

else temp = 1;

}

Age =  p.tm_year -d.m_year+1900;

return temp;

}

void days(Date bb,tm oo,int y)

{

int ds=0;//距离下一次生日的天数

int yds=0;//现在一年的天数

int bds = 0;//一年的开始到生日的天数

int nyds = 0;//一年的开始到现在的日期的天数

int sybds = 0; //下一年的开始到生日的天数

//一年的天数

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

{

yds = month[i] + yds;

}

//cout << "一年的天数" << yds<<endl;

//一年的开始到生日的天数

for(int i=0;i<bb.m_Month-1;i++)

{

bds = month[i] + bds;

}

bds += bb.m_Day;

//cout << "一年的开始到生日的天数" << bds << endl;

//一年的开始到现在的日期的天数

for (int j = 0; j < oo.tm_mon ; j++)

{

nyds += month[j] ;

}

nyds += oo.tm_mday;

//cout << "一年的开始到现在的日期的天数" << nyds << endl;

 //下一年的开始到生日的天数

for (int k = 0; k < bb.m_Month-1; k++)

{

sybds = month2[k] + sybds;

}

sybds += bb.m_Day;

//cout << "下一年的开始到生日的天数" << sybds << endl;

//cout << y << endl;

if (y == 1)//生日已经过了 距离下一次生日的天数=现在一年的天数-现在的月日天数+下一年的开始到生日的天数

{

ds = yds - nyds + sybds;

}

else if (y == -1)//生日还没有过  距离下一次生日的天数=一年的开始到生日的天数-一年的开始到现在的日期的天数

{

ds = bds - nyds;

}

cout << "距离你下一次生日还有" << ds << "天"<<endl;

}

需要源码的宝宝可以私信我~

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

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

相关文章

用计算机算出别人多少岁,年龄计算器 年龄计算器查询

【www.wzktys.com--资料共享】 虚岁年龄是中国在习惯上常用的年龄计算方法&#xff0c;按出生后所经历的日历年头计算,即生下来就算1岁,以后每过一次新年便增加1岁。一般按农历新年算&#xff0c;也有按公历算的。例如&#xff0c;12月末出生的婴儿&#xff0c;出生后就算1岁,过…

js和html:周岁年龄计算器

输入界面展示: 输出结果展示: 实现代码: <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div><!-- 设计输入及点击界面 --><p>请输入您的出生日期(yyy/mm/dd):…

C# | 使用Memory<T>高效地读写内存数据

C# | 使用Memory高效地读写内存数据 文章目录 C# | 使用Memory<T>高效地读写内存数据前言Memory<T>介绍示例结束语 前言 Memory<T>是C# 7.2版本中引入的一种新类型&#xff0c;可以更加高效地读写内存数据。本文将介绍它的用途以及如何使用它来优化代码。 P…

chatgpt赋能python:Python中的与非

Python中的与非 在Python编程中&#xff0c;我们经常会用到与非运算符&#xff0c;用来判断条件语句中的真假性。在本文中&#xff0c;我们将介绍Python中的与非运算符&#xff0c;并探讨其用法和实际应用场景。 什么是与非运算符&#xff1f; 与非运算符是一个布尔操作符&a…

【编译、链接、装载二】/lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录

【编译和链接二】bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录 一、问题起因二、ldd查看三、解决方案一&#xff1a;使用gcc链接四、查找其他解决方案五、解决方案二&#xff1a;软链接 bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter…

jupyter 中,前面输入字符,后面的字符被覆盖消失(带小键盘的联想笔记本insert用法)

如题&#xff0c;在使用jupyter时&#xff0c;在程序中间添加字符时&#xff0c;后面的字符被覆盖消失。这在各种文本编辑器中是个常见的问题&#xff0c;解决方法也很简单而且固定。只需要点击一下键盘上的***insert***键即可。 有些电脑insert键和其他键重复&#xff0c;需要…

解决关于VS2019输入会顶掉后面字符的问题

刚开始输入一个左半括号&#xff0c;编译器会同时返回你右半括号&#xff0c;但当你输入一个字符时&#xff0c;会同时顶掉你后面的右半括号&#xff0c;这里我输入了个字母‘i’。 对于这种情况&#xff0c;可以点击键盘上的“insert”&#xff0c;点击后右下角的"OVR&qu…

键盘打字时,打一个字后面少一个字如何解决

键盘敲字时&#xff0c;如果光标在中间&#xff0c;输入一个字后面就少一个字 文字输入的例子 只需要按INS键就可以恢复正常了 注&#xff1a;如果是手提笔记本电脑&#xff0c;一个键盘有两下两行&#xff0c;先按一下FN按键&#xff0c;再按INS即可切换为正常状态了

JAVA打字游戏代码

新建一个项目&#xff0c;然后在src里面建一个MyGame.java文件&#xff0c; 把代码粘到刚才新建的MyGame.java, 然后把两张图放到src下&#xff0c;就行了 一、代码 import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; i…

PCL 改进点云双边滤波算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 我们先来回顾一下之前该算法的计算过程,在二维图像领域中,双边滤波算法是通过考虑中心像素点到邻域像素点的距离(一边)以及像素亮度差值所确定的权重(另一边)来修正当前采样中心点的位置,从而达到平滑滤波效果。…

快剪辑剪辑视频1920*1080

电脑选择这一个 剪出来以后是手机那种大小的。

短视频剪辑怎么自学?短视频剪辑的教程分享

短视频剪辑怎么自学&#xff1f;现如今短视频发展十分迅速&#xff0c;几乎我们人人都可以成为短视频的创作者。那么问题来了&#xff0c;怎么剪辑短视频呢&#xff1f;其实我们只需要了解到短视频剪辑的要义&#xff0c;剪辑短视频绝非难事。这里小编就来给大家分享介绍自学短…

剪辑视频怎么学?手把手教你自学视频剪辑

剪辑视频怎么学&#xff1f;随着自媒体的不断发展&#xff0c;随着短视频的不断发展&#xff0c;越来越多的人们加入到短视频创作行列。那么问题来了&#xff0c;我们如何进行剪辑呢&#xff1f;其实剪辑视频并非什么难事&#xff0c;只是需要我们找对方法。这里小编就来给大家…

如何剪辑电影视频片段?影视剪辑的方法介绍

如何剪辑电影视频片段&#xff1f;不知道大家平时有没有看到一些精彩的影视剪辑片段&#xff0c;所谓的电影视频片段其实就是将一部电影中的精彩部分剪辑到一起。这种剪辑手法在如今还是十分常见的&#xff0c;学会这样的剪辑方法&#xff0c;我们不仅可以进行视频剪辑&#xf…

如何剪辑短视频?剪辑短视频的技巧来了

如何剪辑短视频&#xff1f;现如今短视频发展十分迅速&#xff0c;几乎我们每个人的日常生活中都会和短视频打交道。大家在观看短视频的时候&#xff0c;是否会想到自己动手剪辑制作呢&#xff1f;说道这里很多小伙伴可能会说剪辑多难&#xff0c;我不会。其实日常的剪辑并不是…

强大简洁的免费视频工具,老版快剪辑

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、老版快剪辑有什么特色功能&#xff1f;1.去除多个水印2.快速原码率导出3.快速导出不同品质gif图4.增大原视频音量 一、老版快剪辑有什么特色功能&#xff1f; …

影视剪辑,视频剪辑流程,如何进行混剪

一个人如何在家自学剪辑&#xff1f;今天经验分享来啦&#xff01; 视频剪辑流程 一、建立好项目文件夹。根据时间、地点、大体拍摄内容等分类&#xff0c;在不同的文件夹存入对应的物料和工程。 二、获取素材。提前收集好要用的包装素材与音乐网站&#xff0c;进行及时补充素…

剪映电脑版详细使用教程,让视频剪辑变得更简单了

这几天关于剪映电脑版的消息非常多&#xff0c;相比于专业成熟的视频剪辑软件&#xff0c;但大家对这款剪映似乎特别感兴趣&#xff0c;小编也抽时间简单使用了一下&#xff0c;相比于adobe Premiere 和达芬奇来说&#xff0c;真的特别简单上手&#xff0c;结合了手机版的触摸与…

影视剪辑,视频剪辑的万能剪辑技巧来啦,剪辑技巧合集

好多人在学习视频剪辑时不知道如何入手&#xff01; 今天这一篇总结来啦&#xff01; 首先要掌握的就是关于正确的视频剪辑流程 ①建立好项目文件夹。根据时间、地点、大体拍摄内容等分类&#xff0c;在不同的文件夹存入对应的物料和工程。 ②获取素材。提前收集好要用的包装…

视频时间太长,怎样快速剪辑缩短视频的时长

在制作视频时&#xff0c;难免会遇到一些剪辑问题&#xff0c;比如如何批量将多个视频的播放时长缩短等等。下面小编为大家介绍两种方法 原视频效果&#xff1a; 将需要剪辑的视频都存放在同一文件夹上 双击原视频查看&#xff0c;该视频的播放时长较长&#xff0c;可以说明下…