java课程设计报告-6_第1页
java课程设计报告-6_第2页
java课程设计报告-6_第3页
java课程设计报告-6_第4页
java课程设计报告-6_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

摘要摘要本课程设计通过代码实现将理论知识和具体实践相结合,巩固提高了对JAVA的相关方法与概念的理解,使学生的发散思维及动手能力进一步加强,加强对计算机及软件工程的进一步了解。在这个课程设计中,做成了一个有日历标记的记事本软件,日记本的设计与实现面板由日历、记事本、图片、时钟四部分组成。日历部分可以选择不同的年份、月份、日期和星期;记事本模块可以实现查看,保存,删除日志等操作;并且每一步操作都有相应提示;图片模块可以显示预设的图片;时钟模块可以用时钟来显示当前时间。本软件是一个实用性较强,简洁,美观,方便的功能软件。关键字:记事本;日历;引言Java是一种纯面向对象的、网络编程首选的语言。Java技术作为软件开的一种革命性技术,已被列为当今世界信息技术的主流之一。为了适应时代潮流,我们应该加强对Java的学习,更好的掌握这门课程。为此Java课程设计决定以“日记本的设计与实现”为设题材,借此巩固加深我们对Java的了解。本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但在此程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数抽象能力。因此,我们觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。设计目的与任务本课程设计所要求达到的目的和任务:通过Java程序设计的一些重要理论基础来实现“日记本的设计与实现”的“日历”和“记事本”的双重功能。并通过此次课程设计的训练,使学生巩固和加深对Java这门课程的理解,通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。通过这次课程设计,培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念。设计方案总体设计(1)问题定义:创建日记本的设计与实现,实现对某日期的事情进行记录这主要功能,并能显示设置的图片,增加美观。(2)问题分析:通过对“日记本的设计与实现”这一题材的分析,我需要四个类来实现其“日历”和“记事本”这两大功能。通过主类NoteBook创建动日记本的设计与实现软件的主窗口,该类含有main方法,程序从该类开始执行。再用余下LeftPane、NotePane类来显示并改变日期和实现记事本的功能。(3)研究意义:通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合实际的能力。设计要求(1)日记本使用Java语言开发设计。课程的基本功能包括万年历、记事本和辅助功能三个部分。(2)万年历部分由微调器确定年月,由一组文本框显示日历。年月可选择数据符合逻辑,默认为当前日期。(3)月历显示应该符合查看习惯,如星期六和星期日分别用不同颜色表示,当日可用特别的字号和颜色(4)记事本区,记事本内容按年月日记录且保存。(5)微调器应该进行事件设置,以及即时地显示该年月的月历;日期文本框可监听鼠标事件,当单击任何一个日期时,若该日有记事内容,则在日记本中显示该日期的记录文字;若该日无记录,记事区保持空白。(6)日记本应该是开放的,内容可按日期增减,保存应即时,删除需谨慎删除记录时,应进行对话框询问确定。(7)辅助功能包含了日记的导入导出。“导入”可以将其他日记文件导入合并到当前“日记本的设计与实现”的日记本中;“导出”可将“日记本的设计与实现”的所有记录内容按日期为序导出到一个文本文件中。为安全起见导出时需加以安全确认,要求输入正确设定的密码后才能导出。(8)系统界面外观和布局,可个性化设计,总体原则是“界面简洁,操作便捷”。系统的主要功能(1)可以对个人日志进行保存、删除、导入和导出;(2)可以方便地在任何日期记载个人日志以及查看某个日期记载的日志;(3)可以显示当前日期。开发环境WindowsXP;jdk1.5.0_16,Eclipse。系统的功能模块划分与系统流程图系统的功能模块划分本日历记事本共有11个java源文件。NoteBook.java该java文件生成的类负责创建本日历记事本程序主窗口。该类含有main方法,程序从该类开始执行。leftPane.java该文件负责创建创建左侧面板。NotePane.java该文件负责创建右侧面板、在文本框上弹出快捷菜单、创建日记文本DateTime.java该文件获得系统当前的日期,包括年月日YearMonth.java该文件负责创建管理年份和月份的对象。MonthPane.java该文件负责生成日历创建日历类模块图如图3-1所示.NotebookNotebookleftPaneleftPaneNotePaneNotePaneTimeLabelTimeLabelDateTimeMonthPaneYearMonthDateTimeMonthPaneYearMonth图3-1图3-1万年历模块流程图 万年历流程图如图3-2所示 万年历 按钮 选择日期 正确输入 错误输入 改变当天日期 当天是否有日记? 有 无 更改记事本显示 图3-2图3-2 日记本模块流程图日记本流程图如图3-3所示. 显示日记本 保存 删除 导入 导出以当前日期为值,如果当前TreeMap 打开文件对打开保存文件当前内容为值保有今天的记录就 话框,如果选择对话框,保存存到TreeMap中删除它 了文件就导入 到所选路径下图3-3图3-3各个类说明记事本NoteBook类1.成员变量表3-1成员变量描述变量类型名称年、月、日intyear,month,day日历对象Calendarc左侧日历面板LeftPanelp记事本面板NotePanenp2.方法表3-2名称功能备注NoteBook创建窗口主程序构造方法bookInit变量初始化addEvent年月微调按钮事件noteBookRefresh刷新ymListener年月改变事件监听main程序开始运行记事本NotePane类1、成员变量表3-3描述变量类型名称文本输入区JTextAreanote输入文本区JTextAreanote保存、删除导入、导出日志的按钮JButtonsave、delete、input、export保存日志的散列表Hashtabletable保存散列表的文件Filefile记录日志的年、月、日intyear,month,day日期显示JLabledateInfo剪切、复制、粘贴按钮JMenuItemcopy、cut、paste2、方法表3-4名称功能备注NotePane创建记事本面板对象构造方法noteInit在记事本上显示日期、buttonInit对所有按钮进行初始化,并加入到按钮面板中addEvent对所有按钮进行监听,接口方法并对记事本进行监听initFile文件存在,对文件进行排序actionPerformed对按钮设计监听setDateInfo设置日期信息input导入日志内容save保存日志delete删除日志export导出日志actionPerformed处理ActionEvent事件接口方法左侧面板LeftPane类1.成员变量表3-5描述变量类型名称日历上方图片JLabeltupian左面板JPanellp年月微调器YearMonthym月份面板MonthPanemp2.方法表3-6名称功能备注LeftPane设置左面图片,日历面板月份显示MonthPane类1.成员变量表3-7描述变量类型名称文本区JTextFieldshowDay[]年月微调器YearMonthym星期String[]week星期标签JLabel[]title年、月、日intyear,month,day2.方法表3-8名称功能备注MonthPane创建月份面板对象构造方法mcInit日期显示,并对星期六与星期天进行红、蓝设置arrangeNum对日期按七天一个周期进行进行排列,不足七天,就按照时间的顺序排列年月显示YearMonth类1.成员变量表3-9描述变量类型名称年、月、日intyear,month,day年标签JLabely1月标签JLabelm1显示年JSpinnershowYear显示月JSpinnershowMonth2.方法表3-10名称功能备注YearMonth创建年月微调器对象构造方法ymInit年月微调器显示表3-11日期获取DateTime类1.成员变量表3-13描述变量类型名称日历获取Calendartoday2.方法表3-14名称功能备注getYear返回当前年份getMonth返回当前月份getDay返回当前对应的日期getMonDay对于月份进行编写,每月含有的天数,和是否是闰年考虑在内4、各种功能截图主界面保存日记删除日记导入日志导出日记课程设计总结通过本次课程设计的练习,我才知道我对知识的掌握是多么的不熟悉,太多东西我都不知道,最主要的是我练的太少了,太多都不熟悉,Java的学习不是看看就会的,最最主要的是多练。这次的课程设计为我敲响了警钟,在以后的学习中一定要多多练习,锻炼自己的独立思考能力,和团队意识,为以后的工作打好基础。6、个人心得体会“红花虽好,也要绿叶相持”,同样,只有理论是远远不够的,理论还需要用实践来证明。课程设计培养学会的多方面的能力,独立思考、对知识的掌握、解决问题的能力等,我现在做的只是一个小小的程序设计而已,以后会有更大的软件需要去做,也不是我一个人能完成的,所以团队意识也是很重要的。7、附录源程序代码importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.*;importjavax.swing.*;importjavax.swing.event.*;classNoteBookextendsJFrameimplementsChangeListener,MouseListener{ intyear,month,day; Calendarc; intfirst,days; LeftPanelp; NotePanenp; publicNoteBook(){ super("日记本的设计与实现"); this.setDefaultCloseOperation(3); Containercon=getContentPane(); bookInit(); addEvent(); add(lp,"West");add(np);this.setBounds(50,20,1000,650);this.setResizable(true);this.setVisible(true);} voidbookInit(){ lp=newLeftPane(); np=newNotePane(); year=DateTime.getYear(); month=DateTime.getMonth(); day=DateTime.getDay();}voidaddEvent(){ lp.ym.showMonth.addChangeListener(this); lp.ym.showYear.addChangeListener(this); for(inti=0;i<lp.mp.showDay.length;i++){ lp.mp.showDay[i].addMouseListener(this); }}publicvoidstateChanged(ChangeEvente){ month=Integer.parseInt(lp.ym.showMonth.getValue().toString()); year=Integer.parseInt(lp.ym.showYear.getValue().toString()); noteBookRefresh();}voidnoteBookRefresh(){ np.refreshContent(year,month,day); np.setDateInfo(year,month,day); lp.mp.arrangeNum(year,month,day);}publicvoidmouseClicked(MouseEvente){ JTextFieldsource=(JTextField)e.getSource(); try{ day=Integer.parseInt(source.getText()); noteBookRefresh(); } catch(Exceptionee){}}publicvoidmousePressed(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){} classYearMonthextendsJPanel{ privateintyear; privateintmonth; privateJLabelyl; privateJLabelml; JSpinnershowYear;//微调按钮 JSpinnershowMonth; YearMonth(){ ymInit(); add(yl);add(showYear); add(ml);add(showMonth); } voidymInit(){ yl=newJLabel("年"); ml=newJLabel("月"); year=DateTime.getYear(); month=DateTime.getMonth(); showYear=newJSpinner(newSpinnerNumberModel(year,0,10000,1)); showYear.setEditor(newJSpinner.NumberEditor(showYear,"0000")); showYear.setPreferredSize(newDimension(60,30)); yl.setFont(newFont("TimesRomn",Font.BOLD,16)); showMonth=newJSpinner(newSpinnerNumberModel(month,1,12,1)); showYear.setPreferredSize(newDimension(60,30)); ml.setFont(newFont("TimesRomn",Font.BOLD,16)); } } staticclassDateTime{ staticCalendartoday=Calendar.getInstance(); staticintgetYear(){ returntoday.get(today.YEAR); } staticintgetMonth(){ returntoday.get(today.MONTH)+1; } staticintgetDay(){ returntoday.get(today.DAY_OF_MONTH); } staticintgetMonDay(intyear,intmonth){ if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ return31; } elseif(month==4||month==6||month==9||month==11){ return30; } if((year%4==0&&year%100!=0)||year%400==0){ return29; } else{ return28; } } } classLeftPaneextendsJPanel{ YearMonthym; MonthPanemp; JLabeltupian; JPanellp; JSplitPanesplit; LeftPane(){ super(newBorderLayout()); tupian=newJLabel(newImageIcon("a.jpg")); ym=newYearMonth(); mp=newMonthPane(); lp=newJPanel(newBorderLayout()); lp.add(ym,"South"); lp.add(mp); lp.add(tupian,"North"); split=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT); this.add(lp); this.add(split,"East"); } } classMonthPaneextendsJPanel{ JTextFieldshowDay[]; intfirst,days; YearMonthym; String[]week; JLabel[]title; intyear,month,day; MonthPane(){ super(newGridLayout(7,7,3,3)); mcInit(); for(inti=0;i<7;i++) add(title[i]); for(inti=0;i<42;i++) add(showDay[i]); arrangeNum(year,month,day); } voidmcInit(){ year=DateTime.getYear(); month=DateTime.getMonth(); day=DateTime.getDay(); Stringweek[]={"日","一","二","三","四","五","六"}; title=newJLabel[7]; for(intj=0;j<7;j++){ title[j]=newJLabel(); title[j].setText(week[j]); title[j].setBorder(BorderFactory.createEmptyBorder()); title[j].setFont(newFont("",1,18)); } title[0].setForeground(Color.red); title[6].setForeground(Color.blue); showDay=newJTextField[42]; for(inti=0;i<42;i++){ showDay[i]=newJTextField(); showDay[i].setFont(newFont("",0,14)); showDay[i].setEditable(false); } } publicvoidarrangeNum(intyear,intmonth,intday){ days=DateTime.getMonDay(year,month); Calendarc=Calendar.getInstance(); c.set(year,month-1,1); first=c.get(Calendar.DAY_OF_WEEK)-1; if(first!=0){ for(inti=0;i<first;i++){ showDay[i].setText(""); } } for(inti=first,n=1;i<first+days;i++,n++){ showDay[i].setText(""+n); intr=i+1; if(n==day){ if(r%7==0||(r+6)%7==0){ showDay[i].setForeground(Color.blue); showDay[i].setFont(newFont("TimesRoman",Font.BOLD,20)); } else{ showDay[i].setForeground(Color.green); showDay[i].setFont(newFont("TimesRoman",Font.BOLD,20)); } } else{ showDay[i].setFont(newFont("TimesRoman",Font.BOLD,12)); showDay[i].setForeground(Color.black); } if(i%7==0){ showDay[i].setForeground(Color.red); } if(i%7==6){ showDay[i].setForeground(Color.blue); } } if(first+days<41){ for(inti=first+days;i<42;i++){ showDay[i].setText(""); } } } } //时钟显示 classTimeLabelextendsJLabelimplementsRunnable{ TimeLabel(){ this.setFont(newFont("",1,20)); this.setForeground(Color.red); newThread(this).start(); } publicStringgetTime(){ Calendarnow=Calendar.getInstance();//取得系统时间 inthour; intminute; intsecond; StringtimeInfo; hour=now.get(now.HOUR_OF_DAY); minute=now.get(now.MINUTE); second=now.get(now.SECOND); if(hour<=9) timeInfo="0"+hour+":"; else timeInfo=hour+":"; if(minute<=9) timeInfo=timeInfo+"0"+minute+":"; else timeInfo=timeInfo+minute+":"; if(second<=9) timeInfo=timeInfo+"0"+second; else timeInfo=timeInfo+second; returntimeInfo; } publicvoidrun(){ while(true)//线程的运行(隔一秒刷新)循环显示 {try {this.setText(this.getTime()); Thread.sleep(1000); } catch(Exceptione){} } } } classNotePaneextendsJPanelimplementsActionListener,MouseListener{ privateintyear,month,day; privateJTextAreanote; privateJButtonsave,delete,input,export; privateHashtabletable; privateJLabeldateInfo; privateFilefile; privateJPanelbuttonPane; privateJMenuItemcopy; privateJMenuItemcut; privateJMenuItempaste; privateJPopupMenuf; JPanelp=newJPanel(); NotePane(){ super(newBorderLayout()); noteInit(); buttonInit(); addEvent(); p.add(dateInfo); p.add(newTimeLabel()); add(p,"North"); add(newJScrollPane(note)); add(buttonPane,"South"); refreshContent(year,month,day); } privatevoidnoteInit(){ year=DateTime.getYear(); month=DateTime.getMonth(); day=DateTime.getDay(); dateInfo=newJLabel(year+"年"+month+"月"+day+"日",JLabel.CENTER); dateInfo.setFont(newFont("TimesRomn",Font.BOLD,16)); dateInfo.setForeground(Color.BLUE); table=newHashtable(); file=newFile("Note.txt"); initFile(); note=newJTextArea(); note.setFont(newFont("",0,14)); note.setLineWrap(true); } privatevoidbuttonInit(){ f=newJPopupMenu(); cut=newJMenuItem("剪切"); copy=newJMenuItem("复制"); paste=newJMenuItem("粘贴"); save=newJButton("保存日记"); delete=newJButton("删除日记"); input=newJButton("导入日记"); export=newJButton("导出日记"); buttonPane=newJPanel(newFlowLayout()); buttonPane.add(save); buttonPane.add(delete); buttonPane.add(input); buttonPane.add(export); f.add(cut); f.add(copy); f.add(paste); } privatevoidaddEvent(){ save.addActionListener(this); delete.addActionListener(this); input.addActionListener(this); export.addActionListener(this); cut.addActionListener(this); copy.addActionListener(this); paste.addActionListener(this); note.addMouseListener(this); } privatevoidinitFile(){ if(!file.exists()){ try{ FileOutputStreamout=newFileOutputStream(file); ObjectOutputStreamobjectOut=newObjectOutputStream(out); objectOut.writeObject(table); objectOut.close(); out.close(); } catch(IOExceptione){} } } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==save) save(year,month,day); elseif(e.getSource()==delete) delete(year,month,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(); } publicvoidsetDateInfo(int_y,int_m,int_d){ this.year=_y; this.month=_m; this.day=_d; dateInfo.setText(_y+"年"+_m+"月"+_d+"日"); } publicStringgetDateKey(){ Strings=""+year; if(month<10)s+="/0"+month; elses+="/"+month; if(day<10)s+="/0"+day; elses+="/"+day; returns; } publicvoidrefreshContent(intyear,intmonth,intday){ Stringkey=this.getDateKey(); try{ FileInputStreamin1=newFileInputStream(file); ObjectInputStreamin2=newObjectInputStream(in1); table=(Hashtable)in2.readObject(); in1.close(); in2.close(); } catch(Exceptionee){} if(table.containsKey(key)) note.setText(table.get(key)+""); else note.setText(""); } publicvoidsave(intyear,intmonth,intday){ StringlogContent=note.getText(); Stringkey=this.getDateKey(); try{ table.put(key,logContent); FileOutputStreamout=newFileOutputStream(file); ObjectOutputStreamobjectOut=newObjectOutputStream(out); objectOut.writeObject(table); objectOut.close(); out.close(); } catch(Exceptionee){} JOptionPane.showMessageDialog(null,key+"当天的日记已成功保存!"); } publicvoiddelete(intyear,intmonth,intday){ Stringkey=this.getDateKey(); if(table.containsKey(key)){ JOptionPanejo=newJOptionPane(); intx=jo.showConfirmDialog(null,"要删除"+year+"年"+month+"月"+day+"日"+"的记录吗?","!!!",JOptionPane.YES_NO_OPTION); if(x==jo.YES_OPTION){ try{ FileInputStreamin1=newFileInputStream(file); ObjectInputStreamin2=newObjectInputStream(in1); table=(Hashtable)in2.readObject(); in1.close();

温馨提示

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

评论

0/150

提交评论