Lab4 富人Smith的生日 If else Switch
Smith简介 英国富人P.Smith,1784年2月29日生于伦敦郊区,毕生酷爱旅游和参加party,出生时即被送至教堂学习,只有生日时会参加派对,直到20岁生日那天party上被宣布继承祖父基业,从此开始经营棉纺加工赚钱.因不满生辰, 决定此后闰年生日时举办party,平年2月28日则去教堂做祷告,并且每年的大月最后一天游玩Welsh,小月最后一天游玩Northern Ireland。Smith于1840年9月30日去Northern Ireland旅游的路上遭遇海难逝世。
Lab4 考察点 使用控制语句实现这样一个程序,由输入的不同日期判断Smith的活动。 JOptionPane的使用
Smith不同日期对应的活动 1784 2.29~1804 2.29 1784 2.29 birth 1788 2.29、1792 2.29、1796 2.29、1804 2.29 party 其他时间 church 1804 3.1~1840 9.29 闰年2.29 party 平年2.28 church 大月31号 travel to Welsh 小月30号 travel to Northern Ireland 其他时间 Money 1840 9.30 Death (sea)
计算闰年的方法(格里历) 公历纪年法中,能被4整除而不能被100整除的数和能被400整除的数是闰年,此外规定能被3200整除的不是闰年。如1900年是平年,2000年是闰年,3200年是平年。
每月的天数 1月 3月 5月 7月 8月 10月 12月为大月,有31天 4月 6月 9月 11月为小月,有30天 平年2月有28天,闰年2月有29天
MyCalendar类 isLeapYear() lastDayInMonth() lessThan(MyCalendar2) 判断是否闰年 判断当前MyCalendar是否早于MyCalendar2
Smith类 String chooseDate() doMap() Activity() inputDialog输入任意日期 Date到status的映射,每个日期决定了Mr Smith不同的状态. Eg. For 1784-02-29, status is “birth” Activity() Status到信息输出的映射,每个status输出一个messageDialog
Smith类 While(chooseDate!=2007-09-27) { } doMap()得到status; Activity()得到status下当前活动的MessageDialog }
JOptionPane showInputDialog title showMessageDialog showOptionDialog icon message Input value option buttons
JOptionPane.showMessageDialog Icon startIcon = new ImageIcon("pic\\birth.jpg"); JOptionPane.showMessageDialog(null, "Smith登场~", "Smith'slife", JOptionPane.PLAIN_MESSAGE, startIcon); 同理JOptionPane.showInputDialog
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);
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)??
lastDayInMonth() Rewrite this method with Switch statements Case2: if(isLeapYear()) Return xx; (else) return yy;
initDate() int daysInMonth = lastDayInMonth(); if(0<day&&day<=daysInMonth) this.day = day; else{ JOptionPane.showMessageDialog(null, "输入的day不合法,必须在0-"+daysInMonth+"之间",……); return false; } 已经判断过每个月的最后一天的合法性.
Smith 已经判断过每个月的最后一天的合法性. Just use it! Eg: smith 20岁前是否party currentMonth currentDay currentCalendar.lastDayInMonth(); Smith20岁后的status 同上 Switch is recommended