NextDate函数问题
NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性
NextDate函数包含三个变量month、day和year,函数的输出为输入日期后一天的日期。 要求输入变量month、day和year均为整数值,并且满足下列条件:
条件1 1≤ month ≤12 否则输出,月份超出范围
条件2 1≤ day ≤31 否则输出,日期超出范围
条件3 1912≤ year ≤2050 否则输出:年份超出范围
String nextdate(int m,int d,int y)
注意返回值是字符串。
程序要求:
1)先显示“请输入日期”
2)不满足条件1,返回:“月份超出范围”;不满足条件2,返回:“日期超出范围”;不满足条件3,返回:“年份超出范围”;如果出现多个不满足,以最先出现不满足的错误返回信息。
3)条件均满足,则输出第二天的日期:格式“****年**月**日”(如果输入2050年12月31日,则正常显示2051年1月1日
Java版
package test01;
import java.util.Scanner;
public class Test01_nextdate {
public static void main(String[] args) {
// TODO Auto-generated method stub
int y=0 ,m=0,d=0;
System.out.println("请输入年 月 日(用空格隔开),-1退出:");
Scanner scan = new Scanner(System.in);
while(true){
y=scan.nextInt();
if(y == -1)System.exit(0);;//-1退出程序
m=scan.nextInt();
d=scan.nextInt();
System.out.println(nextDate(y,m,d));
}
}
public static String nextDate(int y,int m,int d)//nextDate函数
{
String newDate = "";//用来接收日期
boolean flag = true;//作为错误的标识
boolean isR = ((y%4 == 0)&&(y%100 != 0))||(y %400 == 0);//作为是否为闰年的标识
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(d<31)d++;
else if(d==31)
{
if(m!=12)
{
m++;
d=1;
}
else
{
y++;
m=1;
d=1;
}
}
else{
newDate="日期超出范围";
flag=false;
}
break;
case 4:
case 6:
case 9:
case 11:
if(d<30)d++;
else if(d==30)
{
m++;
d=1;
}
else{
newDate="日期超出范围";
flag=false;
}
break;
case 2:
if(isR)
{
if(d<29) d++;
else if(d==29)
{
m++;
d=1;
}
else{
newDate="日期超出范围";
flag=false;
}
}
else{
if(d<28) d++;
else if(d==28)
{
m++;
d=1;
}
else{
newDate="日期超出范围";
flag=false;
}
}
break;
default://如果月份不在1~12之间
newDate="月份超出范围";
flag=false;
break;
}
if(flag)
{
if(y<1912 || y>2050)
{
newDate="年份超出范围";
flag=false;
}
}
if(flag)
{
newDate=y+"年"+m+"月"+d+"日";
}
else{
flag=true;//还原标识
}
return newDate;
}
}
C++版
# include <stdio.h>
# include <stdlib.h>
void nextdate(int y, int m, int d)
{
int flag = 1; //标识是否为错误
int r=((y%4==0)&&(y%100!=0))||(y%400==0);//标识是否为闰年
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (d<31) d++;
else if(d==31)
{
if(m!=12){
m++;
d=1;
}
else{
y++;
m=1;
d=1;
}
}
else
{
flag=0;
printf("日期超出范围\n");
}
break;
case 4:
case 6:
case 9:
case 11:
if(d<30)d++;
else if(d==30)
{
m++;
d=1;
}
else
{
flag=0;
printf("日期超出范围\n");
}
break;
case 2:
if(r==1) {
if(d<29)d++;
else if(d==29)
{
m++;
d=1;
}
else
{
flag=0;
printf("日期超出范围\n");
}
}
else{
if(d<28)d++;
else if(d==28)
{
m++;
d=1;
}
else
{
flag=0;
printf("日期超出范围\n");
}
}
break;
default:
flag=0;
printf("月份超出范围\n");
break;
}
// if(m<1 || m>12)
// {
// flag=0;
// printf("月份超出范围");
// }
if(y<1912 || y>2050){
flag=0;
printf("年份超范围\n");
}
if(flag!=0)//如果没有错误输出nextdate
{
printf("%d,%d,%d\n",y,m,d);
}
flag=1;//返回初始值
}
int main()
{
int y=0,m=0,d=0;
printf("请输入年,月,日:(用逗号隔开,输入-1退出):\n");
while(scanf("%d,%d,%d",&y,&m,&d)!=EOF&& y!=-1)
{
nextdate(y,m,d);
printf("请继续输入(用逗号隔开,输入-1退出):\n");
}
system("pause");
return 0;
}