万年历记事本.docx
- 文档编号:30496612
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:23
- 大小:292.65KB
万年历记事本.docx
《万年历记事本.docx》由会员分享,可在线阅读,更多相关《万年历记事本.docx(23页珍藏版)》请在冰豆网上搜索。
万年历记事本
学号
2015-2016学年第二学期
1308210101
《面向对象程序设计》
课程设计报告
题目:
万年历记事本
专业:
计算机科学与技术
班级:
13计科2班
姓名:
鲍超
指导教师:
江涛
成绩:
计算机学院
2016年4月12日
目录
1设计内容及要求1
1.1概述1
1.2主要功能1
1.3目的和要求2
2概要设计2
2.1软件结构2
2.2主要功能模块3
2.3程序流程框图4
3设计过程或程序代码5
4设计结果与分析17
5参考文献20
6小结20
1设计内容及要求
1.1概述
上学期我们学习了Java语言,Java语言是面向对象的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。
它具有面向对象、跨平台、分布应用等特点。
它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
很多程序开发人员得第一选择。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
让学生自己动手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。
为了达到这个目的,我们需要自己动手做一个Java的课程设计,在这个课程设计里我们需要根据我们手中现有得软件与知识基础,独立得将它完成,只有这样,我们才能把理论变成实践,将知识真正得做到学以致用。
这次课程设计我主要研究了利用已学的Java知识编写一个万年历记事本。
通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK等开发工具的运用,拓宽常用类库的应用。
并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。
1.2主要功能
1、显示信息:
用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。
2、定时提醒:
用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。
3、查询信息:
用户可以查询到某个月的所有·的提示信息。
1.3目的和要求
目的:
利用Java语言中图形用户界面编程思想和其提供的丰富的API来编写一个带有日程提醒功能的日历。
该日历具有显示日历信息、定时给用户提醒和查询信息的功能。
要求:
万年历有很多作用,顾名思义它是一种很方便得计时计年工具,随着科技得发展,我们已经可以通过计算机制作出精美的万年历,通过计算机制作得万年历不但外观美观,而且功能强大。
通过万年历,我们可以实现很多功能,随意看某年得年份,某年得月份,随意调整某年得某天,并将其显示出来,而且有判断闰年闰月得功能,十分方便。
除此之外,万年历还具有记事本功能,通过记事本功能可以备忘一些事情,备忘得事情可以随意添加在万年历得任意年月日里,如果记录得内容已经不再需要,还可以任意的将记录得内容进行删除,在删除得时候还会提示,是否确定删除,如果是,则程序会将它删除,如果不是,则系统不会将它删除。
2概要设计
2.1软件结构
本软件定义了两个包,其中一个包是cn.webbc.wnl,这个包放置的类是窗口Main类,还有一个包就是cn.webbc.wnl.utils,这个包放置的都是工具类,这个包中有两个类,其中CalendarUtils是关于日历操作的工具类,IOUtils类是关于操作文件的工具类。
下图是包的结构图。
图1包结构图
2.2主要功能模块
1、Main方法:
创建窗口对象,并调用窗口对象的初始化方法
2、窗口初始化方法:
包括初始化数据、对当前窗口进行测量、设置窗口布局策略、初始化标题栏、初始化星期条、初始化显示日历的网格条、初始化记事本布局、绑定监听器、显示窗口、判断今天是否要显示提醒等小模块
3、初始化数据方法:
通过之前定义的工具包下的CalendarUtils类来获取指定月份的天数、指定年份和月份获取本月的第一天的星期几
4、对当前窗口进行测量:
设置窗口的大小为700x450像素,并且设置窗口在屏幕中居中显示。
5、定义窗口的布局策略:
设置窗口的布局方式为绝对布局
6、初始化标题栏:
初始化标题栏,用于显示当前时间、提供用户输入年份信息等
7、初始化星期条:
初始化星期栏,用于显示星期条
8、初始化显示日历的网格条:
初始化显示日历区域,用于显示日历
9、初始化记事本布局:
初始化记事本布局,用于提供给用户输入代办事项
10、绑定监听器:
给控件绑定事件监听器
11、显示窗口:
将当前窗口显示出来
12、判断今天是否要显示提醒:
根据当前的时间,从保存的代办事项文件中查找有没有今天的事项,如果有,就弹出对话框显示出来
2.3程序流程框图
图2软件执行流程图
3设计过程或程序代码
1、Main方法
publicstaticvoidmain(String[]args){
Mainmain=newMain();//创建一个窗口对象
main.init();//调用窗口对象的初始化方法
}
2、窗口初始化方法
publicvoidinit(){
initData();//初始化数据
onMeasure();//对当前窗口进行测量
onLayout();//对窗口设置布局策略
initTitleBar();//初始化标题栏
initWeekBar();//初始化星期条
initCalendarGrid();//初始化显示日历的网格条
initTextAreaLayout();//初始化记事本布局
initListener();//绑定监听器
showWindow();//显示窗口
todayHaveTip();//判断今天是否有提醒
}
3、初始化数据方法
privatevoidinitData(){
//根据年份和月份判断本月的第一天是星期几
firstDayOfWeek=CalendarUtils.getDayOfWeek(year,month);
//根据年份和月份判断这个月多少天
totalDays=CalendarUtils.getTotalDays(year,month);
}
4、测量窗口
privatevoidonMeasure(){
setSize(700,450);//设置窗口大小
//获取屏幕尺寸
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
//设置窗口的位置为屏幕的正中央
setLocation((int)(screenSize.getWidth()-getWidth())/2,
(int)(screenSize.getHeight()-getHeight())/2);
}
5、定义布局策略
privatevoidonLayout(){
setLayout(null);//设置宽口的布局策略为绝对布局
}
初始化标题栏
privatevoidinitTitleBar(){
//创建今天日期的显示条
JPaneldatePanel=newJPanel();//创建容器
Stringtoday=String.format(
"%4d年%2d月%2d日",
currentDate.get(Calendar.YEAR),
currentDate.get(Calendar.MONTH)+1,
currentDate.get(Calendar.DAY_OF_MONTH));//获取今天的日期
JLabeljlToday=newJLabel("今天时间:
"+today);//创建标签
btnFind=newJButton("查看本月日程安排");
datePanel.setSize(700,40);
datePanel.setLocation(0,10);
datePanel.add(jlToday);
datePanel.add(btnFind);
add(datePanel);
//创建输入信息标题栏
JPanelInputPanel=newJPanel();
JLabeljlYear=newJLabel("年份:
");
jtfYear=newJTextField(year+"",4);//创建年份的文本框
JLabeljlMonth=newJLabel("月份:
");
jtfMonth=newJTextField(month+"",4);//创建月份的文本框
btnQuery=newJButton("查询");//查询按钮
InputPanel.add(jlYear);
InputPanel.add(jtfYear);
InputPanel.add(jlMonth);
InputPanel.add(jtfMonth);
InputPanel.add(btnQuery);
InputPanel.setSize(350,40);
InputPanel.setLocation(0,45);
add(InputPanel);
//创建当前显示的年月信息
JPanelInfoPanel=newJPanel();
InfoPanel.setSize(350,60);
InfoPanel.setLocation(0,80);
jlInfo=newJLabel();
jlInfo.setText(year+"年"+month+"月");
btnPrev=newJButton("上月");//创建上月按钮
btnNext=newJButton("下月");//创建下月按钮
InfoPanel.add(btnPrev);
InfoPanel.add(jlInfo);
InfoPanel.add(btnNext);
add(InfoPanel);
}
6、初始化星期条
privatevoidinitWeekBar(){
JPanelpanel=newJPanel();
//创建星期信息并添加到窗口中
for(StringweekName:
week){
JLabeljlWeekName=newJLabel(weekName+"");
panel.add(jlWeekName);
}
panel.setSize(350,20);
panel.setLocation(0,120);
add(panel);
}
7、初始化日历网格
privatevoidinitCalendarGrid(){
intindex=1;
calendarPanel.setLayout(newGridLayout(6,7));
calendarPanel.setSize(240,200);
calendarPanel.setLocation(50,150);
for(inti=0;i<42;i++){
finalintday=index;//获取遍历的是哪一天
JTextFieldjtfDay=newJTextField();
jtfDay.setEnabled(false);//设置不可用
jtfDay.setDisabledTextColor(Color.RED);//设置字体颜色
if(index==this.day&&choose[0]==year&&choose[1]==month){
jtfDay.setFont(newFont("微软雅黑",Font.BOLD,16));
jtfDay.setDisabledTextColor(Color.BLUE);//设置字体颜色
}
jtfDay.setHorizontalAlignment(JTextField.CENTER);//设置对齐方式
//添加鼠标监听事件
jtfDay.addMouseListener(newMouseAdapter(){
@Override
publicvoidmouseClicked(MouseEvente){
super.mouseClicked(e);
choose[0]=year;
choose[1]=month;
choose[2]=day;
jlChooseDay.setText("您选择的日期是:
"+choose[0]+"年"
+choose[1]+"月"+choose[2]+"日");
showMessageDialog();
readNoteInfo();
}
});
calendarPanel.add(jtfDay);
if(i
continue;
}
jtfDay.setText(String.valueOf(index++));
}
add(calendarPanel);
}
8、初始化记事本布局
privatevoidinitTextAreaLayout(){
//文本器容器
JPaneltextAreaPanel=newJPanel();
//设置文本区容器的布局方式
textAreaPanel.setLayout(newBorderLayout());
jta=newJTextArea("",10,25);
//让文本区可以垂直滚动
JScrollPanejScrollPane=newJScrollPane(jta);
//让文本区内容可以换行
jta.setLineWrap(true);
//显示选择日期的标签控件
jlChooseDay=newJLabel();
jlChooseDay.setText("您选择的日期是:
"+year+"年"+month+"月"+day+"日");
jlChooseDay.setSize(300,100);
//添加标签控件和滚动控件
textAreaPanel.add(jlChooseDay,BorderLayout.NORTH);
textAreaPanel.add(jScrollPane);
textAreaPanel.setSize(300,300);
textAreaPanel.setLocation(350,50);
//创建添加和删除的按钮
btnDel=newJButton("删除");
btnSave=newJButton("保存");
JPanelpanel=newJPanel();
panel.add(btnSave);
panel.add(btnDel);
textAreaPanel.add(panel,BorderLayout.SOUTH);
add(textAreaPanel);
}
9、绑定监听器
privatevoidinitListener(){
//给查询按钮添加事件监听
btnQuery.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
StringtextYear=jtfYear.getText();
StringtextMonth=jtfMonth.getText();
try{
//重新初始化年份
year=Integer.parseInt(textYear);
if(Integer.parseInt(textMonth)>12
||Integer.parseInt(textMonth)<=0){
JOptionPane.showConfirmDialog(Main.this,"请输入正确的月份");
return;
}
//重新初始化月份
month=Integer.parseInt(textMonth);
initData();
updateUI();
}catch(Exceptione2){
JOptionPane.showConfirmDialog(Main.this,"格式不正确");
}
}
});
//给年份文本框添加事件监听
jtfYear.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
StringtextYear=jtfYear.getText();
try{
//重新初始化年份
year=Integer.parseInt(textYear);
initData();
updateUI();
}catch(Exceptione2){
JOptionPane.showConfirmDialog(Main.this,"请输入正确的年份");
}
}
});
//月份文本框添加事件监听
jtfMonth.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
StringtextMonth=jtfMonth.getText();
try{
if(Integer.parseInt(textMonth)>12
||Integer.parseInt(textMonth)<=0){
JOptionPane.showConfirmDialog(Main.this,"请输入正确的月份");
return;
}
//重新初始化月份
month=Integer.parseInt(textMonth);
initData();
updateUI();
}catch(Exceptione2){
JOptionPane.showConfirmDialog(Main.this,"请输入正确的月份");
}
}
});
//给上一月按钮添加事件
btnPrev.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//重新初始化月份
month--;
if(month<1){
year--;
month=12;
}
jtfYear.setText(year+"");
jtfMonth.setText(month+"");
initData();
updateUI();
}
});
//给下一月按钮添加事件
btnNext.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//重新初始化月份
month++;
if(month>12){
year++;
month=1;
}
jtfYear.setText(year+"");
jtfMonth.setText(month+"");
initData();
updateUI();
}
});
//给保存按钮添加事件监听
btnSave.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//获取文本区中的内容
Stringtext=jta.getText();
if(text.trim().equals("")||text==null){
JOptionPane.showMessageDialog(Main.this,"没有内容,不能进行保存操作!
");
return;
}
//进行保存操作
booleanresult=IOUtils.write(getFileName(),text);
if(result){
JOptionPane.showMessageDialog(Main.this,"保存成功!
");
}
}
});
//给删除按钮添加监听事件
btnDel.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
if(IOUtils.findFileExists(getFileName())){
intitem=JOptionPane
.showConfirmDialog(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 记事本