java课程设计---日历记事本.doc_第1页
java课程设计---日历记事本.doc_第2页
java课程设计---日历记事本.doc_第3页
java课程设计---日历记事本.doc_第4页
java课程设计---日历记事本.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书 NO.22日历记事本1.课程设计目的通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。在这个课程设计中,我们做成了一个有日历标记的记事本软件,日历记事本面板由日历、记事本、图片、时钟四部分组成。日历部分可以选择不同的年份、月份、日期和星期;记事本模块可以实现查看,保存,删除日志等操作;并且每一步操作都有相应提示;图片模块可以显示预设的图片;时钟模块可以用时钟来显示当前时间。本软件是一个实用性较强,简洁,美观,方便的功能软件。2.设计方案论证2.1设计思路创建日历记事本,实现对某日期的事情进行记录这主要功能,并能显示设置的图片和时钟,增加美观。通过对“日历记事本”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendWindow创建动日历记事本软件的主窗口,该类含有main方法,程序从该类开始执行。再用余下CalendarPad、CalendarMessage 、NotePad类来显示并改变日期和实现记事本的功能。而CalendarImage和Clock这两个类用来显示图片和时钟。2.2设计要求2.2.1 本系统界面的左侧是日历和一幅图像。该日历可以按年前后翻动,用鼠标左键单击“上年”按钮,可将当前日历的年份减一;用鼠标左键单击“下年”按钮,可将当前日历的年份加一。该日历还可以在某年内按月前后翻动,用鼠标单击“上月”按钮,可将当前日历的月份减一;用鼠标单击“下月”按钮,可将当前日历的月份增一。2.2.2 系统界面的右侧是记事本和一个时钟。用鼠标单击日历上的日期,就可以通过该记事本编辑有关日志,并将日志保存到一个文件。该文件的名字是由当前日期组成的字符序列。用户可以查看、删除某个日期的日志,也可以继续向某个日志添加新的内容。2.2.3 当某个日期有日志时,显示该日期的外观上就会出现“有”标记,表明这个日期有日志;当用户删除某个日期的日志后,该日期的外观上的“有”标记就会消失。2.3系统的主要功能 (1)可以对个人日志进行添加、查阅、删除;(2)可以方便地在任何日期记载个人日志以及查看某个日期记载的日志 ;(3)可以显示当前日期与时间。2.4设计方法 在设计日历记事本时,需要编写6个Java源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java 、Clock.java和CalendarMessage.java。 日历记事本除了需要编写的上述6个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。2.4.1 CalendarWindow.java 主类 该类创建动态日历记事本的主窗口,该类含有main方法,是程序的入口程序,CalenderWindow类的成员变量中有5种重要类型的对象, CalendarPad、NotePad、CalendarImage、Clock、CalendarMessage对象。2.4.2 CalenderMessage.java 该类用来刻画和“日期”有关的数据。2.4.3 CalenderPad.java 该类是JPanel类的子类,所创建的对象是CalendarWindow类的重要成员之一,用来表示”日历”,即负责显示和修改CalendarMessage对象中的日期数据。2.4.4 Notepad.java 该类是JPanel的一个子类,创建的对象表示“记事本”,提供编辑读取和保存阐述日志的功能。2.4.5 CalendarImage.java 该类所创建的对象是CalendarWindow类的成员之一,负责绘制图像。2.4.6 Clock.java 该类创建的对象是CalendarWindow类的成员之一,负责显示时钟。CalendarWindowCalendarMessageCalendarImageCalendarPad JTextFieldFileNotePad JTextArea Clock日历记事本用到的一些重要的类以及之间的关系如图所示。图1 类之间的组合关系图2.4功能模块 此设计共有以下七个功能模块。2.3.1 年份改变点击一次“上年”按钮可增加一年,点击一次“下年”按钮可减少一年,多次连续点击即可依次改变多个年份。2.3.2 月份改变点击一次“上月”按钮可以增加一月,点击一次“下年”按钮可以减少一月,多次连续点击即可一次改变多个月份。2.3.3 日期显示用于显示当前所选择的所在的年份月份的所有日期、星期,并在记载有日志的日期格中左上角显示“有”标记,而没有记载日志的日期则没有任何标记。2.3.4 图片显示为了使本设计界面美观,设置了图片显示模块,使整个设计更加实用、美观、大方。2.3.5 日志显示界面的右侧上半部的文本框中,可以选择某天记载日志,并且读取的日志在此部分显示出来。2.3.6 时钟显示以传统时钟(有时针、分针、秒针)的模式显示当前的时间。2.3.7 保存、删除、读取日志。可以在没有记载日志的日期里记载日志并保存,可以对以保存的日志进行读取、修改或者删除。2.4流程图如下图2 流程图2.5类、方法、属性说明2.5.1CalendarWindow类该类是整个程序的主框架,是javax.swing包中Jframe的一个子类。并实现了ActionListener、MouseListener和FocusListener接口。以下是该类的有关数据说明。(1)成员变量year,month和day是int型数据,它们的值分别确定年份、月份和日期。calendarMessage是CalendarMessage对象,该对象可以处理和日期有关的数据。calendarPad是CalendarPad对象,该对象可以显示和日期有关的数据。notePad是NotePad对象,具有编辑、读取、保存和删除日志的功能。showYear和showMonth是JTextField类创建的文本框,用来显示年份和月份。showDay数组的每个单元是JTextField类创建的用来显示日期的文本框。calendarImage是CalendarImage创建的对象,用来显示图像。clock是Clock创建的对象,用来显示时钟。nextYear等是JButton创建的按钮对象,名字依次为“下年”、“上年”、“下月”、“上 月”。这些按钮都将当前窗口注册为自己的ActionEvent事件监听者。saveDauktRecord,deleteDailyRecord,readDailyRecord是JButton创建的按钮对象, 名字依次为“保存日志”、“删除日志”、“读取日志”。这些按钮都当前窗口注册为自 己的ActionEvent事件监听者。(2)方法CalendarWindow()是构造方法,负责完成窗口的初始化。actionPerformed(AcrionEvent)方法是CalendarWindow类实现的ActionListner 接 口中的方法。mousePressed(MouseEvent)方法是CalendarWindow类实现的MouseListener接口中 的方法。doMark()方法负责对有日志的日期作出标记。main方法是程序运行的人口方法。2.5.2CalenderMessage类CalendarMessage类创建的对象calendarMessage是CalendarWindow窗口的重要成员对象之一,负责处理和日期有关的数据。该类的有关数据说明如下:(1)成员变量year、month和day是int型数据,它们的值分别确定年份、月份和日期。(2)方法setYear(int)和getYear()方法分别用来设置year和获取year的值。setMonth(int)和getMonth()方法分别用来设置month和获取month的值。setDay(int)和getDay()方法分别用来设置day和获取day的值。.getMonthCalendar()方法是用来处理日期数据,使其按着习惯来显示。即日历牌中每行的第一列为“星期天”。getMonthCalendar()方法根据year,month和day的值返回一个存放着“日历”数据的String类型的数组,例如,如果某月有30天,而且该月的第一天是星期三,那么返回的String类型的数组是:“”,“”,“”,“1”,“2”,“30”。25.3CalenderPad类CalendarPad类是javax.swing包中Jpanel容器的子类,所创建的对象:calendarPad是CalendarWindow类中最重要的成员之一,负责显示经CalendarMessage类处理后的日期数据,被添加到CalendarWindow窗口的左上侧。以下是该类的有关说明:(1)成员变量year、month和day是int型数据,它们的值分别确定年份、月份和日期。calenderMessage是CalenderMessage对象,该对象可以处理和日期有关的数据。showDay数组的每个单元是JTextField类创建的用来显示日期的文本框。(2)方法CalenderPad()是构造方法,用来创建calenderPad对象。setShowDayTextField(JTextField)方法负责设置showDay数组。showMonthCalendar()方法负责显示“日历”。2.5.4Notepad类NotePad类javax.swing包中的Jpanel容器的子类,实现了ActionListener接口,所创建的对象:notePad是MineGame CalendarWindow类中的重要成员之一,作为一个容器添加到CalendarWindow窗口的右上侧以,下是该类的有关说明:(1)成员变量text是JTextArea创建的文本区,可在text中编辑多行文本。menu是JpopupMenu创建的弹出式菜单。showMessage是JTextField创建的文本条,用来显示和日期有关的数据。(2)方法Notepad()是构造方法,用来创建notePad对象。setShowMessage(int,int,int)方法根据参数指定的日期数据显示有关日期信息。save(File,int,int,int)方法根据参数指定的日期保存日志。delete(File,int,int,int)方法删除参数日期指定的日志。2.5.5CalendarImage类CalendarImage创建的对象负责绘制图像CalendarImage类是javax.swing包中Jpanel容器的一个子类,创建的对象calendarMessage是CalendarWindow类的成员之一,负责绘制图像,作为一个容器添加到CalendarWindow窗口的左下侧,以下是该类的有关说明:(1)成员变量imageFile是File对象,用来存放图像文件的引用。image是Image对象。tool是Toolkit对象,负责创建image对象。(2)方法CalendarImage()是构造方法,负责创建calendarImage对象。paintComponent(Graphics)方法负责绘制image。2.5.6Clock类Clock类是javax.swing包中Jpanel容器的子类,并实现了ActionListener接口,所创建的对像:clock是CalendarWindow类中的成员之一,负责显示时间,被添加到CalendarWindow窗口的右下侧,以下是该类的有关说明:(1) 成员变量date是Date对象,负责封装本地时间。secondTime是javax.swing包中Timer类中创建的计时器。pointSX,pointSY是double型数组,其单元值用来表示秒针端点坐标。(2) 方法Clock()是构造方法,用来创建clock对象。paintComonent(Graphics)负责完成绘制工作。3.设计结果与分析将6个Java源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java 、Clock.java和CalendarMessage.java,以及所需要的名为flower.jpg的图像文件保存到同一目录中。分别编译这6个Java源文件,或运行“javac *.java”命令,编译全部的源文件,然后运行主类,即运行CalendarWindow类。 运行结果图中可以看出记载日志的日期中会有“有”标记,而没有记载日志的日期中没有“有”标记。右下侧是时钟,左下角显示图片。 图3 主界面图在此结果中,点击上方的“上年”或“下年”可以改变年份,点击“上月”或“下月”可以改变月份。右下角显示当前的时间。可以在任意一天记日志,在有“有”标记的日期查看日志或删除日志。当想保存日志时,选中某一天,在右侧记下日志点击“保存”即可。当想查看某天的日志是选中带“有”标记的当天,点击“读取日志”可出现图所示的提示框,点击是即可读取日志就可以查看日志内容,如图所示。 图4 添加日志图 若想要删除已有的日志,则选中要删除的日期,点击“删除日志”,则出现提示框,如图所示,询问是否要删除,点击“是”,则删除了此篇日志,此时,原有的“有”字标记就会消失,此篇日志也就随之消失,如图所示。图5 删除日志图图6 读取日志图4.设计体会经过几天的努力,参考了一些书和网上的资料,完成了一个日历记事本的设计。由于只学过一学期的Java课程,知识掌握的有限,所以此程序不是特别复杂。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。本次课程设计不仅巩固了以前所学的知识,还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。因此学到了不少书本上没有的知识;学到了很多java编程知识。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。总之,本次课程设计收获颇丰。5.参考文献1陈国君,陈磊,刘洋Java2程序设计基础M北京:清华大学出版社;2008.62耿祥义,张跃平Java课程设计M北京:清华大学出版社;2008.11:228-2513张思民,梁维娜Java程序设计实践教程M北京:清华大学出版社;2006.8:1-214叶核亚,JAVA2程序设计实用教程M(第2版)北京:电子工业出版社;2008.4.5魏伟译JBuilder开发人员指南M北京:机械工业出版社,2001.01.6胡雷, 叶曙光, 徐饪JBuilder 9.0 入门与提高M北京:机械工业出版社,2004.7田勇,孙新Jbuilder开发人员指南M北京: 机械工业出版社,2001.8李尊朝,苏军.Java语言程序设计(第二版)M.北京:中国铁道出版社,2009.9黄晓东.Java课程设计案例精编(第二版)M.北京:中国水利水电出版社,2008.10陆光义,宋现锋.Java游戏编程导学M. 北京:清华大学出版社.2004.6. 附录: essage=new JTextField(); showMessage.setHorizontalAlignment(JTextField.CENTER); showMessage.setFont(new Font(TimesRoman,Font.BOLD,16); showMessage.setForeground(Color.blue); showMessage.setBackground(Color.pink); showMessage.setBorder(BorderFactory.createRaisedBevelBorder(); showMessage.setEditable(false); menu=new JPopupMenu(); itemCopy=new JMenuItem(复制); itemCut=new JMenuItem(剪切); itemPaste=new JMenuItner(this); itemPaste.addActionListener;setLayout(new BorderLayout(); add(showMessage,BorderLayout.NORTH); add(new JScrollPane(text),BorderLayout.CENTER);public void setShowMessage(int year,int month,int day) showMessage.setText(+year+年+month+月+day+日); public void save(File dir,int year,int month,int day) String dailyContent=text.getText(); String fileName=+year+month+day+.txt; String key=+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) boo=true; break; if(boo) String m=+year+年+month+月+day+已有日志,将新的内容添加到日志吗?; int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try File f=new File(dir,fileName); RandomAccessFile out=new RandomAccessFile(f,rw); long fileEnd=out.length(); byte bb=dailyContent.getBytes(); out.seek(fileEnd); out.write(bb); out.close(); catch(IOException exp) else String m=+year+年+month+月+day+还没有日志,保存日志吗?; int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) try File f=new File(dir,fileName); RandomAccessFile out=new RandomAccessFile(f,rw); long fileEnd=out.length();byte bb=dailyContent.getBytes(); out.write(bb); out.close(); catch(IOException exp) public void delete(File dir,int year,int month,int day) String key=+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) boo=true; break; if(boo) String m=删除+year+年+month+月+day+日的日志吗?; int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) String fileName=+year+month+day+.txt; File deleteFile=new File(dir,fileName); deleteFile.delete(); else String m=+year+年+month+月+day+无日志记录; JOptionPane.showMessageDialog(this,m,提示,JOptionPane.WARNING_MESSAGE); public void read(File dir,int year,int month,int day) String fileName=+year+month+day+.txt; String key=+year+month+day; String dayFile=dir.list(); boolean boo=false; for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) boo=true; break; if(boo) String m=+year+年+month+月+day+有日志,显示日志内容吗?; int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) text.setText(null); try File f=new File(dir,fileName); FileReader inOne=new FileReader(f); BufferedReader inTwo= new BufferedReader(inOne); String s=null; while(s=inTwo.readLine()!=null) text.append(s+n); inOne.close(); inTwo.close(); catch(IOException exp) else String m=+year+年+month+月+day+无日志记录; JOptionPane.showMessageDialog(this,m,提示,JOptionPane.WARNING_MESSAGE); public void actionPerformed(ActionEvent e) if(e.getSource()=itemCopy) text.copy(); else if(e.getSource()=itemCut) text.cut(); else if(e.getSource()=itemPaste) text.paste(); else if(e.getSource()=itemClear) text.setText(null); (5)/ CalendarImage类import javax.swing.*;import java.io.*;import java.awt.*;public class CalendarImage extends JPanel File imageFile; Image image; Toolkit tool; CalendarImage() tool=getToolkit(); public void setImageFile(File f) imageFile=f; try image=tool.getImage(imageFile.toURI().toURL(); catch(Exception exp) repaint(); public void paintComponent(Graphics g) super.paintComponent(g); int w=getBounds().width; int h=getBounds().height; g.drawImage(image,0,0,w,h,this); (6)/ Clock类import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.geom.*;import java.util.*;public class Clock extends JPanel implements ActionListener Date date; javax.swing.Timer secondTime; int hour,munite,second; Line2D secondLine,muniteLine,hourLine; int a,b,c,width,height; double pointSX=new double60, /用来表示秒针端点坐标的数组 pointSY=new double60, pointMX=new double60, /用来表示分针端点坐标的数组 pointMY=new double60, pointHX=new double60, /用来表示时针端点坐标的数组 pointHY=new double60;Clock() setBackground(Color.cyan); initPoint(); secondTime=new javax.swing.Timer(1000,this); secondLine=new Line2D.Double(0,0,0,0); muniteLine=new Line2D.Double(0,0,0,0); hourLine=new Line2D.Double(0,0,0,0); secondTime.start(); /秒针开始计时 private void initPoint() width=getBounds().width; height=getBounds().height; pointSX0=0; /12点秒针位置 pointSY0=-height/2*5/6; pointMX0=0; /12点分针位置 pointMY0=-(height/2*4/5); pointHX0=0; /12点时针位置 pointHY0=-(height/2*2/3); double angle=6*Math.PI/180; /刻度为6度 for(int i=0;i59;i+) /计算数组中的坐标 pointSXi+1=pointSXi*Math.cos(angle)-Math.sin(angle)*pointSYi; pointSYi+1=pointSYi*Math.cos(angle)+pointSXi*Math.sin(angle); pointMXi+1=pointMXi*Math.cos(angle)-Math.sin(angle)*pointMYi; pointMYi+1=pointMYi*Math.cos(angle)+pointMXi*Math.sin(angle); pointHXi+1=pointHXi*Math.cos(angle)-Math.sin(angle)*pointHYi; pointHYi+1=pointHYi*Math.cos(angle)+pointHXi*Math.sin(angle); for(int i=0;i60;i+) pointSXi=pointSXi+width/2; /坐标平移 pointSYi=pointSYi+height/2; pointMXi=pointMXi+width/2; /坐标平移 pointMYi=pointMYi+height/2; pointHXi=pointHXi+width/2; /坐标平移 pointHYi=pointHYi+height/2; public void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论