java课程设计万年历程序设计报告Word文件下载.docx
《java课程设计万年历程序设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《java课程设计万年历程序设计报告Word文件下载.docx(41页珍藏版)》请在冰点文库上搜索。
DevelopmentKit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。
其中JavaDevelopmentKit简称JDK是大多开发工具的基础。
以上的每种开发工
具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和
软硬件环境等因素来选择一种合适的开发工具。
第1页
1需求分析
1.1需求分析
本程序的要求为:
1.使用图形用户界面;
2.本程序能够实现日期与星期的查询。
1.2功能设计
本程序要构建的万年历程序,其功能有以下几个方面:
(1)通过网页形式运行,实现图形界面。
(2)能以月历形式显示日期与星期。
(3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。
(4)通过点击“更新”来刷新日历。
第2页
2.概要设计
2.1程序设计思路
1.总天数的算法:
首先用if语句判断定义年到输入年之间每一年是否为闰年,是
闰年,该年的总天数为366,否则,为365。
然后判断输入的年是否为定义年,若是,令
总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到
要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使
总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
2.输出月份第一天为星期几的算法:
使总天数除以7取余加2得几既为星期几,若
是7,则为星期日。
3.算出输出月份第一天为星期几的算法:
算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
4.如果年份小于1582年则程序不予判断。
第3页
2.2程序运行界面
图2-1程序运行界面
2.3流程图
开始
初始化程序,获取当前日期
调取当前日期下日志文件绘制界面
判断日期是否更新
第4页
结束
3.各模块的功能及程序说明
3.1.初始化组件
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
//importjava.sql.Date;
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
第5页
importjava.util.Calendar;
importjava.util.Date;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.table.DefaultTableModel;
3.2.初始化数据
private
Calendar
cld
=Calendar.
getInstance
();
String[]
astr
={
"
星期一"
星期二"
星期三"
星期四"
星期五"
"
星期六"
星期日"
};
DefaultTableModel
dtm
=
newDefaultTableModel(
null,astr);
JTable
table
new
JTable(
dtm);
//
装日期的表格
JScrollPane
sp
newJScrollPane(
);
JButton
bLastYear
JButton(
上一年"
bNextYear
下一年"
);
private
JBut
bNextMonth
=newJButton(
下月"
JTextField
jtfYear
JTextField(5);
//jtfYear
年份显示和输入文本
框
jtfMonth
JTextField
(2);
//jtfMonth
月份显示文本框
JPanel
p1
newJPanel();
//装入控制日期按钮的模块
p2=
p3=
newJPanel(
newBorderLayout());
p4=
newGridLayout(2,1));
p5=
bAdd
newJButton(
保存日志"
bDel
删除日志"
JTextArea
jta
JTextArea();
//jta--JTextArea
jsp
JScrollPane(
JLabel
l=
JLabel(
年份文本框中可直接键入要查找的年份
以提高查询效
率"
lt
JLabel();
ld
int
lastTime
;
第6页
3.3.绘制程序界面
public
wannianli()
{
super
("
万年历"
//框架命名
this
.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
//窗口关闭函数
.getContentPane().setLayout(
BorderLayout(10,0));
.setLineWrap(
true
.setGridColor(Color.
GRAY);
星期之间的网格线是灰色的
.setColumnSelectionAllowed(
.setSelectionBackground(Color.
BLACK);
当选定某一天时这一天背景
黑色
.setSelectionForeground(Color.
GREEN);
选定的日期字体是绿色的
.setBackground(
newColor(184,207,229));
日期显示表格颜色浅蓝色
.setFont(
newFont("
黑体"
Font.BOLD,24));
日期数字字体格式
.setRowHeight(30);
//表格的高度
.addMouseListener(
this);
鼠标监听器
jtfYear.addActionListener(this);
//可输入年份的文本框
//为各个按钮添加监听函数
bAdd.addActionListener(this);
bDel.addActionListener(this);
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);
//将按钮添加到Jpanel上
p1.add(
//年份输入文本框
bLastMonth
p2.add(
bAdd);
p3.add(
BorderLayout.
CENTER);
p2,BorderLayout.
SOUTH);
ld,BorderLayout.
NORTH);
p4.add(
l);
第7页
p5.add(
p4
.getContentPane().add(
p5,BorderLayout.
p3,BorderLayout.
EAST);
String[]strDate=DateFormat.
getDateInstance
().format(
Date()).split(
-"
获得日期
.set(Integer.
parseInt
(strDate[0]),
Integer.
(strDate[1])-1,0);
showCalendar(Integer.
(strDate[1]),
.setEditable(
false
//设置月份的文本框为不可编辑
.setText(strDate[0]);
.setText(strDate[1]);
.showTextArea(strDate[2]);
Font(
新宋体"
Font.
BOLD,24));
Timer(
).start();
.setBounds(200,200,600,320);
.setResizable(
.setVisible(
}
3.4触发器
publicvoidactionPerformed(ActionEvente)
if(e.getSource()==jtfYear||e.getSource()==bLastYear||e.getSource()==bNextYear||
e.getSource()==bLastMonth||e.getSource()==
bNextMonth)
intm,y;
try//控制输入的年份正确,异常控制
if(jtfYear.getText().length()!
=4)
thrownewNumberFormatException();
y=Integer.parseInt(jtfYear.getText());
第8页
m=Integer.parseInt(jtfMonth.getText());
catch(NumberFormatExceptionex)
JOptionPane.showMessageDialog(this,"
请输入4位0-9的数字!
年份有误"
JOptionPane.ERROR_MESSAGE);
return;
ld.setText("
没有选择日期"
for(inti=0;
i<
lastTime+1;
i++){dtm.removeRow(0);
if(e.getSource()==
bLastYear){jtfYear.setText(String.valueOf(--y));
}
bNextYear){jtfYear.setText(String.valueOf(++y));
if(e.getSource()==bLastMonth)
if(m==1)
jtfYear.setText(String.valueOf(--y));
m=12;
jtfMonth.setText(String.valueOf(m));
else
jtfMonth.setText(String.valueOf(--m));
if(e.getSource()==bNextMonth)
if(m==12)
jtfYear.setText(String.valueOf(++y));
m=1;
jtfMonth.setText(String.valueOf(++m));
cld.set(y,m-1,0);
showCalendar(y,m,cld);
第9页
if(e.getSource()==bAdd)
intr=table.getSelectedRow();
intc=table.getSelectedColumn();
if(!
ld.getText().equals("
))
try
Filefile=newFile(ld.getText()+"
.txt"
BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file)));
bw.write(jta.getText());
bw.close();
catch(FileNotFoundExceptionex)
ex.printStackTrace();
catch(IOExceptionex)
if(e.getSource()==bDel)
Filefiledel=newFile(ld.getText()+"
if(filedel.exists())
if(filedel.delete())
jta.setText("
日志删除成功"
日志删除失败"
没有找到日志文件"
第10页
publicvoidmouseClicked(MouseEvente)
jta.setText(null);
if(table.getValueAt(r,c)==null)
this.showTextArea(table.getValueAt(r,c));
publicvoidmousePressed(MouseEvente)
publicvoidmouseReleased(MouseEvente)
publicvoidmouseEntered(MouseEvente)
publicvoidmouseExited(MouseEvente)
privatevoidshowTextArea(Objectselected)
{//将所选日期显示出来,能不能弄成农历显示
ld.setText(jtfYear.getText()+"
年"
+jtfMonth.getText()+"
月
+selected+"
日"
Filefilein=newFile(ld.getText()+"
if(filein.exists())
BufferedReaderbr