1、徐州工程学院数理学院java课程设计说明书 课程名称日历记事本Java程序设计课程代码题 目日历记事本年级/专业/班学生姓名学号 指导老师王逢州开题时间完成时间 课程设计任务书 课程名称Java程序设计学生姓名1、设计的目的与要求;1、)为用户提供一个带有日程提醒功能的日历记事本并具备以下功能: (1)、显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。(2)、定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。(3)、查询信息:用户可以查询到某个月的所有的提示信息。2、)对java技术的进一
2、步了解和简单的运用;3、)初步的接触软件工程;设计进度及完成情况日 期内 容5月25日分析课题;对题目进行初步分析5月26日建立模型,完成整体设计以及功能模块分析5月27日确立每个类的功能,完成对算法的分析5月28日完成CalendarPad类的设计5月28日完成对Year类的设计5月28日完成对Month类的设计5月28日完成对NotePad类的设计5月29日紧系程序测试与修改5月29日完成设计,整理说明书5月29日打包发布程序目 录摘 要- 4 -1. 引言- 5 -2.设计目的与任务- 5 -3.设计方案- 6 -3.1 总体设计- 6 -3.2设计要求- 6 -3.3系统的主要功能-
3、6 -3.4系统功能结构图- 6 -3.5运行功能(截图)- 7 -4.结束语- 9 -5.致 谢- 9 -6.参考文献- 10 -7.附录A:源程序- 11 -8附录B:实验体会- 24 - 摘 要 本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对JAVA的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,加强对计算机及软件工程的进一步了解。 在本案例中,我们开发了一个实现有日历标记的记事本软件,日历记事本面板由日历和和记事本两部分组成。 日历部分可以调节年份,月份,日期,星期。记事本可以实行查看,保存,删除等操作,并且每一步操作都有相应提示。本软件是一个实用性很强,
4、简洁,方便的功能软件。 关键词: java;日历记事本 Java程序设计课程设计 日历记事本 1. 引言Java是一种纯面向对象的、网络编程首选的语言。Java技术作为软件开 的一种革命性技术,已被列为当今世界信息技术的主流之一。为了适应时代潮流,我们应该加强对Java的学习,更好的掌握这门课程。为此,我们成了一个课程小组,经过小组成的商讨之后,我们决定以“日历记事本”为设 题材,借此巩固加深我们对Java的了解。 本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但在此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数抽象能力。因此,我们觉得这次课程设计是非常
5、有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。 2.设计目的与任务本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现“日历记事本”的“日历”和“记事本”的双重功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。3.设计方案3.1 总体设计(1
6、)问题定 义:创建日历记事本,实现对某日期的事情进行记录等功能。(2)问题分析:通过对“日历记事本”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这俩大功能。通过主类CalendPad创建主窗口,再用余下Year、Month、NotePad类来控制日期的变化和实现记事本的功能。(3)研究意义:通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。 3.2设计要求 (1)界面的左侧是日历。该日历可以按年前后翻动,当鼠标单击“上一年”按钮时,当前日历的年份将减一;当鼠标左键单击“下年”按钮,当前日历的年份将加一。 (2)也可以在某年内按月前后翻动。当鼠标左键单击“
7、上月”按钮时,当前日历的月份将减一;当鼠标左键单击“下月” 当前日历表的月份将加一。 (3)使用鼠标左键在要选择的日期上单击,如有记事内容,程序将弹出对话框提示该日有记事内容,提示用户是否用记事本显示该内容。 (4)选择具体日期后,可以将记事本的内容保存起来,形成一个日志。 3.3系统的主要功能 (1)可以进行日期查询;(2)可以方便地在任何日期记载有关内容以及查看某个日期记载的内容 。 3.4系统功能结构图(1)CalendarPad类:负责创建日历记事本主窗口。该文件含有main方法,程序从该类开始执行,实现代码中的方法。(2)Year类:负责创建管理年份的对象(3)Month类:负责创建
8、管理月份的对象。(4)NotePad类:负责创建记事本。 CalendarPad主类NotePad类Year类Month类 图1 系统功能结构图3.5运行功能(截图) 图2 日历记事本界面 图3 保存记事 图4 删除记事 图5 修改年份图6 查看记事 4.结束语从本次课程设计的完成中,我们了解了课程设计的要求与方法,学会了程序设计基本步骤。进一步提高了团队合作的意识。同时,使我们感觉到,一个优秀的程序,不仅仅是可以运行的,更应该具较高的效率,合理的结构,良好的可读性和一定的容错性。 同时,我们认为一个程序的成功完成需要严谨的务实态度,和团队的团结协作的精神.团结协作和认真的态度是我们课程设计取
9、得成功的一项非常重要的保证。但在完成过程中也发现了不足,由于知识的限制,没有设置日记查看密码功能.以后的学习中我们将虚心向学. 5.致 谢我们真心的感谢王逢州老师对我们精心的指导和不倦的教育,他在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的技术. 感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践java编程,让我们对java编程有了深刻的认知,进一步的了解了所学知识。 6.参考文献1 张广彬,孟红蕊,张永宝.Java课程设计案例精编M.北京:清华大学出版社,2007,1.2 黄晓东.Java课程设计案例精编M.
10、北京:中国水利水电出版社,2004,5.3 Java程序设计之网络编程M.北京:清华大学出版社,2006,3.4 Java并发编程设计原则与模式M.北京:中国电力出版社,2004,2.5 印昊.java与面向对象程序设计.高等教育出版社.2004.4.6 耿祥义,Java课程设计,清华大学出版社,2004.02 7、 附录A:源程序1、)CalendarPad类import java.util.Calendar;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.
11、util.Hashtable;public class CalendarPad extends JFrame implements MouseListener int year,month,day; Hashtable hashtable; File file; JTextField showDay; JLabel title; Calendar 日历; int 星期几; NotePad notepad=null; Month 负责改变月; Year 负责改变年; String 星期=星期日,星期一,星期二,星期三,星期四,星期五,星期六; JPanel leftPanel,rightPane
12、l; public CalendarPad(int year,int month,int day) leftPanel=new JPanel(); JPanel leftCenter=new JPanel(); JPanel leftNorth=new JPanel(); leftCenter.setLayout(new GridLayout(7,7); rightPanel=new JPanel(); this.year=year; this.month=month; this.day=day; 负责改变年=new Year(this); 负责改变年.setYear(year); 负责改变月
13、=new Month(this); 负责改变月.setMonth(month); title=new JLabel7; showDay=new JTextField42; for(int j=0;j7;j+) titlej=new JLabel(); titlej.setText(星期j); titlej.setBorder(BorderFactory.createRaisedBevelBorder(); leftCenter.add(titlej); title0.setForeground(Color.red); title6.setForeground(Color.blue); for(
14、int i=0;i42;i+) showDayi=new JTextField(); showDayi.addMouseListener(this); showDayi.setEditable(false); leftCenter.add(showDayi); 日历=Calendar.getInstance(); Box box=Box.createHorizontalBox(); box.add(负责改变年); box.add(负责改变月); leftNorth.add(box); leftPanel.setLayout(new BorderLayout(); leftPanel.add(l
15、eftNorth,BorderLayout.NORTH); leftPanel.add(leftCenter,BorderLayout.CENTER); leftPanel.add(new Label(请在年份输入框输入所查年份(负数表示公元前),并回车确定), BorderLayout.SOUTH) ; leftPanel.validate(); Container con=getContentPane(); JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel); con.add(
16、split,BorderLayout.CENTER); con.validate(); hashtable=new Hashtable(); file=new File(日历记事本.txt); if(!file.exists() try FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(hashtable); objectOut.close(); out.close(); catch(IO
17、Exception e) notepad=new NotePad(this); rightPanel.add(notepad); 设置日历牌(year,month); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,524,285); validate(); public void 设置日历牌(int year,int month) 日历.set(year,month-1,1);
18、 星期几=日历.get(Calendar.DAY_OF_WEEK)-1; if(month=1|month=2|month=3|month=5|month=7 |month=8|month=10|month=12) 排列号码(星期几,31); else if(month=4|month=6|month=9|month=11) 排列号码(星期几,30); else if(month=2) if(year%4=0&year%100!=0)|(year%400=0) 排列号码(星期几,29); else 排列号码(星期几,28); public void 排列号码(int 星期几,int 月天数)
19、for(int i=星期几,n=1;i星期几+月天数;i+) showDayi.setText(+n); if(n=day) showDayi.setForeground(Color.green); showDayi.setFont(new Font(TimesRoman,Font.BOLD,20); else showDayi.setFont(new Font(TimesRoman,Font.BOLD,12); showDayi.setForeground(Color.black); if(i%7=6) showDayi.setForeground(Color.blue); if(i%7=0
20、) showDayi.setForeground(Color.red); n+; for(int i=0;i星期几;i+) showDayi.setText(); for(int i=星期几+月天数;i42;i+) showDayi.setText(); public int getYear() return year; public void setYear(int y) year=y; notepad.setYear(year); public int getMonth() return month; public void setMonth(int m) month=m; notepad
21、.setMonth(month); public int getDay() return day; public void setDay(int d) day=d; notepad.setDay(day); public Hashtable getHashtable() return hashtable; public File getFile() return file; public void mousePressed(MouseEvent e) JTextField source=(JTextField)e.getSource(); try day=Integer.parseInt(so
22、urce.getText(); notepad.setDay(day); notepad.设置信息条(year,month,day); notepad.设置文本区(null); notepad.获取日志内容(year,month,day); catch(Exception ee) public void mouseClicked(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) pub
23、lic static void main(String args) Calendar calendar=Calendar.getInstance(); int y=calendar.get(Calendar.YEAR); int m=calendar.get(Calendar.MONTH)+1; int d=calendar.get(Calendar.DAY_OF_MONTH); new CalendarPad(y,m,d); 2、) Month类import javax.swing.*;import java.awt.*;import java.awt.event.*;public clas
24、s Month extends Box implements ActionListener int month; JTextField showMonth=null; JButton 下月,上月; CalendarPad 日历; public Month(CalendarPad 日历) super(BoxLayout.X_AXIS); this.日历=日历; showMonth=new JTextField(2); month=日历.getMonth(); showMonth.setEditable(false); showMonth.setForeground(Color.blue); sh
25、owMonth.setFont(new Font(TimesRomn,Font.BOLD,16); 下月=new JButton(下月); 上月=new JButton(上月); add(上月); add(showMonth); add(下月); 上月.addActionListener(this); 下月.addActionListener(this); showMonth.setText(+month); public void setMonth(int month) if(month=1) this.month=month; else this.month=1; showMonth.se
26、tText(+month); public int getMonth() return month; public void actionPerformed(ActionEvent e) if(e.getSource()=上月) if(month=2) month=month-1; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); else if(month=1) month=12; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); showMonth.setText(+month); else
27、 if(e.getSource()=下月) if(month12) month=month+1; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); else if(month=12) month=1; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); showMonth.setText(+month); 3、)NotePad类 import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;imp
28、ort javax.swing.event.*;import java.io.*;public class NotePad extends JPanel implements ActionListener JTextArea text; JButton 保存日志,删除日志; Hashtable table; JLabel 信息条; int year,month,day; File file; CalendarPad calendar; public NotePad(CalendarPad calendar) this.calendar=calendar; year=calendar.getYe
29、ar(); month=calendar.getMonth(); day=calendar.getDay(); table=calendar.getHashtable(); file=calendar.getFile(); 信息条=new JLabel(+year+年+month+月+day+日,JLabel.CENTER); 信息条.setFont(new Font(TimesRoman,Font.BOLD,16); 信息条.setForeground(Color.blue); text=new JTextArea(10,10); 保存日志=new JButton(保存日志) ; 删除日志=
30、new JButton(删除日志) ; 保存日志.addActionListener(this); 删除日志.addActionListener(this); setLayout(new BorderLayout(); JPanel pSouth=new JPanel(); add(信息条,BorderLayout.NORTH); pSouth.add(保存日志); pSouth.add(删除日志); add(pSouth,BorderLayout.SOUTH); add(new JScrollPane(text),BorderLayout.CENTER); public void actio
31、nPerformed(ActionEvent e) if(e.getSource()=保存日志) 保存日志(year,month,day); else if(e.getSource()=删除日志) 删除日志(year,month,day); public void setYear(int year) this.year=year; public int getYear() return year; public void setMonth(int month) this.month=month; public int getMonth() return month; public void s
32、etDay(int day) this.day=day; public int getDay() return day; public void 设置信息条(int year,int month,int day) 信息条.setText(+year+年+month+月+day+日); public void 设置文本区(String s) text.setText(s); public void 获取日志内容(int year,int month,int day) String key=+year+month+day; try FileInputStream inOne=new FileInp
33、utStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne); table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); catch(Exception ee) if(table.containsKey(key) 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(String)table.get(key); else text.setText(); else text.setText(无记录); public void 保存日志(int year,int month,int day) String 日志内容=text.getText(); String key=+year+month+day;