当前位置:文档之家› java(J2EE)课程设计报告 (20)

java(J2EE)课程设计报告 (20)

烟台工程职业技术学院系专业级课程设计(论文)

题目: 《万年历》

姓名学号

指导教师(签名)

二○一一年七月十四日

摘要

本课程设计的目的及意义是:通过代码实现将理论知识和具体实践相结合,巩固提高了对java的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,和对计算机的进一步理解。

本图像生成器含一个主体框架和三个面板:查看面板、日期面板、时钟面板,框架包含一个“查看”按钮和两个下拉式菜单:年份和月份下拉式菜单。

关键词:Java;GUI;Runnable

前言

通过本课程设计教学所要求达到的目的是:实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期

相关知识:线程、java标准类库、GUI程序设计。

作用:为用户开发一个便捷的万年历,用于查看日期和时间,可查万年间的日期与星期的关系。

应用前景:万年历作为大众的日期查看软件,便于人们查看日期和时间,用法简单,设计新颖,适合各种用户,有广泛应用前景。

设计需要的条件:对java技术的灵活应用、初步了解软件工程理论知识,掌握日期处理技术。

一、需求分析

(一)系统的主要功能:

1.可以查看当前的年份、月份和日期;

2.增加了时间栏,便于用户查看当前时间;

3.能够查找1至9999年的日期与星期的关系。

(二)系统功能结构图

1. Clock类:实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。

Paint方法:从系统获取当前日期,以设置时钟的初始值。

2. MainFrame类:作为主类实现了JFrame接口,调用Clock类,包含了

MainFrame方法,Init方法,use方法,Resetday方法。

MainFrame方法:定义各个参数,应用AWT的绘图功能,构建总体框架;

获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所需结果。

Init方法:调用系统的年份和月份,以设置查看面板和日期面板的初始值。

use方法:确定所要查询的年月的第一天的是星期几。

图1 系统功能结构

二、系统设计

(一)万年历

1.万年历

包含Clock类以及MainFrame类

2.相关类包

图2 相关类包

(二)Clock类:实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。

1. Clock方法

功能:从系统获取当前日期,以设置时钟的初始值。

(三)MainFrame类:作为主类实现了JFrame接口,调用Clock类,包含了MainFrame方法,Init方法,use方法,Resetday方法。

1. MainFrame方法

功能:定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所需结果。

2. Init方法

功能:调用系统的年份和月份,以设置查看面板和日期面板的初始值。

3. use方法

功能:确定所要查询的年月的第一天的是星期几。

4. Resetday方法

功能:进一步处理所查询的年份月份,确定查询月份的天数;

三、系统运行

(一)运行界面如下:

用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮:

图3 运行界面

(二)系统运行和发布

双击直接可运行程序

通过本次课程设计,了解了课程设计的要求与方法,学会了程序设计基本步骤。进一步提高了团队合作的意识。

四、结论

实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期,以及万年间的日期与兴起的关系,确定所要查询的年月的第几天的是星期几,用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮进一步处理所查询的年份月份,确定查询月份的天数。万年历作为大众的日期查看软件,便于人们查看日期和时间,用法简单,设计新颖,适合各种用户,有广泛应用前景。

五、结束语

通过本次课程设计,了解了课程设计的要求与方法,学会了程序设计基本步

骤。进一步提高了自我学习的意识,提升了自我学习的能力。

感谢知识渊博,给与我耐心答疑的陈娅冰老师对我的悉心辅导。

感谢校领导给我这次难得的锻炼机会,让我能更好的理解和实践java编程,让我对java编程有了深刻的认知,进一步的了解了所学知识。

参考文献

专著

1 叶核亚.Java程序设计实用教程.[M].北京:电子工业出版社,2001.2

2 郝玉龙姜韡.JavaEE编程技术[M].北京:清华大学出版社;北京交通大学出版社,2008.6.

致谢

此次课程设计能过圆满成功,在此要向指导老师陈娅冰致谢。在过程中,陈娅冰给予了指导性意见;在关键时刻,能过及时引导我往正确的方向努力;并且在最后的考评中,能够认真仔细的为我做详细检查。同时要谢谢曾给自己帮助的同学的积极帮助,不遗余力的完成这次设计课程,让说明书能够顺利的通过考核。希望以后可以取得更好的成果,谢谢!

附:系统源程序

/**

* MainFrame.java

* Summary 万年历主类

*/

Import java.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.text.*;

import java.util.*;

class Clock extends Canvas implements Runnable{

MainFrame mf;

Thread t;

String time;

Clock(MainFrame mf){

this.mf=mf;

setSize(400,40);

setBackground(Color.white);

t=new Thread(this); //实例化线程

t.start(); //调用线程

}

public void run(){

while(true){

try{

t.sleep(1000); //休眠1秒钟

}catch(InterruptedException e){

System.out.println("异常");

}

this.repaint(100);

}

}

public void paint(Graphics g){

Font f=new Font("宋体",Font.BOLD,16);

SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型

Calendar now=Calendar.getInstance();

time=SDF.format(now.getTime()); //得到当前日期和时间

g.setFont(f);

g.setColor(Color.red);

g.drawString(time,100,25);

}

}

