900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Win32计算器:输入出生年月日 输出周岁 星座以及距离下一次生日的天数

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

时间:2019-07-06 00:51:23

相关推荐

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年起始的时间数据结构

二根据要求设计思路

输入出生年月日,(先让用户输入出生年月日,再输出用于的年月日)

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

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

先输入,再输出

//定义出生日期类

classDate

{

public:

intm_year;//出生年

intm_Month;//出生月

intm_Day;//出生日

};

//输出当前时间函数

tmtiming()

{

time_tnowtime;

structtm*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;

tmo;

o.tm_year= p->tm_year;

o.tm_mon= p->tm_mon;

o.tm_mday= p->tm_mday;

returno;

}

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

voiduserBorn()

{

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

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

}

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

voiduserBorn(Dated)

{

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

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

};

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

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

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

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

intisBirth(Dated,tm&p)

{

intAge;

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

//先判断月份

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

if(p.tm_mon>d.m_Month)

{

temp= 1;

}

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

elseif(p.tm_mon< d.m_Month)

{

temp= -1;

}

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

elseif(p.tm_mon== d.m_Month)

{

if(p.tm_mday> d.m_Day)

{

temp= -1;

}

elsetemp= 1;

}

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

returntemp;

}

//输出用户的周岁

voidzhouyear(int&nn,Date&dd,tm&pp)

{

intA= 0;

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

if(nn== 1)

{

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

}

else

{

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

}

}输出星座,

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

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

classstar:publicDate

{

public:

//判断用户是哪个星座

intIsStar(int&mm, int&dd)

{

inti= 1;

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

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

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

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

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

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

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

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

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

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

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

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

returni;

}

//输出用户的星座

voiduserStar(intt)

{

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

}

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

};

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

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

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

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

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

intisRun(int&r)

{

intzz;

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

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

{

zz= 1;//是闰年

}

else

zz= 0;//不是闰年

returnzz;

}

voidchangeFeb(int&zzz,intbir)

{

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

else{ bir= 28; }

}

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

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

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

intisBirth(Dated,tm&p)

{

intAge;

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

//先判断月份

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

if(p.tm_mon>d.m_Month)

{

temp= 1;

}

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

elseif(p.tm_mon< d.m_Month)

{

temp= -1;

}

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

elseif(p.tm_mon== d.m_Month)

{

if(p.tm_mday> d.m_Day)

{

temp= -1;

}

elsetemp= 1;

}

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

returntemp;

}

voiddays(Datebb,tmoo,inty)

{

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

intyds=0;//现在一年的天数

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

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

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

//一年的天数

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

{

yds= month[i] + yds;

}

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

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

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

{

bds= month[i] + bds;

}

bds+= bb.m_Day;

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

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

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

{

nyds+= month[j] ;

}

nyds+= oo.tm_mday;

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

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

for(intk= 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;

}

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

{

ds= bds- nyds;

}

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

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。