学 年 论 文
题 目: 基于Java开发的万年历程序设计
学 院: 数学与统计学院
专 业: 信息与计算科学
班 级: 11级(1)班
学生姓名: 郝玉霞
学 号: 201171020107
指导教师: 吴红萍
基于Java开发的万年历程序设计
郝玉霞
(西北师范大学数学与统计学院 兰州 730070)
摘要: 本文是在Java的基础上,使用了Mycalendar、JFrame、Clock、TimeThread、Timer等类和showCalendar、getDaysOfMonth、mouseClicked、run、today等方法,运用了if-else、try-catch等基本的Java语句,使用图形用户界面为用户开发了一个便捷的万年历。
关键字: Java 语言;万年历;图形界面
Calendar program design based on Java development
HAOYuxia
(College of Mathematics and Statistics, Northwest Normal University, Lanzhou 730070)
Abstract: This article is based on Java, use the Mycalendar, JFrame, Clock, TimeThread, Timer, etc and theshowCalendar、getDaysOfMonth、run、today mouseClicked methods, and using the if - else, try-catch basic Java statements, such as using a graphical user interface for users to develop a convenient Calendar.
Key Words :Java language; Calendar; The graphical interface
引言
在当代繁忙的工作与生活中,时间与我们每一个人都有非常亲密的关系,每个人都受到时间的影响,为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟
。随着社会、科技的发展,人类得知时间,从观看太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间的同时能够了解其他与人类密切相关的信息,比如阴阳历、星期、日期等,而后万年历被人们所发明,在此我在原来万年历的基础上做个改进,为大家设计了能够为大家提供更多服务的万年历,它集时间、日期、星期和时区于一身,而且还具有闹钟和备忘录功能,方便你设置查看日程,防止你在每天忙忙碌碌的工作中忘记一些关键事情或重大事件,并且具有读取方便、显示直观、功能多样 使用寿命长,误差小诸多优点,符合众多人们的需求,具有广阔的使用前景。
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初始化组件
private Calendar cld = Calendar.getInstance();
private String[] week = { "星期日", "星期一", "星期二", "星期三", " 星期四", "星期五", "星期六" };
private DefaultTableModel dtm = new DefaultTableModel(null, week);
private JTable table = new JTable(dtm);
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
private JButton bNextYear = new JButton("下一年");
private JButton bLastMonth = new JButton("上月");
private JButton bNextMonth = new JButton("下月");
private JButton bAddClock = new JButton("确定");
private JPanel p1 = new JPanel(); // 装入控制日期的按钮模块
private JPanel p2 = new JPanel(new GridLayout(3,2));
private JPanel p3 = new JPanel(new BorderLayout());
private JPanel p4 = new JPanel(new GridLayout(2,1));
private JPanel p5 = new JPanel(new BorderLayout());
private JPanel p6 = new JPanel(new GridLayout(2,2));
private JPanel p7 = new JPanel(new GridLayout(2,1));
private JPanel p8 = new JPanel(new BorderLayout());
private JPanel p9 = new JPanel(new BorderLayout());
private JPanel p10 = new JPanel(new GridLayout(6,1));
private JPanel p11 = new JPanel(new BorderLayout());
private JTextField jtfYear = new JTextField(5);
private JTextField jtfMonth = new JTextField(2);
private JTextField timeField=new JTextField();
private JTextField h1=new JTextField(5);
private JTextField m1=new JTextField(5);
private static JTextArea jta = new JTextArea(4,5);
private JScrollPane jsp = new JScrollPane(jta);