class MainFrame extends JFrame{

JPanel panel=new JPanel(new BorderLayout());

JPanel panel1=new JPanel();

JPanel panel2=new JPanel(new GridLayout(7,7));

JPanel panel3=new JPanel();

JLabel label[]=new JLabel[49];

JLabel 年份=new JLabel("年份");

JLabel 月份=new JLabel("月份");

JComboBox com1=new JComboBox(); //下拉窗口

JComboBox com2=new JComboBox();

JButton 查看=new JButton("查看");

int re_year,re_month;

int x_size,y_size;

String year_num;

Calendar now=Calendar.getInstance(); //实例化Calendar

MainFrame(){

super("万年历");

setSize(300,350);

x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth());

y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight());

setLocation((x_size-300)/2,(y_size-350)/2);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1.add(年份);

panel1.add(com1);

panel1.add(月份);

panel1.add(com2);

panel1.add(查看);

for(int i=0;i<49;i++){

label[i]=new JLabel("",JLabel.CENTER);//将显示的字符设置为居中

panel2.add(label[i]);

}

panel3.add(new Clock(this));

panel.add(panel1,BorderLayout.NORTH);

panel.add(panel2,BorderLayout.CENTER);

panel.add(panel3,BorderLayout.SOUTH);

panel.setBackground(Color.white);

panel1.setBackground(Color.yellow);

panel2.setBackground(Color.white);

panel3.setBackground(Color.blue);

Init();

查看.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int c_year,c_month,c_week;

c_year=Integer.parseInt(com1.getSelectedItem().toString());

//得到当前所选年份

c_month=Integer.parseInt(com2.getSelectedItem().toString())-1; //

得到当前月份,并减1,计算机中的月为0-11

c_week=use(c_year,c_month); //调用函数use,得到星期几

Resetday(c_week,c_year,c_month); //调用函数Resetday }});

setContentPane(panel);

setVisible(true);

setResizable(false);

}

public void Init(){

int year,month_num,first_day_num;

String log[]={"日","一","二","三","四","五","六"};

for(int i=0;i<7;i++){

label[i].setText(log[i]);

for(int i=0;i<49;i=i+7){

label[i].setForeground(Color.red); //将星期日的日期设置为红色}

for(int i=6;i<49;i=i+7){

label[i].setForeground(Color.red);//将星期六的日期设置为红色}

for(int i=1;i<10000;i++){

com1.addItem(""+i);

}

for(int i=1;i<13;i++){

com2.addItem(""+i);

}

month_num=(int)(now.get(Calendar.MONTH)); //得到当前时间的月份

year=(int)(now.get(Calendar.YEAR)); //得到当前时间的年份

com1.setSelectedIndex(year-1); //设置下拉列表显示为当前年

com2.setSelectedIndex(month_num); //设置下拉列表显示为当前月

first_day_num=use(year,month_num);

Resetday(first_day_num,year,month_num);

}

public int use(int reyear,int remonth){

int week_num;

now.set(reyear,remonth,1); //设置时间为所要查询的年月的第一天

week_num= (int)(now.get(Calendar.DAY_OF_WEEK));//得到第一天的星期

return week_num;

public void Resetday(int week_log,int year_log,int month_log){

int month_score_log; //判断是否是闰年的标记

int month_day_score; //存储月份的天数

int count;

month_score_log=0;

month_day_score=0;

count=1;

if(year_log%4==0&&year_log%100!=0||year_log%400==0){//判断是否为闰年

month_score_log=1;

}

month_log=month_log+1; //将传来的月份数加1

switch(month_log){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

month_day_score=31;

break;

case 4:

case 6:

case 9:

case 11:

month_day_score=30;

break;

case 2:

if(month_score_log==1){

month_day_score=29;

}

else{

month_day_score=28;

}

break;

}

for(int i=7;i<49;i++){ //初始化标签

label[i].setText("");

}

week_log=week_log+6; //将星期数加6,使显示正确

month_day_score=month_day_score+week_log;

for(int i=week_log;i

label[i].setText(count+"");

}

}

public static void main(String [] args){

JFrame.setDefaultLookAndFeelDecorated(true);

MainFrame start=new MainFrame();

}

}

烟台工程职业技术学院

课程(设计)成绩评定评分表

分(含90分)以上记为优秀,80分(含80分)以上为良好,70分(含70分)以上记为中等,60分(含60分)以上记为及格,60分以下记为不及格。

相关主题
文本预览
相关文档 最新文档