[工学]日历记事本课设
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
《 面向对象程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
》
课程设计报告
题 目: 日历记事本的设计与实现 院 (系): 计算机与电子系 专业班级: 计算机科学与技术 学生姓名: XXX 指导教师: 彭 焱
20 12 年 6 月 4 日至20 12 年 6 月 15 日
面向对象程序设计课程设计任务书 一、设计,调查报告/
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
,题目
日历记事本的设计与实现
二、设计,调查报告/论文,主要内容
内容:设计GUI界面的日历记事本,系统将日历和记事本结合在一起,可以方便的保存,查看日志,即在任何日期记载下有关内容或查看某个日期记载的内容。
基本功能与要求:
1.系统界面的左侧是日历的一副图像。该日历可以按年前后翻动,用鼠标左键单机“上年”按钮,可将当年日历的年份减一;用鼠标左键单机“下年”按钮,可将当年日历的年份增一。
2.系统界面的右侧是一个时钟和记事本。用鼠标单击日历上的日期,就可以通过该记事本编辑有关日志,并将日志保存到一个文件,该文件的名字是由当前日期组成的字符序列。用户可以查看、删除某个日期的日志,也可以继续向某个日志添加新的内容。
3.当某个日期有日志时,显示该日期的外观上就会出现“有”标记,表明这个日期有日志;当用户删除某个日期的日志后,该日期的外观上的“有”标记就会消失。 三、原始资料
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 年 月 日
目 录
1需求与总体设计……………………………………………………………………………1 1.1总体设计思路………………………………………………………………………1 1.2功能结构图………………………………………………………………………1 1.3类图………………………………………………………………………………2 2详细设计…………………………………………………………………………………3 2.1详细类图………………………………………………………………………3 2.2类的说明与细化………………………………………………………………………4 2.2.1 主函数MainWindow类 ………………………………………………………………… 4 2.2.2日历信息CalendarMessage类………………………………………………………5 2.2.3日历布局CalendarPad类……………………………………………………………5 2.2.4日历图片CalendarImage类…………………………………………………………6 2.2.5记事本NotePad类……………………………………………………………………6 2.2.6时钟Clock类………………………………………………………………………6 3编码实现…………………………………………………………………………………8 3.1主函数MainWindow………………………………………………………………………8 3.2日历信息CalendarMessage……………………………………………………………15 3.3日历布局CalendarPad……………………………………………………………16 3.4日历图片CalendarImage………………………………………………………………18 3.5记事本NotePad………………………………………………………………………19 3.6时钟Clock…………………………………………………………………………23 4系统测试…………………………………………………………………………………27 4.1主界面…………………………………………………………………………………27 4.2添加日志…………………………………………………………………………………28 4.3查看日志………………………………………………………………………………29 4.4删除日志…………………………………………………………………………………30 4.5清空记事本………………………………………………………………………………31 4.6右键菜单…………………………………………………………………………………32 4.7自定义查看………………………………………………………………………………33 4.8日历按钮功能……………………………………………………………………………34 总结 ……………………………………………………………………………………………37
1需求与总体设计
1.1总体设计思路
根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
的功能,设计出简洁方便美观的GUI界面。
将本程序主界面可以分为四个部分:日历日期信息展示、日历下方图片展示、记事本内容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。通过主类MainWindow创建动日历记事本软件的主界面,且该类中含有main方法,程序从该类开始执行。再用余下CalendarPad、CalendarMessage 、NotePad类来显示并改变日期和实现记事本的功能,而CalendarImage和Clock这两个类用来显示图片和时钟。
1.2 功能结构图
本程序可分为四个部分,日历展示由日历格式和日历信息组成,日历下方可插入图片,记事本可添加日期文件记录,时钟显示当前系统时刻。
日历记事本
日日图 记时
历历像 事钟 信布本
息 局
图 1-1 功能结构图
1
1.3 类图
根据题目功能要求,本程序包含六个类,分别为:MainWindow、CalendarMessage、
CalendarPad、CalendarImage、NotePad、Clock。
MainWindow
NotePad CalendarMessage CalendarImage CalendarPad Clock
JTextArea JTextField
图 1-2 类图
2
2详细设计
2.1详细类图
记事本(NotePad) 日历信息
, JTextArea text 主界面(MainWindow) (CalendarMessage) , JTextField showMessage , int year , int year , JPopupMenu menu , int Month , int Month , JMenuItem itemCopy,
, int day , int day itemCut,itemPaste, , setYear() , CalendarMessage itemClear,iteamSelectAll , getYear() calendarMessage , NotePad()
, setMonth() , CalendarPad , setShowMessage() , getMonth() calendarPad , save(File,int,int,int) , setDay() , NotePad notePad , delete(File,int,int,int) , getDay() , JTextField , read(File,int,int, int) , getMonthCalendar() showYear, showMonth
, JTextField showDay[]
, CalendarImage 时钟(Clock) 日历布局(CalendarPad) calendarImage
, int year , Clock clock , Date date; , int month , JButton nextYear, , javax.swing.Timer , int day lastYear,nextMonth, secondTime,int hour, , CalendarPad() lastMonth munite,second; , setShowDayTextField, JButton , Line2D secondLine, (JtextField[]) saveDailyRecord, muniteLine,hourLine; , setCalendarMessagedeleteDailyRecord, , Double pointSY,
(CalendarMessage) readDailyRecord pointSY,pointMX,
, MainWindow() , showMonthCalendar() pointMY,pointHX,pointHY
, actionPerformed, Clock() (ActionEvent) , initPoint() , mousePressed, paintComponent图片(CalendarImage) (MouseEvent) (Graphics) , focusGained, actionPerformed(FocusEvent) , File imageFile (ActionEvent) , focusLost, Image image
, Toolkit tool (FocusEvent)
, CalendarImage() , doMark() , setImageFile(File)
, paintComponent(Griphics)
图 2-1 详细类图
3
2.2 类的说明和细化
2.2.1主函数MainWindow类
该类是整个程序的主框架,是javax.swing包中Jframe的一个子类,并实现了
ActionListener、MouseListener和FocusListener接口。该类的有关数据说明如下: (1)成员变量
, year,month和day是int型变量,它们的值分别确定年份、月份和日期。 , calendarMessage是CalnedarMessage对象,该对象用来处理与日期有关的数
据。
, calendarPad是CalendarPad对象,该对象可以显示与日期有关的数据。 , notePad是NotePad的对象。具有编辑、保存、删除和读取日志的功能。 , showYear和showMonth是JtextField类创建的文本框,用来显示年、月。 , showDay是JtextField类创建的用来显示日期的文本框。
, calendarImage是CalendarImage创建的对象,用来显示日历下方的图片。 , clock是Clock创建的对象,用来显示记事本下方的时钟。
, nextYear,lastYear,nextMonth和lastMonth是JButton创建的按钮对象,名
字依次为“下年、上年、下月、上月”。这些按钮都将当前窗口设置为自己的
ActionEvent事件监听器。
, saveDailyRecord,deleteDailyRecord和readDailyRecord是JButton创建的
按钮对象,名字依次为“保存日志、删除日志、查看日志”。这些按钮都将当前
窗口设置为自己的ActionEvent事件监听器。
(2)方法
, MainWindow()是构造方法,负责完成窗口初始化。
, actionPerformed(ActionEvent)方法是MainWindow类实现的ActionListener
接口中的方法。MainWindow创建的窗口是nextYear,lastYear,nextMonth,
lastMonth,saveDailyRecord,deleteDailyRecord和readDailyRecord按钮的
ActionEvent事件监听器,当用户单击按钮时,窗口将执行actionPerformed
(ActionEvent)方法进行相应的操作。
, mousePressed(MouseEvent)方法是MainWindow类实现的MouseListener接口
中的方法。MainWindow创建的窗口时showDay数组中的JtextField文本框的
MouseEvent事件监听器,当用户在某个显示日期的文本框上按下鼠标左键时,
窗口将执行mousePress(MouseEvent)方法进行相应操作。 , focusGained(FocusEvent)和focusLost(FocusEvent)方法是MainWindow
类实现的FocusListener接口中的方法。MianWindow创建窗口是showDay数组
中的JtextField文本框的FocusEvent事件监听器,当用户的操作导致某个显
示日期的文本框的焦点发生变化时,窗口将执行focusGained(FocusEvent)或
4
focusLost(FocusEvent)方法进行相应的操作。
, doMark()方法负责对有日志的日期作出“有”标志。
, main方法是程序执行的入口。
2.2.2 日历信息CalendarMessage类
CalendarMessage类创建的对象calendarMessage是MianWindow窗口的重要成员对象之一,负责处理和日期有关的数据。该类的有关数据说明如下:
(1)成员变量
, year,month,day是int型数据,它们的值分别确定年份、月份和日期。
(2)方法
, setYear()和getYear()方法分别用来设置year和获取year的值。
, setMonth()和getMonth()方法分别用来设置month和获取month的值。
, setDay()和getDay()方法分别用来设置和获取day的值。
, getMonthCalendar()方法是用来处理日期数据,使其按着习惯来显示。即日
历牌中每行的第一列为“星期天”。getMonthCalendar()方法根据year,month
和day的值返回一个存放着“日历”数据的String类型的数组,例如,如果某
月有30天,而且该月的第一天是星期三,那么返回的String类型的数组是:“”,
“”,“”,“1”,“2”,?????,“30”。
2.2.3 日历布局CalendarPad类
CalendarPad类是javax.swing包中JPanel容器的子类,所创建的对象:calendarPad是MainWindow类中最重要的成员之一,负责显示经CalendarMessage类处理后的日期数据,被添加到MainWindow窗口的左上侧。以下是该类的有关说明:
(1)成员变量
, year,month和day是int型数据,它们的值分别确定年份、月份和日期。
, calendarMessage是CalendarMessage对象,该对象可以处理和日期有关的数
据。
, showDay数组的每个单元是JTextField类创建的用来显示日期的文本框。
, weeks是String数组,单元的值依次为“SUN”、“MON”、“TUE”、“WED”、“THU”、
“FRI”、“SAT”。
(2)方法
, CalendarPad()是构造方法,用来创建calendarPad对象。
, setShowDayTextField(JTextField[])方法负责设置showDay数组。
, setCalendarMessage(CalendarMessage)方法负责设置calendarMessage对象。
, showMonthCalendar()方法负责显示“日历”。
5
2.2.4图像CalendarImage类
CalendarImage类是javax.swing包中JPanel容器的一个子类,创建的对象calendarMessage是MainWindow类的成员之一,负责绘制图像,作为一个容器添加到MainWindow窗口的左下侧,以下是该类的有关说明:
(1)成员变量
, imageFile是File对象,用来存放图像文件的引用。
是Image对象。 , image
, tool 是Tookit对象,负责创建image对象。
(2)方法
, CalendarImage()是构造方法,负责创建calendarImage 对象。
, setImageFile(File)方法负责设置imageFile 对象,并根据imageFile创建
image。
, paintComponent(Griphics)方法负责绘制image 。
2.2.5 记事本NotePad类
NotePad类javax.swing包中的JPanel容器的子类,实现了ActionListener接口,所创建的对象:notePad是MainWindow类中的重要成员之一,作为一个容器添加到MainWindow窗口的右上侧,以下是该类的有关说明:
(1)成员变量
, text 是JTextArea创建的文本区,在文本框中可编译多行文本。
, showMessage 是 JTextField 创建的文本条,用来显示和日期相关的数据。
, menu是 JpopupMenu 创建的弹出式菜单。
, itemCopy、itemCut、itemPaste、itemClear、itemSelectAll 是JmenuItem 创
建的右键菜单项,依次是“复制”、“剪切”、“粘贴”、“清空”“全选”。
(2)方法
, NotePad()构造方法,用来创建notePad对象。
, setShowMessage(int,int,int)方法根据参数指定的日期数据显示有关日期
信息。
, save(File,int,int,int)方法根据参数指定日期保存日志。
, delete(File,int,int,int)方法根据参数指定日期删除日志
, read(File,int,int, int)方法根据参数指定日期读取日志。
, clear(File,int,int,int,int)方法根据参数清空记事本。
2.2.6 时钟Clock类
Clock类是javax.swing包中JPanel容器的子类,实现了ActionListener接口,所创建的对像:clock是MainWindow类中的成员之一,负责显示时钟,被添加到
6
MainWindow窗口的右下侧,以下是该类的有关说明:
(1)成员变量
, date是Date对象,负责封装本地时间。
, secondTime是javax.swing包中Timer类创建的计时。
, hour,minute和second 是int型数据,分别为“小时”、“分钟”、“秒”。 , secondLine,minuteLine和hourLine是Line2D的对象,分别负责绘制“时针”、
“分针”、“秒针”。
, pointSX,pointSY是double型数组,其单元值用来表示秒针端点坐标。 , pointMX,pointMY是double型数组,其单元值用来表示分针端点坐标。 , pointHX,pointHY是double型数组,其单元值用来便是时针端点坐标。
(2)方法
, Clock()是构造方法,用来创建clock对象
, initPoint()负责创建表盘所需要的坐标点
, paintComponent(Graphics)负责完成绘制工作
, actionPerformed(ActionEvent)是接口ActionListener中的方法。使用Timer
类的构造方法:timer(int a ,Object b)创建了一个计时器,其中的参数a
的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监听
器。计时器发生的振铃时件是ActionEvent类型时件,当振铃时间发生时,监
听器就会监视到这个事件,监听器就会回调用ActionListener接口中的
actionPerformed(ActionEvent)方法,该方法所做的操作是:每隔1秒钟,让
秒针前进一个刻度,即secondLine改变端点坐标;每隔60秒,让分针前进一
个刻度(表盘一周为360?,每个时刻为6?),即muniteLine改变端点坐标;
每隔12分钟,让时针前进一个刻度,即hourLine改变端点坐标。
7
3编码实现
3.1 MainWindow主界面
MainWindow类 是整个程序的主框架,实现了ActionListener、MouseListener 和
FocusListener接口,创建程序主界面,初始化相关组件,即日历、图像、记事本、时
钟。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class MainWindow extends JFrame
implements ActionListener,MouseListener,FocusListener
{
int year,month,day;//定义整型变量年份、月份和日期
CalendarMessage calendarMessage;//用来处理与日期有关的数据
CalendarPad calendarPad;//用来显示与日期有关的数据
NotePad notePad;//创建的记事本对象
JTextField showYear,showMonth;//创建的文本框,用来显示年、月
JTextField showDay[];//创建的用来显示日期的文本框
CalendarImage calendarImage;
Clock clock;//用来显示记事本下方的时钟
JButton nextYear,lastYear,nextMonth,lastMonth;//创建的按钮对象
JButton saveDailyRecord,deleteDailyRecord,readDailyRecord;//创建的按钮对象
File record;
Color backColor=Color.lightGray;//日历背景色为浅灰色
//主界面
public MainWindow(){
setTitle("欢迎使用日历记事本"); //设置标签
record= new File("E:/dailyRecord"); //创建日志文件记录对象
record.mkdir();
showDay = new JTextField[42];
//显示日历日期
for(int i=0;i
12) month=1;
showMonth.setText(""+month);
calendarMessage.setMonth(month);//重新设置month的值
calendarPad.setCalendarMessage(calendarMessage);
calendarPad.showMonthCalendar();
notePad.setShowMessage(year,month,day);
doMark();
11
}
//上月按钮监听
else if (e.getSource()==lastMonth){
month--;
if(month<1) month=12;
showMonth.setText(""+month);
calendarMessage.setMonth(month);//重新设置month的值
calendarPad.setCalendarMessage(calendarMessage);
calendarPad.showMonthCalendar();
notePad.setShowMessage(year,month,day);
doMark();
}
//输入要查找的年份并显示当年本月情况
else if (e.getSource()==showYear){
String s = showYear.getText().trim();
char a[] = s.toCharArray();
boolean boo = false;
for(int i = 0;i < a.length;i++){
if(!(Character.isDigit(a[i])))
boo = true;
}
if(boo==true)
JOptionPane.showMessageDialog(this,"你输入了非法年份","警告~",
JOptionPane.WARNING_MESSAGE);
else if(boo==false)
year = Integer.parseInt(s);
showYear.setText(""+year);
calendarMessage.setYear(year);
calendarPad.setCalendarMessage(calendarMessage);
calendarPad.showMonthCalendar();
notePad.setShowMessage(year,month,day);
doMark();}
//输入查找的月份并显示当月情况,及是否有日志记录
else if (e.getSource()==showMonth){
String s = showMonth.getText().trim();
char a[] = s.toCharArray();
boolean boo = false;
for(int i = 0;i < a.length;i++){
if(!(Character.isDigit(a[i])))
boo = true;
}
if(boo==true)
JOptionPane.showMessageDialog(this,"你输入了非法月份","警告~",
JOptionPane.WARNING_MESSAGE);
12
else if(boo==false)
month = Integer.parseInt(s);
showMonth.setText(""+month);
calendarMessage.setMonth(month);
calendarPad.setCalendarMessage(calendarMessage);
calendarPad.showMonthCalendar();
notePad.setShowMessage(year,month,day);
doMark();
}
//保存日志按钮监听
else if (e.getSource()== saveDailyRecord){
notePad.save(record,year,month,day);
doMark();
}
//删除日志按钮监听
else if(e.getSource()==deleteDailyRecord){
notePad.delete(record,year,month,day);
doMark();
}
//清空记事本按钮监听
else if (e.getSource()==clearRecord){
notePad.clear(record,year,month,day);
}
}
//单击鼠标,显示日历中选中的日期的年月日
public void mousePressed(MouseEvent e){
JTextField text = (JTextField)e.getSource();
String str = text.getText().trim();
try{
day = Integer.parseInt(str);
}
catch (NumberFormatException e1){}
calendarMessage.setDay(day);
notePad.setShowMessage(year,month,day);
notePad.read(record,year,month,day);
}
//鼠标监视器
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void focusGained(FocusEvent e){
Component com = (Component)e.getSource();
com.setBackground(Color.yellow);//查看选中日期为黄色
13
}
public void focusLost(FocusEvent e){
Component com = (Component)e.getSource();
String name = com.getName();
1 则是当前时间 重新设置为背景色为pink // 当焦点丢失时判断下 如果 name为
if (name.equals("1")) {
com.setBackground(Color.pink);
}
com.setBackground(backColor);
}
//当某个日期有日志时,显示该日期的外观上就会出现“有”标记,表明这个日期有日志
public void doMark(){
for(int i=0;i=1)
this.month=month;
else
this.month=1;
}
public int getMonth(){
return month;
}
//获取日期
public void setDay(int day){
this.day=day;
}
public int getday()
{
return day;
}
//处理日历日期数据
public String [] getMonthCalendar(){
int k = 0;
String [] day=new String[42];
15
Calendar rili=Calendar.getInstance();
rili.set(year,month-1,1); //将日历翻到year年month月1日
int week=rili.get(Calendar.DAY_OF_WEEK)-1;//日历显示的是星期几
int dayAmount=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
dayAmount=31;
if(month==4||month==6||month==9||month==11)
dayAmount=30;
if(month==2)
if(((year%4==0)&&(year%100!=0))||year%400==0)
dayAmount=29;
else
dayAmount=28;
for (k = 0; k < week; k++) {
day[k] = " ";
}
for(int i=week,n=1;i
本文档为【[工学]日历记事本课设报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。