用java定义一个日期类,急!!!

用java定义一个日期类,急!!!,第1张

class MyDate{

public int year,month,day;

public MyDate(MyDate date){

year=dateyear;

month=datemonth;

day=dateday;

}

public boolean isLeapYear(){

return (((year%4==0)&&(year%100!=0))||(year%400==0));

}

public MyDate(int y,int m,int d){

year=y;

month=m;

day=d;

if(((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))&&((day<1)||(day>31))) Systemoutprintln("wrong date");

if(((month==4)||(month==6)||(month==9)||(month==11))&&((day<1)||(day>30))) Systemoutprintln("wrong date");

if(month==2){

if(isLeapYear()&&((day<1)||(day>29))) Systemoutprintln("wrong date");

if(!isLeapYear()&&((day<1)||(day>28))) Systemoutprintln("wrong date");

}

}

public boolean equal(MyDate date){

return (year==dateyear && month==datemonth && day==dateday);

}

public void incrementDay(){

if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)){

int flag=0;

if(day==31){month+=1;flag=1;}

if((day<=30)&&(day>=1)){day+=1;}

if(flag==1) day=1;

flag=0;

}

if((month==4)||(month==6)||(month==9)||(month==11)){

int flag=0;

if(day==30){month+=1;flag=1;}

if((day<=29)&&(day>=1)){day+=1;}

if(flag==1) day=1;

flag=0;

}

if(month==12){

int flag=0;

if(day==31){year+=1;month=1;flag=1;}

if((day>=1)&&(day<=30)){day+=1;}

if(flag==1) day=1;

flag=0;

}

if(month==2){

int flag=0;

if(isLeapYear()){

if(day==29){month+=1;flag=1;}

if((day<=28)&&(day>=1)){day+=1;}

if(flag==1) day=1;

flag=0;

}

else{

if(day==28){month+=1;flag=1;}

if((day<=27)&&(day>=1)){day+=1;}

if(flag==1) day=1;

flag=0;

}

}

}

public int getYear(){

return year;

}

public int getMonth(){

return month;

}

public int getDay(){

return day;

}

public String toString(){

return (year+"-"+month+"-"+day);

}

}

public class Mytest{

public static void main(String[] test){

MyDate date1=new MyDate(2000,2,28);

MyDate date2=new MyDate(2006,12,31);

MyDate date3=new MyDate(date2);

Systemoutprintln(date3equal(date2));

date1incrementDay();

Systemoutprintln(date1getYear()+" "+date1getMonth()+" "+date1getDay());

Systemoutprintln(date1toString());

date2incrementDay();

Systemoutprintln(date2getYear()+" "+date2getMonth()+" "+date2getDay());

Systemoutprintln(date2toString());

}

}

我写了一个程序,不过,可能有一些地方,我做了一些修改,你看看吧:#include<iostreamh>

#include<stdlibh>

class date{

int year,month,day;

public:

date(int y=0,int m=0,int d=0)

{

year=y;month=m;day=d;

}

date(char s)

{

year=atol(s)+2000;

month=atol(s)+5;

day=atol(s); }

void input()

{

cout<<"请输入期日,依次输入年、月、日:";

cin>>year>>month>>day;

}

void ouput()

{

cout<<"日期:"<<year<<"年"<<month<<"月"<<day<<"日\n";

}

void nextdte()

{

day++;

}

void pirrodate()

{

day--;

}

void dateafter(int d)

{

day=day+d;

}

void datebefore(int d)

{

day=day-d;

}

};

void main()

{

date Date1(2010,12,12),Date2,Date3("8");

Date1ouput();

Date2input();

Date2ouput();

Date2input();

Date2nextdte();

cout<<"下一天\n";

Date2ouput();

cout<<"另一个日期:\n";

Date3ouput();

Date3dateafter(6);

cout<<"过6之后的日期是:\n";

Date3ouput();

Date3datebefore(3);

cout<<"以上日期的前3天是:\n";

Date3ouput();}

演示:

你把int tmpdate=NextDate(date1);提到main()函数开头定义变量的位置;

int main()

{

int y1,m1,d1,y2,m2,d2;

int date1,date2;

int PrimeDateNum=0;/素日期数/

int tmpdate=NextDate(date1);/定义“日期的下一天“为一个函数/

scanf("%d %d %d %d %d %d",&y1,&m1,&d1,&y2,&m2,&d2);/输入六个数字,两组年月日/

date1=MakeDateNum(y1,m1,d1);/第一个八位年月日数字/

date2=MakeDateNum(y2,m2,d2);/第二个八位年月日数字/

等价类划分法:

一、方法简介

1定义

是把所有可能输入的数据,即程序的输入域划分策划国内若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法。

2划分等价类

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其他值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分有两种不同的情况:有效等价类和无效等价类。

1)有效等价类

是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明所规定的功能和性能。

2)无效等价类

指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能多个。

设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

3划分等价类的标准

1) 完备测试、避免冗余

2) 划分等价类重要的是:集合的划分、划分为互不相交的一组子集,而子集的并是整个集合

