C课程设计——日期类设计报告_第1页
C课程设计——日期类设计报告_第2页
C课程设计——日期类设计报告_第3页
C课程设计——日期类设计报告_第4页
C课程设计——日期类设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、日期类设计报告1. 设计题目设计一个日期类,(学号尾号2、5、8完成)要求:2. 设计要求l 重载带参数构造函数(int year ,int month, int day)和默认构造函数,前者要求不合要求的数据(年月日超出范围)抛出异常l 计算出该日是星期几,(网上找公式)。l 重载“+”操作,一个日期对象和天数相加(符合交换律)。l 重载“-”操作,两天日期对象相减返回相差天数。 l 重载“+=”操作当前日期加天数l 重载输入输出操作。3. 设计分析由题中要求可以知道,首先要设计一个日期类(class Cdate),还要有构造函数,明白函数的带参与不带参的区别;而且在日期类之中需要设计正确的

2、日期格式,若不正确则实现抛出异常,C+中对异常的处理分为抛出异常、捕获异常、处理异常;在此处只要求抛出异常即可,接下来的实现输入日期计算星期几的代码,。由题可以进行网上的搜索,这个应该行对简单!之后就是重载的操作啦!4. 设计主要模块(代码实现)1. 定义一个日期类class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void display();friend CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &

3、;dt2);friend CDate &operator += (CDate &a1,int d);friend std:ostream& operator<< ( std:ostream& os, CDate& dt );friend std:istream& operator>> ( std:istream& is, CDate& dt );bool isleapyear();/ 润年的判定bool status;bool check();void gettian();private:int year,

4、month,day,day1;int d,D,D1,D2,D3;CDate:CDate (int y,int m,int d):year(y),month(m),day(d)2. 实现计算星期几:#include <iostream>using namespace std;class Dateint year,month,day;bool isleap(int i) constreturn i%400=0|i%4=0&&i%100!=0;/闰年的判定public:Date(int y, int m, int d): year(y), month(m), day(d)

5、 void print() constchar* s = "星期日,"星期一","星期二","星期三","星期四","星期五","星期六"int d13 = 0,31,28,31,30,31,30,31,31,30,31,30;int sum = 0;int i;if(isleap(year)d2 +;for(i=1;i<year;i+)sum += 365 + isleap(i);for(i=1;i<month;i+)sum += di;sum +=

