JAVA记事本的设计与实现-.pdf

上传人:索**** 文档编号:76239750 上传时间:2023-03-08 格式:PDF 页数:27 大小:511.42KB
返回 下载 相关 举报
JAVA记事本的设计与实现-.pdf_第1页
第1页 / 共27页
JAVA记事本的设计与实现-.pdf_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《JAVA记事本的设计与实现-.pdf》由会员分享,可在线阅读,更多相关《JAVA记事本的设计与实现-.pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2 面向对象程序设计课程设计报告题目:日记本的设计与实现课程设计学院:信息工程姓名:xxxx 学号:1134120131 专业:软件工程班级:软工 1101 班指导教师:xxxx 二 0 一二年十二月十四日目录1.引言.22.设计目的与任务 .33.设计方案 .33.1总体设计 .33.2设计要求.33.3系统的主要功能 .43.4开发环境 .43.5系统的功能模块划分与系统流程图.43.5.1系统的功能模块划分 .43.5.2万年历模块流程图 .53.5.3日记本模块流程图 .63.6各个类说明 .63.6.1主类 NoteBook.63.6.2记事本 Note 类.73.6.3左侧面板 L

2、eftPane类.73.6.4月份显示 MonthPane类.83.6.5年月显示 YearMonth类 .83.6.6背景音乐 Music 类.83.6.7日期获取 DateTime类.93.6.8右侧记事本显示 NotePane类.93.6.9记事本弹出菜单 NotePopupMenu类.104.各种功能截图 .105.课程设计总结 .146.个人心得体会 .错误!未定义书签。7.附录.15摘要2 摘要本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对JAVA的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,加强对计算机及软件工程的进一步了解。在这个课程设计中,做成

3、了一个有日历标记的记事本软件,日记本面板由日历、记事本、图片、时钟四部分组成。日历部分可以选择不同的年份、月份、日期和星期;记事本模块可以实现查看,保存,删除日志等操作;并且每一步操作都有相应提示;图片模块可以显示预设的图片;时钟模块可以用时钟来显示当前时间。本软件是一个实用性较强,简洁,美观,方便的功能软件。关键字:记事本;日历;1 引言Java是一种纯面向对象的、网络编程首选的语言。Java技术作为软件开的一种革命性技术,已被列为当今世界信息技术的主流之一。为了适应时代潮流,我们应该加强对Java的学习,更好的掌握这门课程。为此Java课程设计决定以“写字留痕”为设题材,借此巩固加深我们对

4、Java的了解。本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但在此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数抽象能力。因此,我们觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。2 设计目的与任务3 2 设计目的与任务本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现“日记本”的“日历”和“记事本”的双重功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计

5、、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。3 设计方案3.1 总体设计(1)问题定义:创建日记本,实现对某日期的事情进行记录这主要功能,并能显示设置的图片,增加美观。(2)问题分析:通过对“日记本的设计与实现”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendWindow 创建动写字留痕软件的主窗口,该类含有main方法,程序从该类开始执行。再用余下CalendarPad、CalendarMessage、NotePad类

6、来显示并改变日期和实现记事本的功能。而 CalendarImage类用来显示图片。(3)研究意义:通过本次课程设计,我们掌握了 Java语言的基本运用,提高了理论结合实际的能力。3.2设计要求(1)日记本使用Java 语言开发设计。课程的基本功能包括万年历、记事本和辅助功能三个部分。(2)万年历部分由微调器确定年月,由一组文本框显示日历。年月可选择数据符合逻辑,默认为当前3 设计方案4 日期。(3)月历显示应该符合查看习惯,如星期六和星期日分别用不同颜色表示,当日可用特别的字号和颜色(4)记事本区,记事本内容按年月日记录且保存。(5)微调器应该进行事件设置,以及即时地显示该年月的月历;日期文本

7、框可监听鼠标事件,当单击任何一个日期时,若该日有记事内容,则在日记本中显示该日期的记录文字;若该日无记录,记事区保持空白。(6)日记本应该是开放的,内容可按日期增减,保存应即时,删除需谨慎删除记录时,应进行对话框询问确定。(7)辅助功能包含了日记的导入导出。“导入”可以将其他日记文件导入合并到当前“写字留痕”的日记本中;“导出”可将“写字留痕”的所有记录内容按日期为序导出到一个文本文件中。为安全起见导出时需加以安全确认,要求输入正确设定的密码后才能导出。(8)系统界面外观和布局,可个性化设计,总体原则是“界面简洁,操作便捷”。3.3 系统的主要功能(1)可以对个人日志进行保存、删除、导入和导出

