电子日历记事本Java课程设计.docx
- 文档编号:2575986
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:35
- 大小:356.34KB
电子日历记事本Java课程设计.docx
《电子日历记事本Java课程设计.docx》由会员分享,可在线阅读,更多相关《电子日历记事本Java课程设计.docx(35页珍藏版)》请在冰点文库上搜索。
电子日历记事本Java课程设计
《面向对象程序设计》
课程设计报告
题目:
电子日历记事本的设计
院(系):
信息科学与工程学院
专业班级:
计算机科学与技术1201班
学生:
程伟
学号:
指导教师:
吴奕
2014年12月29日至2015年1月9日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
一、设计(调查报告/论文)题目
电子日历记事本的设计
二、设计(调查报告/论文)主要容
容:
设计GUI界面的日历记事本,系统将记事本与日历相结合,可在任何时间记载编辑或查看相关容日志,系统可实现基本的辅助办公与行政管理。
基本功能与要求:
①设计记事本编辑器程序,所有编辑功能可以在菜单栏中选择,包括编辑、保存、打开、剪切、复制等操作,能打开和显示已存在的文本文件,界面设计要求采用类组件实现。
②设计日历系统,要求用图形用户界面实现,用户可以方便地在任何日期编辑有关容以及查看某个日期记载的容。
日历可以按年/月前后翻动,当鼠标单击“上一年/上一月”按钮时,当前日历的年份/月份将减一;当鼠标左键单击“下一年/下一月”按钮,当前日历的年份/月份将加一。
③使用鼠标左键在要选择的日期上单击,如有记事容,程序将弹出对话框提示用户是否用记事本显示该容或编辑新容,同时可将记事本的新容保存起来,形成一个日志供用户日后使用。
④设计用户密码功能或对信息容加密,提高系统的安全性。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.JAVA大学实用教程.:
清华大学,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]广彬.Java课程设计案例精编(第二版).:
清华大学,2011.
[2]耿祥义.Java课程设计(第二版).:
清华大学,2008.
[3]耿祥义.JAVA大学实用教程.:
清华大学,2009.
[4]邹林达.国君Java2程序设计基础.:
清华大学,2010.
[5]邹林达.Java2程序设计基础实验指导.:
清华大学,2010.
指导教师(签名):
20年月日
2详细设计.................................................................3
1需求与总体设计
1.1需求分析
根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行记录的功能,设计出简洁方便美观的GUI界面。
将本程序主界面可以分为四个部分:
日历日期信息展示、年份、月份、记事本容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。
通过主类CalendarPad创建动日历记事本软件的主界面,且该类中含有main方法,程序从该类开始执行。
再用余下的year、mouth、NotePad类来显示并改变日期和实现记事本的功能。
1.2总体设计思路
1.可以编辑日历的日期
2.可以判断当前日期是否存在日志记录
3.对有日志记录的日期,可以对该日期的日志记录进行修改和删除
4.对没有日志记录的日期,可以创建并保存新建的日志记录
5.对保存的日志加密,查看时得输入密码
1.2.1功能图
1.2.2类图
2详细设计
2.1CalendarPad类说明
该模块设计主要主要包含以下成员变量:
年(year)
月(month)
日(day)
存放日期的表(Hashtable)
存放日志的文件(File)
主要方法有:
创建程序主面板的构造方法(CalendarPad)
处理ActionEvent事件的接口方法(actionPerformed)
程序开始运行的main()方法。
表1日历记事本系统主面板与日历板模块(CalendarPad.java)
类名
CalendarPad
public
接口
MouseListener
public
方法
CalendarPad(int,int,int)
设置日历牌(int,int)
排列(int,int)
main()
public
publicvoid
publicvoid
publicstaticvoid
2.2Year类说明
该模块用于实现日历记事本系统中关于年的设置
模块中包含的主要成员变量有用于改变年的按钮(Jbutton明年去年),显示年的文本框(JTextField)
模块中包含的主要方法有用于设置年的方法(setYear),用于获取年的方法(getYear)和处理ActionEvent事件的接口方法(actionPerformed)等
表2日历记事本系统年设置模块(Year.java)
类名
Year
public
接口
ActionListener
public
方法
setYear()
getYear()
actionPerformed(ActionEvente)
publicvoid
publicint
publicvoid
2.3Month类模块
该模块用于实现日历记事本系统中关于月的设置
模块中包含的主要成员变量有用于改变月的按钮(Jbutton上月下月),显示月的文本框(JTextField)
模块中包含的主要方法有用于设置月的方法(setMonth),用于获取月的方法(getMonth)和处理ActionEvent事件的接口方法(actionPerformed)等
表3日历记事本系统月设置模块(Month.java)
类名
Month
public
接口
ActionListener
public
方法
setMonth()
getMonth()
actionPerformed(ActionEvente)
publicvoid
publicint
publicvoid
2.4NotePad类说明
该模块中包含的主要成员变量有文本框(JTextArea),按钮(JButton保存日志删除日志),用于存放日志记录的文件(File)以及响应相关操作的信息提示(JLabel)
该模块中包含的主要方法有设置信息条,设置文本区,获取日志容,保存日志,删除日志
表4日历记事本系统记事本模块(NotePad.java)
类名
NotePad
public
接口
ActionListener
public
方法
设置信息条()
设置文本区()
获取日志容()
保存日志()
删除日志()
publicvoid
publicvoid
publicvoid
publicvoid
publicvoid
3编码实现
源代码
importjava.util.Calendar;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.Hashtable;
importjava.util.*;
importjavax.swing.event.*;
publicclassCalendarPadextendsJFrameimplementsMouseListener
{
intyear,month,day;//定义全局变量的三个属性
Hashtablehashtable;
Filefile;//定义一个文件变量
JTextFieldshowDay[];//定义一个文本框组数
JLabeltitle[];
Calendar日历;
int星期几;
NotePadnotepad=null;//定义一个NotePad对象,必须先给其处置null才能在下面使用
Month负责改变月;
Year负责改变年;
String星期[]={"SUN","MON","TUE","WED","THU","FRI","SAT"};
//日历表的文字显示
JPanelleftPanel,rightPanel;
//定义左右两个面板,左边用来显示日历,右边用来显示记事本
publicCalendarPad(intyear,intmonth,intday)//主类的构造方法,实现了主界面
{
leftPanel=newJPanel();//创建左面板
JPanelleftCenter=newJPanel();
JPanelleftNorth=newJPanel();
leftCenter.setLayout(newGridLayout(7,7));
//设置面板布局格式,采用行列式,七行七列
rightPanel=newJPanel();
this.year=year;//设置year的值
this.month=month;
this.day=day;
负责改变年=newYear(this);
//将当前对象的所有操作和属性赋值给year,使Year类的对象可以进行相应的操作
负责改变年.setYear(year);
负责改变月=newMonth(this);
负责改变月.setMonth(month);
title=newJLabel[7];//创建一个标签数组
showDay=newJTextField[42];
//显示每一天的文本框数组,表示共有42个文本框,每个文本框显示一天
for(intj=0;j<7;j++)
{
title[j]=newJLabel();
title[j].setText(星期[j]);
title[j].setBorder(BorderFactory.createRaisedBevelBorder());
//显示每一天的文本框数组,表示共有42个文本框,每个文本框显示一
leftCenter.add(title[j]);
}
title[0].setForeground(Color.blue);
title[6].setForeground(Color.blue);
for(inti=0;i<42;i++)
{
showDay[i]=newJTextField();//创建显示每一天的文本框
showDay[i].addMouseListener(this);//注册鼠标事件监听器
showDay[i].setEditable(false);
//设置为不可编辑,即用户不能在此文本框里编辑文本,只能用来显示容
leftCenter.add(showDay[i]);//将文本框添加到中心面板
}
日历=Calendar.getInstance();
//调用Calendar的getInstance的方法获取默认时区和语言环境获得一个日历
Boxbox=Box.createHorizontalBox();
box.add(负责改变年);
box.add(负责改变月);
leftNorth.add(box);//在此面板中放入查询的按钮以及输入和显示年月的文本框
leftPanel.setLayout(newBorderLayout());//设置左面板的布局方式
leftPanel.add(leftNorth,BorderLayout.NORTH);
leftPanel.add(leftCenter,BorderLayout.CENTER);
leftPanel.add(newLabel("请在年份输入框输入所查年份(负数表示公元前),并回车确定"),BorderLayout.SOUTH);
leftPanel.validate();
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,600,285);//设置边界大小
validate();
}
publicvoid设置日历牌(intyear,intmonth)
{
日历.set(year,month-1,1);
星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
if(month==1||month==2||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++)
{
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.blue);
}
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();
//调用Calendar的getInstance的方法获取默认时区和语言环境获得一个日历
inty=calendar.get(Calendar.YEAR);//返回给定日历字段的值
intm=calendar.get(Calendar.MONTH)+1;
//因为第一个月分时从0开始的,故显示月份的时候要+1,否则显示的结果就少一个月
intd=calendar.get(Calendar.DAY_OF_MONTH);
//返回给定日历字段的值
newCalendarPad(y,m,d);
//此构造函数默认显示的是当前系统下的日历
}
}
classYearextendsBoximplementsActionListener
{
intyear;//定义一个int型的变量,用来存储当前系统的年份
JTextFieldshowYear=null;//定义一个显示当前年份的文本框
JButton明年,去年;//定义两个实现显示上一年和下一年的按钮
CalendarPad日历;//定义一个CalendarPad的全局变量
publicYear(CalendarPad日历)
//有参构造函数获取从CalendarPad类传递的对象参数
{
super(BoxLayout.X_AXIS);
showYear=newJTextField(4);//定义设置显示年份的长度为4
showYear.setForeground(Color.blue);
showYear.setFont(newFont("TimesRomn",Font.BOLD,14));
this.日历=日历;
//将当前方法的变量传值给全局变量,供其他方法使用
year=日历.getYear();//调用当前系统的年份并赋值给year
明年=newJButton("下年");
去年=newJButton("上年");
add(去年);//添加按钮到窗体
add(showYear);
add(明年);
showYear.addActionListener(this);//注册监听器
去年.addActionListener(this);
明年.addActionListener(this);
}
publicvoidsetYear(intyear)
{
this.year=year;
showYear.setText(""+year);//设置文本框容为year的值
}
publicintgetYear()
{
returnyear;
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==去年)
{
year=year-1;
showYear.setText(""+year);
日历.setYear(year);
日历.设置日历牌(year,日历.getMonth());
}
elseif(e.getSource()==明年)
{
year=year+1;
showYear.setText(""+year);
日历.setYear(year);
日历.设置日历牌(year,日历.getMonth());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 日历 记事本 Java 课程设计