java万年历学年论文.docx

上传人:b****1 文档编号:23288721 上传时间:2023-05-16 格式:DOCX 页数:40 大小:114.28KB
下载 相关 举报
java万年历学年论文.docx_第1页
第1页 / 共40页
java万年历学年论文.docx_第2页
第2页 / 共40页
java万年历学年论文.docx_第3页
第3页 / 共40页
java万年历学年论文.docx_第4页
第4页 / 共40页
java万年历学年论文.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

java万年历学年论文.docx

《java万年历学年论文.docx》由会员分享,可在线阅读,更多相关《java万年历学年论文.docx(40页珍藏版)》请在冰豆网上搜索。

java万年历学年论文.docx

java万年历学年论文

 

学年论文

 

题目:

基于Java开发的万年历程序设计

学院:

数学与统计学院

专业:

信息与计算科学

班级:

11级

(1)班

*******

学号:

************

*******

基于Java开发的万年历程序设计

郝玉霞

(西北师范大学数学与统计学院兰州730070)

摘要:

本文是在Java的基础上,使用了Mycalendar、JFrame、Clock、TimeThread、Timer等类和showCalendar、getDaysOfMonth、mouseClicked、run、today等方法,运用了if-else、try-catch等基本的Java语句,使用图形用户界面为用户开发了一个便捷的万年历。

关键字:

Java语言;万年历;图形界面

CalendarprogramdesignbasedonJavadevelopment

HAOYuxia

(CollegeofMathematicsandStatistics,NorthwestNormalUniversity,Lanzhou730070)

Abstract:

ThisarticleisbasedonJava,usetheMycalendar,JFrame,Clock,TimeThread,Timer,etcandtheshowCalendar、getDaysOfMonth、run、todaymouseClickedmethods,andusingtheif-else,try-catchbasicJavastatements,suchasusingagraphicaluserinterfaceforuserstodevelopaconvenientCalendar.

KeyWords:

Javalanguage;Calendar;Thegraphicalinterface

引言

在当代繁忙的工作与生活中,时间与我们每一个人都有非常亲密的关系,每个人都受到时间的影响,为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。

随着社会、科技的发展,人类得知时间,从观看太阳、摆钟到现在电子钟,不断研究、创新。

为了在观测时间的同时能够了解其他与人类密切相关的信息,比如阴阳历、星期、日期等,而后万年历被人们所发明,在此我在原来万年历的基础上做个改进,为大家设计了能够为大家提供更多服务的万年历,它集时间、日期、星期和时区于一身,而且还具有闹钟和备忘录功能,方便你设置查看日程,防止你在每天忙忙碌碌的工作中忘记一些关键事情或重大事件,并且具有读取方便、显示直观、功能多样使用寿命长,误差小诸多优点,符合众多人们的需求,具有广阔的使用前景。

1简要概述

1.1用户需求

(1)能够提供时区选择。

(2)能够实现日期与星期的查询。

(3)可显示1-9999年的日历信息

(4)显示准确、完整,界面美观。

1.2设计目的

(1)为用户开发一个便捷的万年历;

(2)对java技术的灵活应用;

(3)掌握日期处理技术;

(4)初步了解软件工程理论知识。

1.3主要特点

(1)清楚直观,便于查询

(2)功能齐全

2功能分析

2.1功能设计

本程序要构建的万年历程序,其功能有以下几个方面:

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

(2)能以阳历和阴历形式显示日期与星期。

(3)支持用户自己输入年份及月份。

(4)本程序能够实现闹钟提示。

(5)本程序具有备忘录功能。

(6)本程序能够提供时区选择,以便查看不同时区的时间。

2.2系统功能结构图

(1)Clock类:

运用线程,包含了run方法,实现时钟的功能。

(2)Mycalendar类:

作为主类实现了ActionListener,MouseListener接口,继承了JFrame类,包含了showCalendar,actionPerformed,showTextArea,updateTimeText和main等方法。

showCalendar方法:

定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用getDaysOfMonth方法,实现日历模块功能,并得到所需结果;

actionPerformed方法:

控制年月份的正确输入;

showTextArea方法:

其主要功能是将功力化为农历;

updateTimeText方法:

设置时区查询,以便用户查询不同时区的时间;

图1系统功能结构

3总体设计

3.1程序设计思路

本程序主要分为以下几个模块:

(1)闹钟模块:

此模块的主要功能为:

在用户设置的闹钟提示时间5分钟内,进行闹钟提示。

(2)备忘录模块:

此模块的主要为用户提供记录重要事件功能,减少用户所面临的不必要的烦恼。

(3)日期模块

①总天数的算法:

首先用if语句判断定义年到输入年之间每一年是否为闰年,若是闰年,该年的总天数为366,否则为365,然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

②输出月份第一天为星期几的算法:

使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

③算出输出月份第一天为星期几的算法:

算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

④如果年份大于9999年则程序不予判断。

(4)农历和气节显示模块:

