背景:还有一个多月就要考英语六级了,昨晚躺在床上苦苦焦虑单词还没有背,这可咋整啊,于是就想到了给自己整理一个详细科学的记忆表来督促自己背单词。按照平常高中时候可能就自己拿笔傻傻地在纸上立着flag了,昨晚在梦里突然想起了可以利用学过的C++日期类给自己指定一份单词记忆表,我恍然大悟,赶紧爬起床敲起了代码,开始写上这份日期表。

有时候总是在刷题,刷了一些题目过后,可能题目思路掌握了,但是似乎很多都没有真正去理解其核心含义。为何不自己针对自己的实际生活学习需求出发,利用编程去便利我们的生活和学习。

设计要求:六级英语单词总共有30个单元的词汇,根据艾宾浩斯遗忘曲线我需要在第1,2,4,7,14,28天的时候去不断重复记忆一个单元的单词。

代码

#include <iostream>
using namespace std;
#include <assert.h>
class Date
{
public:Date(int year = 1, int month = 1, int day = 1);void Print();int GetMonthDay(int year, int month);bool operator>(const Date& d);bool operator<(const Date& d);bool operator>=(const Date& d);bool operator<=(const Date& d);bool operator==(const Date& d);bool operator!=(const Date& d);//这六个成员函数只需要实现两个其他的实现就可以复用//不仅仅是Date类可以这样实现,所有的类实现比较,都可以用这种复用的方式Date& operator+=(int day);Date& operator++();int operator-(const Date& d);//打印日期是星期几void PrintGetWeekDay();
private:int _year;int _month;int _day;
};
Date::Date(int year, int month, int day)
{_year = year;_month = month;_day = day;if (!(_year >= 0) &&(_month > 0 && _month < 13)&& (_day > 0 && _day <= GetMonthDay(year, month))){cout << "非法日期->";this->Print();}
}//自行设计一个构造函数来判断用户输入的日期是否合法
void Date::Print()
{cout << _year << "-" << _month << "-" << _day;
}
int Date::GetMonthDay(int year, int month)
{static int monthDayArray[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int day = monthDayArray[month];//一年大概365天+5小时if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))//先判断是否是二月,再判断闰年{day += 1;//如果是闰年并且是二月,那么day+1}return day;
}
bool Date::operator>(const Date& d)//bool operator>(Date* const this,const Date& d)
{if (_year > d._year){return true;}else if (_year == d._year&&_month > d._month){return true;}else if (_year == d._year&&_month == d._month&&_day > d._day){return true;}else{return false;}
}
//d1==d2
bool Date::operator==(const Date& d)
{return _year == d._year&& _month == d._month&& _day == d._day;
}
//d1>=d2
bool Date::operator>=(const Date& d)
{return *this > d || *this == d;
}
//d1<d2
bool Date::operator<(const Date& d)
{return !(*this >= d);
}
//d1<=d2
bool Date::operator<=(const Date& d)
{return !(*this > d);
}
//d1!=d2
bool Date::operator!=(const Date& d)
{return !(*this == d);
}
//d1+=100
Date& Date::operator+=(int day)
{_day += day;while (_day > GetMonthDay(_year, _month))//大于月份天数就需要再处理{_day -= GetMonthDay(_year, _month);_month++;//_month要先减了当月的天数再++if (_month == 13){_month = 1;_year++;}}return *this;//这里返回的是d1
}
//++d1.自定义类型++推荐使用前置++
Date& Date::operator++()
{*this += 1;return *this;//返回++之后的值
}
int Date::operator-(const Date& d)
{Date max = *this;Date min = d;//默认假设为第一个大第二个小int flag = 1;//设定一个flag为正数1,第一个大于第二个时相减为正数if (*this < d){max = d;min = *this;flag = -1;//如果第一个小第二个大时第一个和第二个相减时结果为负数,将flag置为1}int count = 0;//利用计数器去不断++,最终count就是相差的天数while (min != max){++min;++count;}return count * flag;
}
void Date::PrintGetWeekDay()
{const char* arr[] = { "星期一","星期二","星期三", "星期四", "星期五", "星期六", "星期日" };Date start(1900, 1, 1);int count = *this - start;cout << arr[count % 7] << endl;
}
int main()
{Date start(2022, 5, 5);for (int i = 1; i <= 30; i++){start.Print();printf("\t");start.PrintGetWeekDay();start += 1;printf("%d\t", i);if ((i - 1) > 0){printf("\t%d\t", (i - 1));}if ((i - 3) > 0){printf("\t%d\t", (i - 3));}if ((i - 6) > 0){printf("\t%d\t", (i - 6));}if ((i - 13) > 0){printf("\t%d\t", (i - 13));}if ((i - 27) > 0){printf("\t%d\t", (i - 27));}printf("\n");printf("----------------------------------------------------------------------------------------------\n");}return 0;
}

运行结果:

2022-5-5        星期四
1
----------------------------------------------------------------------------------------------
2022-5-6        星期五
2               1
----------------------------------------------------------------------------------------------
2022-5-7        星期六
3               2
----------------------------------------------------------------------------------------------
2022-5-8        星期日
4               3               1
----------------------------------------------------------------------------------------------
2022-5-9        星期一
5               4               2
----------------------------------------------------------------------------------------------
2022-5-10       星期二
6               5               3
----------------------------------------------------------------------------------------------
2022-5-11       星期三
7               6               4               1
----------------------------------------------------------------------------------------------
2022-5-12       星期四
8               7               5               2
----------------------------------------------------------------------------------------------
2022-5-13       星期五
9               8               6               3
----------------------------------------------------------------------------------------------
2022-5-14       星期六
10              9               7               4
----------------------------------------------------------------------------------------------
2022-5-15       星期日
11              10              8               5
----------------------------------------------------------------------------------------------
2022-5-16       星期一
12              11              9               6
----------------------------------------------------------------------------------------------
2022-5-17       星期二
13              12              10              7
----------------------------------------------------------------------------------------------
2022-5-18       星期三
14              13              11              8               1
----------------------------------------------------------------------------------------------
2022-5-19       星期四
15              14              12              9               2
----------------------------------------------------------------------------------------------
2022-5-20       星期五
16              15              13              10              3
----------------------------------------------------------------------------------------------
2022-5-21       星期六
17              16              14              11              4
----------------------------------------------------------------------------------------------
2022-5-22       星期日
18              17              15              12              5
----------------------------------------------------------------------------------------------
2022-5-23       星期一
19              18              16              13              6
----------------------------------------------------------------------------------------------
2022-5-24       星期二
20              19              17              14              7
----------------------------------------------------------------------------------------------
2022-5-25       星期三
21              20              18              15              8
----------------------------------------------------------------------------------------------
2022-5-26       星期四
22              21              19              16              9
----------------------------------------------------------------------------------------------
2022-5-27       星期五
23              22              20              17              10
----------------------------------------------------------------------------------------------
2022-5-28       星期六
24              23              21              18              11
----------------------------------------------------------------------------------------------
2022-5-29       星期日
25              24              22              19              12
----------------------------------------------------------------------------------------------
2022-5-30       星期一
26              25              23              20              13
----------------------------------------------------------------------------------------------
2022-5-31       星期二
27              26              24              21              14
----------------------------------------------------------------------------------------------
2022-6-1        星期三
28              27              25              22              15              1
----------------------------------------------------------------------------------------------
2022-6-2        星期四
29              28              26              23              16              2
----------------------------------------------------------------------------------------------
2022-6-3        星期五
30              29              27              24              17              3
----------------------------------------------------------------------------------------------D:\c++code\ppp\Debug\ppp.exe (进程 14564)已退出,返回代码为: 0。
按任意键关闭此窗口...

好了,写到这里顺便自己又复习了一遍日期类,背单词去咯哈哈哈哈哈哈哈

根据艾宾浩斯遗忘曲线利用日期类给自己指定一份背六级单词的计划时间表相关推荐

  1. 基于艾宾浩斯遗忘曲线的英语词汇学习微信小程序——一些思路和想法

    之前想做一个利用艾宾浩斯遗忘曲线规律来背单词的小程序,但是不太知道这么做,参考查阅了很多文章,这里整理一下思路. 一.艾宾浩斯遗忘曲线 艾宾浩斯遗忘曲线的具体应用是利<复习点>来重复学习单 ...

  2. Java OOP 8 实用类(枚举、包装类、日期类、Random类)

    Java OOP 8 实用类 文章目录 Java OOP 8 实用类 一.学习目标 二.Java API 三.枚举 3.1为什么使用枚举? 3.2什么是枚举? 3.3如何使用枚举? 3.4常见错误 四 ...

  3. Java 利用Calender类制作日历,并且标注日期

    #Java 利用Calender类制作日历,并且标注日期 文章目录 1.题目需求 2. Calender类 java.uiti 类 Calender 3. 代码思路 1.从控制台获取一个日期.如202 ...

  4. Python:根据艾宾浩斯遗忘曲线计算复习日期

    前言:最近开始复习考研英语了,每天做阅读记笔记,同时每天需要复习前几天的笔记,考虑到艾宾浩斯遗忘曲线这个东西,便写了一个小脚本来计算每一天记录的笔记需要复习的日期. 函数说明:函数review_tim ...

  5. 艾宾浩斯记忆表格excel_Excel全年学习复习计划表(艾宾浩斯遗忘曲线)

    最近准备考在职博士,刷刷学历,不得不又拿起必考的英语来,发现由于这几年敲代码,日常生活词汇忘了很多,只好买本考博词汇背诵,不过三十而立的人背起来确实费劲了,所以开始寻找好的背诵方法. 又想起了当年步步 ...

  6. JS日期格式化(从YYYY-MM-DD到日期类)

    2019独角兽企业重金招聘Python工程师标准>>> 字符串格式日期利用阅读,但不利于标准化存储,可以通过以下函数转化为Javascript日期类: // date = '2015 ...

  7. java知识点八:时间日期类

    时间日期类 一.常用日期类 1.System类 2.Date类 3.SimpleDateFormat类 4.Calendar类 二.System类 比较常用的相关方法currentTimeMills( ...

  8. java中日历类的用法_java日期类的用法

    java日期类的用法 不管你是处理财务交易还是计划着下一步的行动,你都要知道怎样在Java中建立,使用和显示日期.这需要你简单的查阅一下相应类的API参考:一个日期可以创建3个相关类的对象.这篇文章告 ...

  9. [转载] 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)

    参考链接: Python中的时间函数 2(日期操作) 我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当 ...

最新文章

  1. 安装exchange server 2003服务器
  2. Ubuntu下安装kate编辑器
  3. list java removeif_java – removeIf()方法.从List中删除所有元素
  4. 拖拽自动生成的DataGridView和BindingSource操作数据库(增加,修改,删除)---自己实现...
  5. 基于51单片机的时钟系统
  6. 在单用户模式下启动SQL Server的不同方法
  7. Python之pyclipper使用
  8. sql中having、group by用法及常用聚合函数
  9. 2天玩转单反相机引领快乐光影新生活
  10. notepad++格式化代码,自动对齐
  11. 【Linux】一个小故事让你秒懂shell外壳程序
  12. php获取静态url地址,[静态/伪静态]自定义URL地址详细教程
  13. 计算机硬件设备论文题目,计算机硬件维护论文题目大全 计算机硬件维护论文题目选什么比较好...
  14. 平衡二叉树(C++实现)
  15. mysql数据库空间不足_mysql空间不足怎么解决?
  16. gazebo添加模型仿真
  17. 电机的反电动势了解及步进电机的基本特性
  18. Insta360影石递交注册:年营收将超12亿 启明与迅雷为股东
  19. 把EXCEL用程序导入到ORACLE中(SpringMVC+MyBatis)
  20. 微软雅黑html中怎么写,网页中使用微软雅黑字体(css调用微软雅黑)

热门文章

  1. EL852 代替品 喆光WISELITE MPC-852光电晶体管 60mA 350V达林顿输出晶体管
  2. 根据工资计算应缴纳的党费
  3. 老闪创业那些事儿(外传)——林家小妹的码农男友
  4. BaaS究竟是什么?
  5. Linux中的log介绍(一)---概述
  6. python for循环写在一行_python开发如何将嵌套 for 循环写成单行?
  7. flv文件格式分析FlvParse.exe
  8. 博客园自动发帖--图像处理极验验证码
  9. win10 u盘 修复计算机,win10系统修复u盘制作
  10. 算法性能分析(6):代码的内存消耗