课程设计报告格式.docx
《课程设计报告格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告格式.docx(38页珍藏版)》请在冰豆网上搜索。
课程设计报告格式
《Java课程设计》报告
《Java程序设计》课程设计
——电子日历记事本
一、问题描述
1、问题定义:
创建日历记事本,实现对某日期的事情进行记录这主要功能,并能显示设置的图片和时钟,增加美观。
2、问题分析:
通过对“日历记事本”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。
通过主类CalendWindow创建动日历记事本软件的主窗口,该类含有main方法,程序从该类开始执行。
再用余下CalendarPad、CalendarMessage、NotePad类来显示并改变日期和实现记事本的功能。
而CalendarImage和Clock这两个类用来显示图片和时钟。
3、研究意义:
通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。
二、基本要求
(一)、设计目的与任务
本课程设计所要求达到的目的和任务:
通过Java程序设计的一些重要理论基础来实现“日历记事本”的“日历”和“记事本”的双重功能。
并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。
通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。
[1]
(二)、设计方案
1、总体设计
●问题定义:
创建日历记事本,实现对某日期的事情进行记录这主要功能,并能显示设置的图片和时钟,增加美观。
●问题分析:
通过对“日历记事本”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。
通过主类CalendWindow创建动日历记事本软件的主窗口,该类含有main方法,程序从该类开始执行。
再用余下CalendarPad、CalendarMessage、NotePad类来显示并改变日期和实现记事本的功能。
而CalendarImage和Clock这两个类用来显示图片和时钟。
●研究意义:
通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。
2、设计要求
●界面的左侧是日历和一幅图。
该日历可以按年前后翻动,用鼠标鼠标单击“上年”按钮时,当前日历的年份将减一;当鼠标左键单击“下年”按钮,当前日历的年份将加一。
该日历还可以在某年内按月前月后翻动,当鼠标左键单击“上月”按钮时,当前日历的月份将减一;当鼠标左键单击“下月”当前日历表的月份将加一。
同时图片为了增加美观而加入了日历图像选择功能。
●系统界面的右侧是记事本和一个闹钟。
用鼠标单击日历上的日期,就可以通过该记事本编辑有关日志,并将日志保存到一个文件,该文件的名字由该日期组成的字符序列命名。
用户可以查看,删除某个日期的日志,可以继续向某个日志添加新内容,也可以随着自己的心情而改变字体的大小和样式。
时钟能够实时显示当前的时间。
●当某个日期有日志时,在日历表该日期的外观上就会出现“yes”标记,表明这个日期有日志,当用户删除某个日期的日志后,该日期的外观上“yes”标志就会消失。
(三)、系统的主要功能
1、可以对个人日志进行添加、查阅、删除;
2、可以方便地在任何日期记载个人日志以及查看某个日期记载的日志;
3、可以显示当前日期与时间,并在整点报时。
4、可以为日历更改自己喜爱的图片。
(四)、各个类的组合结构图[2]
三、工具/准备工作
WindowsXP;jdk1.5.0-0-05;ultraedit开发工具
四、项目实现
(一)、主函数CalendarWindow类
该类是整个程序的主框架,是javax.swing包中Jframe的一个子类。
并实现了ActionListener、MouseListener和FocusListener接口。
以下是该类的有关数据说明!
1、成员变量
●year,month和day是int型变量。
它们的值分别确定年份、月份和日期。
●calendarMessage是CalnedarMessage对象,该对象用来处理与日期有关的数据。
●calendarPad是CalendarPad对象,该对象可以显示与日期有关的数据。
●notePad是NoetPad的对象。
具有编辑、读取、保存和删除日志的功能。
●showYear和showMonth是JtextField类创建的文本框,用来显示年月。
●showDay数组的每个单元是JtextField类创建的用来显示日期的文本框。
●calendarImage是CalendarImage创建的对象,用来显示图像。
●clock是Clock创建的对象,用来显示时钟。
●nextYear,PreviousYear,nextMonth和PreviousMonth是JButton创建的按钮对象,名字依次为“下年、上年、下月、上月”。
这些按钮都将当前窗口注册为自己的ActionEvent事件监视器。
●savaDailyRecord,deleteDailyRecord和readDailyRecord是JButton创建的按钮对象,名字依次为“保存日志、删除日志、读取日志”。
这些按钮都将当前窗口注册为自己的ActionEvent事件监视器。
2、方法
●CalendarWindow()是构造方法,负责完成窗口初始化。
●actionPerformed(ActionEvent)方法是CalendarWindow类实现的ActionListener接口中的方法。
CalendarWindow创建的窗口是nextYear,previousYear,nextMonth,previousMonth,saveDailyRecord,deleteDailyRecord和readDailyRecord按钮的ActionEvent事件监视器,当用户单击其中按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。
●mousePressed(MouseEvent)方法是CalendarWindow类实现的MouseListener接口中的方法。
CalendarWindow创建的窗口时showDay数组中的JtextField文本框的MouseEvent事件监视器,当用户在某个显示日期的文本框上按下鼠标左键时,窗口将执行mousePress(MouseEvent)方法进行相应操作。
●focusGained(FocusEvent)和focusLost(FocusEvent)方法是CalendarWindow类实现的FocusListener接口中的方法。
CalendarWindow创建窗口是showDay数组中的JtextField文本框的FocusEvent事件监视器,当用户的操作导致某个显示日期的文本框的焦点发生变化时,窗口将执行focusGained(FocusEvent)或focusLost(FocusEvent)方法进行相应的操作。
●doMark()方法负责对有日志的日期作出标志。
●main方法是程序运行的入口方法[3]。
(二)、CalendarMessage类
CalendarMessage类创建的对象calendarMessage是CalendarWindow窗口的重要成员对象之一,负责处理和日期有关的数据。
该类的有关数据说明如下:
1、成员变量
year,month,day是int型数据,它们的值分别确定年份、月份和日期。
2、方法
●setYear(int)和getYear()方法分别用来设置year和获取year的值。
●setMonth(int)和getMonth()方法分别用来设置month和获取month的值。
●setDay(int)和getDay()方法分别用来设置和获取day的值。
●getMonthCalendar()方法是用来处理日期数据,使其按着习惯来显示。
即日历牌中每行的第一列为“星期天”。
getMonthCalendar()方法根据year,month和day的值返回一个存放着“日历”数据的String类型的数组,例如,如果某月有30天,而且该月的第一天是星期三,那么返回的String类型的数组是:
“”,“”,“”,“1”,“2”,·····,“30”。
(三)、CalendarPad类
CalendarPad类是javax.swing包中Jpanel容器的子类,所创建的对象:
calendarPad是CalendarWindow类中最重要的成员之一,负责显示经CalendarMessage类处理后的日期数据,被添加到CalendarWindow窗口的左上侧。
以下是该类的有关说明:
1、成员变量
●year,month和day是int型数据,它们的值分别确定年份、月份和日期
●calendarMessage是CalendarMessage对象,该对象可以处理和日期有关的数据。
●showDay数组的每个单元是JtextField类创建的用来显示日期的文本框。
●“星期”是String数组,单元的值依次为“SUN日”、“MON一”、“TUE二”、“WED三”、“THU四”、“FRI五”、“SAT六”。
2、方法
●CalendarPad()是构造方法,用来创建calendarPad对象。
●setShowDayTextField(JtextField[])方法负责设置showDay数组。
●setCalendarMessage(CalendarMessage)方法负责设置calendarMessage对象。
●showMonthCalendar()方法负责显示“日历”[4]。
(四)、NotePad类
NotePad类javax.swing包中的Jpanel容器的子类,实现了ActionListener接口,所创建的对象:
notePad是MineGameCalendarWindow类中的重要成员之一,作为一个容器添加到CalendarWindow窗口的右上侧以,下是该类的有关说明:
1、成员变量
●ta是JtextArea创建的文本区,可在text中编译多行文本。
●showMessage是JtextField创建的文本条,用来显示和日期相关的数据。
●popup是JpopupMenu创建的弹出式菜单。
●Copy、Cut、Paste是JmenuItem创建的菜单项,名字依次是“复制”,“剪切”,“黏贴”。
●list1,list2是列表框Choice创建的两个列表对象。
●btn是JButton创建的一个按钮,叫做“颜色”。
●labl是JLabel创建的标签,叫做“事件发生时间(hh:
mm)”。
2、方法
●NotePad()构造方法,用来创建notePad对象。
●setShowMessage(int,int,int)方法根据参数指定的日期数据显示有关日期信息。
●save(File,int,int,int)方法根据参数指定日期保存日志
●delete(File,int,int,int)用于删除日志
●read(File,int,int,int)用于读取日志。
(五)、CalendarImage类
CalendarImage创建的对象负责绘制图像
CalendarImage类是javax.swing包中Jpanel容器的一个子类,创建的对象calendarMessage是CalendarWindow类的成员之一,负责绘制图像,作为一个容器添加到CalendarWindow窗口的左下侧,以下是该类的有关说明:
1、成员变量
●imageFile是File对象,用来存放图像文件的引用
●image是Image对象
●tool是Tookit对象,负责创建image对象
2、方法
●CalendarImage()是构造方法,负责创建calendarImage对象
●setImageFile(File)方法负责设置imageFile对象,并根据imageFile创建image
●paintComponent(Griphics)方法负责绘制image
(六)、Clock类
Clock类是javax.swing包中Jpanel容器的子类,并实现了ActionListener接口,所创建的对像:
clock是CalendarWindow类中的成员之一,负责显示时间,被添加到CalendarWindow窗口的右下侧,以下是该类的有关说明:
1、成员变量
●date是Date对像,负责封装本地时间
●secondTime是javax.swing包中Timer类创建的计时
●hour,minute和second是int型数据,分别飞“小时”,“分钟”和“秒”
●secondLine,minuteLine和hourLine是Lint2D对象,分别负责绘制“时针”,“分针”,“秒针”
●pointSX,pointSY是double型数组,其单元值用来表示秒针端点的坐标
●pointMX,pointMY是double型数组,其单元值用来表示分针端点坐标
●pointHX,pointHY是double型数组,其单元值用来便是时针端点坐标[5]
2、方法
●Clock()是构造方法,用来创建clock对象
●initPoint()负责创建表盘所需要的坐标点
●paintComponent(Graphics)负责完成绘制工作
●actionPerformed(ActionEvent)是接口ActionListener中的方法。
使用Timer类的构造方法:
timer(inta,Objectb)创建一个计时器,其中的参数a的单位是毫秒,确定计时器每隔a毫秒“振铃”一次,参数b是计时器的监视器。
计时器发生的振铃时件是ActionEvent类型时件,当振铃时间发生时,监视器就会监视到这个事件,监视器就会回调用ActionListener接口中的actionPerformed(ActionEvent)方法,该方法所做的操作是:
每隔1秒钟,让秒针前进一个刻度,既secondLine改变端点坐标;每隔1分钟,让分针前进一个刻度(表盘一周为360°,每个时刻为6°),既muniteLine改变端点坐标;每隔12分钟,让时针前进一个刻度,既hourLine改变端点坐标[6]。
五、测试与结论
对主要要求,设计相关数据,进行测试,描述测试的结果
六、课程设计总结
从本次课程设计的完成中,首先我们发现了我们有很多不足的地方,最突出的是我们所学的东西太少了,根本满足不了平时编写程序的需要。
此外,我们了解了课程设计的要求与方法,学会了程序设计基本步骤也进一步提高了团队合作的意识。
同时,使我们感觉到,一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。
除此之外,我们认为一个程序的成功完成需要严谨的务实态度,和团队的团结协作的精神。
团结协作和认真的态度是我们课程设计取得成功的一项非常重要的保证。
由于知识的限制,我们没有设置日记查看密码功能,但是在以后的学习中,我们将虚心向学力争编写出更有意义的程序。
参考文献
[1]耿祥义,张跃平.Java2实用教程(第三版)[M].北京:
清华大学出版社,2006
[2]耿祥义.Java课程设计(第三版)[M].北京:
清华大学出版社,2004
[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M].北京:
清华大学出版社,2004
[4]肖磊、李钟尉,Java实用教程[M],人民邮电出版社,2008
[5]孙全党王吴迪赵枫朝,Java程序设计应用教程[M],电子工业出版社,2006
[6]赵玉阳,Java从入门到精通,北京清华大学出版社[M],2006
附录:
1、主函数CalendarWindow类
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
importjava.awt.SplashScreen;
publicclassCalendarWindowextendsJFrameimplementsActionListener,
MouseListener,FocusListener
{
intyear,month,day;
CalendarMessagecalendarMessage;
CalendarPadcalendarPad;
NotePadnotePad;
JTextFieldshowYear,showMonth;
JTextFieldshowDay[];
CalendarImagecalendarImage;
Stringpicturename;//图像名称;
StringgetPicture_address;
Clockclock;
JButtonnextYear,previousYear,nextMonth,previousMonth;
JButtonsaveDailyRecord,deleteDailyRecord,readDailyRecord;
Filedir;
ColorbackColor=Color.white;
publicCalendarWindow()
{
dir=newFile("./dailyRecord");
dir.mkdir();
showDay=newJTextField[42];
for(inti=0;i{
showDay[i]=newJTextField();
showDay[i].setBackground(backColor);
showDay[i].setLayout(newGridLayout(3,3));
showDay[i].addMouseListener(this);
showDay[i].addFocusListener(this);
}
calendarMessage=newCalendarMessage();
calendarPad=newCalendarPad();
notePad=newNotePad();
Calendarcalendar=Calendar.getInstance();
calendar.setTime(newDate());
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH)+1;
day=calendar.get(Calendar.DAY_OF_MONTH);
calendarMessage.setYear(year);
calendarMessage.setMonth(month);
calendarMessage.setDay(day);
calendarPad.setCalendarMessage(calendarMessage);
calendarPad.setShowDayTextField(showDay);
notePad.setMessage(year,month,day);
calendarPad.showMonthCalendar();
doMark();
calendarImage=newCalendarImage();
picturename=getPicture_address();//
calendarImage.setImageFile(newFile(picturename));
JMenuBarmenuBar=newJMenuBar();
JMenumenusetting=newJMenu();
JMenuItemchangepicture=newJMenuItem();
menusetting.setText("图像");//设置标题
changepicture.setText("更改图片背景");//设置标题
//添加菜单条上去;
menusetting.add(changepicture);
menuBar.add(menusetting);
setJMenuBar(menuBar);
//注册监听器
changepicture.addActionListener(this);
clock=newClock();
JSplitPanesplitV1=newJSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage);
JSplitPanesplitV2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock);
JSplitPanesplitH=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);
add(splitH,BorderLayout.CENTER);
showYear=newJTextField(""+year,6);
showYear.setFont(newFont("TimesRoman",Font.BOLD,12));
showYear.setHorizontalAlignment(JTextField.CENTER);
showMonth=newJTextField(""+month,4);
showMonth.setFont(newFont("TimesRoman",Font.BOLD,12));
showMonth.setHorizontalAlignment(JTextField.CENTER);
nextYear=newJButton("下年");
previousYear=newJButton("上年");
nextMonth=newJButton("下月");
previousMonth=newJButton("上月");
nextYear.addActionListener(this);
previousYear.addActionListener(this);
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
showYear.addActionListener(this);
JPanelnorth=newJPanel();
north.add(previousYear);
north.add(showYear);
north.a