版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宁波市升力同创科技咨询服务有限公司招聘备考题库及答案详解一套
- 高中语文课堂数字化教学任务智能分配对学生文学素养的影响教学研究课题报告
- 浙商银行金华分行2025年四季度社会招聘备考题库及完整答案详解一套
- 2025年长沙市长沙星沙街道盼盼幼儿园教师招聘备考题库有答案详解
- 小学道德与法治六年级下册4.8 科技发展 造福人类 第二课时 课件内嵌视频
- 2025年独山县百泉镇村(社区)后备干部招募备考题库及答案详解一套
- 简约文艺风白色家居产品手册
- 2025年贵州翎航拓达科技有限公司招聘备考题库及完整答案详解一套
- AI训练设备姿态传感器集成训练系统开发课题报告教学研究课题报告
- 初中数学教学中探究式学习的策略研究与应用教学研究课题报告
- 2025年淮北市相山区公开招考村(社区)后备干部66人备考题库及一套完整答案详解
- 2025年农业农村部耕地质量和农田工程监督保护中心度面向社会公开招聘工作人员12人备考题库有答案详解
- 水平定向钻施工组织设计方案(顶管组织设计)
- 2025年护士长护理管理考核题目及答案
- 三防漆涂覆流程及质量控制标准
- 新生儿败血症诊断及治疗专家共识(2024)解读
- 知道智慧树网课《统计学(中南财经政法大学)》课后章节测试答案
- 山东省齐鲁名校大联考2025-2026学年高三上学期10月月考英语试题
- 2025年贵州锦麟化工有限责任公司公开招聘13人笔试题库历年考点版附带答案详解
- 河北省部分地区2023-2024学年度高二上学期期末考试英语试题(解析版)
- GB/T 9390-2017导航术语
评论
0/150
提交评论