6、day;cout << ssum%7 << endl;int main()int year,month,day;while(cin >> year >> month >> day && year + month + day)Date d(year,month,day);d.print();3. 重载日期加减的操作:CDate operator - (CDate &dt1,CDate &dt2) /重载-计算两日期对象的天数差;CDate dt3;if(dt1.year%4=0&&dt1.

7、year%100!=0|dt1.year%400=0)mon_day1=29;if(dt2.year%4=0&&dt2.year%100!=0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i<=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.yea

8、r-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;for(int j=0;j<=dt2.month -1;j+)dt2.D3 +=mon_dayj;dt3.d =dt1.D -dt2.D2 ; return dt3;4. 调试运行图示1.判断日期格式是否正确2,输入日期并且计算星期几,返回与系统中初始设定日期的相差天数:5. 源代码附录:#include <iostream>#include <stdio.h>#include <string.h>using namespace std;class CDate; /声

9、明类;CDate operator + (int d,CDate dt); /必须在此先声明重载 CDate operator -(CDate &dt1,CDate &dt2);CDate &operator += (CDate &a1,int d);CDate &operator << (CDate &a1,int d);std:ostream& operator<< ( std:ostream& os, CDate& dt );std:istream& operator>>

10、( std:istream& is, CDate& dt );char *week="星期日","星期一","星期二","星期三","星期四","星期五","星期六" /指针数组,保存星期;int mon_day=31,28,31,30,31,30,31,31,30,31,30,31; /数组,保存每月天数;class CDatepublic:CDate()CDate(int y,int m,int d);void fun();void d

11、isplay();friend CDate operator + (int d,CDate dt);friend CDate operator - (CDate &dt1,CDate &dt2);friend CDate &operator += (CDate &a1,int d);friend std:ostream& operator<< ( std:ostream& os, CDate& dt );friend std:istream& operator>> ( std:istream& is

12、, CDate& dt );bool isleapyear();/ 润年的判定bool status;bool check();void gettian();private:int year,month,day,day1;int d,D,D1,D2,D3;CDate:CDate (int y,int m,int d):year(y),month(m),day(d)void CDate:gettian ()cout<<"两天日期对象相减返回相差天数:"<<d<<endl;bool CDate:isleapyear()return (

13、year % 4) = 0) && (year % 100) != 0) | (year % 400) = 0);bool CDate:check()if (year < 0)status = false;return status;if (month < 1) | (month > 12)status = false;return status;switch (month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:if (day < 1) | (day> 31)status = fals

14、e;break;case 2:if (isleapyear()if (day < 1) | (day > 29)status = false;elseif (day < 1) | (day > 28)status = false;break;case 4:case 6:case 9:case 11:if (day < 1) | (day> 30)status = false;break;default:status = false;if (status)cout<<year<<"/"<<month<

15、;<"/"<<day<<endl;cout<<"恭喜日期正确了!"<<endl;return status;void CDate:fun ()int C,W,y;cout<<"请输入日期!"<<endl;cout<<"年份:"cin>>year;cout<<"月份:"cin>>month;cout<<"日期:"cin>>day;

16、if(year<=0|month<=0|month>12|day<=0|day>31)cout<<"请输入正确的日期!"<<endl;elseif(month=1|month=2)month+=12;-year;elseC=year/100;y=year%100;W=(C/4)-2*C+y+(y/4)+(13*(month+1)/5)+day-1)+700)%7;cout<<"今天是"<<weekW<<endl;void CDate:display ()if(yea

17、r<=0|month<=0|month>12|day<=0|day>31)cout<<"请输入正确的日期!"<<endl;else cout<<year<<"/"<<month<<"/"<<day<<endl;CDate operator + (int d,CDate dt)dt.day=dt.day+d;while(dt.day>mon_daydt.month-1)if(dt.year%4=0&

18、&dt.year%100!=0|dt.year%400=0)mon_day1=29;dt.day-=mon_daydt.month-1;if(+dt.month=13)dt.month=1;dt.year+;return dt;CDate operator - (CDate &dt1,CDate &dt2) /重载-计算两日期对象的天数差;CDate dt3;if(dt1.year%4=0&&dt1.year%100!=0|dt1.year%400=0)mon_day1=29;if(dt2.year%4=0&&dt2.year%100!=

19、0|dt2.year%400=0)mon_day1=29; dt1.D =(dt1.year-1)*365+(dt1.year-1)/4-(dt1.year-1)/100+(dt1.year-1)/400+dt1.D1 +dt1.day ; for(int i=0;i<=dt1.month -1;i+)dt1.D1 +=mon_dayi;dt2.D2 =(dt2.year -1)*365+(dt2.year-1)/4-(dt2.year-1)/100+(dt2.year-1)/400+dt2.D3 +dt2.day ;for(int j=0;j<=dt2.month -1;j+)d

20、t2.D3 +=mon_dayj;dt3.d =dt1.D -dt2.D2 ; return dt3;CDate &operator += (CDate &a1,int d)if(a1.year%4=0&&a1.year%100!=0|a1.year%400=0)mon_day1=29;a1.day+=d;while(a1.day>mon_daya1.month-1)a1.day-=mon_daya1.month-1;if(+a1.month=13)a1.month=1;a1.year+;return a1;std:ostream& operato

21、r<< ( std:ostream& os, CDate& dt ) os << dt.year << '/' << dt.month << '/' << dt.day ; return os;std:istream& operator>> ( std:istream& is, CDate& dt ) is >> dt.year >> dt.month >> dt.day ; return is;int

22、_tmain(int argc, _TCHAR* argv)CDate b2(2021,2,29);b2.check ();CDate b5(2021,6,9);b5.check ();/b2.display (); / CDate b1(-1231,10,17);/b1.display ();/cout<<"*"<<endl;/b1.fun ();/CDate b3(1992,10,17); / CDate b4;/b4=12+b3;/b4.display (); /CDate dt1(2021 ,1,1);/CDate dt2(2021 ,1,1

23、);/CDate dt3;/dt3=dt1-dt2;/dt3.gettian ();/CDate a1(1992,10,17);/a1+=2;/a1.display ();/CDate dt( 1992,10,17); /std:cout << dt<<endl;/cout<<"请输入日期:"/std:cin>>dt;/cout<<endl;return 0; 公司印章管理制度一、目的 公司印章是公司对内对外行使权力的标志,也是公司名称的法律体现, 因此,必须对印章进行规范化、合理化的严格管理,以保证公司各项业务的正常运作,由公司指定专人负责管理。二、印章的种类1、 公章,是按照政府规定,由主管部门批准刻制的代表公

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论