admin 管理员组

文章数量: 1184232


2024年3月12日发(作者:水印imgplay是什么软件)

淮北师范大学

简单日历的开发与实现

学 院 计算机科学与技术

专 业 11计算机科学与技术(非师范)

学 生 姓 名

学 号

指导教师姓名

年 月 日

简单日历的开发与实现

作 者:

指导教师:

摘 要:目前,日历的应用非常广泛,无论是工人、农民、商人、学生还是官员,

都离不开日历。通过使用日历,人们可以更好地规划未来的工作和学习等的时间安排,

并且可以方便查看日期,不要自己来记忆或者记不清日期,日历的应用给人们的运算带

来了极大的方便。

这篇文章主要介绍用软件的方法实现简单日历的实现,包括:日历的概述,日历的

开发原理和主要实现的功能,子模块的设计和实现技术。本系统需要实现以下功能:能

够显示实现1950-2100年的日期,包括公历、星期。能够显示系统时间。能够设置闹钟。

该日历的实现是通过Java来编写的。Java的前身是Oak,它一开始只是被应用于

消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。

1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2

发布,标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移

动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组

成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java

支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平

台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的

地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,

NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit

简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,

重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发

工具。

关键词:日历;系统时间;计算方法

i

目 录

引言..........................................................4

1 简单日历系统概述.............................................4

1.1设计简单日历的背景........................................4

2系统需要......................................................4

2.1设计分析..................................................4

2.1.1需求分析..............................................4

2.2开发环境..................................................4

2.2.1运行环境..............................................4

2.2.2开发工具..............................................4

2.2.3关于4

3系统设计......................................................5

3.1功能说明..................................................5

3.1.1系统功能分析..........................................5

3.2系统大概..................................................5

3.2.1设计思路..............................................5

3.2.2日历运算流程图........................................6

4系统的实现.................................. .................6

4.1窗口的设计................................................6

4.1.1设计步骤..............................................6

4.1.2部分操作截图..........................................9

4.2程序核心代码.............................................11

ii

4.2.1 初始化组件............................................11

4.2.2 初始化数据............................................12

4.2.3

showCalendar显示日历函数.......................................

12

4.2.4

mouseClicked函数...............................................

13

4.2.5 Timer显示时间函数.....................................13

5系统运行与测试...............................................14

5.1运行界面.................................................14

5.2测试.....................................................15

5.2.1测试研究与选择.......................................15

5.2.2测试环境.............................................15

5.3程序代码.................................................15

总结..........................................................23

参考文献......................................................23

iii

引言

本设计主要是为了让人们更好地使用日历,可以方便的查看日期,并且可以设置日志记

录或闹钟,本设计主要在每月日期的显示,以及系统时间的显示设计上,还可以在页面

上输入要查找的年份并且显示。

1 简单日历概述

1.1设计简单日历的背景

人们在日常学习、工作和生活过程中,日历的作用是不容置疑的,不仅可以让我们

用来查看日期和是星期几了,还可以在有事的某一天添加日志或闹钟来提醒自己,让我

们忘掉重要事的可能大大降低。

2 系统需求

2.1设计分析

2.1.1 需求分析

本软件主要用于计算机Windows XP以上的用户使用,这次课程设计一般是实现简

单日历的功能。需要程序实现:日期的显示功能;还要实现日期与星期的查询并跳转等

功能。另外还要实现添加日志或闹钟的功能。可以在设定的那一天显示提醒。

2.2 开发环境

2.2.1 运行环境

系统是在eclipse环境下开发的,在Windows98/Windows2000/Windows NT/Windows

XP平台下运行均可。

2.2.2 开发工具

Java语言

2.2.3 关于

eclipse

VisualEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,

它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,

Eclipse

带了一个标准的插件集,包括

Java

开发工具(

Java Development Kit,JDK

)。

虽然大多数用户很乐于将

Eclipse

当作

Java

集成开发环境(

IDE

)来使用,但

Eclipse

的目标却不仅限于此。

Eclipse

还包括插件开发环境(

Plug-in Development Environment,

PDE)

,这个组件主要针对希望扩展

Eclipse

的软件开发人员,因为它允许他们构建与

Eclipse

环境无缝集成的工具。由于

Eclipse

中的每样东西都是插件,对于给

Eclipse

供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同

等的发挥场所。

4

这种平等和一致性并不仅限于

Java

开发工具。尽管

Eclipse

是使用

Java

语言开发的,

但它的用途并不限于

Java

语言;例如,支持诸如

