题目描述

软件作为一种对象也可以用类来描述,软件的属性包括软件名称、类型(分别用O、T和B表示原版、试用版还是备份)、有效截至日期(用CDate类子对象表示)和存储介质(分别用D、H和U表示光盘、磁盘和U盘)等。软件拷贝可通过拷贝构造函数来实现,此时在拷贝构造函数中软件类型改成“B”, 存储介质改为"H",其它不变。试完成该类的拷贝构造、构造和打印(包括从2015年4月7日算起有效期还有多少天,是否过期)成员函数的实现。

当输入软件有效截止日期是0年0月0日,表示无日期限制,为unlimited;当输入日期在2015年4月7日之前,则是过期,表示为expired;如果输入日期在2015年4月7日之后,则显示之后的剩余天数。具体输出信息看输出范例。

附CDate类的实现:

class CDate
{
private:
int year, month, day;
public:
CDate(int y, int m, int d) { year = y; month = m; day = d; }
bool isLeapYear() { return (year%4 == 0 && year%100 != 0) || year%400 == 0; }
int getYear() { return year; }
int getMonth() { return month; }
int getDay() { return day; }
int getDayofYear()         //计算日期从当年1月1日算起的天数
{
int i, sum=day;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};

if (isLeapYear())
for(i=0;i<month;i++)   sum +=b[i];
else
for(i=0;i<month;i++)   sum +=a[i];

return sum;
}
};

输入

测试数据的组数 t

第一个软件名称

第一个软件类型  第一个软件介质类型  第一个软件有效期年 月 日

第二个软件名称

第二个软件类型 第二个软件介质类型 第二个软件有效期年 月 日

......

输出

name: 第一个软件名称

type: 第一个软件类型

media: 第一个软件介质类型

第一个软件2015-4-7后的有效天数

name: 第一个软件名称

type: backup

media: hard disk

第一个软件2015-4-7后的有效天数

......

输入样例1

3
Photoshop_CS5
O D 0 0 0
Audition_3.0
B U 2015 2 3
Visual_Studio_2010
T H 2015 5 5

输出样例1

name:Photoshop_CS5
type:original
media:optical disk
this software has unlimited usename:Photoshop_CS5
type:backup
media:hard disk
this software has unlimited usename:Audition_3.0
type:backup
media:USB disk
this software has expiredname:Audition_3.0
type:backup
media:hard disk
this software has expiredname:Visual_Studio_2010
type:trial
media:hard disk
this software is going to be expired in 28 daysname:Visual_Studio_2010
type:backup
media:hard disk
this software is going to be expired in 28 days
#include <iostream>
using namespace std;
class CDate
{
private:int year, month, day;
public:CDate(){};CDate(int y, int m, int d) { year = y; month = m; day = d; }void setdate(int _year,int _month,int _day){year=_year;month=_month;day=_day;};bool isLeapYear() { return (year%4 == 0 && year%100 != 0) || year%400 == 0; }int getYear() { return year; }int getMonth() { return month; }int getDay() { return day; }int getDayofYear()         //计算日期从当年1月1日算起的天数{int i, sum=day;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};if (isLeapYear())for(i=0;i<month;i++)   sum +=b[i];elsefor(i=0;i<month;i++)   sum +=a[i];return sum;}
};
class Software
{string  name;char type;CDate duedate;char media;
public:Software(){};Software(string _name,char _type,char _media,int _year,int _month,int _day);Software(Software &software);
};
Software::Software(string _name, char _type, char _media, int _year, int _month, int _day)
{name=_name;type=_type;media=_media;duedate.setdate(_year,_month,_day);cout<<"name:"<<name<<endl;if(type=='O'){cout<<"type:original"<<endl;}else if(type=='T'){cout<<"type:trial"<<endl;}else if(type=='B'){cout<<"type:backup"<<endl;}if(media=='D'){cout<<"media:optical disk"<<endl;}else if(media=='H'){cout<<"media:hard disk"<<endl;}else if(media=='U'){cout<<"media:USB disk"<<endl;}if(duedate.getYear()==0&&duedate.getMonth()==0&&duedate.getDay()==0){cout<<"this software has unlimited use"<<endl;}else{if(duedate.getYear()<2015||duedate.getYear()==2015&&duedate.getMonth()<4||duedate.getYear()==2015&&duedate.getMonth()==4&&duedate.getDay()<=7){cout<<"this software has expired"<<endl;}else{cout<<"this software is going to be expired in "<<duedate.getDayofYear()-97<<" days"<<endl;}}
}
Software::Software( Software &software)
{name=software.name;cout<<"name:"<<name<<endl;cout<<"type:backup"<<endl;cout<<"media:hard disk"<<endl;duedate.setdate(software.duedate.getYear(),software.duedate.getMonth(),software.duedate.getDay());if(duedate.getYear()==0&&duedate.getMonth()==0&&duedate.getDay()==0){cout<<"this software has unlimited use"<<endl;}else{if(duedate.getYear()<2015||duedate.getYear()==2015&&duedate.getMonth()<4||duedate.getYear()==2015&&duedate.getMonth()==4&&duedate.getDay()<=7){cout<<"this software has expired"<<endl;}else{cout<<"this software is going to be expired in "<<duedate.getDayofYear()-97<<" days"<<endl;}}
}
int main()
{int t,i;i=0;cin>>t;string _name;char _type;char _media;int _year,_month,_day;for(i=0;i<t;i++){cin>>_name>>_type>>_media>>_year>>_month>>_day;Software software1(_name,_type,_media,_year,_month,_day);cout<<endl;Software software2(software1);cout<<endl;}return 0;
}

