Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lab4 富人Smith的生日 If else Switch.

Similar presentations


Presentation on theme: "Lab4 富人Smith的生日 If else Switch."— Presentation transcript:

1 Lab4 富人Smith的生日 If else Switch

2 Smith简介 英国富人P.Smith,1784年2月29日生于伦敦郊区,毕生酷爱旅游和参加party,出生时即被送至教堂学习,只有生日时会参加派对,直到20岁生日那天party上被宣布继承祖父基业,从此开始经营棉纺加工赚钱.因不满生辰, 决定此后闰年生日时举办party,平年2月28日则去教堂做祷告,并且每年的大月最后一天游玩Welsh,小月最后一天游玩Northern Ireland。Smith于1840年9月30日去Northern Ireland旅游的路上遭遇海难逝世。

3 Lab4 考察点 使用控制语句实现这样一个程序,由输入的不同日期判断Smith的活动。 JOptionPane的使用

4 Smith不同日期对应的活动 ~ birth 、 、 、 party 其他时间 church ~ 闰年2.29 party 平年2.28 church 大月31号 travel to Welsh 小月30号 travel to Northern Ireland 其他时间 Money Death (sea)

5 计算闰年的方法(格里历)  公历纪年法中,能被4整除而不能被100整除的数和能被400整除的数是闰年,此外规定能被3200整除的不是闰年。如1900年是平年,2000年是闰年,3200年是平年。

6 每月的天数 1月 3月 5月 7月 8月 10月 12月为大月,有31天 4月 6月 9月 11月为小月,有30天
平年2月有28天,闰年2月有29天

7 MyCalendar类 isLeapYear() lastDayInMonth() lessThan(MyCalendar2) 判断是否闰年
判断当前MyCalendar是否早于MyCalendar2

8 Smith类 String chooseDate() doMap() Activity() inputDialog输入任意日期
Date到status的映射,每个日期决定了Mr Smith不同的状态. Eg. For , status is “birth” Activity() Status到信息输出的映射,每个status输出一个messageDialog

9 Smith类 While(chooseDate!=2007-09-27) { } doMap()得到status;
Activity()得到status下当前活动的MessageDialog }

10 JOptionPane showInputDialog title showMessageDialog showOptionDialog
icon message Input value option buttons

11 JOptionPane.showMessageDialog
Icon startIcon = new ImageIcon("pic\\birth.jpg"); JOptionPane.showMessageDialog(null, "Smith登场~", "Smith'slife", JOptionPane.PLAIN_MESSAGE, startIcon); 同理JOptionPane.showInputDialog

12 JOptionPane.showOptionDialog
Icon startIcon = new ImageIcon("pic\\smith.jpg"); String[] models = { ">>开始<<", "<<退出>>" }; int modelNo = JOptionPane.showOptionDialog(null, "", "Smith's life",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, startIcon, models, models[0]); if(modelNo==1) System.exit(0);

13 isLeapYear() A year is a leap year if it is divisible by 4 but not by 100, or it is divisible by 400. Besides, this years divisible by 3200 are not leap years, eg, 3200, 6400; ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)||(year % 3200 != 0)??

14 lastDayInMonth() Rewrite this method with Switch statements Case2:
if(isLeapYear()) Return xx; (else) return yy;

15 initDate() int daysInMonth = lastDayInMonth();
if(0<day&&day<=daysInMonth) this.day = day; else{ JOptionPane.showMessageDialog(null, "输入的day不合法,必须在0-"+daysInMonth+"之间",……); return false; } 已经判断过每个月的最后一天的合法性.

16 Smith 已经判断过每个月的最后一天的合法性. Just use it! Eg: smith 20岁前是否party
currentMonth currentDay currentCalendar.lastDayInMonth(); Smith20岁后的status 同上 Switch is recommended


Download ppt "Lab4 富人Smith的生日 If else Switch."

Similar presentations


Ads by Google