DS博客作业01--日期抽象数据类型设计与实现

1.思维导图及学习体会

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

1.2学习体会

从这个学期开始开始学数据结构,先是接触了绪论,主要的题还在认识数据结构加以理解概念和进行简单的操作上,计算一些时间复杂度和空间复杂度,但通过做pta 上的题我发现,这里对数组和链表的要求也很多,我上个学期这方面的基础不好,所以这个学期要之前补这方面的知识。然后就是C++的语法,这个学期要自学,我在这方面也要下功夫。

2大作业作业内容

2.1设计日期的ADT类型

ADT DATE
{
	数据对象:
	    D={year,month,day|year,month,day均为实数}             //日期由年月日组成
	数据关系:
	    R={<year,month>,<month,day>|year为年,month为月,day为日} 
	基本运算:	
	   Status InitDate(DATE &D, int year, int month, int day); 
	   //初始条件:存在日期 
           //操作结果:构造了三元组DATE,对年,月,日分别赋值,初始化日期 ,判断是否合法   
           string ReturnDate(DATE D);
           //初始条件:存在日期 
           //操作结果:返回日期,以xxxx-xx-xx的方式返回   
           Status JudgLeapYear(DATE D); 
	   //初始条件:存在日期 
           //操作结果:判断是否为闰年,是则返回语句,是闰年,不是则返回语句不是闰年 
           string GetWeek(DATE D);  
           //初始条件:存在日期  
           //操作结果:根据日期,判断该日期是星期几 
	   string GetMonth(Date D);
           //初始条件:存在日期 
           //操作结果:根据日期 ,判断月份,并返回月份的英文 
           Status AddDate(Date D, int theDay);
           //初始条件:存在日期 
           //操作结果:返回增加天数后的日期
           Status CompareDate(Date D);
           //初始条件:存在日期 
           //操作结果:比较日期的大小,根据关系返回日期差 
}

2.2数据抽象:头文件



2.3数据封装说明

(1).构造三元组DATE,并进行初始化日期,具有一定的容错提示

做法:先将year,month,day变为D数组的一部分,然后分类,闰年与不是闰年,天数为31,30,28,29 天的,但是思路比较简单。



(2).返回日期格式

做法:直接用cout输入日期

cout<<year<<" "<<month<<" "<<day<<endl;

(3).判断是否为闰年

做法:使用了常见的判断闰年的条件

(4).判断该存在日期为星期几

做法:利用基姆拉尔森计算公式,根据年月日,判断为星期几,并使用switch case,返回该星期的英文

(5).返回该日期所在月份的英文

做法:定义字符串函数,用switch case 返回改月份的英文

(6).比较日期的大小,根据关系返回日期差

做法:写两个函数求日期大小,一个传参为输入的年月日,一个传参为DATE,在写一个函数,输入日期,比较大小并通过返回日期差,看出大小。


(7).主函数部分



2.4结果展示

input.txt 文件

输入界面

out.txt 文件

2.5调试碰到问题

Q1:C++语法不清楚,比如文件怎么读入写入和简单的输入输出?
A1:通过询问同学和从网上查找资料。

Q2:在编译过程中会不断循环000是闰年?
A2:把判断日期是否合法中的D[0]改为year等。虽然我不是很懂为什么。

Q3:编译成功后无法读取到文件内容并写入out文件?
A3:第一开始我的input和out文件和我的代码都放在一个文件夹里,后来把他们从文件夹里拿出来后程序就能正常读取文件。

原文地址:https://www.cnblogs.com/20000519yxn/p/10501801.html