第十七周实验报告(任务三)

 

实验目的:揭开关于你生世的秘密
实验内容:简单的处理日期

* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:    生世的秘密    
* 作    者:     张培培   
* 完成日期: 2012年 03月 05
* 版本号:    
* 对任务及求解方法的描述部分
* 输入描述:用动态链表处理日期问题
* 问题描述及输出:

*下面的程序可以在一个 main 函数中完成,也可以用函数求解,main 函数调用即可。
*定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能:
*(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
*(2)输出该日在本年中是第几天(注意闰年问题);
*(3)输出这是这一天中的第几秒;
*(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中中需要取随机数时需要
*一个不会重复的“种子数”,这个秒数是常用的。)
*(5)求你输入的时间d 天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的
*万天日期靠这个功能了)
*(6)求你输入的时间s 秒后是何日何时,将结果保存在一个结构体变量中输出;

* 程序头部的注释结束(此处也删除了斜杠)

 

程序源:

#include <iostream>
using namespace std;
//定义Data结构体;
struct Data
{
 int year;
 int month;
 int day;
 int hours;
 int minute;
 int second;
};
void cin_data();//声明cin_data
bool judge_year(int year);//声明及judge_year
void cout_sth();//声明输出函数
void retreat_day(int day1,int select);
void retreat_second();
Data my_data;
int store_day;
int main()
{
 int day1;
 cin_data();
 cout_sth();
 cout<<"请输入后退的天数:"<<endl;
 cin>>day1;
 retreat_day(day1,1);
 retreat_second();
 system("PAUSE");
 return 0;
}
//定义输入数据cin_data函数
void cin_data()
{
 int num;
 
 do{
  cout<<"请输入您的出生年份:"<<endl;
  cin>>num;
  my_data.year=num;
 }while(num>2000||num<1900);
 
 do{
  cout<<"请输入您的出生月份:"<<endl;
  cin>>num;
  my_data.month=num;
 }while(num<1||num>12);
 
 do{
  cout<<"请输入您的出生日期:"<<endl;
  cin>>num;
  my_data.day=num;
 }while(num<1||num>31);
 
 do{
  cout<<"请输入您的出生时:"<<endl;
  cin>>num;
  my_data.hours=num;
 }while(num<0||num>24);
 
 do{
  cout<<"请输入您的出生分:"<<endl;
  cin>>num;
  my_data.minute=num;
 }while(num<0||num>60);
 
 do{
  cout<<"请输入您的出生秒:"<<endl;
  cin>>num;
  my_data.second=num;
 }while(num<0||num>60);
 
}
//定义判断闰年的函数
bool judge_year(int year)
{
 bool leap;
 
 if(year%4==0)
 {
  if(year0==0)
  {
   if(year@0==0)
    leap=true;
   else
    leap=false;
  }
  else
   leap=true;
 }
 else
  leap=false;
 return leap;
}
//定义输出函数
void cout_sth()
{
 int day=0,month=1;
 while(month<my_data.month){
  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  {
   day=day+31;
   month++;
   continue;
  }
  if(month==4||month==6||month==9||month==11)
  {
   day=day+30;
   month++;
   continue;
  }
  if(month==2)
  {
   if(judge_year(my_data.year))
    day=day+29;
   else
    day=day+28;
   month++;
   continue;
  }
 }
 day=day+my_data.day;
 store_day=day;
 cout<<"该日在本年中是第"<<day<<"天。"<<endl;
 int second=0;
 second=(my_data.hours*60+my_data.minute)*60+my_data.second;
 cout<<"这是这一天中的第"<<second<<"秒。"<<endl;
 second=second+(day-1)*24*60*60;
 cout<<"这是这一年中的第"<<second<<"秒。"<<endl;
}
//定义void retreat_day()函数;
void retreat_day(int day1,int select)
{
 int day,month;
 bool pass;
 Data store;
 
 store=my_data;
 
 day=store_day+day1;
 do{
  pass=false;
  if(judge_year(store.year))
  {
   if(day-366>0)
   {
    pass=true;
    store.year+=1;
    day-=366;
   }
  }
  else
  {
   if(day-365>0)
   {
    pass=true;
    store.year+=1;
    day-=365;
   }
  }
 }while(pass);
 if(day==0)day=1; 
 month=1;
 do{
  pass=false;
  if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day-31>0)
  {
   pass=true;
   day-=31;
   month++;
  }
  if((month==4||month==6||month==9||month==11)&&day-30>=0)
  {
   pass=true;
   day-=30;
   month++;
  }
  if(month==2)
  {
   if(judge_year(store.year))
   {
    if(day-29>0)
    {
     pass=true;
     day-=29;
     month++;
    }
   }
   else
   {
    if(day-28>=0)
    {
     pass=true;
     day-=28;
     month++;
    }
   }
   
  }
 }while(pass);
 store.month=month;
 if(select==1)
 {
 cout<<"过"<<day1<<"天后是"<<store.year<<"年"<<store.month<<"月"<<day<<"日。"<<endl; 
 }
 else
 {
  cout<<"过"<<select<<"秒后是"<<store.year<<"年"<<store.month<<"月"<<day<<"日"<<endl;
 }

}
//定义retreat_second();
void retreat_second()
{
 Data store;
 int day,second;
 cout<<"请输入后退的秒数:"<<endl;
 cin>>second;
 day=second/(24*3600);
 retreat_day(day,second);
 second=second%(24*3600);
 store.hours=second/3600;
 second=second600;
 store.minute=second/60;
 second=second`;
 cout<<store.hours<<"时"<<store.minute<<"分"<<second<<"秒。"<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值