首页 > 代码库 > C++学习之路 : class练习
C++学习之路 : class练习
需求:
1.作业:写一个Date类
a) 数据成员:year/month/day ok
b) 提供两个构造函数 ok
c) 实现功能setDate设置日期 ok
d) 把时间设定为今天 setToday(); ok
e) toString() 打印格式:2009/7/31 ok
f) toFormatString:对于月份采用英文 September 19 2014 ok
g) isLeapYear() 判断是否是闰年 ok
h) calDayOfYear() 计算该日期是当年的第几天(注意闰年) ok
i) 写一个全局的函数int differenceDate(const Date &d1, const Date &d2);比较两个日期的差异(d1 - d2), 可以写为static函数 ok
j) 写一个static函数today(),返回代表今天的Date对象。
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <time.h> 5 #include <stdlib.h> 6 #include <stdio.h> 7 8 #define ERR_EXIT(m) 9 do { 10 perror(m); 11 exit(EXIT_FAILURE); 12 }while(0) 13 14 using namespace std; 15 16 17 18 19 class Date 20 { 21 private : 22 int year_; 23 int month_ ; 24 int day_; 25 public : 26 27 28 Date() : 29 year_(2014), month_(1), day_(1) 30 {} 31 32 Date(int year, int month, int day) : 33 year_(year), month_(month), day_(day) 34 35 { 36 } 37 38 void setDate(int year, int month,int day) 39 { 40 year_ = year ; 41 month_ = month ; 42 day_ = day ; 43 } ; 44 45 int getYear() const 46 { 47 return year_; 48 } 49 50 int getmonth() const 51 { 52 return month_ ; 53 } 54 55 int getDay() const 56 { 57 return day_ ; 58 } 59 60 int whatDay() 61 { 62 time_t t; 63 t = time(NULL) ; 64 struct tm* now = localtime(&t) ; 65 int day = now->tm_yday; 66 67 return day ; 68 } 69 70 void setToday() 71 { 72 time_t t; 73 t = time(NULL); 74 struct tm* now = localtime(&t) ; 75 76 year_ = 1900 + now->tm_year; 77 78 month_ = 1 + now->tm_mon ; 79 day_ = now->tm_mday ; 80 81 printf("local time is %s", asctime(now)); 82 } 83 84 void toString() 85 { 86 cout << year_ << "/" << month_ << "/" << day_ << endl; 87 } 88 89 void toFormatString() 90 { 91 switch (month_) 92 { 93 case 1: cout << "January " ; break ; 94 case 2: cout << "February " ; break; 95 case 3: cout << "March " ; break; 96 case 4: cout << "April " ; break; 97 case 5: cout << "May " ; break; 98 case 6: cout << "June " ; break ; 99 case 7: cout << "July" ; break; 100 case 8: cout << "August" ; break ;101 case 9: cout << "September" ;break;102 case 10: cout << "October" ;break;103 case 11: cout << "November" ; break;104 case 12: cout << "December" ;break;105 default : ERR_EXIT("月份输入错误") ;break;106 }107 cout << day_ << " " << year_ <<endl;108 109 }110 bool isLeapYear() const 111 {112 return (year_ % 400 == 0) || (year_ % 4 == 0 && year_ % 100 != 0) ;113 }114 115 int calDayOfYear() const116 {117 int sum = 0;118 if(isLeapYear())119 {120 int sign[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;121 for(int i = 1; i < month_; i++)122 {123 cout << "进入闰年循环" << endl;124 sum += sign[i] ;125 }126 127 }else128 {129 int sign[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;130 for(int i = 1; i < month_; i++)131 {132 cout << "进入非闰年循环" << endl;133 sum += sign[i] ;134 }135 136 }137 sum += day_ ;138 139 return sum ;140 }141 } ;142 143 144 bool isLeapYear(int year)145 {146 return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0) ;147 }148 149 static int differenceDate(const Date &d1, const Date &d2)150 {151 int temp(0);152 int sum(0) ;153 int year1 = d1.getYear() ;154 int year2 = d2.getYear() ;155 156 if( year1 > year2)157 {158 for (int i = year2; i < year1; i++) {159 if(isLeapYear(i))160 {161 sum += 366 ;162 }else163 {164 sum += 365 ;165 }166 }167 sum += d2.calDayOfYear() ;168 sum -= d1.calDayOfYear() ;169 170 }else if(year1 == year2)171 {172 sum = d1.calDayOfYear() - d2.calDayOfYear() ;173 if(sum < 0)174 {175 sum = -sum;176 }177 }else178 {179 for (int i = year1; i < year2; i++) {180 if(isLeapYear(i))181 {182 sum += 366;183 }else184 {185 sum += 365;186 }187 sum += d2.calDayOfYear() ;188 sum -= d1.calDayOfYear() ;189 }190 }191 192 return sum ;193 }194 195 static Date toDay(Date &kong)196 {197 kong.setToday() ;198 return kong;199 }200 201 int main(int argc, const char *argv[])202 {203 Date test; 204 //test.setToday() ;205 cout << "设置前-----------------" << endl;206 test.toString() ;207 test.setDate(2014, 9, 20) ;208 cout << "设置后-----------------" << endl;209 test.toString() ;210 cout << "toFormatString" << endl;211 test.toFormatString() ;212 cout << "isLeapYear" << endl;213 if(test.isLeapYear()) 214 cout << "是闰年" << endl ;215 else216 cout << "不是闰年" << endl;217 cout << "calDayOfYear " << endl;218 int num = test.calDayOfYear() ;219 cout << "第 "<< num << "天" <<endl;220 221 cout<< "----whatDay()----" << endl;222 int day = test.whatDay() ;223 cout << day << endl;224 225 Date d1(2002, 1, 1) ;226 Date d2(2001, 1, 1) ;227 int dif;228 dif = differenceDate(d1, d2) ;229 230 cout << "-----differenceDate--------" << endl ;231 cout << dif << endl;232 return 0;233 }
缺少一个 判断函数检验 输入的年月日是否非法。 其他功能均已实现
C++学习之路 : class练习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。