版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计说明书 NO.24日历记事本1.课程设计目的通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。本课程设计设计GUI界面的日历记事本,系统将日历和记事本结合在一起,可以方便的保存、查看日志,即在任何日期记载下有关内容或查看某个日期记载的内容。2.设计方案论证2.1设计思路2.1.1 本系统界面的左侧是日历和一幅图像
2、。该日历可以按年前后翻动,用鼠标左键单击“上年”按钮,可将当前日历的年份减一;用鼠标左键单击“下年”按钮,可将当前日历的年份加一。该日历还可以在某年内按月前后翻动,用鼠标单击“上月”按钮,可将当前日历的月份减一;用鼠标单击“下月”按钮,可将当前日历的月份增一。2.1.2 系统界面的右侧是记事本和一个时钟。用鼠标单击日历上的日期,就可以通过该记事本编辑有关日志,并将日志保存到一个文件。该文件的名字是由当前日期组成的字符序列。用户可以查看、删除某个日期的日志,也可以继续向某个日志添加新的内容。2.1.3 当某个日期有日志时,显示该日期的外观上就会出现“有”标记,表明这个日期有日志;当用户删除某个日
3、期的日志后,该日期的外观上的“有”标记就会消失。2.2设计方法 在设计日历记事本时,需要编写6个Java源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java 、Clock.java和CalendarMessage.java。 日历记事本除了需要编写的上述6个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。2.2.1 CalendarWindow.java 主类 该类创建动态日历记事本的主窗口,该类含有main方法,是程序的入口程序
4、,CalenderWindow类的成员变量中有5种重要类型的对象, CalendarPad、NotePad、CalendarImage、Clock、CalendarMessage对象。2.2.2 CalenderMessage.java 该类用来刻画和“日期”有关的数据。2.2.3 CalenderPad.java 该类是JPanel类的子类,所创建的对象是CalendarWindow类的重要成员之一,用来表示”日历”,即负责显示和修改CalendarMessage对象中的日期数据。2.2.4 Notepad.java 该类是JPanel的一个子类,创建的对象表示“记事本”,提供编辑读取和保存
5、阐述日志的功能。2.2.5 CalendarImage.java 该类所创建的对象是CalendarWindow类的成员之一,负责绘制图像。2.2.6 Clock.java 该类创建的对象是CalendarWindow类的成员之一,负责显示时钟。日历记事本用到的一些重要的类以及之间的关系如图1所示。CalendarWindowCalendarImageClockFileNotepadCalenderMessageCalenderPad JTextFieldJTextArea 图1 类之间的组合关系图2.3功能模块 此设计共有以下几个功能模块。2.3.1 年份改变点击一次“上年”按钮可增加一年,
6、点击一次“下年”按钮可减少一年,多次连续点击即可依次改变多个年份。2.3.2 月份改变点击一次“上月”按钮可以增加一月,点击一次“下年”按钮可以减少一月,多次连续点击即可一次改变多个月份。2.3.3 日期显示用于显示当前所选择的所在的年份月份的所有日期、星期,并在记载有日志的日期格中左上角显示“有”标记,而没有记载日志的日期则没有任何标记。2.3.4 图片显示为了使本设计界面美观,设置了图片显示模块,使整个设计更加实用、美观、大方。2.3.5 日志显示界面的右侧上半部的文本框中,可以选择某天记载日志,并且读取的日志在此部分显示出来。2.3.6 时钟显示以传统时钟(有时针、分针、秒针)的模式显示
7、当前的时间。2.3.7 保存、删除、读取日志。可以在没有记载日志的日期里记载日志并保存,可以对以保存的日志进行读取、修改或者删除。2.4流程图如下 显示窗口界面保存日志 删除日志读取日志保存并标记“有”显示日志 选择日期删除并去掉“有”否是是是否否结束程序 开始 图2 流程图2.5类、方法、属性说明2.5.1CalendarWindow类(1)成员变量·year,month和day是int型数据,它们的值分别确定年份、月份和日期。·calendarMessage是CalendarMessage对象,该对象可以处理和日期有关的数据。·calendarPad是Cale
8、ndarPad对象,该对象可以显示和日期有关的数据。·notePad是NotePad对象,具有编辑、读取、保存和删除日志的功能。·showYear和showMonth是JTextField类创建的文本框,用来显示年份和月份。·showDay数组的每个单元是JTextField类创建的用来显示日期的文本框。·calendarImage是CalendarImage创建的对象,用来显示图像。·clock是Clock创建的对象,用来显示时钟。·nextYear等是JButton创建的按钮对象,名字依次为“下年”、“上年”、“下月”、“上 月”
9、。这些按钮都将当前窗口注册为自己的ActionEvent事件监听者。·saveDauktRecord,deleteDailyRecord,readDailyRecord是JButton创建的按钮对象, 名字依次为“保存日志”、“删除日志”、“读取日志”。这些按钮都当前窗口注册为自 己的ActionEvent事件监听者。(2)方法·CalendarWindow()是构造方法,负责完成窗口的初始化。·actionPerformed(AcrionEvent)方法是CalendarWindow类实现的ActionListner 接 口中的方法。·mousePre
10、ssed(MouseEvent)方法是CalendarWindow类实现的MouseListener接口中 的方法。·doMark()方法负责对有日志的日期作出标记。·main方法是程序运行的人口方法。2.5.2CalenderMessage类(1)成员变量year、month和day是int型数据,它们的值分别确定年份、月份和日期。(2)方法·setYear(int)和getYear()方法分别用来设置year和获取year的值。·setMonth(int)和getMonth()方法分别用来设置month和获取month的值。·setDay(
11、int)和getDay()方法分别用来设置day和获取day的值。25.3CalenderPad类(1)成员变量·year、month和day是int型数据,它们的值分别确定年份、月份和日期。·calenderMessage是CalenderMessage对象,该对象可以处理和日期有关的数据。·showDay数组的每个单元是JTextField类创建的用来显示日期的文本框。(2)方法·CalenderPad()是构造方法,用来创建calenderPad对象。·setShowDayTextField(JTextField)方法负责设置showDa
12、y数组。·showMonthCalendar()方法负责显示“日历”。2.5.4Notepad类(1)成员变量·text是JTextArea创建的文本区,可在text中编辑多行文本。·menu是JpopupMenu创建的弹出式菜单。·showMessage是JTextField创建的文本条,用来显示和日期有关的数据。(2)方法·Notepad()是构造方法,用来创建notePad对象。·setShowMessage(int,int,int)方法根据参数指定的日期数据显示有关日期信息。·save(File,int,int,in
13、t)方法根据参数指定的日期保存日志。·delete(File,int,int,int)方法删除参数日期指定的日志。2.5.5CalendarImage类(1)成员变量·imageFile是File对象,用来存放图像文件的引用。·image是Image对象。·tool是Toolkit对象,负责创建image对象。(2)方法·CalendarImage()是构造方法,负责创建calendarImage对象。·paintComponent(Graphics)方法负责绘制image。2.5.6Clock类(1) 成员变量·date是
14、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.j
15、ava,以及所需要的名为flower.jpg的图像文件保存到同一目录中。分别编译这6个Java源文件,或运行“javac *.java”命令,编译全部的源文件,然后运行主类,即运行CalendarWindow类。 运行结果图中可以看出记载日志的日期中会有“有”标记,而没有记载日志的日期中没有“有”标记。右下侧是时钟,左下角显示图片。 图3 运行结果图 在此结果中,点击上方的“上年”或“下年”可以改变年份,点击“上月”或“下月”可以改变月份。右下角显示当前的时间。可以在任意一天记日志,在有“有”标记的日期查看日志或删除日志。当想保存日志时,选中某一天,在右侧记下日志点击“保存”即可。当想查看某天
16、的日志是选中带“有”标记的当天,点击“读取日志”可出现图4所示的提示框,点击是即可读取日志就可以查看日志内容,如图5所示。 图4 提示显示页面图 图5 查看日志图 若想要删除已有的日志,则选中要删除的日期,点击“删除日志”,则出现提示框,如图6所示,询问是否要删除,点击“是”,则删除了此篇日志,此时,原有的“有”字标记就会消失,此篇日志也就随之消失,如图7所示。 图6 提示删除页面图 图7 删除后页面图4.设计体会经过几天的努力,参考了一些书和网上的资料,完成了一个日历记事本的设计。由于只学过一学期的Java课程,知识掌握的有限,所以此程序不是特别复杂。在这个过程中,在把书本上的知识给系统的复
17、习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。本次课程设计不仅巩固了以前所学的知识,还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学
18、习的最好的老师之一。有问题,问网络,是一个很好的习惯。因此学到了不少书本上没有的知识;学到了很多java编程知识。可以说它给了我一次自我评估的机会。通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。总之,本次课程设计收获颇丰。5.参考文献1陈国君,陈磊,刘洋Java2程序设计基础M北京:清华大学出版社;2008.62耿祥义,张跃平Java课程设计M北京:清华大学出版社;2008.11:228-2513张思民,梁维娜Java程序设计实践教程M北京:清华大学出版社;2006.8:1-214 叶核亚JAVA2程序设计实用教程M(第2版)北京:电子工业出版社;2008.4.6. 附录:(1)
19、/CalendarWindow类import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad no
20、tePad; JTextField showYear,showMonth; JTextField showDay; CalendarImage calendarImage; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; File dir; Color backColor=Color.white; public CalendarWindow() dir=new File("./da
21、ilyRecord"); dir.mkdir(); showDay=new JTextField42; for(int i=0;i<showDay.length;i+) showDayi=new JTextField(); showDayi.setBackground(backColor); showDayi.setLayout(new GridLayout(3,3); showDayi.addMouseListener(this); showDayi.addFocusListener(this); calendarMessage=new CalendarMessage();
22、calendarPad=new CalendarPad(); notePad=new NotePad(); Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date(); year=calendar.get(Calendar.YEAR); month=calendar.get(Calendar.MONTH)+1; day=calendar.get(Calendar.DAY_OF_MONTH); calendarMessage.setYear(year); calendarMessage.setMonth(month)
23、; calendarMessage.setDay(day); calendarPad.setCalendarMessage(calendarMessage); calendarPad.setShowDayTextField(showDay); notePad.setShowMessage(year,month,day); calendarPad.showMonthCalendar(); doMark(); /给有日志的号码做标记,见后面的doMark()方法 calendarImage=new CalendarImage(); calendarImage.setImageFile(new Fi
24、le("flower.jpg"); clock=new Clock(); JSplitPane splitV1= new JSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage); JSplitPane splitV2= new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock); JSplitPane splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2); add(spli
25、tH,BorderLayout.CENTER); showYear=new JTextField(""+year,6); showYear.setFont(new Font("TimesRoman",Font.BOLD,12); showYear.setHorizontalAlignment(JTextField.CENTER); showMonth=new JTextField(" "+month,4); showMonth.setFont(new Font("TimesRoman",Font.BOLD,12);
26、 showMonth.setHorizontalAlignment(JTextField.CENTER); nextYear=new JButton("下年"); previousYear=new JButton("上年"); nextMonth=new JButton("下月"); previousMonth=new JButton("上月"); nextYear.addActionListener(this); previousYear.addActionListener(this); nextMonth.ad
27、dActionListener(this); previousMonth.addActionListener(this); showYear.addActionListener(this); JPanel north=new JPanel(); north.add(previousYear); north.add(showYear); north.add(nextYear); north.add(previousMonth); north.add(showMonth); north.add(nextMonth); add(north,BorderLayout.NORTH); saveDaily
28、Record=new JButton("保存日志") ; deleteDailyRecord=new JButton("删除日志");readDailyRecord=new JButton("读取日志"); saveDailyRecord.addActionListener(this); deleteDailyRecord.addActionListener(this); readDailyRecord.addActionListener(this); JPanel pSouth=new JPanel(); pSouth.add(sa
29、veDailyRecord); pSouth.add(deleteDailyRecord); pSouth.add(readDailyRecord); add(pSouth,BorderLayout.SOUTH); setVisible(true); setBounds(60,60,660,480); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void actionPerformed(ActionEvent e) if(e.getSource()=nextYear) year+; showYear.se
30、tText(""+year); calendarMessage.setYear(year); calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if(e.getSource()=previousYear) year-; showYear.setText(""+year); calendarMessage.setYear(year);
31、calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if(e.getSource()=nextMonth) month+; if(month>12) month=1; showMonth.setText(" "+month); calendarMessage.setMonth(month); calendarPad.setCalendarMessag
32、e(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day);doMark(); else if(e.getSource()=previousMonth) month-;if(month<1) month=12; showMonth.setText(" "+month); calendarMessage.setMonth(month); calendarPad.setCalendarMessage(calendarMessage); calenda
33、rPad.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(ai) boo=true; if(boo=true) /弹出“警告”消息对话框 JOptionPane.showMess
34、ageDialog(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(
35、year,month,day); doMark(); else if(e.getSource()=saveDailyRecord) notePad.save(dir,year,month,day); doMark(); else if(e.getSource()=deleteDailyRecord) notePad.delete(dir,year,month,day); doMark(); else if(e.getSource()=readDailyRecord) notePad.read(dir,year,month,day); public void mousePressed(Mouse
36、Event e) JTextField text=(JTextField)e.getSource(); String str=text.getText().trim(); try day=Integer.parseInt(str); catch(NumberFormatException exp) calendarMessage.setDay(day); notePad.setShowMessage(year,month,day); public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) pu
37、blic void mouseExited(MouseEvent e) public void mouseClicked(MouseEvent e) public void focusGained(FocusEvent e) Component com=(Component)e.getSource(); com.setBackground(Color.pink); public void focusLost(FocusEvent e) Component com=(Component)e.getSource(); com.setBackground(backColor); public voi
38、d doMark() for(int i=0;i<showDay.length;i+) showDayi.removeAll(); String str=showDayi.getText().trim(); try int n=Integer.parseInt(str); if(isHaveDailyRecord(n)=true) /见后面的isHaveDailyRecord()方法 JLabel mess=new JLabel("有"); mess.setFont(new Font("TimesRoman",Font.PLAIN,11); mes
39、s.setForeground(Color.blue) ; showDayi.add(mess); catch(Exception exp) calendarPad.repaint(); calendarPad.validate(); public boolean isHaveDailyRecord(int n) String key=""+year+""+month+""+n; String dayFile=dir.list(); boolean boo=false; for(int k=0;k<dayFile.length;
40、k+) if(dayFilek.equals(key+".txt") boo=true; break; return boo; public static void main(String args) new CalendarWindow(); (2)/ CalenderMessage类import java.util.Calendar;public class CalendarMessage int year=-1,month=-1,day=-1; public void setYear(int year) this.year=year; public int getYe
41、ar() return year; public void setMonth(int month) if(month<=12&&month>=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() String day=new String42; Calendar
42、rili=Calendar.getInstance(); rili.set(year,month-1,1);/将日历翻到year年month月1日,注意0表示一月.11表示十二月 int 星期几=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)
43、&&(year%100!=0)|(year%400=0) dayAmount=29; else dayAmount=28; for(int i=0;i<星期几;i+) dayi="" for(int i=星期几,n=1;i<星期几+dayAmount;i+) dayi=String.valueOf(n) ; n+; for(int i=星期几+dayAmount;i<42;i+) dayi="" return day; (3)/CalenderPad类import javax.swing.*;import java.aw
44、t.*;import java.awt.event.*;import java.util.*;public class CalendarPad extends JPanel int year,month,day; CalendarMessage calendarMessage; JTextField showDay; JLabel title; String 星期="SUN日","MON一","TUE二","WED三","THU四","FRI五","SAT六&quo
45、t; JPanel north,center; public CalendarPad() setLayout(new BorderLayout(); north=new JPanel();north.setLayout(new GridLayout(1,7); center=new JPanel(); center.setLayout(new GridLayout(6,7); add(center,BorderLayout.CENTER); add(north,BorderLayout.NORTH); title=new JLabel7; for(int j=0;j<7;j+) titl
46、ej=new JLabel(); titlej.setFont(new Font("TimesRoman",Font.BOLD,12); titlej.setText(星期j); titlej.setHorizontalAlignment(JLabel.CENTER); titlej.setBorder(BorderFactory.createRaisedBevelBorder(); north.add(titlej); title0.setForeground(Color.red); title6.setForeground(Color.blue); public voi
47、d setShowDayTextField(JTextField text) showDay=text; for(int i=0;i<showDay.length;i+) showDayi.setFont(new Font("TimesRoman",Font.BOLD,15); showDayi.setHorizontalAlignment(JTextField.CENTER); showDayi.setEditable(false); center.add(showDayi); public void setCalendarMessage(CalendarMessa
48、ge calendarMessage) this.calendarMessage=calendarMessage; public void showMonthCalendar() String a=calendarMessage.getMonthCalendar(); for(int i=0;i<42;i+) showDayi.setText(ai); validate(); (4)/Notepad类import java.awt.*;import javax.swing.*;import java.io.*;import java.awt.event.*;public class No
49、tePad extends JPanel implements ActionListener JTextArea text; JTextField showMessage; JPopupMenu menu; JMenuItem itemCopy,itemCut,itemPaste,itemClear; public NotePad() showMessage=new JTextField(); showMessage.setHorizontalAlignment(JTextField.CENTER); showMessage.setFont(new Font("TimesRoman",Font.BOLD,16); sho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年老旧小区加装电梯项目实施流程与居民协调
- 2026年小学综合实践课评课问题诊断
- 江苏省宿迁市2025-2026学年高一上学期年级质量监测语文试题(解析版)
- 安徽省合肥市四校2026届高三上学期12月联考调研适应性测试数学试题(解析版)
- 2026幼师进城考试题及答案
- 术中麻醉深度管理的风险预警体系
- 智能响应生物材料调控类器官动态微环境
- AI在市政工程中的应用
- AI在食品中的应用:技术赋能与未来展望
- JT∕T 1586-2026 机动车驾驶员培训学员满意度评价方法
- 《液压与气压传动 第5版》课后习题答案
- 2026年口腔诊所客户引流与服务品质提升
- 2025年广西地生中考试题及答案
- 医院消防安全管理规范(2025版)
- 2025年国家义务教育质量监测四年级心理健康测试卷3+问卷附答案
- DB11-T 941-2021 无机纤维喷涂工程技术规程
- 幼儿园中班数学活动《5以内的相邻数》课件
- 有限公司总经理任职协议:全方位业绩考核及激励条款
- 10kV变电所电气一次初步设计毕业论文
- 钻井技术基础知识培训课件
- 2025年常州市中考数学试卷(含答案及解析)
评论
0/150
提交评论