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

  • 相关阅读:
    jquery中,input获得焦点时光标自动定位到文字后面
    微信接口调用
    bootstrap-datetimepicker插件双日期的设置
    input输入框在移动端点击有阴影解决方法
    input输入框光标高度问题
    Appendix 2- Lebesgue integration and Reimann integration
    Appendix 1- LLN and Central Limit Theorem
    LESSON 7- High Rate Quantizers and Waveform Encoding
    LESSON 6- Quantization
    LESSON 5
  • 原文地址:https://www.cnblogs.com/yhy949/p/10503875.html
Copyright © 2020-2023  润新知