第十七周项目5-玩日期时间

╰+攻爆jí腚メ 2022-08-06 04:29 214阅读 0赞
  1. /*
  2. *Copyright(c)2014,烟台大学计算机学院
  3. *All rights reserved.
  4. *文件名称:test.cpp
  5. *作者:满星辰
  6. *完成日期:2014年 月 日
  7. *版本号:v1.0
  8. * 问题描述:定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能(可以在一个main函数中完成,也可以用函数求解,main函数调用即可):
  9. (1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
  10. (2)输出该日在本年中是第几天(注意闰年问题);
  11. (3)输出这是这一天中的第几秒;
  12. (4)输出这是这一年中的第几秒;
  13. (5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个 功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。 编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多,第三个万日,谁敢说 一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000 ,可以算出你的万日,大概在26岁多。
  14. (6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出。
  15. (7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
  16. * 输入描述:输入年月日时分秒,
  17. * 程序输出:按照要求输出。
  18. */
  19. #include <iostream>
  20. using namespace std;
  21. struct Date
  22. {
  23. int year;
  24. int month;
  25. int day;
  26. int hour;
  27. int minute;
  28. int second;
  29. };
  30. void in_put(Date &date);
  31. void adddays_ymd(Date date,int addays);
  32. void addseconds_ymd(Date date,int addseconds);
  33. int days_intheyear(Date date);
  34. int year_days(Date date);
  35. long long int seconds_intheday(Date date);
  36. long long int seconds_intheyear(Date date);
  37. bool days_judge(Date date);
  38. bool Israin(Date date);
  39. int comparedays(Date time1,Date time2);
  40. int compareseonds(Date time1,Date time2);
  41. int main()
  42. {
  43. Date date,time1,time2;
  44. int addays,addseconds;
  45. in_put(date);
  46. cout<<"Now time is:\n";
  47. cout<<date.year<<"/ "<<date.month<<"/ "<<date.day<<"/ "<<date.hour<<"/ "<<date.minute<<"/ "<<date.second<<endl;
  48. cout<<"\ndays in the year:"<<days_intheyear(date)<<endl;
  49. cout<<"seconds in the day:"<<seconds_intheday(date)<<endl;
  50. cout<<"seconds in the year:"<<seconds_intheyear(date)<<endl;
  51. cout<<"\nplease input add-days:";
  52. cin>>addays;
  53. adddays_ymd(date,addays);
  54. cout<<"\nplease input add-seconds:";
  55. cin>>addseconds;
  56. addseconds_ymd(date,addseconds);
  57. cout<<"please input two time:\n";
  58. in_put(time1);
  59. in_put(time2);
  60. cout<<"differ time1 from time2"<<comparedays(time1,time2)<<"days\n";
  61. cout<<"differ time1 from time2"<<compareseonds(time1,time2)<<"seconds";
  62. return 0;
  63. }
  64. void in_put(Date &date) //对date取地址 可以使输入的数保存到Date date里
  65. {
  66. cout<<"input year:";
  67. cin>>date.year;
  68. cout<<"input month:";
  69. cin>>date.month;
  70. while(date.month>12||date.month<1)
  71. {
  72. cout<<"input 'month' is wrong!please input again:";
  73. cin>>date.month;
  74. }
  75. cout<<"input days:";
  76. cin>>date.day;
  77. while(days_judge(date))
  78. {
  79. cout<<"input 'days' is wrong!please input again:";
  80. cin>>date.day;
  81. }
  82. cout<<"input hour:";
  83. cin>>date.hour;
  84. while(date.hour>24||date.hour<0)
  85. {
  86. cout<<"input 'hour' is wrong!please input again:";
  87. cin>>date.hour;
  88. }
  89. cout<<"input minute:";
  90. cin>>date.minute;
  91. while((date.minute>60||date.minute<0)||(date.hour==24&&date.minute>0))
  92. {
  93. cout<<"input 'minute' is wrong!please input again:";
  94. cin>>date.minute;
  95. }
  96. cout<<"input second:";
  97. cin>>date.second;
  98. while((date.second>60||date.second<0)||(date.minute==60&&date.second>0))
  99. {
  100. cout<<"input 'second' is wrong!please input again:";
  101. cin>>date.second;
  102. }
  103. return;
  104. }
  105. int days_intheyear(Date date)
  106. {
  107. int days=date.day;
  108. int day[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
  109. for(int i=0; i<date.month; ++i)
  110. days+=day[i];
  111. if(Israin(date)&&date.month>2)
  112. ++days;
  113. return days;
  114. }
  115. long long int seconds_intheday(Date date) //秒太大了,用long long型
  116. {
  117. int seconds;
  118. seconds=date.hour*60*60+date.minute*60+date.second;
  119. return seconds;
  120. }
  121. long long int seconds_intheyear(Date date) //秒太大了,用long long型
  122. {
  123. int seconds;
  124. seconds=(days_intheyear(date)-1)*24*60*60+date.hour*60*60+date.minute*60+date.second;
  125. return seconds;
  126. }
  127. void adddays_ymd(Date date,int addays)
  128. {
  129. Date date1=date;
  130. int d=addays+days_intheyear(date);
  131. date1.month=1;
  132. date1.day=0;
  133. int day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
  134. while(d>year_days(date1))
  135. {
  136. d-=year_days(date1);
  137. ++date1.year;
  138. }
  139. while(d>day[date1.month])
  140. {
  141. d-=day[date1.month];
  142. ++date1.month;
  143. }
  144. date1.day=d;
  145. cout<<"After add "<<addays<<" days,now time is:\n";
  146. cout<<date1.year<<"/ "<<date1.month<<"/ "<<date1.day<<"/ "<<date1.hour<<"/ "<<date1.minute<<"/ "<<date1.second<<endl;
  147. }
  148. void addseconds_ymd(Date date,int addseconds)
  149. {
  150. int day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
  151. Date date1=date;
  152. int s=addseconds+seconds_intheyear(date);
  153. date1.month=1;
  154. date1.day=1;
  155. date1.hour=0;
  156. date1.minute=0;
  157. date1.second=0;
  158. while(s>year_days(date1)*24*60*60)
  159. {
  160. s-=year_days(date1)*24*60*60;
  161. ++date1.year;
  162. }
  163. while(s>day[date1.month]*24*60*60)
  164. {
  165. s-=day[date1.month]*24*60*60;
  166. ++date1.month;
  167. }
  168. while(s>24*60*60)
  169. {
  170. s-=24*60*60;
  171. ++date1.day;
  172. }
  173. while(s>60*60)
  174. {
  175. s-=60*60;
  176. ++date1.hour;
  177. }
  178. while(s>60)
  179. {
  180. s-=60;
  181. ++date1.minute;
  182. }
  183. date1.second=s;
  184. cout<<"After add "<<addseconds<<" seconds,now time is:\n";
  185. cout<<date1.year<<"/ "<<date1.month<<"/ "<<date1.day<<"/ "<<date1.hour<<"/ "<<date1.minute<<"/ "<<date1.second<<endl;
  186. }
  187. bool days_judge(Date date)
  188. {
  189. bool smalljudge=false;
  190. if((date.month==1||date.month==3||date.month==5||date.month==7||date.month==8||date.month==10||date.month==12)&&(date.day>31||date.day<1))
  191. smalljudge=true;
  192. if((date.month==4||date.month==6||date.month==9||date.month==11)&&(date.day>30||date.day<1))
  193. smalljudge=true;
  194. if(((date.month==2)&&(date.day>28||date.day<1))&&(Israin(date)!=true))
  195. smalljudge=true;
  196. if(((date.month==2)&&(date.day>29||date.day<1))&&(Israin(date)==true))
  197. smalljudge==true;
  198. return smalljudge;
  199. }
  200. bool Israin(Date date)
  201. {
  202. if(((date.year%4==0&&date.year%100!=0)||date.year%400==0))
  203. return true;
  204. else
  205. return false;
  206. }
  207. int year_days(Date date)
  208. {
  209. if(((date.year%4==0&&date.year%100!=0)||date.year%400==0))
  210. return 366;
  211. else
  212. return 365;
  213. }
  214. int comparedays(Date time1,Date time2)
  215. {
  216. Date time3;
  217. int sum,i,m=0;
  218. if(time1.year>time2.year)
  219. {
  220. time3=time1;
  221. time1=time2;
  222. time2=time3;
  223. }
  224. for(i=time1.year; i<time2.year; ++i)
  225. {
  226. if ((i%4==0&&i%100!=0)||i%400==0)
  227. m++;
  228. }
  229. sum=(time2.year-time1.year)*365+m+days_intheyear(time2)-days_intheyear(time1);
  230. return sum;
  231. }
  232. int compareseonds(Date time1,Date time2)
  233. {
  234. Date time3;
  235. int sum;
  236. if(time1.year>time2.year)
  237. {
  238. time3=time1;
  239. time1=time2;
  240. time2=time3;
  241. }
  242. sum=comparedays(time1,time2)*24*3600+seconds_intheday(time2)-seconds_intheday(time1);
  243. return sum;
  244. }

运行展示:

Center

Center 1

学习心得:

我也是醉了,做的要吐,晕死了,还是借鉴了一下才弄出来的。。。。。。。。。。。

发表评论

表情:
评论列表 (有 0 条评论,214人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    一.学习   1.这一周基本上进入复习周了,大家都在备考当中,而我感觉这一周的效率不是很高,没有复习到多少东西,进度和16周的没有什么区别,所以自己内心还是有点小慌张