3) 并是整个集合:备性

4) 子集互不相交:保证一种形式的无冗余性

5) 同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到“相同的执行路径”。

4划分等价类的方法

1)        在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类:

3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种的四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。

5)在规定了输入数据必须遵守的规则情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);

6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应在将该等价类进一步的划分为更小的等价类。

5设计测试用例

在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:

1)为每一个等价类规定一个唯一的编号;

2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;

3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

二、实战演习

1、三角形问题

1、某程序规定:“输入三个整数a、b、c分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形、等边三角形时,分别做计算。。。”用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)

分析题目中给出和隐含的对输入条件的要求:

(1)整数  (2)三个数(3)非零数(4)正数

(5)两边之和大于第三边(6)等腰  (7)等边

如果a、b、c满足条件(1)~(4),则输出下列四种情况之一:

1)如果不满足条件(5),则程序输出为“非三角形”

2)如果三条边相等即满足条件(7),则程序输出为“等边三角形”

3)如果只有两条边相等,及满足条件(6),则程序输出为“等腰三角形”

4)如果三条边都不相等,则程序输出为“一般三角形”

列出等价类表并编号

覆盖有效等价类的测试用例:

a b c覆盖等价类号码

3 4 5 (1)  (7)

4 4 5  (1)(7)  (8)

4 5 5 (1)  (7)  (9)

5 4 5 (1)  (7)  (10)

4 4 4 (1)  (7)  (11)

覆盖无效等价类的测试用例:

2、NextDate

2、NextDate函数包含三个变量:month、day、year,函数的输出为输入日期后一天的日期。

例如,输入2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month、day、year均为整数值,并且满足下列条件:

1、1<=month<=12

2、1<=day<=31

3、1812<=year<=2012

1)有效等价类为:

M1={月份:1<=月份<=12}

D1={日期:1<=日期<=31}

Y1={年份:1812<=年<=2012}

2)若条件1~3中任何一个条件失效,则NextDate函数都会产生一个输出,指明相应的变量超出取值范围,比如“month的值不在12范围中”。显然还存在这大量的year、month、day的无效组合,NextDate函数将这些组合作为统一的输出:“无效输入日期”。

其无效等价类为:

M2={月份:月份<1}

M3={月份:月份>12}

D2={日期:日期<1}

D3={日期:日期>31}

Y2={年份:年<1812}

Y3={年份:年>2012}

弱一般等价类测试用例

月份

日期

预期输出

6

15

1912

1912年6月16日

强一般等价类测试用例同弱一般等价类测试用例

注:弱有单缺陷假设;健壮考虑了无效值。

(一)弱健壮等价类测试

用例

ID

月份

日期

预期输出

WR1

6

15

1912

1912年6月16日

WR2

0

1

1912

月份不在1~12中

WR3

15

1

1912

月份不在1~12中

WR4

1

0

1912

日期不在1~31中

WR5

1

32

1912

日期不在1~31中

WR6

1

1

1811

年不在1812~2012中

WR7

1

1

2013

年不在1812~2012中

(二)强健壮等价类测试

用例

ID

月份

日期

预期输出

SR1

15

1

1912

月份不在1~12中

SR2

1

32

1912

日期不在1~31中

SR3

1

1

1811

年份不在1812~2012中

SR4

0

0

1912

两个无效一个有效

SR5

0

1

1811

两个无效一个有效

SR6

1

0

1811

两个无效一个有效

SR7

0

0

1811

三个无效

#include <iostream>

using namespace std;

class Date//默认一个月是30天

{

public:

Date(int x=2011,int y=1,int z=8):year(x),month(y),day(z)

{

cout<<"初始化日期是:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

}

~Date(){}

void NextDate()

{

day++;

if (day>30)

{

day=day-30;

month++;

}

if (month>12)

{

month=month-12;

year++;

}

cout<<"the next date is "<<year<<" 年"<<month<<" 月"<<day<<" 日"<<endl;

}

private:

int year;

int month;

int day;

};

int main()

{

Date date1;

Date date2(2011,12,30);

date1NextDate();

date2NextDate();

return 0;

}

使用的编译环境是vc60,你可以试试的 往后的知识内容你可以试试 *** 作符号的重载,也很方便的

//将yyyyMMdd转为date

public static Date getCoreToEmsDateStr(String dateStr){

DateFormat format = new SimpleDateFormat("yyyyMMdd");

Date d = null;

try{

d = formatparse(dateStr);

}catch(ParseException e){

eprintStackTrace();

}

return d;

}

public static String getDateAfterDays(Timestamp s,int days){

Timestamp currTimestamp = s;

for (int i=0;i<days;i++){

currTimestamp = getNextDate(currTimestamp);

}

return getDateTimeStr(currTimestamp,"3");

}

public static Timestamp getNextDate(javasqlTimestamp tsDate){

if(tsDate==null)

return null;

javautilCalendar calendar = CalendargetInstance();

calendarsetTime(tsDate);

return getDateTime(calendarget(CalendarYEAR),calendarget(CalendarMONTH)+1,calendarget(CalendarDATE)+1,

calendarget(CalendarHOUR_OF_DAY),calendarget(CalendarMINUTE),calendarget(CalendarSECOND));

}

