01——日期抽象数据类型设计与实现

Posted yhy949

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01——日期抽象数据类型设计与实现相关的知识,希望对你有一定的参考价值。

01--日期抽象数据类型设计与实现

1.思维导图及学习体会

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

思维导图如下:
技术图片

1.2 学习体会

    寒假玩疯了,没有看视频,很少打代码,以至于刚开学的时候没跟上,看书看的吃力,听课也很懵逼,还好现在调整过来了。
上学期学的C语言是数据结构的基础,数据结构就像是把C语言的语法连起来使用。比起上学期按题目要求打代码,我们现在更要考虑代码的时间复杂度和空间复杂度,要思考如何让代码达到最优,这个比单纯解决题目要求更难,这个也是我们这个学期学习的重点,也是我们应该投入精力的部分。

2.大作业

2.1 设计日期的ADT类型

ADT Date{
数据对象:D={year,month,days|year,month,day属于int类型}
数据关系:R={<year,month>,<year,days>}
数据操作:
Status InitDate(Date &date,int year,int month,int day);
//初始化日期
//操作结果:构造日期数据结构Date,其中 year, month, day分别为日期的年,月,日 

Status DestroyDate(Date &date);
//初始条件:date存在
// 操作结果:销毁date 

string Style(Date date);
//初始条件:date存在
// 操作结果:将int类型日期转变为字符串,并返回年年年年-月月-日日格式 

Status IsLegal(int year,int month,int day);
//初始条件:year,month,day存在
// 操作结果:判断日期是否合法,若合法返回OK,若不合法返回ERROR 

Status IsLeapYear(int year);
//初始条件:year存在
// 操作结果:判断年份是否为闰年,若是闰年返回YES,若不是闰年则返回NO 

string WeekDay(int year,int month,int day);
//初始条件:year,month,day存在
// 操作结果:判断日期为星期几,并返回星期字符串 

string Month(int month);
//初始条件:month存在
// 操作结果:返回月份的英文 

string AddDate(Date date,int addDays);
//初始条件:date存在
// 操作结果:求出增加天数后的日期,返回该日期的字符串 

Status CompareDate(Date date,Date otherDate);
//初始条件:date,otherDate存在
// 操作结果:比较日期的大小 ,按两个日期之间的逻辑关系返回1,0,-1 

2.2.数据抽象:头文件)

Common.h

存放自定义数据,使整个代码的可读性大大提高
技术图片

Date.h

技术图片

2.3数据封装说明

(1)构造日期数据结构函数

做法:申请内存,构造三元组date
技术图片

(2)销毁日期数据结构函数

做法:用C++语法销毁
技术图片

(3)固定日期格式函数

做法:将int类型日期转变为string类型,并进行拼接
技术图片

(4)日期合法函数

做法:首先确定month的最大天数,再与day进行比较
技术图片

(5)判断闰年函数

做法:满足能被4整除且不被100整除,或能被400整除的年份即为闰年
技术图片

(6)星期判断公式

做法:利用基姆拉尔森计算公式计算星期几 ,并返回对应字符串
技术图片

(7)月份英文函数

做法:switch语句
技术图片

(8)增加天数函数

做法:先算年份,再算月份,最后算日
技术图片
技术图片
技术图片

(9)比较日期函数

做法:先进行年份相比,若年份相同再比较日
技术图片
技术图片

3.结果展示

小黑框
技术图片

input文件内容:
技术图片

out文件内容:
技术图片

4.调试碰到问题

  • Q1:在将int型的日期转变为固定格式的时候,strcpy,strcat,strcmp,被视为错误(我用的是C++语法)
  • A1:在C++中,strcpy等函数是不安全,可能造成缓冲区溢出。有两种方法:
    一是新建项目时不要勾选安全开发生命周期检查;二是在项目属性C/C++命令行中加上 /D _CRT_SECURE_NO_WARNINGS。(不过我嫌麻烦直接改用C++中string类型的用法)

  • Q2:对C++语法的不熟悉。
  • A2:我事先在网易云课堂上看了C++基本的输入输出和申请空间、释放空间的视频讲解,但C++中还有很多超级好用的隐藏函数和类型,比如string类型可以直接用+、-来进行字符串的连接,等等。还有很多好用的函数等着被发现。

-Q3:函数传入date(无&,并执行函数),但是返回主函数是date里面的值已经被改变了,这是为什么?
-A3:???还是不是很懂。

以上是关于01——日期抽象数据类型设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

算法(第4版)-1.2.5 数据类型的设计

面向对象程序设计

博客作业01-抽象数据类型

数据结构Java实现01----线性表与顺序表

java数据结构与算法之栈(Stack)设计与实现

第10题-接口与抽象类的区别