当前位置:文档之家› Java万年历课程设计报告

Java万年历课程设计报告

杭州师范大学钱江学院课程设计
题目万年历
学院钱江学院
专业信电分院计算机科学与技术
班级计算机1101
姓名崔伊平
指导教师王李冬
2013 年9 月20 日
目录
一.概述 (1)
二.总体方案设计 (2)
三.详细设计 (3)
四.最终输出 (7)
五.课程设计总结 (8)
参考文献 (9)
一、概述
1.课程设计的目的
通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。

通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《java语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了java语言的好处和其可用性!
2.课程设计的要求
2.1
输入查询的年份与月份,单击“更新”按扭,则可得到相应的日历。

本实验是对图形用户界面,布局管理器的综合运用。

要掌握APPLET容器中添加组件的方法,理解JAVA 的事件处理机制,编写独立的运行窗口。

2.2 输出形式
使用独立的运行窗口进行显示。

界面主要由两部分组成——查询输入部分和结果显示部分。

查询输入部分包括两个文本域,一个用于输入年份:一个用于选择月份:一个更新按扭,用来触发查询事件。

二总体方案设计
1.程序开发环境
a.开发环境:eclipse
b.系统环境:windows xp/7
c.设计工具:Microsoft office 2003
2.整体流程图
图1 流程图
3.功能模块图
图2 结构图
三.详细设计
3.1导入的包
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
3.2Applet的初始化
public void init(){
Label L1 = new Label("输入年份");
Label L2 = new Label("输入月份");
TextField F1 = new TextField(5);
TextField F2 = new TextField(5);
Button B1 = new Button("查询");
int arr = new int[12];
add(L1);
add(F1);
add(L2);
add(F2);
add(B1);
Date date = new Date();
F1.setText(String.valueOf(date.getYear() + 1900));
F2.setText(String.valueOf(date.getMonth() + 1));
B1.addActionListener(this);
arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; arr[3] = arr[5] = arr[8] = arr[10] = 30;
date.setDate(1);//设置每月第一天
var = date.getDay();//得到每月最后一天
}
3.3监听器
public void actionPerformed(ActionEvent e) {
int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2
.getText()) - 1, s = 0;
if(F1.getText().isEmpty()||F2.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"输入不能为空!");
}
Date date = new Date();
date.setYear(x - 1900);
date.setMonth(i);
date.setDate(1);
var = date.getDay();
repaint();
}
3.3paint()
public void paint(Graphics g) {
int xpos, ypos;
//arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; //arr[3] = arr[5] = arr[8] = arr[10] = 30;
int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2
.getText()) - 1;
if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
arr[1] = 29;
else
arr[1] = 28;
g.drawString("星期一", 50, 50);
g.drawString("星期二", 100, 50);
g.drawString("星期三", 150, 50);
g.drawString("星期四", 200, 50);
g.drawString("星期五", 250, 50);
g.drawString("星期六", 300, 50);
g.drawString("星期日", 350, 50);
ARR = new String[arr[i]];
int j = 0, k = 1;
while (k <= arr[i]) {
ARR[j] = String.valueOf(k);//获得每个月日期
k ++;
j ++;
}
int line = 0;
for (int m = 0 ; m < ARR.length ; m ++) { //设置日期显示的位置
ypos = 50 + 50 * (line + 1);
xpos = (var * 50 + 50 * (m % 7)) % 350;
if (xpos == 0) {
xpos = 350;
line ++;
}
g.drawString(ARR[m], xpos, ypos);
}
}
}
四.最终输出1.输入年月界面
2.显示界面
4.输入为空情况
五.课程设计总结
在最初设计这个程序的时候走了不少弯路,一开始对Applet程序没有深入理解,就把初始化部分写到构造函数里去了,后来在老师的提醒下,自己修改过来了。

我认为这个程序并的难点有两个:一个是如何将万年历漂亮的排版出来,一个是算出某年某月第一天是星期几。

处理排版我时想到了Applet程序里的drawString()方法,通过设置X轴的位置来显示日期位置,每7天换一行。

至于算出某年某月第一天是星期几,我第一个想到是和1900年1月1日去比较,先查出该天是星期几,再算出输入的日期比该天晚多少天就可以很轻松的知道想要的答案。

但是如果输入的时间早于1900年,那就要出问题了。

于是我在上网查资料的时候发现了有setDay()和getDay()这两个方法,可以直接用来获取每月第一天,这样就大大方便了我的编程。

另外,在编这个程序也有比较遗憾的地方,比如输入是字母的话程序会出错,我本想用抛出异常来解决,但是每个方法都没法throws我自己写的异常,不知道怎么解决,只能放弃。

附录一:参考文献
[1]Java程序设计之网络编程(第二版)清华大学出版社李芝兴杨瑞龙
[2]数据库系统概论(第四版)王珊萨师煊高等教育出版社
9。

相关主题