课程设计日历记事本.docx
《课程设计日历记事本.docx》由会员分享,可在线阅读,更多相关《课程设计日历记事本.docx(34页珍藏版)》请在冰点文库上搜索。
课程设计日历记事本
兰州商学院陇桥学院
工学系课程设计报告
课程名称:
JAVA课程设计
设计题目:
日历记事本
系别:
工学系
专业(方向):
计算机科学与技术(网络工程方向)
年级班:
2012级
学生姓名:
XXX
学生学号:
*********XX
*******
2014年6月25日
日历记事本
一、系统开发的背景
随着社会的发展,越来越多的人依靠电子产品生活,而他们的日常工作也是离不开这些电子产品的,所以开发出一款日历备忘录就显得必不可少了。
日历记事本可以方便地在任何日期记录下有关内容或查看某个日期的记录内容。
通过按按钮“上年”和“下年”对年份进行翻页。
通过按按钮“上月”和“下月”对月份进行翻页。
用户可以通过输入年份来查看自己的日志,用户可以方便地在任何日期记录下有关内容或查看某个日期的记录内容。
二、系统分析与设计
(一)系统功能要求
要求:
带有日程提醒功能的日历。
1、显示信息:
用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
2、定时提醒:
用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。
3、查询信息:
用户可以查询到某个月的所有的提示信息。
(二)系统模块结构设计
通过对该题目功能的分析,日历记事本类之间的关系及流程图如图1、图2所示。
图1类之间的关系
图2程序流程图
Java源文件及其功能如下:
1.CalendarPad.java创建实用日历记事本程序的主窗口,含有main方法;
2.NotePad.java该文件负责创建记事本;
3.Year.Java该文件负责管理创建年份的对象;
4.Month.Java该文件负责管理创建月份的对象
三、系统的设计与实现
(一)主类CalendarPad
1.成员变量
2.成员方法
(二)记事本NotePad
1.成员变量
2.成员方法
(三)年Year
1.成员变量
2.成员方法
(四)月Month
1.成员变量
2.成员方法
四、系统测试
(一)系统主窗口
使用eclipse软件运行该系统后,即可进入日历记事本程序的主窗口,绿色较大号的字体为当日日期。
如下图2所示。
图2系统主窗口
(二)查看日历功能
通过点击“上年”“下年”“上月”“下月”可以选择查看往年日期,如图查看2013年5月的日历,单击“上年”,并点击“上月”如下图3所示。
图3查看2013年5月的日历
(三)添加文本界面
除了能方便的查询日历功能,还可以记录当天日志。
回到当天的窗口,例如在记事本中添加文本“同学聚会”并保存,界面如下图4所示。
图4添加文本界面
图4添加文本界面
(四)查看日志界面
点击“是(Y)”,保存日志,当日期再度回到6月29日,会出现提示对话框。
单击是,可以看到当天日志。
单击是可看到如下图5所示:
图5查看日志界面
图5查看日志界面
(五)删除日志界面
当用户要删除当天的日志时,单击删除日志按钮,弹出对话框,单击是(Y),即可删除当天日志,如图6所示。
图6删除日志界面
图6删除日志界面
五、总结
Java课程设计很快就结束了,这让我过得很充实,获益非浅,从了解与学习所需要的知识开始,我便一步一个脚印、踏踏实实地设计,一点点的完成我的课程设计。
这次课程设计的主要目的是学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程,以及进一步熟悉掌握Java程序设计语言的基础内容,提高Java编程技术以及分析解决问题的综合能力。
通过这次课程设计,我基本掌握了以上要求。
由于专业知识有限,以及动手能力的欠缺,所以开发的系统不是很完善,有一些功能未实现,但是日历记事本的基本功能均已实现。
以前对Java语言的很多知识认识都不深刻,做过这次课程设计之后,我对Java语言的开发有了一个比较系统的了解;比如:
散列表应用,用户图形界面设计等的运用已经比较熟练。
这个课程设计使我巩固了Java语言的知识,对于Eclipse开发工具也有了一定的了解。
由于是第一次进行Java语言开发,所以不足之处不可避免。
本系统的统计功能还不够强大,较日历记事本程序还有不足之处。
比如查看所有保存的日志,添加农历等功能尚未实现,将在以后的时间,继续完善。
六、附件(代码、部分图表)
代码:
importjava.util.Calendar;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.Hashtable;
publicclassCalendarPadextendsJFrameimplementsMouseListener
{
intyear,month,day;//用于存储当前时间
Hashtablehashtable;
Filefile;
JTextFieldshowDay[];//日历中每天号数显示的区域
JLabeltitle[];//用于日历中星期的显示;
Calendar日历;//日历对象;
int星期几;//表示具体的星期几;
NotePadnotepad=null;
Month负责改变月;//显示月份的区域的组件对象(继承了Box)
Year负责改变年;//显示年份的区域的组件对象(继承了Box)
String星期[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
JPanelleftPanel,rightPanel;
/**
*构造方法做初始化工作
*@paramyear,month,day
*/
publicCalendarPad(intyear,intmonth,intday)//设置本窗口的属性
{
//创建几个Jpanel容器
leftPanel=newJPanel();//左边的部分
JPanelleftCenter=newJPanel();//leftCenter为窗口的leftPanel的中间部分,用于显示日历;
JPanelleftNorth=newJPanel();//leftNorth为窗口的leftPanel的上部分,用于显示年月及相关按钮;
leftCenter.setLayout(newGridLayout(7,7));//把这块区域分成7行7列;(网格)
rightPanel=newJPanel();
//对传递给构造函数的参数值赋给类中的变量
this.year=year;
this.month=month;
this.day=day;
//创建负责改变年,负责改变月对象,并传递时间值给他们
负责改变年=newYear(this);
负责改变年.setYear(year);
负责改变月=newMonth(this);
负责改变月.setMonth(month);
//把星期几的标题栏设置好
title=newJLabel[7];
showDay=newJTextField[42];
for(intj=0;j<7;j++)
{
title[j]=newJLabel();//创建JLabel,用于显示星期
title[j].setText(星期[j]);
title[j].setBorder(BorderFactory.createRaisedBevelBorder());//突出格式;
leftCenter.add(title[j]);
}
//周六周日红色表示
title[0].setForeground(Color.red);
title[6].setForeground(Color.blue);
//把showDay一块块加上去
showDay=newJTextField[42];//日历中用来显示日期号数的区域;
for(inti=0;i<42;i++)
{
showDay[i]=newJTextField();
showDay[i].addMouseListener(this);//注册监听器;
showDay[i].setEditable(false);//不可编辑;
leftCenter.add(showDay[i]);//分好7*7块之后一块一块加上的;
}
//在leftNorth添加组件;
日历=Calendar.getInstance();
Boxbox=Box.createHorizontalBox();//新建一个Box对象,box能沿着指定坐标轴显示;
box.add(负责改变年);
box.add(负责改变月);
//对leftPanel添加组件,格式设置;
leftNorth.add(box);
leftPanel.setLayout(newBorderLayout());
leftPanel.add(leftNorth,BorderLayout.NORTH);
leftPanel.add(leftCenter,BorderLayout.CENTER);
leftPanel.add(newLabel("请在年份输入框输入所查年份(负数表示公元前),并回车确定"),
BorderLayout.SOUTH);
leftPanel.validate();;//确保组件具有有效的布局;
//对整个JFrame添加组件,格式设置;
Containercon=getContentPane();
JSplitPanesplit=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,
leftPanel,rightPanel);
con.add(split,BorderLayout.CENTER);
con.validate();
hashtable=newHashtable();
file=newFile("日历记事本.txt");
if(!
file.exists())
{
try{
FileOutputStreamout=newFileOutputStream(file);
ObjectOutputStreamobjectOut=newObjectOutputStream(out);
objectOut.writeObject(hashtable);
objectOut.close();
out.close();
}
catch(IOExceptione)
{
}
}
notepad=newNotePad(this);
rightPanel.add(notepad);
设置日历牌(year,month);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
setVisible(true);
setBounds(100,50,524,285);
validate();
}
publicvoid设置日历牌(intyear,intmonth)
{
日历.set(year,month-1,1);
星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12)
{
排列号码(星期几,31);
}
elseif(month==4||month==6||month==9||month==11)
{
排列号码(星期几,30);
}
elseif(month==2)
{
if((year%4==0&&year%100!
=0)||(year%400==0))
{
排列号码(星期几,29);
}
else
{
排列号码(星期几,28);
}
}
}
publicvoid排列号码(int星期几,int月天数)
{
for(inti=星期几,n=1;i<星期几+月天数;i++)//i=3,星期三;
{
showDay[i].setText(""+n);
if(n==day)//如果是日期刚好是今天;
{
showDay[i].setForeground(Color.green);//绿色表示
showDay[i].setFont(newFont("TimesRoman",Font.BOLD,20));//大号字体表示;
}
else//其他时间颜色为黑;
{
showDay[i].setFont(newFont("TimesRoman",Font.BOLD,12));
showDay[i].setForeground(Color.black);
}
if(i%7==6)//周六设置为蓝色
{
showDay[i].setForeground(Color.blue);
}
if(i%7==0)//周日设置为红色
{
showDay[i].setForeground(Color.red);
}
n++;
}
//本月第一天之前的格子置为空;
for(inti=0;i<星期几;i++)
{
showDay[i].setText("");
}
//本月最后一天后的格子置为空;
for(inti=星期几+月天数;i<42;i++)
{
showDay[i].setText("");
}
}
//得到年;
publicintgetYear()
{
returnyear;
}
//设置年;
publicvoidsetYear(inty)
{
year=y;
notepad.setYear(year);//设置年时显示年的地方相应改变;
}
//得到月份;
publicintgetMonth()
{
returnmonth;
}
//设置月份;
publicvoidsetMonth(intm)
{
month=m;
notepad.setMonth(month);//设置月份时显示月份的地方相应改变
}
//得到号数;
publicintgetDay()
{
returnday;
}
//设置号数
publicvoidsetDay(intd)
{
day=d;
notepad.setDay(day);
}
publicHashtablegetHashtable()
{
returnhashtable;
}
publicFilegetFile()
{
returnfile;
}
//增加鼠标监听器,按住鼠标的响应,为读取日志、写日志功能服务;
publicvoidmousePressed(MouseEvente)//增加鼠标按钮的触发;
{
JTextFieldsource=(JTextField)e.getSource();
try{
day=Integer.parseInt(source.getText());
notepad.setDay(day);
notepad.设置信息条(year,month,day);
notepad.设置文本区(null);
notepad.获取日志内容(year,month,day);
}
catch(Exceptionee)
{
}
}
publicvoidmouseClicked(MouseEvente)
{
}
publicvoidmouseReleased(MouseEvente)
{
}
publicvoidmouseEntered(MouseEvente)
{
}
publicvoidmouseExited(MouseEvente)
{
}
publicstaticvoidmain(Stringargs[])
{
Calendarcalendar=Calendar.getInstance();
inty=calendar.get(Calendar.YEAR);
intm=calendar.get(Calendar.MONTH)+1;
intd=calendar.get(Calendar.DAY_OF_MONTH);
newCalendarPad(y,m,d);
}
}
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassMonthextendsBoximplementsActionListener
{
intmonth;
JTextFieldshowMonth=null;
JButton下月,上月;
CalendarPad日历;
publicMonth(CalendarPad日历)
{
super(BoxLayout.X_AXIS);//BoxLayout是javax.swing里的一个布局管理器,
//允许垂直或水平布置多个组件,BoxLayout.X_AXIS指定水平排列。
this.日历=日历;
showMonth=newJTextField
(2);
month=日历.getMonth();
showMonth.setEditable(false);//不可编辑
showMonth.setForeground(Color.blue);//表示月份的前景色为蓝色
showMonth.setFont(newFont("TimesRomn",Font.BOLD,16));
下月=newJButton("下月");
上月=newJButton("上月");
add(上月);
add(showMonth);
add(下月);
上月.addActionListener(this);//给上月按钮注册监听器
下月.addActionListener(this);//给下月按钮注册监听器
showMonth.setText(""+month);
}
publicvoidsetMonth(intmonth)
{
if(month<=12&&month>=1)
{
this.month=month;
}
else
{
this.month=1;
}
showMonth.setText(""+month);
}
publicintgetMonth()
{
returnmonth;
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==上月)
{
if(month>=2)
{
month=month-1;
日历.setMonth(month);
日历.设置日历牌(日历.getYear(),month);
}
elseif(month==1)
{
month=12;
日历.setMonth(month);
日历.设置日历牌(日历.getYear(),month);
}
showMonth.setText(""+month);
}
elseif(e.getSource()==下月)
{
if(month<12)
{
month=month+1;
日历.setMonth(month);
日历.设置日历牌(日历.getYear(),month);
}
elseif(month==12)
{
month=1;
日历.setMonth(month);
日历.设置日历牌(日历.getYear(),month);
}
showMonth.setText(""+month);
}
}
}
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.io.*;
//负责创建记事本
publicclassNotePadextendsJPanelimplementsActionListener
{
JTextAreatext;
JButton保存日志,删除日志;
Hashtabletable;//哈希表
JLabel信息条;
intyear,month,day;
Filefile;
CalendarPadcalendar;
publicNotePad(CalendarPadcalendar)
{
this.calendar=calendar;
year=calendar.getYear();
month=calendar.getMonth();
day=calendar.getDay();;
table=calendar.getHashtable();
file=calendar.getFile();
信息条=newJLabel(""+year+"年"+month+"月"+day+"日",JLabel.CENTER);
信息条.setFont(newFont("TimesRoman",Font.BOLD,16));
信息条.setForeground(Color.blue);
text=newJTextArea(10,10);//右边文本区
保存日志=newJButton("保存日志");//按钮
删除日志=newJButton("删除日志");//按钮