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


    1.思维导图及学习体会(2分)

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

    1.2学习体会

    1.开学学习了数据结构的绪论知识。按照学习通里面所说的,学好这方面知识的方法是大量编程,Practice makes better !Practice makes better !Practice makes better !重要的事情说三遍。
    2.C++的语法刚开始接触就要学着应用,有一点难度。目前我写代码主要是先用C语言写出程序,编译成功后再用C++的语句进行修改。这个方法有点笨,下次努力做到直接就用C++编写程序。
    3.C语言的知识有些遗忘,文件和指针方面的知识一开始应用得不好,刚开始看不懂老师发的三元组代码中的初始化。后来重新学习C语言的知识,恍然大悟。
    4.开学初节奏有点快,绪论知识还没学完就要开始学习线性表的知识。
    

    2.大作业作业内容 (6分)

    2.1 设计日期的ADT类型

    ADT Date{
    数据对象:
                     D = {year,month,day | year,month,day属于int类型}
    数据关系:
        R = {<year,month>,<month,day>}
    数据操作:
    	void NewInformation(Date&date,ElemType year,ElemType month,ElemType day);
    	//操作结果:构造三元组,year,month,day对三元组进行赋值。
    	ElemType IsLegal(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功。
    	//操作结果:判断日期是否合法,如果合法在文件output.txt写入正确的格式,如果不合法,在文件output中写入相应的提示。
    	void IsLeap(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功,日期合法。
    	//操作结果:判断年份是否是闰年,如果是闰年,在文件output.txt中写入是闰年,反之则写入不是闰年。
    	void GetWeek(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功,日期合法。
    	//操作结果:在文件output.txt中写入相应的星期。
    	void CoutEnglishMonth(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功,日期合法。
    	//操作结果:在文件output.txt中写入相应的月份英文。
    	void AddDay(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功,日期合法。
    	//操作结果:用户输入需要添加的天数,计算添加天数后的日期,在文件output.txt写入添加前的日期,增加的天数和添加后的日期。
    	void Compare(Date date,ofstream& write);
    	//初始条件:三元组date存在,文件打开成功,日期合法。
    	//操作结果:用户输入要比较的日期,与原日期进行比较,在文件output.txt.中写入结果。
    	ElemType NewIsLegal(Date date);
    	//初始条件:三元组date存在。
    	// 操作结果:判断日期是否合法,合法返回1,不合法返回0 
    }ADT Date
    

    2.2.数据抽象:头文件

    2.3数据封装说明

    (1)构造三元组函数

    做法:动态申请内存,分别把3个变量放入数组date中。

    (2)判断日期是否合法

    做法:先判断日期是否为闰年,确定二月的天数,再判断月份是否大于等于1小于等于12,如果月份小于1或大于12,则判定不合法。如果月份合法,进入下一个阶段,日期与当月的最大天数进行比较,如果小于当月的最大天数且大于等于1,则判定日期合法,返回1。日期不合法,返回0。

    (3)判断是否为闰月

    做法:根据闰月的判定方式设计算法,判断闰月,在文件中写入相应的结果。

    (4)设计星期函数

    做法:根据星期判断公式,得出该日期的星期,列举一到星期天,根据运算结果在文件中写入相应的结果 。

    (5)设计月份英文函数

    做法:根据date【1】得出月份,列举每个月的英文,在文件中写入对应的月份。

    (6)计算日期添加函数

    做法:用year,month,day储存日期并进行运算。用add储存添加的天数。输出提示语,提示用户输入天数。用一个数组monthDay储存一年中每个月的天数。把用户输入的天数和day相加,获得总天数。如果总天数大于该月的最大天数则总天数减去该月最大天数,同时month加一,如果month>12则year+1,month-12。不断循环直到总天数小于其对应月份的最大天数。值得注意的是,闰年需要不断判定以确定二月的最大天数。

    (7)日期大小比较。

    做法:一般来说比较日期要先比较年份,再比较月份,最后比较当月的日期。不妨假设一年有12个月,每个月有31天,算出总天数。一个日期年份越大,日期也就越大,相同年份,月份越大,日期也就越大。year>month>day。前面的数对后面的数具有碾压性优势,可以通过前面算出的总天数进行比较大小,最后写入文件。

    (8)输入数据是否合法判断

    做法:参照函数(2)的做法,除去文件写入。

    (9)主函数

    做法:负责打开文件,用一个循环不断读取文件达到文件末尾时退出文件,对各个函数进行统筹规划,最后关闭文件

    3.结果展示

    input.txt

    输入界面

    output.txt

    4.调试碰到问题

    Q1:C语言知识遗忘很多,文件和指针的知识几乎不记得。

    A1:用了一个下午来复习,边敲代码边看书。回想起一些C语言的知识。
    

    Q2:C语言的应用不熟练,不知道要如何设计一个算法,一直纠结着要怎么样避免文件的不断开闭问题。

    A2:参考谢晓松的代码,发现他的主函数设计得很巧妙,居然可以通过循环来解决文件的开闭问题。自己思考了一会儿,想到可以通过传递文件指针的方式来把信息写入文件。
    

    Q3:C++的知识不熟练,代码经常出错。

    A3:上面讲到传递文件指针的方式来写入文件,一开始我编写了一个C语言的程序,本想着把C语言的程序中的文件指针变换为C++中的文件指针来达到老师的要求。结果一改变文件编译就出现了错误,跳出了一个新的页面。经过不断地调试和查找资料,发现C++的文件输出流不能像C语言指针那样直接在函数中应用,需要添加引用符&。非常感谢晓松推荐的菜鸟网站,那个网站的C++知识很全,可以帮助我快速学习C++知识。晓松的代码也给了我一个很好的参考。
    

    Q4:没有使用抽象数据类型,函数名命名不规范

    A4:已改
    

    Q5:助教提出了一些问题,比如截图不正确,指针没有删除。

    A5:已改
    
  • 相关阅读:
    HomeWork2
    An error I have completed recently
    C#之规格说明书
    App上架审核指南翻译
    使用CollectionView做横向滑动分页效果:
    推荐一些CSS命名规范
    关于让左右2个DIV高度相等
    带有缩略图和文字提示的轮播图
    动画的定义:
    .Net基础篇_学习笔记_第五天_流程控制while循环002
  • 原文地址:https://www.cnblogs.com/1112wlt/p/10438154.html
Copyright © 2020-2023  润新知