8、;(2)可以方便地在任何日期记载个人日志以及查看某个日期记载的日志;(3)可以显示当前日期。3.4 开发环境Windows XP;jdk1.6.0;eclipse编辑器。3.5 系统的功能模块划分与系统流程图3.5.1系统的功能模块划分本日历记事本共有9 个 java 源文件。NoteBook.java 该 java 文件生成的类负责创建本日历记事本程序主窗口。该类含有 main 方法,程序从该类开始执行。Note.java 该文件负责创建日记文本leftPane.java 该文件负责创建创建左侧面板。NotePade.java 该文件负责创建右侧面板。NotePopupMenu.java 该

9、文件负责在文本框上弹出快捷菜单DateTime.java 该文件获得系统当前的日期,包括年月日YearMonth.java 3 设计方案5 该文件负责创建管理年份和月份的对象。MonthPane.java 该文件负责生成日历创建日历Music.java 该文件负责创添加背景音乐3.5.2万年历模块流程图万年历选择微调按钮选择日期正确输入错误输入改变当天日期NoteBookleftPaneMusicMonthPaneYearMonthDateTimeNotePaneNoteNotePopupMenu3 设计方案6 当天是否有日记?有无更改记事本显示3.5.3日记本模块流程图显示日记本保存删除导入

10、导出以当前日期为值,如果当前 TreeMap 打开打开文件对打开保存文件当前内容为值保有今天的记录就话框,如果选择对话框,保存存到 TreeMap中删除它了文件就导入到所选路径下3.6 各个类说明3.6.1主类 NoteBook 1.成员变量成员变量描述变量类型名称年、月、日 int year,month,day 日历对象 Calendar c 左侧日历面板 LeftPane notepad 记事本面板 NotePane 负责改变月图标 Image 负责主窗口标题栏图标的显示2.方法名称功能备注NoteBook 创建窗口主程序构造方法bookInit 变量初始化addEvent 年月微调按钮事

11、件noteBookRefresh 刷新ymListener 年月改变事件监听main 程序开始运行3 设计方案7 3.6.2记事本 Note 类1、成员变量描述变量类型名称文本输入区 JTextArea text 保存、删除日志的按钮 Button 保存日志、删除日志保存日志的散列表 Hashtable table 保存散列表的文件 File file 记录日志的人年、月、日 int year,month,day2、方法名称功能备注NotaPad 创建记事本对象构造方法setYear 设置年份getYear 获取年份setMonth 设置月份getMonth 获取月份setDay 设置日期ge

12、tDay 获取日期获取日志内容获取日志内容保存日志保存日志删除日志删除日志actionPerformed 处理 ActionEvent事件接口方法3.6.3左侧面板 LeftPane类1.成员变量描述变量类型名称2.方法名称功能备注3 设计方案8 3.6.4月份显示 MonthPane类1.成员变量描述变量类型名称2.方法3.6.5年月显示 YearMonth类1.成员变量描述变量类型名称2.方法3.6.6背景音乐 Music 类1.成员变量描述变量类型名称名称功能备注名称功能备注3 设计方案9 2.方法3.6.7日期获取 DateTime类1.成员变量描述变量类型名称2.方法3.6.8右侧记

13、事本显示 NotePane类1.成员变量描述变量类型名称2.方法名称功能备注名称功能备注名称功能备注4 各种功能截图10 3.6.9记事本弹出菜单 NotePopupMenu类1.成员变量描述变量类型名称2.方法4 各种功能截图主界面名称功能备注4 各种功能截图11 保存日记删除日志4 各种功能截图12 导入日志导出日志导出前要输入密码4 各种功能截图13 密码不正确不能导出密码正确可以指定文件名导出5 课程设计总结14 5 课程设计总结这次课程设计的主要目的是学会Java 程序开发的环境搭建与配置,并在实际运用中学习和掌握 Java 程序开发的全过程,以及进一步熟悉掌握Java 程序设计语言

