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
版权声明:本文标题:简单日历的开发与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710234887a563646.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论