编写一个程序或者脚本,实现下属功能:
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)
end
month=str2num(month)
if(day(1)=='-')
day=day(2)
end
day=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')
return
else
%将日期加一
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
end
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)
end
month=str2num(month)
if(day(1)=='-')
day=day(2)
end
day=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)
end
month=str2num(month)
if(day(1)=='-')
day=day(2)
end
day=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
感谢支持!