zoukankan      html  css  js  c++  java
  • 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:???还是不是很懂。

  • 相关阅读:
    Spring Boot 使用 Dom4j XStream 操作 Xml
    Spring Boot 使用 JAX-WS 调用 WebService 服务
    Spring Boot 使用 CXF 调用 WebService 服务
    Spring Boot 开发 WebService 服务
    Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
    Spring Boot Ftp Client 客户端示例支持断点续传
    Spring Boot 发送邮件
    Spring Boot 定时任务 Quartz 使用教程
    Spring Boot 缓存应用 Memcached 入门教程
    ThreadLocal,Java中特殊的线程绑定机制
  • 原文地址:https://www.cnblogs.com/yhy949/p/10503875.html
Copyright © 2011-2022 走看看