14、的基础内容,提高 Java 编程技术以及分析解决问题的综合能力。通过这次课程设计,我基本掌握了以上要求。由于专业知识有限,以及动手能力的欠缺,所以开发的系统不是很完善,有一些功能未实现,但是万年历记事本的基本功能均已实现。这个课程设计使我巩固了Java 语言的知识,对于Eclipse开发工具也有了一定的了解。由于是第一次进行Java 语言开发,所以不足之处不可避免。本系统的统计功能还不够强大,背景音乐,还有日历的阴历,节气都没实现,将在以后的时间,继续完善。6 个人心得体会Java 课程设计很快就结束了,虽然每天都熬到深夜,但却让我过得很充实,获益非浅。通过这次课程设计,我懂得了只有坚持才会有

15、成就。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。7 附录15 7 附录A YearMonth.java源程序代码import java.awt.*;import javax.swing.*;pub

16、lic class YearMonth extends JPanel private int year;private int month;private JLabel yl;private JLabel ml;JSpinner showYear;JSpinner showMonth;SpinnerNumberModel yearModel,monthModel;YearMonth()ymInit();add(yl);add(showYear);add(ml);add(showMonth);void ymInit()yl=new JLabel(年);ml=new JLabel(月);year=

17、DateTime.getYear();month=DateTime.getMonth();yearModel=new SpinnerNumberModel(year,0,10000,1);showYear=new JSpinner(yearModel);showYear.setEditor(new JSpinner.NumberEditor(showYear,0000);showYear.setPreferredSize(new Dimension(60,30);/改变尺寸yl.setFont(new Font(TimesRomn,Font.BOLD,16);monthModel=new Sp

18、innerNumberModel(month,0,13,1);showMonth=new JSpinner(monthModel);showMonth.setPreferredSize(new Dimension(60,30);/改变尺寸ml.setFont(new Font(TimesRomn,Font.BOLD,16);7 附录16 B Note.java源程序代码C DateTime.java源程序代码D LeftPane.java源程序代码E MonthPane.java 源程序代码F Music.java源程序代码G Note.java源程序代码H NoteBook.java 源程序

19、代码I NotePane.java 源程序代码J NotePopupMenu.java 源程序代码日记本的设计与实现源代码:import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;class NoteBook extends JFrame implements ChangeListener,MouseListener intyear,month,day;Calendar c;intfirst,days

20、;LeftPane lp;NotePane np;public NoteBook()super(日记本的设计与实现);this.setDefaultCloseOperation(3);7 附录17 Container con=getContentPane();bookInit();addEvent();add(lp,West);add(np);this.pack();this.setResizable(true);this.setVisible(true);void bookInit()l p=new LeftPane();np=new NotePane();y ear=DateTime.ge

21、tYear();month=DateTime.getMonth();day=DateTime.getDay();void addEvent()l p.ym.showMonth.addChangeListener(this);l p.ym.showYear.addChangeListener(this);f or(int i=0;ilp.mp.showDay.length;i+)lp.mp.showDay i.addMouseListener(this);publicvoid stateChanged(ChangeEvent e)month=Integer.parseInt(lp.ym.show

22、Month.getValue().toString();y ear=Integer.parseInt(lp.ym.showYear.getValue().toString();noteBookRefresh();void noteBookRefresh()np.refreshContent(year,month,day);np.setDateInfo(year,month,day);l p.mp.arrangeNum(year,month,day);publicvoid mouseClicked(MouseEvent e)J TextField source=(JTextField)e.get

23、Source();t ry day=Integer.parseInt(source.getText();noteBookRefresh();c atch(Exception ee)publicvoid mousePressed(MouseEvent e)publicvoid mouseReleased(MouseEvent e)publicvoid mouseEntered(MouseEvent e)publicvoid mouseExited(MouseEvent e)7 附录18 class YearMonth extends JPanel privateintyear;privatein

24、tmonth;private JLabel yl;private JLabel ml;JSpinner showYear;JSpinner showMonth;YearMonth()ymInit();add(yl);add(showYear);add(ml);add(showMonth);void ymInit()yl=new JLabel(年);ml=new JLabel(月);year=DateTime.getYear();month=DateTime.getMonth();showYear=new JSpinner(new SpinnerNumberModel(year,0,10000,

25、1);showYear.setEditor(new JSpinner.NumberEditor(showYear,0000);showYear.setPreferredSize(new Dimension(60,30);yl.setFont(new Font(TimesRomn,Font.BOLD,16);showMonth=new JSpinner(new SpinnerNumberModel(month,1,12,1);showYear.setPreferredSize(new Dimension(60,30);ml.setFont(new Font(TimesRomn,Font.BOLD

26、,16);staticclass DateTime static Calendar today=Calendar.getInstance();staticint getYear()returntoday.get(today.YEAR);staticint getMonth()returntoday.get(today.MONTH)+1;staticint getDay()returntoday.get(today.DAY_OF_MONTH);staticint getMonDay(int year,int month)if(month=1|month=3|month=5|month=7|mon

27、th=8|month=10|month=12)return 31;7 附录19 elseif(month=4|month=6|month=9|month=11)return 30;if(year%4=0&year%100!=0)|year%400=0)return 29;else return 28;class LeftPane extends JPanel YearMonth ym;MonthPane mp;JLabel tupian;JPanel lp;JSplitPane split;LeftPane()super(new BorderLayout();ym=new YearMonth(

28、);mp=new MonthPane();lp=new JPanel(new BorderLayout();lp.add(ym,South);lp.add(mp);split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);this.add(lp);this.add(split,East);class MonthPane extends JPanel JTextField showDay;intfirst,days;YearMonth ym;String week;JLabel title;intyear,month,day;MonthPane()s u

29、per(new GridLayout(7,7,3,3);mcInit();for(int i=0;i7;i+)7 附录20 add(titlei);for(int i=0;i42;i+)add(showDayi);arrangeNum(year,month,day);void mcInit()y ear=DateTime.getYear();month=DateTime.getMonth();day=DateTime.getDay();String week=日,一,二,三,四,五,六;t itle=new JLabel7;f or(int j=0;j7;j+)titlej=new JLabe

30、l();titlej.setText(weekj);titlej.setBorder(BorderFactory.createEmptyBorder();titlej.setFont(new Font(,1,18);t itle0.setForeground(Color.red);t itle6.setForeground(Color.blue);s howDay=new JTextField42;for(int i=0;i42;i+)showDay i=new JTextField();showDay i.setFont(new Font(,0,14);showDay i.setEditab

31、le(false);publicvoid arrangeNum(int year,int month,int day)days=DateTime.getMonDay(year,month);Calendar c=Calendar.getInstance();c.set(year,month-1,1);f irst=c.get(Calendar.DAY_OF_WEEK)-1;i f(first!=0)for(int i=0;ifirst;i+)showDay i.setText();f or(int i=first,n=1;ifirst+days;i+,n+)showDay i.setText(

32、+n);int r=i+1;if(n=day)if(r%7=0|(r+6)%7=0)showDay i.setForeground(Color.blue);showDay i.setFont(new Font(TimesRoman,Font.BOLD,20);else 7 附录21 showDay i.setForeground(Color.green);showDay i.setFont(new Font(TimesRoman,Font.BOLD,20);else showDay i.setFont(new Font(TimesRoman,Font.BOLD,12);showDay i.se

33、tForeground(Color.black);if(i%7=0)showDay i.setForeground(Color.red);if(i%7=6)showDay i.setForeground(Color.blue);i f(first+days 41)for(int i=first+days;i42;i+)showDay i.setText();class NotePane extends JPanel implements ActionListener,MouseListener privateintyear,month,day;private JTextArea note;pr

34、ivate JButton save,delete,input,export;private Hashtable table;private JLabel dateInfo;private File file;private JPanel buttonPane;private JMenuItem copy;private JMenuItem cut;private JMenuItem paste;private JPopupMenu f;JPanel p=new JPanel();NotePane()s uper(new BorderLayout();noteInit();buttonInit

35、();addEvent();p.add(dateInfo);add(p,North);add(new JScrollPane(note);add(buttonPane,South);7 附录22 r efreshContent(year,month,day);privatevoid noteInit()y ear=DateTime.getYear();month=DateTime.getMonth();day=DateTime.getDay();dateInfo=new JLabel(year+年 +month+月 +day+日,JLabel.CENTER);dateInfo.setFont(

36、new Font(TimesRomn,Font.BOLD,16);dateInfo.setForeground(Color.BLUE);table=new Hashtable();file=new File(Note.txt);initFile();note=new JTextArea();note.setFont(new Font(,0,14);note.setLineWrap(true);privatevoid buttonInit()f=new JPopupMenu();c ut=new JMenuItem(剪切 );copy=new JMenuItem(复制 );paste=new J

37、MenuItem(粘贴 );save=new JButton(保存日记 );delete=new JButton(删除日记 );input=new JButton(导入日记 );export=new JButton(导出日记 );buttonPane=new JPanel(new FlowLayout();buttonPane.add(save);buttonPane.add(delete);buttonPane.add(input);buttonPane.add(export);f.add(cut);f.add(copy);f.add(paste);privatevoid addEvent(

38、)save.addActionListener(this);delete.addActionListener(this);input.addActionListener(this);export.addActionListener(this);cut.addActionListener(this);copy.addActionListener(this);paste.addActionListener(this);note.addMouseListener(this);7 附录23 privatevoid initFile()if(!file.exists()try FileOutputStr

39、eam out=new FileOutputStream(file);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();out.close();catch(IOException e)publicvoid actionPerformed(ActionEvent e)if(e.getSource()=save)save(year,month,day);elseif(e.getSource()=delete)delete(year,month

40、,day);elseif(e.getSource()=input)input();elseif(e.getSource()=export)export();elseif(e.getSource()=cut)note.cut();elseif(e.getSource()=copy)note.copy();elseif(e.getSource()=paste)note.paste();publicvoid setDateInfo(int _y,int _m,int _d)t his.year=_y;t his.month=_m;t his.day=_d;dateInfo.setText(_y+年

41、+_m+月 +_d+日);public String getDateKey()String s=+year;i f(month 10)s+=/0+month;else s+=/+month;i f(day 10)s+=/0+day;else s+=/+day;r eturn s;publicvoid refreshContent(int year,int month,int day)String key=this.getDateKey();t ry 7 附录24 FileInputStream in1=new FileInputStream(file);ObjectInputStream in

42、2=new ObjectInputStream(in1);table=(Hashtable)in2.readObject();in1.close();in2.close();c atch(Exception ee)i f(table.containsKey(key)note.setText(table.get(key)+);elsenote.setText();publicvoid save(int year,int month,int day)String logContent=note.getText();String key=this.getDateKey();try table.put

43、(key,logContent);FileOutputStream out=new FileOutputStream(file);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();out.close();catch(Exception ee)JOptionPane.showMessageDialog(null,key+当天的日记已成功保存!);publicvoid delete(int year,int month,int day)Str

44、ing key=this.getDateKey();if(table.containsKey(key)JOptionPane jo=new JOptionPane();int x=jo.showConfirmDialog(null,要删除 +year+年+month+月+day+日+的记录吗?,!,JOptionPane.YES_NO_OPTION);if(x=jo.YES_OPTION)try FileInputStream in1=new FileInputStream(file);ObjectInputStream in2=new ObjectInputStream(in1);table

45、=(Hashtable)in2.readObject();in1.close();in2.close();table.remove(key);FileOutputStream out=new FileOutputStream(file);ObjectOutputStream objectOut=newObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();7 附录25 out.close();note.setText();catch(Exception ee)else return;else String m

46、=+year+年+month+月+day+日+是空的 ;JOptionPane.showMessageDialog(this,m,look!,JOptionPane.WARNING_MESSAGE);publicvoid export()String pass=JOptionPane.showInputDialog(导出前请输入你的密码?);if(!pass.equals(666666)JOptionPane.showMessageDialog(new JDialog(),抱歉,你的密码不正确不能导出!);return;TreeMap map=new TreeMap(table);Set ma

47、pping=map.entrySet();File newfile=new File(日历记事本 1.txt);try PrintWriter out=new PrintWriter(newfile);for(Iterator i=mapping.iterator();i.hasNext();)Map.Entry me=(Map.Entry)i.next();out.println(me.getKey();out.println(me.getValue()+nr);out.close();input();catch(Exception ex)publicvoid input()J FileCh

48、ooser fc=new JFileChooser();f c.showOpenDialog(this);File file=fc.getSelectedFile();t ry FileInputStream in=new FileInputStream(file);byte b=newbytein.available();in.read(b);7 附录26 note.setText(new String(b);in.close();c atch(Exception e)publicvoid mousePressed(MouseEvent e)if(e.getButton()=e.BUTTON3)f.show(this,e.getX(),e.getY();publicvoid mouseClicked(MouseEvent e)publicvoid mouseReleased(MouseEvent e)publicvoid mouseEntered(MouseEvent e)publicvoid mouseExited(MouseEvent e)publicstaticvoid main(String args)new NoteBook();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