课程设计报告课程:面向对象程序设计学号:姓名:班级:计算机科学与技术2班教师:钱田芬时间:2014年12月23日计算机学院11设计时间2014年12月01日-2014年12月22日2设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。3设计任务设计日历记事本要求:带有日程提醒功能的日历。(1)显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。(2)定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。(3)查询信息:用户可以查询到某个月的所有的提示信息。4设计内容4.1需求分析日历记事本可以查询今年每一个月的具体日期,并可以编辑固定一天的日程以日志的形式保存,当系统时间和提醒时间吻合时有提示信息对话框。前台窗口使用GUI编程创建图形界面,对图形界面的窗口和按钮进行事件监听。4.1.1问题描述编写带有日程提醒功能的日历。4.1.2基本要求(1)显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个的日期。(2)定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。2(3)查询信息:用户可以查询到某个月的所有的提示信息。4.2总体设计4.2.1自定义类说明:(1)类名:CalendarPad作用:主类,构建主界面继承的父类:Jframe主要实现接口:ActionListener,MouseListener主要成员变量:intyear,month,day;Filefile;JTextFieldshowDay[];JLabeltitle[];Calendarcalendar;intweek;NotePadnotepad=null;MonthnewMonth;YearnewYear;StringweekList[]={星期日,星期一,星期二,星期三,星期四,星期五,星期六};JPanelleftPanel,rightPanel;构造方法:publicCalendarPad(intyear,intmonth,intday)主要成员方法:publicvoidsetCalendarCard(intyear,intmonth)publicvoidsortNum(intweek,intday)publicintgetMonth()publicvoidsetMonth(intm)publicintgetDay()publicvoidsetDay(intd)3publicFilegetFile()publicstaticvoidmain(String[]args)(2)类名:Year作用:实现年的设置继承的父类:Box主要实现接口:ActionListener主要成员变量:intyear;intmonth;JTextFieldshowYear=null;JButtonafter,before;CalendarPadcalendarpad;构造方法:publicYear(CalendarPadcalendar)主要成员方法:publicvoidsetYear(intmonth)publicintgetYear()publicvoidActionPerformed(ActionEvente)(3)类名:Month作用:实现月的设置继承的父类:Box主要实现接口:ActionListener主要成员变量:intmonth;JTextFieldshowMonth=null;JButtonbeforeMonth,afterMonth;CalendarPadcalendarpad;构造方法:publicMonth(CalendarPadcalendar)4主要成员方法:publicvoidsetMonth(intmonth)publicintgetMonth()(4)类名:NotePad作用:日志的保存、删除与查询。继承的父类:JPanel主要实现接口:ActionListener主要成员变量:JTextAreatext;JButtonsaveRecord,deleteRecord,queryRecord;Hashtablehashtable;JLabellabeltext;intyear,month,day;Filefile;CalendarPadcalendar;构造方法:publicNotePad(CalendarPadcalendar)主要成员方法:publicvoidgetRecord(intyear,intmonth,intday)publicvoidsaveRecordText(intyear,intmonth,intday)publicvoiddeleteRecordText(intyear,intmonth,intday)publicvoidqueryRecordText(Hashtablehashtable)publicvoidActionPerformed(ActionEvente)54.2.2类之间的调用关系4.3详细设计java源文件及其功能如表1-1所示。表1-1:源文件及其功能表Java源文件及其功能序号文件名主要功能备注1CalendarPad..java创建实用万年历记事本程序的主窗口含有main方法2NotePad..java该文件负责创建记事本3Year.java该文件负责创建管理年份的对象4Month.java该文件负责创建管理月份的类对象CalendarPad(主类)NotePadYearMonth64.3.1类的详细信息(1)主类CalendarPad,如表2-1所示:主要成员变量(属性)成员变量描述变量类型名称年、月、日文件显示日期日历标题日历星期改变月改变年容器intFileJTextFieldJLabelCalendarintMonthYearJPanelYear、month、dayfileShowDay[]Title[]calendarweeknewMonthnewYearleftPanel、rigthPanel表2-1:CalendarPad类(2)Year类,如表2-2所示:主要成员变量(属性)成员变量描述变量类型名称年、月年份显示按钮日历表intJTextFieldJButtonCalendarPadyear、monthshowYearafter、beforecalendarpad表2-2:CalendarPad类7(3)Month类,如表2-3所示:主要成员变量(属性)成员变量描述月月份显示按钮日历表变量类型intJTextFieldJButtonCalendarPad名称monthShowMonthbeforeMont、afterMonthcalendarpad表2-3:Month类表(4)NotePad类,如表2-3所示:主要成员变量(属性)成员变量描述变量类型名称文本输入区年、月、日按钮哈希表文本框日历表JTextAreaintJButtonHashtableJLabelCalendarPadtextYear、month、daySave、delete、queryhashtablelabelTextcalendarpad4.4测试与分析(1)初始化日历记事本页面如图3-1:图3-1:初始化日历记事本界面8(2)向上翻年如图3-2所示:图3-2:向上翻年(3)向下翻年如图3-3所示:图3-3:向下翻年(3)向上翻月如图3-4所示:9图3-4:向上翻月(4)向下翻月如图3-5所示:图3-5:向下翻月(4)保存日志如图3-6所示:图3-6:保存日志(5)删除日志如图3-7所示:10图3-7:删除日志(6)查看日志如图3-8所示:图3-8:查看日志(7)查询日志如图3-9所示:图3-9:查询日志4.5程序代码(部分)CalendarPad.javaimportjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Container;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.Label;importjava.awt.event.MouseEvent;11importjava.awt.event.MouseListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectOutputStream;importjava.util.Calendar;importjava.util.Hashtable;importjavax.swing.BorderFactory;importjavax.swing.Box;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JSplitPane;importjavax.swing.JTextField;@SuppressWarnings(serial)publicclassCalendarPadextendsJFrameimplementsMouseListener{intyear,month,day;@SuppressWarnings(rawtypes)Hashtablehashtable;Filefile;JTextFieldshowDay[];JLabel[]title;Calendarcalendar;intweek;NotePadnotepad=null;MonthnewMonth;YearnewYear;StringweekList[]={星期日,星期一,星期二,星期三,星期四,星期五,星期六};JPanelleftPanel,rightPanel;@SuppressWarnings(rawtypes)publicCalendarPad(intyear,intmonth,intday){leftPanel=newJPanel();JPanelleftCenter=newJPanel();JPanelleftNorth=newJPanel();leftCenter.setLayout(newGridLayout(7,7));rightPanel=newJPanel();this.year=year;this.month=month;this.day=day;12newYear=newYear(this);newYear.setYear(year);newMonth=newMonth(this);newMonth.setMonth(month);title=newJLabel[7];showDay=newJTextField[42];for(intj=0;j7;j++)//日历title{title[j]=newJLabel();title[j].setText(weekList[j]);title[j].setBorder(BorderFactory.createRaisedBevelBorder());leftCenter.add(title[j]);}title[0].setForeground(Color.red);title[6].setForeground(