1.思维导图及学习体会

1.1第一章绪论知识点思维导图

1.2 学习体会

1.开学刚刚上完一节课就要写大作业,的确是有些猝不及防;特别是对于有些语法还是不太熟练,写起大作业来也是有点吃力。
2.对于数据结构感觉,这门课程相比C语言来说其重点更放在数据、算法上。而且抽象数据类型学起来的确是挺抽象的,需要花时间来理解。
3.编程过程中慢慢融入C++语法,不得不说的确是比C语言来的更加方便,从而萌生了想用比C++更便捷的语言来编程的想法。

2.大作业作业内容

2.1 设计日期的ADT类型

ADT Date{
数据对象:
    D={year,month,day | year,month,day属于int类型}
数据关系:
    R = {<year,month>,<month,day>}
数据操作:
    void InputDate(int*&date,int year,int month,int day);
    //初始化日期
    //操作结果:构造了year、month、day,三元组。
 
    int JudgeDate(int *date,ofstream &write);
    //初始条件:date存在,文件成功打开。
    //操作结果:判断文件内的日期是否合法,若合法则放回1,不合法则返回0。

   void JudgeYear(int *date,ofstream &write);
    //初始条件:date存在,文件成功打开,日期合法。
    //操作结果:判断其年份是平年还是闰年,并将结果写入output,txt文件。
   
   void JudgeWeek(int *date,ofstream &write);
   //初始条件:date存在,文件成功打开,日期合法。
   //操作结果:判断其日期是星期几,并将结果写入outpot.txt文件。

   void BackMonth(int *date,ofstream &write);
   //初始条件:date存在,文件成功打开,日期合法。
   //操作结果:将月份的英文单词放回,并写入outpot.txt文件。

   void AddDays(int *date,ofstream &write);
   //初始条件:date存在,文件成功打开,日期合法,输入天数正确。
   //操作结果:计算增加xxx天后,的日期是多少,并写入outpot.txt文件。

   void CompareDate(int *date,ofstream &write);
   //初始条件:date存在,文件成功打开,日期合法以及输入日期合法。
   //操作结果:与用户输入的日期比较大小,并写入文件。

   int SecondJudge(int year,int month,int days);
   //初始条件:输入正确的比较年份日期。
   //操作结果:对比较的日期判断是否合法,合法返回1,不合法则返回0。

} ADT Date

2.2数据抽象:

2.3数据封装说明

(1)构造日期函数

动态申请内存,分别将年月日放入date数组中

(2)日期合法性判断函数

这个函数首先对当前年份进行判断是否是闰年,进而确定2月份的天数,接下来判断月份是否在区间【1,12】中,若不是则直接返回0表示非法;若是,则进入下一步的月份天数的判断,判断是否超过当月最大天数,最后将合法日期写入文件,并返回1。

(3)闰年判断函数

这个函数比较简单,首先用公式对年份进行闰平年的判断,然后一个分支结构放回不同的结果。

(4)星期判断函数

星期判断的函数也比较简单,运用公式,将对应日期的星期算出,在用switch语句选择对应的星期写入文件。

(5)月份英文返回函数

直接把月份放入switch语句中选择对应的英文单词,将其写入文件。

(6)增加天数计算函数

首先是输入增加的天数,并将其和当前天数合并计算。如果总天数大于当月天数,则进入循环,减去当前天数并月份增加1,判断如果月份超过12则归1,年份加一。一年判断后就要再对下一年判断闰平年,不断循环,直到跳出并写入文件。

(7)日期比较函数

首先用户需要输入要比较的日期,用一个while循环兵调用SecondJudge函数对其判断是否合法,然后进入分支结构的一步步判断,先比年份再比月份,最后比号数,并将结果写入文件。

(8)输入日期合法性判断函数

此函数主要是用于日期比较函数的输入数据合法性的判断,虽然上面也有一个功能相同的函数,但为了防止出错,便重新定义了一个不含指针的函数对其进行判断,其函数原理与JudgeDate函数相同。

(9)主函数

用C++语法打开和关闭文件,定义一个循环结构不断读取input.txt文件内的数据,并写入output.txt文件。

3.结果展示

文件input.txt中的数据:

运行界面:

文件output.txt中的结果:

4.调试碰到的问题。

Q1:首先是C++中文件开闭的操作不知道该如何实现。
A1:百度搜索C++文件开闭的相关语法(百度找到的语法相对比较零散,并不能完整的掌握整个语法要执行的条件),结合参考同学代码解决此问题。

Q2:日期比较发现出错,不管输入什么数据都是显示大于当前数据。
A2:发现分支结构书写错误,没有将相等或者小于时的情况分开考虑,导致出错。不得不说,写代码还是要保持认真,专心,而且需要多加调试。