C++软件备份(拷贝构造函数)相关推荐

  1. D. 软件备份(拷贝构造函数)

    题目描述软件作为一种对象也可以用类来描述,软件的属性包括软件名称.类型 (分别用O.T和B表示原版.试用版还是备份).有效截至日期(用CDate类 子对象表示)和存储介质(分别用D.H和U表示光盘.磁 ...

  2. 【id:52】【20分】D. 软件备份(拷贝构造函数)

    题目描述 软件作为一种对象也可以用类来描述,软件的属性包括软件名称.类型(分别用O.T和B表示原版.试用版还是备份).有效截至日期(用CDate类子对象表示)和存储介质(分别用D.H和U表示光盘.磁盘 ...

  3. 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在

    用友t6软件备份提示超时已过期,错误'53'文件不存在备份提示超时已过期,错误'53'文件不存在 备份提示超时已过期,错误'53'文件不存在 原因分析:后台表ua_log日志记录太多. 问题解答:清除 ...

  4. 管家婆服务器备份在哪个文件夹,管家婆财务软件备份以及恢复方法

    管家婆财务软件备份以及恢复方法 管家婆软件安装好之后一般默认为每天自动备份一次,自动备份周期在软件的系统配置里修改.如果重装系统或者防止数据丢失,可以自己手动备份.下面是yjbys小编为大家带来的关于 ...

  5. 管家婆服务器备份文件夹,管家婆软件备份以及恢复方法

    管家婆软件备份以及恢复方法 管家婆软件安装好之后一般默认为每天自动备份一次,自动备份周期在软件的系统配置里修改.如果重装系统或者防止数据丢失,可以自己手动备份.下面是yjbys小编为大家带来的管家婆软 ...

  6. 备忘录_C++_拷贝构造函数

    脚踏实地,仰望星空 目录视图 摘要视图 订阅 程序员必须要学会算法吗     博客专家庄晓立:我为什么要选择Rust?     从零练就iOS高手实战班震撼来袭     新型数据库利弊谈     C+ ...

  7. C++ 复制构造函数或者拷贝构造函数

    复制构造函数 是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 复制构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象. 复制对象把它作为参数传 ...

  8. C++ 笔记(17)— 类和对象(构造函数、析构函数、拷贝构造函数)

    1. 构造函数 构造函数是一种特殊的函数(方法),在根据类创建对象时被调用.构造函数是一种随着对象创建而自动被调用的函数,它的主要用途是为对象作初始化. 构造函数的名称与类的名称是完全相同的,并且不会 ...

  9. 【C++】何时需要自定义拷贝构造函数和赋值符

    先来说结论:当类中有指针类型成员变量的时候,一定要自定义拷贝构造和赋值运算符 原因:当我们在有指针类成员变量的时候,还是用默认拷贝构造函数(拷贝构造函数执行的时候会调用赋值符),默认赋值为浅拷贝,会导 ...

最新文章

  1. 关于C++中vector和set使用sort方法进行排序
  2. java学习(113):Calendar类
  3. 【MySQL】【备份】mydumper安装与使用细节
  4. java类库查询手册_JAVA类库手册
  5. 5分钟让你明白金融危机爆发原因
  6. SpringBoot实现异步任务以及定时任务
  7. 通过Python获取拉钩招聘网站的公司详细地址
  8. 小谷机器人连不上wifi_小谷连不上网怎么办
  9. indiegogo众筹代理经验分享
  10. matlab基本操作与矩阵输入简单表示
  11. 变色龙哈希函数-区块链
  12. php 获取带宽,php使用网络攻击占用超大带宽的,解决方案[转]
  13. linux ide sata硬盘,Linux 下SATA与IDE硬盘区别
  14. 思博伦Spirent TestCenter _如何使用抓包过滤功能抓取特定的帧_双极未来
  15. 时间差之天数计算Python
  16. RV1109_RV1126 EVB板连接时List of devices attached
  17. 艺术在数字时代的诗与远方
  18. 推荐好的学习资源网站
  19. 详解Bresenham算法原理(1)
  20. 社群管理工具汇总,一篇文字全部搞定

热门文章

  1. CH2907 乳草的入侵 BFS
  2. GDI+学习笔记(六)渐变画刷
  3. Apache 的 httpd.conf 详解
  4. 微信免密支付:签名参数构造错误请联系商户处理 【终极解决方案】
  5. VIPLE 对变量实现一个加法计算
  6. DIY OpenTX Lite V1.0 先进的开源航模遥控器控制板!
  7. leetcode 猫和老鼠
  8. 微服务[学成在线] day15:媒资管理系统集成
  9. 性能测试工具-腾讯GT
  10. 韦东山衔接班——1.1_u-boot分析之编译体验