2014秋C++第17周 项目5参考 玩日期时间
来源:互联网 发布:单片机中的J 编辑:程序博客网 时间:2024/05/21 22:44
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。
【项目5-玩日期时间】
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多(现在离第二个万日靠近了),第三个万日,谁敢说一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000,可以算出你的万日,大概在26岁多。
(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;
(7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
(1)-(5)的参考解答:详细的实现和测试过程,参考http://blog.csdn.net/sxhelijian/article/details/8655466
#include <iostream>using namespace std;struct Time{ int year; int month; int day; int hour; int minute; int second;};//输入一个限定范围内的整型数值int getNum(char *prompt, int min, int max){ int value=-1; cout<<"输入"<<prompt<<",范围["<<min<<","<<max<<"]:"; do { cin>>value; } while(value<min || value>max); return value;}//返回y年m月的天数int daysOfMonth(int m,int y){ int days; switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: if((y%4==0&&y%100!=0)||y%400==0) days=29; else days=28; } return days;}//输入时间,参数为引用类型,可以影响实参的值void getTime(Time &t){ t.year=getNum("年",0,3000); //用于输入一定范围内的数 t.month=getNum("月",1,12); t.day=getNum("日",1,daysOfMonth(t.month, t.year)); t.hour=getNum("时",0,24); t.minute=getNum("分",0,59); t.second=getNum("秒",0,59);}//输出时间,参数也用作引用是对结构常见的处理办法void outputTime(Time &t){ cout<<"时间为: "<<t.year<<"年"<<t.month<<"月"<<t.day<<"日"<<t.hour<<"时"<<t.minute<<"分"<<t.second<<"秒"<<endl;}//这天是这一年的第几天int dayOfYear(Time &t){ int days=0; int m=1; while(m<t.month) //前若干月的天数加起来 { days+=daysOfMonth(m,t.year); //充分利用已经设计的函数 ++m; } days+=t.day; //再加上本月的天数 return days;}//这天是这一天的第几秒int secondOfDay(Time &t){ return t.hour*3600+t.minute*60+t.second;}//返回一年有多少天(365或366天)int daysOfYear(int y){ return ((y%4==0&&y%100!=0)||y%400==0)?366:365;}//求你输入的时间d天后是哪年哪月哪日Time afterDays(Time t,int d){ Time t1=t; int d1=d+dayOfYear(t); //dayOfYear(t)求出t是当年第几天 t1.month=1; t1.day=0; //这样,将问题转换为在当年1月0日基础上加d1天(这个0有意思),避免以后老为2月操心,以及剩余天数一加以后持续进位// cout<<"转换为";// outputTime(t1);// cout<<"这一天后"<<d1<<"天。"; while(d1>daysOfYear(t1.year)) //天数还够一个整年 { d1-=daysOfYear(t1.year); ++t1.year; } //天数不够一整年后,再考虑月,因为从1月1日开始,不用担心Nt.year再加1年 while(d1>daysOfMonth(t1.month,t1.year)) //天数还够一个整月 { d1-=daysOfMonth(t1.month,t1.year); ++t1.month; } //剩全天数加到日上 t1.day+=d1; return t1;}int main(){ Time t,nt; //(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中; cout<<"请输入一个时间(包括年,月,日,时,分,秒):"<<endl; getTime(t); outputTime(t); //(2)输出该日在本年中是第几天(注意闰年问题); cout<<"这是这一年中的第"<<dayOfYear(t)<<"天。"<<endl; //(3)输出这是这一天中的第几秒; cout<<"这是这一天中的第"<<secondOfDay(t)<<"秒。"<<endl; //(4)输出这是这一年中的第几秒; cout<<"这是这一年中的第"<<dayOfYear(t)*24*3600+secondOfDay(t)<<"秒。"<<endl; //(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出; int d; cout<<"请输入一个天数"; cin>>d; nt=afterDays(t,d); cout<<"这一天后d(如10000)天后是:"; outputTime(nt); return 0;}
=================== 迂者 贺利坚 CSDN博客专栏=================|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==||== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==||== 我写的书——《逆袭大学——传给IT学子的正能量》 ==|===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
0 0
- 2014秋C++第17周 项目5参考 玩日期时间
- 第17周项目5-玩日期时间
- 第17周项目5--玩日期时间
- 第17周项目5-玩日期时间
- 第17周【项目 5-玩日期时间】
- 第17周项目5-玩时间日期
- 第17周项目5-玩日期时间(部分)
- 第17周项目5-玩日期时间(部分)
- 第17周 项目5-玩日期时间
- 第17周项目5-玩日期时间
- 第17周项目5-玩日期时间
- 第17周项目5-玩日期时间
- 第17周 项目5 玩日期时间
- 第17周项目5 玩日期时间
- 17周项目5--玩日期时间
- 第17周项目5-玩日期时间(v1.0)
- 第17周上机实践项目5——玩日期时间(1)(2)
- 第17周上机实践项目5——玩日期时间(3)
- 2014秋C++第17周 项目3参考 胖子伤不起
- 2014秋C++第17周 项目4参考 日期结构体
- 利用SecureCRT的脚本功能自动定时执行任务
- 2014年禁毒工作总结,2015年工作打算
- spring security3.x学习(26)_一个比较好的实例
- 2014秋C++第17周 项目5参考 玩日期时间
- Unity学习之碰撞检测
- 2014秋C++第17周 项目6参考 学生成绩统计
- 数独游戏
- hdu-2120-Ice_cream's world I
- 2014年12月20日 javaweb学习 WEB服务器 HTTP协议
- Adobe 安装程序无法初始化,请下载Adobe Support Advisor检测该问题
- Java网络计时器(socket通信)
- spring security 3.1.6 jar包说明