c++课程设计 对日期及时间的基本运算(时间类和日期类) 使用重载
2012-12-06 22:50
369 查看
#include<iostream> #include<string> #define error 0 using namespace std; class Time { private: int hour; int minute; //int second; public: Time(int h,int m) { hour=h; minute=m; //second=s; JC(); } int JC() { int t=0; if(minute>=60) { hour+=minute/60; minute=minute%60; if(hour>=24) { t=hour/24; hour=hour%24; return t; } } else { if(hour>=24) { t=hour/24; hour=hour%24; return t; } } return t; } int Add1(int n) //是以小时为单位 { int t; hour+=n; t=JC(); return t; } int Add2(int n) //是以分钟为单位 { int t; minute+=n; t=JC(); return t; } void Output() { //cout<<"hour:"<<hour<<endl; //cout<<"minute:"<<minute<<endl; if(hour==0)cout<<0<<0<<":"; else cout<<hour<<":"; if(minute==0)cout<<0<<0; else cout<<minute; if(hour>=12)cout<<"PM"<<endl; else cout<<"AM"<<endl; } }; class Calendar:public Time { private: int month; int date; string Day[7];//char Day[7][10];//私有成员不能初始化,而且字符数组要想赋值,要么就一个一个的赋值 int Month[13]; int sumday; int year; public: Calendar(int y,int m,int d,int h,int mi):Time(h,mi) { year=y; month=m; date=d; Month[0]=0;Day[0]="日"; Month[1]=31;Day[1]="一"; Month[2]=28;Day[2]="二"; Month[3]=31;Day[3]="三"; Month[4]=30;Day[4]="四"; Month[5]=31;Day[5]="五"; Month[6]=30;Day[6]="六"; Month[7]=31; Month[8]=31; Month[9]=30; Month[10]=31; Month[11]=30; Month[12]=31; sumday=0; } bool Leapyear(int y) { if((y%400==0)||((y%4==0)&&(y%100!=0))) { Month[2]=29; return true; } else { Month[2]=28; return false; } } int yearDay(int y) { if(Leapyear(y))return 366; if(!Leapyear(y))return 365; return error; } int Dateday() { return date; } int Monthday(int m) { return Month[m]; } void Yearday(int y) { if(Leapyear(y))sumday=sumday+366; else sumday=sumday+365; } void Sumday() //返回从公元1年1月至今的天数一 { int i=1; for(;i!=year;i++) { Yearday(i); } Leapyear(year); for(i=1;i<month;i++) { sumday+=Monthday(i); } sumday+=date; } int Return_sumday() { return sumday; } int Onedate1(int t) //返回这一年的第一天是星期几 { t=sumday%7; if(t==1) return 1; if(t==2) return 2; if(t==3) return 3; if(t==4) return 4; if(t==5) return 5; if(t==6) return 6; if(t==0) return 0; return error; } void Output1() //往前推得输出年,月,日 { cout<<"year,month,date:"<<year<<"年"<<month<<"月"<<date<<"日"<<" "; int t; cout<<"星期"; t=Onedate1(sumday); if(t==7)cout<<Day[0]<<" "; else cout<<Day[t]<<" "; Output(); } int One_Year() //返回本年一共是多少天 { int i,s1=0; for(i=1;i<month;i++) s1=s1+Monthday(i); s1=s1+date; return s1; } void operator +(int n) { sumday+=n; int s,s2,s3,s4,i,k1,k2,k3; if(Leapyear(year))s=366; else s=365; s3=One_Year(); s4=s3+n; if(s>=s4) //在本年内 { s2=n-Monthday(month)+date; if(s2<=0)date=date+n; //本月内 else { i=month; while(s2!=0) { i++; k1=s2%Monthday(i); s2=s2/Monthday(i); } month=i; date=k1; } } else //不在本年内 { s2=n-s+s3; while(s2!=0) //确定第几年 { year++; k2=s2%yearDay(year); s2=s2/yearDay(year); } month=0; while(k2!=0) //确定第几个月 { month++; k3=k2%Monthday(month); k2=k2/Monthday(month); } date=k3; //第几日 } } void operator -(int n) //刚开始没有重载好减号运算符,应为是倒过来算的,所以日起赋值必须是用这个月份的全部天数-求模余下来的天数 { sumday-=n; if(sumday<0) { cout<<"超出了天数的范围!"<<endl; return ; } else { if(sumday==0) { cout<<"超出了天数的范围!"<<endl; return ; } else { int s1,s2,k1,k2; s1=One_Year(); s1=s1-n; if(s1>0) //在本年内 { s2=date-n; if(s2>0) //在本月内 date-=n; else //不在本月内 { // sumday++; //??不在本年和本月的时候就sumday要加一次 if(s2<0) { s2=-s2; while(s2!=0) { month--; k1=s2%Monthday(month); s2=s2/Monthday(month); } date=Monthday(month)-k1; } else { month--; date=Monthday(month); } } } else //不再本年内 { s2=-s1; if(s2!=0) { while(s2!=0) //确定第几年 { year--; k1=s2%yearDay(year); s2=s2/yearDay(year); } month=13; while(k1!=0) //确定第几个月 { month--; k2=k1%Monthday(month); k1=k1/Monthday(month); } date=Monthday(month)-k2; //第几日 } else { year--; month=12; date=Monthday(month); } } } } } int operator -(Calendar b) { int n; Sumday(); b.Sumday(); n=Return_sumday()-b.Return_sumday(); if(n<0)n=n*(-1); return n; } }; int main() { cout<<"Please input year,month,date,hour,minute:"; int y,m,d,h,mi,hh; cin>>y>>m>>d>>h>>mi; Calendar a(y,m,d,h,mi); a.Sumday(); cout<<"The sumday from the oneday is:"<<a.Return_sumday()<<endl; a.Output1(); cout<<"input hour is 1,minute is 2:"; int kk; cin>>kk; int k; if(kk==1) { cout<<"Please input add hour is:"; cin>>hh; k=a.Add1(hh); } if(kk==2) { cout<<"Please input add minute is:"; cin>>hh; k=a.Add2(hh); } if(k!=0)a+k; cout<<"The sumday from the oneday is:"<<a.Return_sumday()<<endl; a.Output1(); return 0; }
相关文章推荐
- c++课程设计 对日期的基本运算 使用重载
- 设计一个日期类Date,包括年、月、日等私有成员。要求实现日期的基本运算,例如某日期加上天数或减去天数
- C/C++日期时间使用方法,struct tm, time_t, clock_t,计算循环所用时间
- c++中日期和时间的使用详解
- <C/C++>日期和时间的使用(time相关函数大全)
- Work with dates and times(C和C++程序设计中使用日期和时间)
- 设计一个时间类Time, 包括时,分,秒等私有数据成员。要求实现时间的基本运算,一个时间加上另一个时间。。
- C++时间日期的使用
- C++课程设计 面积运算
- C/C++日期时间使用方法,struct tm, time_t, clock_t,计算循环所用时间
- c/c++时间操作(struct tm 和 time_t 时间和日期的使用方法)
- C++struct tm 和 time_t 时间和日期的使用方法
- jQuery UI 日期时间选择器的基本使用
- 日期、时间选择器的基本使用
- 14-9-11 C/C++课程设计--图书馆管理系---<time.h>中时间数据类型的学习记录
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- Reporting Service基本界面使用3---设定日期列的时间显示格式
- bat批处理日期时间格式设置使用
- Android显示时间和日期的控件的使用总结
- 使用UML的基础平台的设计之三(基本路径)