Matlab智能仿真——日期计算(含保姆级注释)

编写一个程序或者脚本,实现下属功能:

1)可以输入任意一天的日期,如:2023-03-06;

2)在上述日期上添加一天,输出该日期。

一、整体代码

clear;clc;answer=inputdlg('请输入日期(格式:年-月-日)','计算下一天日期')CharAns=char(answer)SizeAns=size(CharAns,2)%数据处理,提取输入中年月日的信息year=CharAns(1:4)year=str2num(year)month=CharAns(6:7)day=CharAns(SizeAns-1:SizeAns)   if(month(2)=='-')    month=month(1)endmonth=str2num(month)   if(day(1)=='-')    day=day(2)endday=str2num(day)%判断日期正确性if(month>12||day>31||((month==4||month==6||month==9||month==11)&&day>30)||(month==2&&mod(year,4)~=0&&day>28)||(month==2&&mod(year,4)==0&&day>29))    fprintf('输入日期不正确\n')    returnelse    %将日期加一    if(day==31||day==30||day==29||day==28)        %当日为31时        if(day==31)            day=1            if(month==12)                month=1                year=year+1            else                month=month+1            end        end        %当日为30时        if(day==30)            if(month==4||month==6||month==9||month==11)                day=1                month=month+1            else                day=day+1            end        end        %当日为29时        if(day==29)            if(month==2)                day=1                month=month+1            else                day=day+1            end        end        %当日为28时        if(day==28)            if(month==2&&mod(year,4)~=0)                month=month+1                day=1            else                day=day+1            end        end    else        day=day+1    endend    fprintf('%d-%d-%d\n',year,month,day)

二、功能解析

1.输入数据

1.1代码

year=CharAns(1:4)year=str2num(year)month=CharAns(6:7)day=CharAns(SizeAns-1:SizeAns)   if(month(2)=='-')    month=month(1)endmonth=str2num(month)   if(day(1)=='-')    day=day(2)endday=str2num(day)

1.2分析

通过可编辑对话框与用户进行交互。设置标题为“计算下一天日期”,并设置提示语为“请输入日期(格式:年-月-日)”。便于用户使用,增加美观性和便利性。

用answer变量接收数据,answer为只有一个元素的元胞数组。接下来,用char()函数,将所得到的元胞数组转化为字符型,存入CharAns。最后,通过size()函数得到CharAns的大小,此处第二个参数设置为2,得到列数。

添加图片注释,不超过 140 字(可选)

此处以2020-1-1为例

得到:

添加图片注释,不超过 140 字(可选)


2.数据处理

2.1代码

year=CharAns(1:4)year=str2num(year)month=CharAns(6:7)day=CharAns(SizeAns-1:SizeAns)   if(month(2)=='-')    month=month(1)endmonth=str2num(month)   if(day(1)=='-')    day=day(2)endday=str2num(day)

2.2分析

此处将获得的字符型数据进行处理,得到整型的年、月、日分别存入year,month,day三个变量中。具体方法如下:

1)年:先对CharAns字符型数组切片处理,取前四个字符,再通过str2num()函数将此数组转化成整型数据,存入year中

2)月:对CharAns字符型数组切片处理,取前六到七个元素,通过判断第七个元素是否为“-”来决定是否删去,最后通过str2num()函数将此数组转化成整型数据,存入month中。

3)日:对CharAns字符型数组切片处理,取最后两个元素,通过SizeAns存储的列长进行切片处理。通过判断倒数第二个元素是否为“-”来决定是否删去,最后通过str2num()函数将此数组转化成整型数据,存入day中。

由以上三步,就能获得整型的年月日,方便后续操作。

此处以2020-1-1为例,得到如下变量:

添加图片注释,不超过 140 字(可选)


3.运算后一天的结果

3.1代码

if(day==31||day==30||day==29||day==28)        %当日为31时        if(day==31)            day=1            if(month==12)                month=1                year=year+1            else                month=month+1            end        end        %当日为30时        if(day==30)            if(month==4||month==6||month==9||month==11)                day=1                month=month+1            else                day=day+1            end        end        %当日为29时        if(day==29)            if(month==2)                day=1                month=month+1            else                day=day+1            end        end        %当日为28时        if(day==28)            if(month==2&&mod(year,4)~=0)                month=month+1                day=1            else                day=day+1            end        end    else        day=day+1    end

3.2分析

根据提取出特殊的日来进行特殊情况判断,提取出day为28、29、30、31进行以下分析:

1)日为28号:若非闰年且月份为2时,日变为1,月变为3。其它情况日加一,月不变。

2)日为29号:若月份为2时,日变为1,月变为3。其它情况日加一,月不变。

3)日为30号:若月份为4、6、9、11时,日变为1,月加一。其它情况日加一,月不变。

4)日为31号:若月份为12时,日变为1,月变为1,年加一。其它情况日变为1,月加一。

添加图片注释,不超过 140 字(可选)


4.输出结果

4.1代码

fprintf('%d-%d-%d\n',year,month,day)

4.2分析

通过fprintf()函数,对结果进行输出

添加图片注释,不超过 140 字(可选)


5.输入正确性判断

if(month>12||day>31||((month==4||month==6||month==9||month==11)&&day>30)||(month==2&&mod(year,4)~=0&&day>28)||(month==2&&mod(year,4)==0&&day>29))    fprintf('输入日期不正确\n')    return

5.2分析

若年月日输入不正确,会输出“输入日期不正确”,并退出程序。此处正确性规定如下:

1)月必须在1至12范围内

2)日必须在1至31范围内

3)3、6、9、11月的日不能超过30

4)2月的日不能超过29

5)非闰年的2月的日不能超过28


二、功能验证

1.以2020-1-32为例

1.1输入

添加图片注释,不超过 140 字(可选)

1.2结果

添加图片注释,不超过 140 字(可选)


2.以2020-2-28为例

2.1输入

添加图片注释,不超过 140 字(可选)

2.2结果

添加图片注释,不超过 140 字(可选)


3.以2020-2-29为例

3.1输入

添加图片注释,不超过 140 字(可选)

3.2结果

添加图片注释,不超过 140 字(可选)


4.以2020-12-31为例

4.1输入

添加图片注释,不超过 140 字(可选)

4.2结果

添加图片注释,不超过 140 字(可选)


5.以2021-2-28为例

5.1输入

添加图片注释,不超过 140 字(可选)

5.2结果

添加图片注释,不超过 140 字(可选)


有建议欢迎指出,也欢迎友好交流!

另也欢迎关注其他平台上本人的账号 如下:

知乎:youzuos

CSDN:youzuos

感谢支持!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值