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:???还是不是很懂。

原文地址:https://www.cnblogs.com/yhy949/p/10503875.html

时间: 2024-11-14 12:32:42

01——日期抽象数据类型设计与实现的相关文章

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

抽象数据类型(ADT)入门(一)

抽象数据类型(ADT)入门(一) 1.抽象数据类型(Abstract Data Types,ADT)和ADT的实现 抽象数据类型:一个数据元素集合以及在这些数据上的操作. ADT的一个实现包括存储数据元素的存储结构以及实现基本操作的算法. 在这个数据抽象的思想中,数据类型的定义和它的实现是分开的,这在软件设计中是一个重要的概念.这使得只研究和使用它的结构而不用考虑它的实现细节成为可能.实际上,这通常使用在int.double.char和bool等预定义数据类型上的方法,使用这些数据类型的程序员在

ELF格式解析库之抽象数据类型

抽象?抽谁的象? ELF是一种链接执行格式,它规定了对于一个ELF文件的基本数据类型是什么样的.可是,要解析一个ELF文件,而这个ELF文件或者是32Bits 或者是 64Bits,反正字长是未定的,怎么办?难道我们要定义两套解析的接口,以对应不同的字长的ELF文件吗?如果要这样做,不是不可以,只是那样做为接口的设计增加了太大的负担.这里我们采用"抽象"的方式,将已有的两套基础数据结构封装成一个兼容的数据结构.这样,我们设计解析接口时,可以做到尽量的简化,大大的减轻了工作量. 因此,这

SQL Server datetime数据类型设计、优化误区

一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢? (图1:数据列表) 你看到这些数据,是不是觉得这样的设计既浪费了存储空间,又使得这个列的索引增大,查询起来更慢,你也想使用一些其它的数据类型来代替这个datetime吧? 其实大家都是这么想的,这个方向是100%正确的,但是在写这篇文章以前,我进入了两个误区:(如果你中了下面的两个误区,那么请你看看这篇文章吧.)

java抽象数据类型

抽象数据类型抽象数据类型是描述数据结构的一种理论工具.在介绍抽象数据类型之前我们先介绍一下数据类型的基本概念.数据类型(data type)是一组性质相同的数据元素的集合以及加在这个集合上的一组操作.例如Java 语言中就有许多不同的数据类型,包括数值型的数据类型.字符串.布尔型等数据类型.以Java 中的int 型为例,int 型的数据元素的集合是[-2147483648,2147483647]间的整数,定义在其上的操作有加.减.乘.除四则运算,还有模运算等.定义数据类型的作用一个是隐藏计算机

抽象数据类型

抽象数据类型是描述数据结构的一种理论工具.在介绍抽象数据类型之前我们先介绍一下数据类型的基本概念.数据类型(data type)是一组性质相同的数据元素的集合以及加在这个集合上的一组操作.例如Java 语言中就有许多不同的数据类型,包括数值型的数据类型.字符串.布尔型等数据类型.以Java 中的int 型为例,int 型的数据元素的集合是[-2147483648,2147483647]间的整数,定义在其上的操作有加.减.乘.除四则运算,还有模运算等.定义数据类型的作用一个是隐藏计算机硬件及其特性

6、SQL基础整理(日期时间数据类型,转换函数)

日期时间数据类型 *系统常量: @@DATEFIRST(返回当前时间) DATEADD 增加时间 语法:DATEADD (datepart , number , date ) select DATEADD(YEAR,2,'2013-11-2') DATEDIFF 两个日期之间的距离 select DATEDIFF(YEAR,'2011-7-18','2014-11-2') DATENAME 返回某个时间值里面想要得到某块类型的数 select DATENAME(YEAR,'2011-7-8')

抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型

抽象类型的新颖性和不同之处在于对操作的关注:类型的用户不需要担心它的值如何实际存储 类型无论是内置的还是用户定义的,都可以分类为可变或不可变 可变类型的对象可以被改变 String是不可变的,因为它的操作创建了新的String对象而不是改变现有的对象 有时一种类型将以两种形式提供,一种可变形式和一种不可变形式. 例如,StringBuilder是String的一个可变版本(不可互换) Creators (构造器)创建该类型的新对象.Creators可以将对象作为参数,但不是正在构建的类型的对象.

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的