C/C++、COBOL、PHP

等编程语言的

插件已经可用,或预计将会推出。

Eclipse

框架还可用来作为与软件开发无关的其他应用

程序类型的基础,比如内容管理系统。

基于

Eclipse

的应用程序的一个突出例子是

IBM Rational Software Architect

,它构成了

IBM Java

开发工具系列的基础。

Eclipse

是著名的跨平台的自由

集成开发环境(IDE)

。最初主要用来

Java语言

开发,但

是目前亦有人通过插件使其作为其他计算机语言比如

C++

Python

的开发工具。

Eclipse

的本身只是一个框架平台,但是众多插件的支持使得

Eclipse

拥有其他功能相对固定的

IDE

软件很难具有的灵活性。许多软件开发商以

Eclipse

为框架开发自己的

IDE

Eclipse

最初由

OTI

IBM

两家公司的

IDE

产品开发组创建,起始于

1999

4

月。

IBM

提供了最初的

Eclipse

代码基础,包括

Platform、JDT

PDE

。目前由

IBM

牵头,围绕着

Eclipse

项目已经发展成为了一个庞大的

Eclipse

联盟,有

150

多家软件公司参与到

Eclipse

项目中,其中包括

Borland

Rational Software

Red Hat

Sybase

等。

Eclipse

是一个开放

源码项目,它其实是

Visual Age for Java

的替代品,其界面跟先前的

Visual Age for Java

不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,

因此越来越受人们关注。近期还有包括

Oracle

在内的许多大公司也纷纷加入了该项目,

并宣称

Eclipse

将来能成为可进行任何语言开发的

IDE

集成者,使用者只需下载各种语言

的插件即可。

3 系统设计

3.1 功能说明

3.1.1 系统功能

本系统需要实现以下功能:日期和星期的显示,年份的查找(既可以由上下键来实

现上一年和下一年查找的操作),月份的查找(既可以由上下键来实现上一月和下一月

查找的操作),日志的创建和删除功能。

3.2 系统大概

3.2.1设计思路

1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是

闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,

令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一

月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,

再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若

是7,则为星期日。

3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日

期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月

5

一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

3.2.2 日历运算流程图

图3-1日历运算流程图

4 系统的实现

4.1 窗口的设计

4.1.1 设计步骤

打开Eclipse,在文件中点击新建,在弹出框内选择project,选择Java Project,

点击Next,如图4-1所示。

6

图4-1 新建Java Project

将弹出New Java Project对话框,设置Project Name为aa,点击完成,如图4-2

所示。

7

图4-2

在新建中打开,选择class后,再出现的对话框中设置Name为wannianli如图4-3

所示。

8

图4-3

4.1.2 部分操作截图

日历显示界面:

9

日历日期查找界面:

添加日志界面

10

4.2 程序核心代码

4.2.1 初始化组件

import .*;

import Event;

import Listener;

import vent;

import istener;

import edReader;

import edWriter;

import ;

import putStream;

import tFoundException;

import tputStream;

import ption;

import treamReader;

import StreamWriter;

import rmat;

import DateFormat;

import ar;

import ;

import n;

import g;

import ;

import ;

11

import nPane;

import ;

import lPane;

import ;

import rea;

import ield;

import tTableModel;

4.2.2 初始化数据

public class wannianli extends JFrame implements ActionListener, MouseListener