public static javasqlTimestamp getDateTime(int year,int month,int day,int hour,int minute,int second){

javasqlTimestamp ts = null;

javautilDate dt = null;

javautilCalendar calendar = CalendargetInstance();

calendarclear();

calendarset(year,month-1,day,hour,minute,second);

dt = calendargetTime();

ts = new javasqlTimestamp(dtgetTime());

return ts;

}

/

比较两个时间是否相同

@param tsBeginDate

@param tsEndDate

@param bool

@return

/

public static long getDateInterval(Timestamp tsBeginDate,Timestamp tsEndDate,boolean bool){

long lDays = 0;

if(bool){

tsBeginDate = CommongetDateTime(CommongetDateString(tsBeginDate),bool);

}

if(tsBeginDate!=null&&tsEndDate!=null){

Log4jinfo("tsEndDategetTime ()===="+tsEndDate);

Log4jinfo("tsBeginDategetTime ()===="+tsBeginDate);

lDays = (tsEndDategetTime()-tsBeginDategetTime())/86400000+1;

Log4jinfo("lDays===="+lDays);

}

return lDays;

}

/

格式化成Timestamp类型

@param sDt

@param bool

@return

/

public static javasqlTimestamp getDateTime(String sDt,boolean bool){

try{

return javasqlTimestampvalueOf(sDt); //sDt format:yyyy-mm-dd hh:mm:ssfffffffff

}catch(IllegalArgumentException iae){

if(bool)

sDt = sDt+" 23:59:590";

else

sDt = sDt+" 00:00:000";

return javasqlTimestampvalueOf(sDt);

}

}

/

根据时间获取日期字符串

@param ts

@return

/

public static String getDateString(Timestamp ts){

if(ts==null)

return "";

Calendar calendar = CalendargetInstance();

calendarsetTime(ts);

String strMonth = StringvalueOf(calendarget(CalendarMONTH)+1);

if(strMonthlength()==1){

strMonth = "0"+strMonth;

}

String strDay = StringvalueOf(calendarget(CalendarDATE));

if(strDaylength()==1){

strDay = "0"+strDay;

}

return calendarget(CalendarYEAR)+"-"+strMonth+"-"+strDay;

}

你还是列几条数据吧,这样太抽象了,怕理解错误你的意思,

还有,你这是要写个sql语句还是要用存储过程?

---补充---

select aproduct_id,bbegin_date from

(select rownum id,user_id,product_id,begin_date,end_date from bb_user_info_t order by USER_ID,PRODUCT_ID) a,

(select rownum id,user_id,product_id,begin_date,end_date from bb_user_info_t order by USER_ID,PRODUCT_ID) b

where auser_id=buser_id and aid=bid-1 and aend_date<>bbegin_date;

得到的结果就是你说的那个第二条的product_id和第三条的begin_date

我就拿你这当前三条数据跑的,如果数据多了的话应该没问题

#include

"stdioh"

int

isleapyear(int

year);//判断是不是闰年。

int

iscurrentdate(int

year,int

month,int

day);//是不是正确的日期。

int

returnnextday(int

year,int

month,int

day);//返回下一天,也有判断是不是正确的日期。

int

leapyear_month_sumday[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年数组,保存各月天数。

void

main()

{

int

year=0,month=0,day=0,nextday=0;

printf("pleace

enter

right

date(example:2005

6

27):\n");

scanf("%d%d%d",&year,&month,&day);

nextday=returnnextday(year,month,day);

switch

(nextday)

{

case

0:

printf("not

a

current

date\n");

break;

case

1:

if

(month==12)

{

year++;

month=1;

}

else

{

month++;

}

break;

}

if

(nextday!=0)

printf("the

you

input

next

date

is

%d-%d-%dthank

use

bye

bye!\n",year,month,nextday);

}

int

isleapyear(int

year)

{

if

(year%4==0)

{

if

(year%400)

return

1;

else

{

if

(year%100==0)

return

0;

else

return

1;

}

}

else

{

return

0;

}

}

int

iscurrentdate(int

year,int

month,int

day)

{

if

((year<0)

&&

(year>9999)

&&

(month>12)

&&

(month<1)

&&

(day<1)

&&(day>31)

)return

0;

else

return

1;

}

int

returnnextday(int

year,int

month,int

day)

{

int

thismonthsumday;

if

(iscurrentdate(year,month,day)==1)

{

thismonthsumday=leapyear_month_sumday[month-1];

if

(month==2)

{

if

(isleapyear(year)==0)

thismonthsumday--;

}

if

(day<thismonthsumday)

{

return

++day;

}

else

{

if

(day==thismonthsumday)

{

return

1;

}

else

{

return

0;

}

}

}

else

{

return

0;

}

}

以上就是关于用java定义一个日期类,急!!!全部的内容,包括:用java定义一个日期类,急!!!、求一个C++面向对象程序、C语言程序报错!求解!本人菜鸟等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9790592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存