其主要功能是方便用户查询当天的农历、星期、节气、生肖等。

(5)温馨提示模块:

此模块主要内容为惜时励志名言,主要功能是激励广大用户珍惜时间,把握好生命中的每一天。

(6)时区选择模块:

此模块的主要功能是方便用户查看不同时区的时间。

3.2程序运行界面

运行界面如下:

图2运行界面

3.3流程图:

图3流程图

4各模块的功能及程序说明

4.1初始化组件

privateCalendarcld=Calendar.getInstance();

privateString[]week={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

privateDefaultTableModeldtm=newDefaultTableModel(null,week);

privateJTabletable=newJTable(dtm);

privateJScrollPanesp=newJScrollPane(table);

privateJButtonbLastYear=newJButton("上一年");

privateJButtonbNextYear=newJButton("下一年");

privateJButtonbLastMonth=newJButton("上月");

privateJButtonbNextMonth=newJButton("下月");

privateJButtonbAddClock=newJButton("确定");

privateJPanelp1=newJPanel();//装入控制日期的按钮模块

privateJPanelp2=newJPanel(newGridLayout(3,2));

privateJPanelp3=newJPanel(newBorderLayout());

privateJPanelp4=newJPanel(newGridLayout(2,1));

privateJPanelp5=newJPanel(newBorderLayout());

privateJPanelp6=newJPanel(newGridLayout(2,2));

privateJPanelp7=newJPanel(newGridLayout(2,1));

privateJPanelp8=newJPanel(newBorderLayout());

privateJPanelp9=newJPanel(newBorderLayout());

privateJPanelp10=newJPanel(newGridLayout(6,1));

privateJPanelp11=newJPanel(newBorderLayout());

privateJTextFieldjtfYear=newJTextField(5);

privateJTextFieldjtfMonth=newJTextField

(2);

privateJTextFieldtimeField=newJTextField();

privateJTextFieldh1=newJTextField(5);

privateJTextFieldm1=newJTextField(5);

privatestaticJTextAreajta=newJTextArea(4,5);

privateJScrollPanejsp=newJScrollPane(jta);

privateJTextAreajta1=newJTextArea(1,4);

privateJTextAreabwl=newJTextArea(5,4);

privateJScrollPanejsp1=newJScrollPane(jta1);

privateJLabell=newJLabel("你可以向年份和月份输入框中输入正确的年份和月份,提高查询效率");

privateJLabellt=newJLabel();

privateJLabelld=newJLabel();

privateJLabelts=newJLabel("请在右边下拉菜单选择你要选择的城市");

privateJLabelclock=newJLabel("闹钟",JLabel.CENTER);

privateJLabelnotice=newJLabel("闹钟提示",JLabel.CENTER);

privateJLabelbeiwl=newJLabel("备忘录",JLabel.CENTER);

privateJLabelhour=newJLabel("小时",JLabel.CENTER);

privateJLabelminute=newJLabel("分钟",JLabel.CENTER);

privateJLabellu=newJLabel("农历和节气",JLabel.CENTER);

privateJLabellizhi0=newJLabel("温馨提示",JLabel.CENTER);

privateJLabellizhi=newJLabel("明日复明日,明日何其多");

privateJLabellizhi1=newJLabel("花开有落时,人生容易老");

privateJLabellizhi2=newJLabel("成功立业在今日");

privateJLabellizhi3=newJLabel("莫待明朝悔今朝");

privateJLabellizhi4=newJLabel("珍惜时间,从你我做起!

");

privateJLabelnull1=newJLabel();

privateintlastTime;

privateStringlocalTime=null;

privateStrings=null;

privateSimpleDateFormatdateFormat=newSimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");

4.2闹钟线程

classClockextendsThread{

publicvoidrun()

{

Calendarnow=Calendar.getInstance();

inth=now.get(Calendar.HOUR_OF_DAY);//获取小时

intmi=now.get(Calendar.MINUTE);//获取分钟

ints=now.get(Calendar.SECOND);//获取秒钟

intss=h*3600+mi*60+s;if(ss>(Integer.parseInt(h1.getText())*3600+Integer.parseInt(m1.getText())*60-

300)&&ss

{jta1.setText("闹钟启动");}

else

{jta1.setText("没有正在提示的闹钟");}

}

}

4.3绘制图形界面

publicMycalendar(){

super("MyCalendar郝玉霞制作");//框架命名

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数

this.getContentPane().setLayout(newBorderLayout(5,5));

jta.setLineWrap(true);//长度大于分配长度时候则换行

table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的

table.setColumnSelectionAllowed(true);//将table中的列设置为可选择的

table.setSelectionBackground(Color.GRAY);//当选定某一天时背景颜色为黑色

table.setSelectionForeground(Color.GREEN);

table.setBackground(newColor(184,207,229));//日期显示表格为浅蓝色

table.setFont(newFont("黑体",Font.BOLD,24));//日期数字字体格式

table.setRowHeight(32);//表格的高度

table.addMouseListener(this);//鼠标监听器

结束语

本次学年论文题目为万年历,通过设计这样的一个日历小组件,使我对Java语言有了更进一步的认识。

不仅对基础知识掌握的更加牢固,而且运用Java知识去解决实际问题的能力得到了很大的提高。

对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用到哪些知识点,如相关的类和对象等。

然后根据初步设计的功能和布局构架,考虑用源代码进行实现。

经过长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个论文设计。

在这个过程中,在把书本上的知识给系统的复习了一下的同时,也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。

在设计的每个的环节中,都会多多少少的遇到一些问题,这就促使我去查阅各种资料,或者请教同学,极大的提高我的专业素养,同时对在有些书上的理论知识在实际的运用,以及应该注意的问题有了比较深刻的认识。

当然,仍然有些理论问题不是很好的去运用,或者是了解的不深刻。

这就使的在实践中的所设计的程序有些功能不是自己所想的那样的完美。

不过,既然发现了问题的所在,我就不会放弃的,直至问题得到解决。

这些也同时反映出了平时运用知识去实践这方面做的太少,太缺乏经验。

对所设计中将所面临的问题认识不够,是学年论文让我认识到了这些问题的存在,同时给我提供了去面对这些问题的平台,也使我充分的认识到在以后也应该怎样去实践,怎样去学习一门计算机语言,以及如何去运用这门语言去解决实际问题等等。

 

总之,通过这次论文设计,我明白了编写程序,不仅要求对课本知识有深刻的了解,同时要求程序设计者有较强的思维和动手能力。

还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。

是这次论文设计,使我认识到了自己很多的缺点,同时,也是我学到新知识和新方法的一个机会,这给我在以后继续学习好这门语言指明了方向。

 

参考文献

[1]耿祥义,张跃平.Java面向对象程序设计[M],清华大学出版社,2009.11

[2]孙全党,王吴迪,赵枫朝.Java程序设计应用教程[M],电子工业出版社,2006.2

[3]赵玉阳.Java从入门到精通[M],清华大学出版社,2006.8

[4]李兴华.Java开发实战经典[M],清华大学出版社,2009.8

[5]曾令明,索望,甘刚,宋波.Java程序设计教程[M],西安电子科技大学出版社,2007.8

[6]席国钦.深入体验Java项目开发[M],清华大学出版社,2011.7

 

附录(程序源代码)

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.table.DefaultTableModel;

importjava.io.*;

importjava.text.DateFormat;

importjava.text.SimpleDateFormat;

importjava.util.Calendar;

importjava.util.Date;

importjava.util.GregorianCalendar;

importjava.util.Locale;

importjava.util.TimeZone;

publicclassMycalendarextendsJFrameimplementsActionListener,MouseListener{

privateCalendarcld=Calendar.getInstance();//获取一个Calendar类的实例对象

privateString[]week={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

privateDefaultTableModeldtm=newDefaultTableModel(null,week);

privateJTabletable=newJTable(dtm);

privateJScrollPanesp=newJScrollPane(table);

privateJButtonbLastYear=newJButton("上一年");

privateJButtonbNextYear=newJButton("下一年");

privateJButtonbLastMonth=newJButton("上月");

privateJButtonbNextMonth=newJButton("下月");

privateJButtonbAddClock=newJButton("确定");

privateJPanelp1=newJPanel();//装入控制日期的按钮模块

privateJPanelp2=newJPanel(newGridLayout(3,2));

privateJPanelp3=newJPanel(newBorderLayout());

privateJPanelp4=newJPanel(newGridLayout(2,1));

privateJPanelp5=newJPanel(newBorderLayout());

privateJPanelp6=newJPanel(newGridLayout(2,2));

privateJPanelp7=newJPanel(newGridLayout(2,1));

privateJPanelp8=newJPanel(newBorderLayout());

privateJPanelp9=newJPanel(newBorderLayout());

privateJPanelp10=newJPanel(newGridLayout(6,1));

privateJPanelp11=newJPanel(newBorderLayout());

privateJComboBoxtimeBox=newJComboBox(TimeZone.getAvailableIDs());//用复选框对所有支持时区进行迭代,获取所有的id;

privateJTextFieldjtfYear=newJTextField(5);//jtfYeaar年份显示输入框

privateJTextFieldjtfMonth=newJTextField

(2);//jtfMouth月份显示输入框

privateJTextFieldtimeField=newJTextField();

privateJTextFieldh1=newJTextField(5);

privateJTextFieldm1=newJTextField(5);

privatestaticJTextAreajta=newJTextArea(4,5);

privateJScrollPanejsp=newJScrollPane(jta);

privateJTextAreajta1=newJTextArea(1,4);

privateJTextAreabwl=newJTextArea(5,4);

privateJScrollPanejsp1=newJScrollPane(jta1);

privateJLabell=newJLabel("你可以向年份和月份输入框中输入正确的年份和月份,提高查询效");

privateJLabellt=newJLabel();

private

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1