北邮Java程序设计作业3Word格式.docx
- 文档编号:7960176
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:14
- 大小:216.61KB
北邮Java程序设计作业3Word格式.docx
《北邮Java程序设计作业3Word格式.docx》由会员分享,可在线阅读,更多相关《北邮Java程序设计作业3Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
(输入框)
5
6
7
8
9
10
11
月份:
12
13
14
15
16
17
18
19
20
21
22
23
24
25
查询按钮
26
27
28
29
30
备忘:
其中,只要在年份和月份对应的输入框中,输入一个年份、月份,按下查询按键,日历即可显示,最顶上的标题可以动态更新。
这是各个组件的关系示意图,其中,图中的p0、p1、p2为JPanel对象,方便安排我们的格局;
label0、label1、label2三个对象,为JLable对象,用于显示三个标签,text1、text2、text3三个对象,为JTextField对象,用于输入年份月份,button1为JButton对象,用于按下以查询日历。
2、程序流程图
程序开始显示2014年12月的日历,当输入一个年份和月份时,判断是否合法,合法则输出该月的日历,不合法则输出一个空日历。
3、程序逻辑框图
以上是我们程序的逻辑框图。
首先利用leapYear()判断这一年是否为闰年;
然后利用getMonthDay(),各个月份的日期相加,求出1800年以来,这个月之前共有多少天;
然后利用getStartDay(),求出这个月开始的一天为星期几,再配合getMonthDay(),即可得到该月的日历。
再使用Showcal(),修改内部参数,即可在程序中显示出来。
三、关键代码分析
1构造方法:
publiccal(){
super("
2012210637郑晨宇——Java作业·
日历软件"
);
//框架命名
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口关闭函数
this.setBounds(400,150,550,340);
//设置窗口的位置和大小
Containerc=getContentPane();
p1=newJPanel();
//面板对象,
p3=newJPanel(newGridLayout(8,1,3,3));
//在面板对象p3里使用网格布局管理器
p2=newJPanel(newGridLayout(7,7,10,1));
//网格布局管理器
label0=newJLabel("
年份:
"
//标签组件
label1=newJLabel("
月份:
label2=newJLabel("
备忘录:
label3=newJLabel("
text1=newJTextField("
2014"
1);
//文本框
text2=newJTextField("
12"
text3=newJTextField
(1);
button1=newJButton("
查看"
//按钮
inti;
//中心面板中各个标签初始化(用显示日历7行7列)
for(i=0;
i<
7;
i++)
p2.add(ai[i]=newJLabel(ast[i]));
//第一行显示是周几(星期日到星期六)
for(i=7;
i<
49;
i++)
p2.add(ai[i]=newJLabel("
));
//暂时为空,在showcal中具体定义各月不同的显示
p3.add(label0);
p3.add(text1);
p3.add(label1);
p3.add(text2);
p3.add(button1);
p3.add(label2);
p3.add(text3);
p1.add(label3);
setVisible(true);
c.add(p1,BorderLayout.NORTH);
c.add(p3,BorderLayout.EAST);
c.add(p2,BorderLayout.CENTER);
button1.addActionListener(this);
//注册年份、月份输入和ok按钮监听器
this.setVisible(true);
//窗口可见
}//main主函数
这个构造方法首先构造了一个JFrame对象并初始化,然后将各个标签、输入框、按键赋初值,填入预定的panel中,在将panel填入框架的指定位置,最后设定了按键的监听器。
由于cal类已经实现了ActionListener接口(实现过程见后),所以使用该对象作为事件处理器即可。
2actionPerformed方法
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button1)
{
try//控制输入的年份正确,异常控制
{
if(text1.getText().length()!
=4)
thrownewNumberFormatException();
}
catch(NumberFormatExceptionex)
return;
}
Strings1=text1.getText();
//得到输入的年份
year=Integer.parseInt(s1);
//将年份转换为int型,year为静态变量
Strings2=text2.getText();
//月份,同年份处理
month=Integer.parseInt(s2);
showcal(year,month);
//调用显示日历的函数
}//showcal:
在中间面板中显示网格布局之后的日历主界面
}
当button按下时,产生了一个ActionEvent,被注册的事件监听器捕捉到。
捕捉后,首先将年份和月份转换为int型,再调用showcal函数(实现过程见后),显示这个月的日历。
3showcal方法
publicvoidshowcal(intyear,intmonth)
{
intmonthDay=getMonthDay(year,month);
//得到一个月有多少天
intstartDay=getStartDay(year,month);
//得到每个月开始是周几
//显示当前窗口中显示日历的年月
Stringrr="
+Integer.toString(year)+"
年"
+Integer.toString(month)+"
月"
;
label3.setText(rr);
//控制各月日历的正确显示
startDay+7;
i++)
ai[i].setText("
for(i=startDay+7;
startDay+monthDay+7;
Stringbb;
//存在意义:
便于实现setText函数的带格式输入
if(i-startDay-6<
10)
bb="
"
+Integer.toString(i-startDay-6);
//将int型转换为String型
else
ai[i].setText(bb);
}
for(i=startDay+monthDay+7;
49;
}
首先调用getMonthDay和getStartDay方法(实现方法见后),获得这个月共有多少天,和这个月开始的一天是星期几,这样就得到了本月的日历。
然后将该月的日历保存到数组ai中,用来显示。
4leapYear方法
publicstaticbooleanleapYear(intyear)
if((year%400==0)||((year%4==0)&
&
(year%100!
=0)))
returntrue;
else
returnfalse;
这个方法判断这一年是不是闰年。
程序较为简单,不再赘述。
5getMonthDay方法
publicstaticintgetMonthDay(intyear,intmonth)
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return31;
if(month==4||month==6||month==9||month==11)
return30;
if(month==2)
if(leapYear(year))//闰年二月29天
return29;
else
return28;
return0;
//ifmonthisincorrect.
//如果月份输入错误返回0.
这个方法用来得到这个月共有多少天。
6getStartDay方法
publicstaticintgetStartDay(intyear,intmonth)
{//从1800年1月1日开始
intstartDay1800=3;
longtotalDays=getTotalDays(year,month);
return(int)((totalDays+startDay1800)%7);
这个方法用来得到这个月的第一天是星期几。
7getTotalDays方法
publicstaticlonggetTotalDays(intyear,intmonth)
longtotal=0;
for(inti=1800;
year;
if(leapYear(i))
total=total+366;
total=total+365;
for(inti=1;
month;
total=total+getMonthDay(year,i);
returntotal;
这个方法遍历1800年之后的各年和本年的各月份,获得在这个月份之前,共有多少天(以1800年1月1日为起点)。
四、程序运行结果
1、进入程序
进入程序后,程序显示2014年12月的日历,日历正确。
2、修改日期
我们修改日期(2015年1月)以后,点击查询键,日历正确显示了2015年的日历。
点击右上角红叉可以退出程序。
五、源程序
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclasscalextendsJFrameimplementsActionListener{
staticintyear,month;
//设置静态变量便于计算方法的实现
privateString[]ast={"
日"
"
一"
"
二"
三"
四"
五"
六"
};
privateJLabel[]ai=newJLabel[49];
privateJLabellabel0,label1,label2,label3;
//标签
privateJTextFieldtext1,text2,text3;
//输入框
privateJButtonbutton1;
//按钮
privateJPanelp3,p1,p2;
//面板
publiccal(){
//暂时空,在showcal中具体定义各月不同的显示
//text1.addActionListener(this);
//text2.addActionListener(this);
publicstaticvoidmain(String[]args){
cala=newcal();
a.showcal(2014,12);
//初始化显示2013年6月日历
//事件处理方法
//e.getSource()==text1||e.getSource()==text2||
//showcal:
//int型转换为String型
//leapYear:
判断是否为闰年
//getMonthDay:
每月总天数
publicstaticintgetMonthDay(intyear,intmonth)
//getStartDay:
返回每月第一天是周几
//getTotalDays:
从1800年1月1日到所查月份前总的天数
publicstaticlonggetTotalDays(intyear,intmonth)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 Java 程序设计 作业
![提示](https://static.bingdoc.com/images/bang_tan.gif)