nextdate问题_nextdate问题的边界值测试 - CSDN
精华内容
参与话题
  • NextDate问题

    千次阅读 2019-07-03 17:01:50
    根据国家标准,合格的日期是YYYYMMDD或者YYYY-MM-DD,我们还可以扩展一下,如果把公元前的年份为负数,那么-YYYYMMDD和-YYYY-MM-DD也算为合格输入,同时规定此时输出加前缀“BC ”,为了使问题简化,特别是简化闰年...

    Input

    输入是一个字符串,根据实际情况,一般一行输入不会太长,我们规定串的长度<=256。根据国家标准,合格的日期是
    YYYYMMDD或者YYYY-MM-DD,我们还可以扩展一下,如果把公元前的年份为负数,那么-YYYYMMDD和-YYYY-MM-DD
    也算为合格输入,同时规定此时输出加前缀“BC ”,为了使问题简化,特别是简化闰年的计算,我们规定年份的绝对值不超
    过9999。本问题是多组测试数据。
    

    Output

    输出给定日期的向后一天或者“Error !”。输出时都按照“-”作为分隔符。
    

    Sample Input

    2015-03-31
    12345678
    

    Sample Output

    2015-04-01
    Error !
    
    #include<bits/stdc++.h>
    using namespace std;
    int d[15]={0,31,0,31,30,31,30,31,31,30,31,30,31};
    const int MAXN=505;
    char s[MAXN];
    int MM,YY,DD;
    bool is_leap(int x)
    {
        return (x%4==0&&x%100!=0)||x%400==0;
    }
    bool isdate()
    {
        if(YY==0)return false;
        if(YY>0)
        {
            d[2]=is_leap(YY)?29:28;
        }
        else
        {
            d[2]=is_leap(YY+1)?29:28;
        }
        if(MM<1||MM>12)return false;
        if(DD<1||DD>d[MM])return false;
        return true;
    }
    bool ck1(char *s)
    {
        if(strlen(s)<8)return false;
        if(s[0]=='-')
        {
            if(s[1]!='-'&&ck1(s+1))
            {
                YY*=-1;
                return true;
            }
            return false;
        }
        if(strlen(s)!=8)return false;
        for(int i=0;i<8;++i)
        {
            if(s[i]>'9'||s[i]<'0')return false;
        }
        YY=(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');
        MM=(s[4]-'0')*10+(s[5]-'0');
        DD=(s[6]-'0')*10+(s[7]-'0');
        return true;
    }
    bool ck2(char *s)
    {
        if(strlen(s)<10)return false;
        if(s[0]=='-')
        {
            if(s[1]!='-'&&ck2(s+1))
            {
                YY*=-1;
                return true;
            }
            return false;
        }
        if(strlen(s)!=10)return false;
        for(int i=0;i<10;++i)
        {
            if(i==4||i==7)
            {
                if(s[i]!='-')return false;
                continue;
            }
            if(s[i]>'9'||s[i]<'0')return false;
        }
        YY=(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');
        MM=(s[5]-'0')*10+(s[6]-'0');
        DD=(s[8]-'0')*10+(s[9]-'0');
        return true;
    }
    void go()
    {
        if(YY>0)
        {
            d[2]=is_leap(YY)?29:28;
        }
        else
        {
            d[2]=is_leap(YY+1)?29:28;
        }
        ++DD;
        if(DD>d[MM])
        {
            ++MM;
            DD=1;
            if(MM>12)
            {
                ++YY;
                MM=1;
                if(YY==0)
                {
                    ++YY;
                }
            }
        }
    }
    int main()
    {
        while(scanf("%s",s)!=EOF)
        {
            if(ck1(s))
            {
                if(isdate())
                {
                    go();
                    assert(abs(YY<=9999));
                    if(YY<0)
                    {
                        printf("BC ");
                        YY=-YY;
                    }
                    printf("%04d-%02d-%02d\n",YY,MM,DD);
                }
                else
                {
                    printf("Error !\n");
                }
            }
            else if(ck2(s))
            {
                if(isdate())
                {
                    go();
                    assert(abs(YY<=9999));
                    if(YY<0)
                    {
                        printf("BC ");
                        YY=-YY;
                    }
    
                    printf("%04d-%02d-%02d\n",YY,MM,DD);
                }
                else
                {
                    printf("Error !\n");
                }
            }
            else
            {
                printf("Error !\n");
            }
        }
        return 0;
    }
    
    展开全文
  • 给出今天日期(YYYY-MM-DD) 得出明天日期 c1. 1<=month<=12 c2. 1<=day<=31 c3. 0<year print("输入今天的日期 yyyy mm dd!") todaydate=[0000,0,0] tomorrowdate=[0000,0,0] ... todaydat...

    给出今天日期(YYYY-MM-DD)

    得出明天日期

    c1. 1<=month<=12

    c2. 1<=day<=31

    c3. 0<year

    print("输入今天的日期 yyyy mm dd!")
    todaydate=[0000,0,0]
    tomorrowdate=[0000,0,0]
    for i in range(3):
        todaydate[i]=int(input())
        
    print ("今天的日期是:")
    print todaydate
    
    if((todaydate[2]<1)or(todaydate[2]>31)):
        print("日期错误!")  
    elif((todaydate[1]<1)or(todaydate[1]>12)):
        print("月份错误")
    elif(todaydate[0]<1):
        print("年份错误")
        
    elif(todaydate[1]in[1,3,5,7,8,10]):
        if(todaydate[2]<31):
            tomorrowdate[2]=todaydate[2]+1
            tomorrowdate[1]=todaydate[1]
            tomorrowdate[0]=todaydate[0]
        else:
            tomorrowdate[2]=1
            tomorrowdate[1]=todaydate[1]+1
            tomorrowdate[0]=todaydate[0]
                         
    elif(todaydate[1]in[4,6,9,11]):
        if(todaydate[2]<30):
            tomorrowdate[2]=todaydate[2]+1
            tomorrowdate[1]=todaydate[1]
            tomorrowdate[0]=todaydate[0]
        else:
            tomorrowdate[2]=1
            tomorrowdate[1]=todaydate[1]+1
            tomorrowdate[0]=todaydate[0]
    
    elif(todaydate[1]==12):
        if(todaydate[2]<31):
            tomorrowdate[2]=todaydate[2]+1
            tomorrowdate[1]=todaydate[1]
            tomorrowdate[0]=todaydate[0]
        else:
            tomorrowdate[2]=1
            tomorrowdate[1]=1
            tomorrowdate[0]=todaydate[0]+1
    
    elif(todaydate[1]==2):
        if(todaydate[2]<28):
            tomorrowdate[2]=todaydate[2]+1
            tomorrowdate[1]=todaydate[1]
            tomorrowdate[0]=todaydate[0]
        elif(todaydate[2]==28):
            if((((todaydate[0]%400)==0)or(((todaydate[0]%10)!=0))and((todaydate[0]%4)==0))):
                tomorrowdate[2]=todaydate[2]+1
                tomorrowdate[1]=2
                tomorrowdate[0]=todaydate[0]
        elif(todaydate[2]==29):
                tomorrowdate[2]=1
                tomorrowdate[1]=3
                tomorrowdate[0]=todaydate[0]
    
    
    print ("明天的日期是 : ")
    print tomorrowdate
    
                
    
    
        

     

    转载于:https://www.cnblogs.com/yangzhanxi/archive/2013/03/28/2986847.html

    展开全文
  • C.NextDate问题

    2020-06-27 20:29:00
    根据国家标准,合格的日期是YYYYMMDD或者YYYY-MM-DD,我们还可以扩展一下,如果把公元前的年份为负数,那么-YYYYMMDD和-YYYY-MM-DD也算为合格输入,同时规定此时输出加前缀“BC ”,为了使问题简化,特别是简化闰年...

    Input
    输入是一个字符串,根据实际情况,一般一行输入不会太长,我们规定串的长度<=256。根据国家标准,合格的日期是YYYYMMDD或者YYYY-MM-DD,我们还可以扩展一下,如果把公元前的年份为负数,那么-YYYYMMDD和-YYYY-MM-DD也算为合格输入,同时规定此时输出加前缀“BC ”,为了使问题简化,特别是简化闰年的计算,我们规定年份的绝对值不超过9999。本问题是多组测试数据。

    Output
    输出给定日期的向后一天或者“Error !”。输出时都按照“-”作为分隔符。

    Sample Input
    2015-03-31
    12345678
    Sample Output
    2015-04-01
    Error !

    注意对输入格式进行检验即可 还有就是不存在公元0年,要特判一下

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<string>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<map>
    #define fi first
    #define se second
    #define pb(i) push_back(i)
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    #define per(i,a,b) for(int i=a;i>=b;i--)
    #define mes(a,b) memset(a,b,sizeof(a))
    #define sbs(i,j) substr(i,j)
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    const int N = 1e6+10;
    const int INF = 0x3f3f3f3f;
    const int inf = - INF;
    const int mod = 1e9+7;
    const double pi = acos(-1.0);
    int year=0,month=0,day=0;
    char s[505];
    int days[2][13]= {0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31};
    int is_leap(int x)
    {
        if(x<0)
            x+=1;
        if (x%400==0||(x%4==0&&x%100!=0))
            return 1;
        else
            return 0;
    }
    bool between(int x,int y,int z){
        return z>=x&&z<=y;
    }
    int main()
    {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        while(cin>>s)
        {
            int flag = 0;
            int index = 0;
            int year=0,month=0,day=0;
            int isLeap=0;
            int len=strlen(s);
            bool ok=true;
            if(s[0]=='-')
            {
                flag=1;
                index=1;
            }
            int cnt=0;
            for(int i=0;i<len;i++) if(s[i]=='-')cnt++;
            for(int i=1;i<len;i++){
                if(!between(0,9,s[i-1]-'0')&&!(between(0,9,s[i]-'0'))) ok=false;
            }
            for(int i=index; i<=index+3; i++){
                if(!between(0,9,s[i]-'0')) ok=false;
                year=year*10+s[i]-'0';
            }
            if(year>9999||year==0)
                ok=false;
            if(flag)
                year=-year;//判断闰年
            isLeap=is_leap(year);
            index+=4;
            if(s[index]=='-')
                index++;
            else{if(s[index+1]=='-') ok=false;}
            for(int i=index; i<=index+1; i++)
            {
                if(!between(0,9,s[i]-'0')) ok=false;
                month=month*10+s[i]-'0';
            }
            if(month>12||month<1)
                ok=false;//合法性检查
            index+=2;
            if(s[index]=='-')
                index++;
            else{if(s[index+1]=='-') ok=false;}
            for(int i=index; i<=index+1; i++){
                if(!between(0,9,s[i]-'0')) ok=false;
                day=day*10+s[i]-'0';
            }
            index+=2;
            /*合法性检查*/
            //printf("year=%d,month=%d,day=%d\n",year,month,day);
            if(day>days[isLeap][month])
                ok=false;
            if(len!=8+cnt) ok=false;
            if(!ok) /*输入不合法*/
            {
                printf("Error !\n");
                continue;
            }
            day++;
            if(day>days[isLeap][month])
            {
                day=1;
                if(month==12)
                {
                    month=1;
                    year++;
                }
                else
                    month++;
            }
            if(year>9999||year<-9999)
            {
                printf("Error !\n");
                continue;
            }
            if(year<=0)
            {
                if(year!=0)
                    printf("BC ");
                if(year==0)
                    year=1;
            }
            year=abs(year);
            printf("%04d-%02d-%02d\n",year,month,day);
        }
    
        return 0;
    }
    
    展开全文
  • 黑盒测试:NextDate的决策表法及测试用例设计   该程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以...

    黑盒测试:NextDate的决策表法及测试用例设计

     

    该程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔一天的日期。

    (1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。

    ① month变量的有效等价类:

        M1: {month=4,6,9,11}     M2: {month=1,3,5,7,8,10}

        M3: {month=12}              M4: {month=2}

    ② day变量的有效等价类:

         D1: {1≤day≤26}         D2: {day=27}        D3: {day=28}                    D4: {day=29}             D5: {day=30}        D6: {day=31}

    ③ year变量的有效等价类:

         Y1:  {year是闰年}             Y2:  {year不是闰年}

    (2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。

         动作桩: A1: day+1         A2: day=1         A3: month+1           A4: month=1          A5: year+1        A6:不可能

    (3)根据条件桩和动作桩,画出决策表。

     

    规则1

    规则2

    规则3

    规则4

    规则5

    规则6

    规则7

    规则8

    规则9

    规则10

    规则11

    M1

    M1

    M1

    M2

    M2

    M3

    M3

    M4

    M4

    M4

    M4

    D1/D2/D3/D4

    D5

    D6

    D1/D2/D3/D4/D5

    D6

    D1/D2/D3/D4/D5

    D6

    D1/D2/D3

    D4

    D4

    D4/D5/D6

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1/Y2

    Y1

    Y2

    Y1/Y2

    动作

    A1

    A3A2

    A6

    A1

    A3,A2

    A1

    A5,A4A2

    A1

    A3A2

    A6

    A6

     

    (4)根据(1)和(2),画出简化后的决策表。

     

    规则1468

    规则259

    规则31011

    规则7

    M1M2M3M4

    M1M2M4

    M1M4

    M3

    D1D2D3D4

    D5

    D6

    D6

    Y1Y2

    Y1Y2

    Y1Y2

    Y1Y2

    动作

    A1

    A3A2

    A6

    A5A4A2

     

    (5)根据决策表设计测试用例,得到测试用例表

    NextDate函数的决策表测试用例

    测试用例编号

    月份

    日期

    预期输出

    实际输出

    1--3

    4

    15

    2011

    2011415

    请输入日期:年   月  日

    2011 4 15

    下一天是: 2011-4-16

    4

    4

    30

    2011

    2011511

    请输入日期:年   月  日

    2011 4 30

    下一天是: 2011-4-30

    6

    4

    31

    2011

    不可能

    请输入日期:年   月  日

    2011 4 31

    错误每年246911月份,每月天数小于 31!

    6--9

    1

    15

    2011

    2011116

    请输入日期:年   月  日

    2011 1 15

    下一天是: 2011-1-16

    10

    1

    31

    2011

    201121

    请输入日期:年   月  日

    2011 1 31

    下一天是: 2011-2-1

    11--14

    12

    15

    2011

    20111216

    请输入日期:年   月  日

    2011 12 15

    下一天是: 2011-12-16

    15

    12

    31

    2011

    201111

    请输入日期:年   月  日

    2011 12 31

    下一天是: 2011-1-1

    16

    2

    15

    2011

    2011216

    请输入日期:年   月  日

    2011 2  15

    下一天是: 2011-2-16

    17

    2

    28

    2012

    2012229

    请输入日期:年   月  日

    2011 2 28

    下一天是: 2012-2-29

    18

    2

    28

    2011

    201131

    请输入日期:年   月  日

    2011 2 28

    下一天是: 2011-3-1

    19

    2

    29

    2012

    201231

    请输入日期:年   月  日

    2011 2 29

    下一天是: 2012-3-1

    20

    2

    29

    2011

    不可能

    请输入日期:年   月  日

    2011 2 29

    错误!非闰年二月必须小于 29 !

    21,22

    2

    30

    2011

    不可能

    请输入日期:年   月  日

    2011 2 30

    错误!非闰年二月必须小于 29 !

     

    展开全文
  • 软件测试——构造 NextDate 问题的弱一般的等价类测试用例 问题 构造 NextDate 问题的弱一般的等价类测试用例。 NextDate 问题NextDate() 是整型变量 month, day 和 year 的函数,输入 1812-2012 年期间的某一日...
  • 黑盒测试用例设计之nextdate问题

    千次阅读 2019-05-19 19:33:24
    首先已知有三个变量: 月份,日期和年 变量月份,日期和年都为整数,且都满足条件: 1<=月份<=12 1<=日期<=31 1912<=年<=2012 等价类划分法 1.首先输入数据,划分等价类 ...上点:边界...
  • 编程实现:NextDate函数问题说明:输入一个日期,求从输入日期算起的第三天日期。例如,输入为2008年8月8日,则该程序的输出为2008年8月 10日。NextDate函数包含三个整数变量month、day和year,并且满足下列条件:1...
  • Java NextDate 输出明天的日期

    千次阅读 2019-05-14 13:56:41
    最近在复习软件测试顺便看到了这个例子,顺手实现了一下 public class test { public static void main(String[] args) throws IOException { Scanner in=new Scanner(System.in);... int year=in.next...
  • 弱一般的等价类测试用例

    千次阅读 2019-05-16 15:53:06
    构造 NextDate 问题的弱一般的等价类测试用例。 NextDate 问题NextDate() 是整型变量 month, day 和 year 的函 数,输入 1812-2012 年期间的某一日期的 month, day 和 year 的 值,输出这一天的下一天的日期的 ...
  • 计算输入日期的下一天的nextDate()

    千次阅读 2010-12-21 09:41:00
            public static ArrayList NextDate(int nowYear, int nowMonth, int nowDay) { ArrayList arr = new ArrayList(); if (nowYear <= 3000 && nowYear >= 1000 && ...
  • 等价类方法和边界值分析方法

    千次阅读 2014-04-17 10:25:00
    分析NextDATE问题中的逻辑,用边界值分析法的思想设计测试用例。 (1)对于NextDate问题,分析它的输入限制; NextDate是一个有三个变量(月份、日期和年)的函数。函数返回输入日期后面的那个日期。变量月份、...
  • oracle job 如何设定next_date

    千次阅读 2018-06-27 13:48:45
    在调整job时间NEXT_DATE的过程中发现了一个小小的问题。正常来说执行下面的语句可以设定job下次执行时间:exec dbms_ijob.next_date(4002,to_date('2018-06-27 11:15:00','yyyy-mm-dd hh24:mi:ss'));然而,等待改...
  • ​ 日期问题 ​ 测试以下程序:该程序有三个输入变量 month、day、year (month、day 和 year 均为整数值,并且满足:1 ≤ months ≤ 12、1 ≤ days ≤ 31 和 1900 ≤ year ≤ 2050),分别作为输入日期的月份、日、...
  • 2.3 NextDate函数 2.3.1 问题陈述 NextDate是一个有三个变量(月份、日期和年)的函数。函数返回输入日期后面的那个日期。变量月份、日期和年都是整数,且满足以下条件: C1:1≤月份≤12 C2:1≤日期≤31 C3:1812...
  • Next Date 求下一天的日期

    千次阅读 2014-06-26 16:18:32
    没事做,写着玩玩#include #include using namespace std;...struct Date{ int y, m, d; }; int pm[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool isRunnian(int y){ if(y % 4 != 0) return
  • 获得 NextDate 【明天】

    千次阅读 2009-11-30 22:27:00
    Java得到下一天明天,明天时间 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * @author Administrator * * TODO To change the template for this generated type...
  • Oracle作业(JOB)更新next_date的探讨

    万次阅读 2004-12-03 19:29:00
    Oracle作业(JOB)更新next_date的探讨 本文作者:kamus(kamus@itpub.net) 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明...本文通过实验和事件跟踪来分析Oracle Job执行过
  • 昨天有人来问我,Oracle的JOB在设定完next_date和interval之后,到底是什么时候决定下一次运行时间的。 我觉得可以归纳成以下几个问题。   1.假设我们的JOB设定第一次运行的时间是12:00,运行的间隔是1小时,...
  • ORACLE JOB修改NEXT_DATE,删除JOB

    千次阅读 2012-04-20 11:41:10
    SQL> exec dbms_job.next_date(21,to_date('2012-04-18 12:08:00','yyyy-mm-dd hh24:mi:ss'));   PL/SQL procedure successfully completed   SQL> commit;   Commit complete exec sys.dbms_ijob....
1 2 3 4 5 ... 20
收藏数 239,603
精华内容 95,841
关键字:

nextdate问题