{

private Calendar cld = tance();

private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期

五", "星期六", "星期日"};

private DefaultTableModel dtm = new DefaultTableModel(null,astr);

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 JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文

本框

private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框

private JPanel p1 = new JPanel(); //装入控制日期按钮的模块

private JPanel p2 = new JPanel();

private JPanel p3 = new JPanel(new BorderLayout());

private JPanel p4 = new JPanel(new GridLayout(2,1));

private JPanel p5 = new JPanel(new BorderLayout());

private JButton bAdd = new JButton("保存日志");

private JButton bDel = new JButton("删除日志");

private JTextArea jta = new JTextArea(); //jta--JTextArea

private JScrollPane jsp = new JScrollPane(jta);

private JLabel l = new JLabel("年份文本框中可直接键入要查找的年份,以提高

查询效率");

private JLabel lt = new JLabel();

private JLabel ld = new JLabel();

private int lastTime;

4.2.3 showCalendar函数(显示日历)

public void showCalendar(int localYear, int localMonth, Calendar cld)

{

12

int Days = getDaysOfMonth(localYear, localMonth) +

(_OF_WEEK) - 2;

Object [] ai = new Object[7];

lastTime = 0;

for (int i = (_OF_WEEK)-1; i <= Days; i++)

{

ai[i%7] = f(i-((_OF_WEEK)-2));

if (i%7 == 6)

{

(ai);

ai = new Object[7];

lastTime++;

}

}

(ai);

}

4.2.4 mouseClicked函数(鼠标点击)

public void mouseClicked(MouseEvent e)

{

t(null);

int r = ectedRow();

int c = ectedColumn();

if (ueAt(r,c) == null)

{ t("没有选择日期") }

else

{ xtArea(ueAt(r,c)); }

}

public void mousePressed(MouseEvent e)

{ }

public void mouseReleased(MouseEvent e)

{ }

public void mouseEntered(MouseEvent e)

{ }

public void mouseExited(MouseEvent e)

{ }

4.2.5显示时间函数

class Timer extends Thread//显示系统时间

{

private JLabel lt;

private SimpleDateFormat fy = new SimpleDateFormat(" G 'at'

HH:mm:ss z");

private SimpleDateFormat fn = new SimpleDateFormat(" G 'at' HH

mm ss z");

13

private boolean b = true;

public Timer(JLabel lt)

{

= lt;

}

public void run()

{

while (true)

{

try

{

if (b)

{ t((new Date()));}

else

{ t((new Date())); }

b = !b;

(500);

}

catch (InterruptedException ex)

{

tackTrace();

}

}

}

5 系统运行

5.1 运行界面

14

5.2 测试

5.2.1 测试研究与选择

测试过程中要判断是否成功,要分析程序界面的变化和计算数据的结果是否正确以

及各功能键是否能正常实用。

5.2.2 测试环境

测试系统:Windows98/Windows2000/Windows NT/Windows XP

测试工具:Eclipse

5.3 程序代码

import .*;

import Event;

import Listener;

import vent;

import istener;

import edReader;

import edWriter;

import ;

import putStream;

import tFoundException;

import tputStream;

import ption;

import treamReader;

import StreamWriter;

import rmat;

import DateFormat;

import ar;

import ;

import n;

import g;

import ;

import ;

import nPane;

import ;

import lPane;

import ;

import rea;

import ield;

import tTableModel;

15

public class wannianli extends JFrame implements ActionListener, MouseListener

{

private Calendar cld = tance();

private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期

五", "星期六", "星期日"};

private DefaultTableModel dtm = new DefaultTableModel(null,astr);

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 JTextField jtfYear = new JTextField(5);

private JTextField jtfMonth = new JTextField(2);

private JPanel p1 = new JPanel();

private JPanel p2 = new JPanel();

private JPanel p3 = new JPanel(new BorderLayout());

private JPanel p4 = new JPanel(new GridLayout(2,1));

private JPanel p5 = new JPanel(new BorderLayout());

private JButton bAdd = new JButton("保存日志");

private JButton bDel = new JButton("删除日志");

private JTextArea jta = new JTextArea();

private JScrollPane jsp = new JScrollPane(jta);

private JLabel l = new JLabel("年份文本框中可直接键入要查找的年份,以提高

查询效率");

private JLabel lt = new JLabel();

private JLabel ld = new JLabel();

private int lastTime;

public wannianli()

{

super("简单日历");

aultCloseOperation(_ON_CLOSE);

tentPane().setLayout(new BorderLayout(10, 0));

eWrap(true);

dColor();

umnSelectionAllowed(true);

ectionBackground();

ectionForeground();

kground(new Color(184,207,229));

t(new Font("黑体",,24));

Height(30);

seListener(this);

16

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

(bLastYear);

(jtfYear);

(bNextYear);

(bLastMonth);

(jtfMonth);

(bNextMonth);

(bAdd);

(bDel);

(jsp, );

(p2, );

(ld, );

(l);

(lt);

(p4, );

(sp, );

(p1, );

tentPane().add(p5, );

tentPane().add(p3, );

String [] strDate = eInstance().format(new

Date()).split("-");

(nt(strDate[0]), nt(strDate[1])-1,

0);

showCalendar(nt(strDate[0]),

nt(strDate[1]), cld);

table(false);

t(strDate[0]);

t(strDate[1]);

xtArea(strDate[2]);

t(new Font("新宋体",,24));

new Timer(lt).start();

nds(200,200,600,320);

izable(false);

17

ible(true);

}

public void showCalendar(int localYear, int localMonth, Calendar cld)

{

int Days = getDaysOfMonth(localYear, localMonth) +

(_OF_WEEK) - 2;

Object [] ai = new Object[7];

lastTime = 0;

for (int i = (_OF_WEEK)-1; i <= Days; i++)

{

ai[i%7] = f(i-((_OF_WEEK)-2));

if (i%7 == 6)

{

(ai);

ai = new Object[7];

lastTime++;

}

}

(ai);

}

public int getDaysOfMonth(int year, int Month)

{

if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8

|| Month == 10 || Month == 12)

{

return 31;

}

if(Month == 4 || Month == 6 || Month == 9 || Month == 11)

{

return 30;

}

if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年

{

return 29;

}

else

{

return 28;

}

}

public void actionPerformed(ActionEvent e)

18

{

if(rce() == jtfYear || rce() == bLastYear ||

rce() == bNextYear ||

rce() == bLastMonth || rce() == bNextMonth)

{

int m, y;

try

{

if (t().length() != 4)

{

throw new NumberFormatException();

}

y = nt(t());

m = nt(t());

}

catch (NumberFormatException ex)

{

ssageDialog(this, "请输入4位0-9的数字!

", "年份有误", _MESSAGE);

return;

}

t("没有选择日期");

for (int i = 0; i < lastTime+1; i++){ Row(0);}

if(rce() ==

bLastYear){ t(f(--y)); }

if(rce() ==

bNextYear){t(f(++y)); }

if(rce() == bLastMonth)

{

if(m == 1)

{

t(f(--y));

m = 12;

t(f(m));

}

else

{

t(f(--m));

}

}

if(rce() == bNextMonth)

{

if(m == 12)

{

19

t(f(++y));

m = 1;

t(f(m));

}

else

{

t(f(++m));

}

}

(y, m-1, 0);

showCalendar(y, m, cld);

}

if(rce() == bAdd)

{

int r = ectedRow();

int c = ectedColumn();

if(!t().equals("没有选择日期"))

{

try

{

File file = new File(t() + ".txt");

BufferedWriter bw=new BufferedWriter(new

OutputStreamWriter(new FileOutputStream(file)));

(t());

();

}

catch (FileNotFoundException ex)

{

tackTrace();

}

catch (IOException ex)

{

tackTrace();

}

}

}

if(rce() == bDel)

{

int r = ectedRow();

int c = ectedColumn();

File filedel = new File(t() + ".txt");

if(())

{

if(())

20

{

t("日志删除成功");

}

else

{

t("日志删除失败");

}

}

else

{

t("没有找到日志文件");

}

}

}

public void mouseClicked(MouseEvent e)

{

t(null);

int r = ectedRow();

int c = ectedColumn();

if (ueAt(r,c) == null)

{ t("没有选择日期"); }

else

{ xtArea(ueAt(r,c)); }

}

public void mousePressed(MouseEvent e) { }

public void mouseReleased(MouseEvent e) { }

public void mouseEntered(MouseEvent e){ }

public void mouseExited(MouseEvent e) { }

private void showTextArea(Object selected)

{

t(t()+"年"+t()+"月

"+selected+"日");

File filein = new File(t() + ".txt");

if(())

{

try

{

BufferedReader br = new BufferedReader(new

InputStreamReader(new FileInputStream(filein)));

String strRead = ne();

t(null);

while(strRead != null)

{

21

(strRead);

strRead = ne();

}

();

}

catch (FileNotFoundException ex)

{

tackTrace();

}

catch (IOException ex)

{

tackTrace();

}

}

}

public static void main(String[] args)

{

aultLookAndFeelDecorated(true);

aultLookAndFeelDecorated(true);

new wannianli();

}

}

class Timer extends Thread//显示系统时间

{

private JLabel lt;

private SimpleDateFormat fy = new SimpleDateFormat(" G 'at'

HH:mm:ss z");

private SimpleDateFormat fn = new SimpleDateFormat(" G 'at' HH

mm ss z");

private boolean b = true;

public Timer(JLabel lt)

{

= lt;

}

public void run()

{

while (true)

{

try

{

22

if (b)

{

t((new Date()));

}

else

{

t((new Date()));

}

b = !b;

(500);

}

catch (InterruptedException ex)

{

tackTrace();

}

}

}

总结

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

个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发

现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知

识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出

现。

通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,

同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,

不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还

有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问

题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络

是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。

参考文献

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

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

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

[4].刘宝林,Java程序设计与案例,高等教育出版社,2004.11

23


本文标签: 系统 开发 显示 实现 环境