用Java实现日历记事本_第1页
用Java实现日历记事本_第2页
用Java实现日历记事本_第3页
用Java实现日历记事本_第4页
用Java实现日历记事本_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、用Java实现日历记事本信息与计算科学专业课程设计用Java实现日历记事本1 .实验目的掌握RandomAccessFile类的使用;掌握字符输入、输出流和缓冲输入、输出流的使用。2 .实验要求实验前,应事先熟悉相关知识点,拟出相应的实验操作步骤,明确实验目的和要求;实验过程中,服从实验指导教师安排,遵守实验室的各项规章制度,爱护实验仪器设备;实验操作完成后,认真书写实验报告,总结实验经验,分析实验过程中出现的问题。3 .实验内容编程实现日历记事本。具体要求如下:(1)该日历可以通过在文本框中输入年份和月份设置日期,也可按年前后翻动,用鼠标左键单击“上年”和“下年”按钮,将当前日历的年份减一和

2、加一。还可以在某年内按月前后翻动,用鼠标左键单击“上月”和“下月”按钮,将日历的月份减一和加一。(2)左键单击日历上的日期,可以通过右侧的记事本(文本区)编辑有关日志,并将日志保存到一个文件,该文件的名字是由当前日期组成的字符序列。用户可以读取、删除某个日期的日志,也可以继续向某个日志添加新的内容。在保存、删除和读取日志时都会先弹出一个确认对话框,以确认保存、删除和读取操作。(3)当某个日期有日志时,该日期以粗体16号字显示,表明这个日期有日志;当用户删除某个日期的日志后,该日期恢复原来的外观。实现效果图(参考)如下:提示:(1)组件调用publicvoidsetFont(Fontf)方法可以

3、设置组件上的字体,Font类的构造方法为:publicFont(Stringname,intstyle,intsize),其中name是字体的名字,style决定字体的样式(如Font.BOLD表示粗体)size决定字体的大小。(具体请参考JDKAPI)(2)当左键单击日历上的日期时,如要获取该日期,可通过处理该组件上的鼠标事件来实现。4 .实验步骤、实施过程、关键代码、实验结果及分析说明等1. CalendarPad类(1)进行整体布局,建立日历记事本文件,设置日历卡,把日期按星期顺序排列,并用窗口监视器实现。(2)用窗口监视器实现,结果如下:2. Notepad类1)对日期的设置和获取,设

4、置信息条,对文本框进行设置,保存日志、删除日志和读取日志按钮的事件实现(2)保存日志按钮事件实现如下:(3)读取日志按钮事件实现如下:图-X上年2017下年坛11下月(4.)删除日志按钮事件实现如下:上月11星翻二星题三星期四星鼬五星划六上年2017千年3星射日星第一5618121314151920211226272829g1623下月2017年11月23H1118保存日志,删日志读取日志3Year类(1)输入年份可以实现输出,给上下年按钮设置监视器,对上下年按钮事件的实现。(2)其结果如下:4.Month类(1)设置上下月监视器,对上下月按钮的事件实现区分闰年和平年,对天数不同的月份进行分类

5、。(2)其结果如下:上年201下年上月10下月二,555T二二二一二3.5'20VM0JJ15II保存日志删除日志读取日志extendsJFrameimplements星期二","星期三","星期四","星期五(续上页,可加页)5各个类的源代码如下:CalendarPad类:/CalendarPad.javaimportjava.util.Calendar;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava

6、.util.Hashtable;publicclassCalendarPadMouseListener,ActionListenerintyear,month,day;Hashtablehashtable;JButtonSave,Delete,Read;Filefile;JTextFieldshowDay口;儿abeltitle口;CalendarDate;intWeekday;NotePadnotepad=null;MonthChangeMonth;YearChangeYear;Stringweek="星期日","星期一","星期六"

7、;JPanelleftPanel,rightPanel;publicCalendarPad(intyear,intmonth,intday)leftPanel=newJPanel();JPanelleftCenter=newJPanel();JPanelleftNorth=newJPanel();leftCenter.setLayout(newGridLayout(7,7);rightPanel=newJPanel();this.year=year;this.month=month;this.day=day;ChangeYear=newYear(this);ChangeYear.setYear

8、(year);ChangeMonth=newMonth(this);ChangeMonth.setMonth(month);title=newJLabel7;showDay=newJTextField42;for(intj=0;j<7;j+)titlej=newJLabel();titlej.setText(weekj);titlej.setBorder(BorderFactory.createRaisedBevelBorder();titlej.setForeground(Color.blue);leftCenter.add(titlej);for(inti=0;i<42;i+)

9、showDayi=newJTextField();showDayi.addMouseListener(this);showDayi.setEditable(false);leftCenter.add(showDayi);Save=newJButton("保存日志");Delete=newJButton("删除日志");Read=newJButton("读取日志");Read.addActionListener(this);Save.addActionListener(this);Delete.addActionListener(thi

10、s);/设置监视器JPanelpSouth=newJPanel();pSouth.add(Save);pSouth.add(Delete);pSouth.add(Read);Date=Calendar.getInstance();Boxbox=Box.createHorizontalBox();box.add(ChangeYear);box.add(ChangeMonth);leftNorth.add(box);leftPanel.setLayout(newBorderLayout();add(leftNorth,BorderLayout.NORTH);leftPanel.add(leftCe

11、nter,BorderLayout.CENTER);add(pSouth,BorderLayout.SOUTH);leftPanel.validate();notepad=newNotePad(this);rightPanel.add(notepad);Containercon=getContentPane();JSplitPanesplit=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPanel,rightPanel);con.add(split,BorderLayout.CENTER);/进行整体布局con.validate();hashta

12、ble=newHashtable();file=newFile("日历记事本.txt");if(!file.exists()tryFileOutputStreamout=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.writeObject(hashtable);objectOut.close();out.close();catch(IOExceptione)setCalendar(year,month);addWindowListener(

13、newWindowAdapter()/设置窗口监视器publicvoidwindowClosing(WindowEvente)System.exit(0););setVisible(true);setBounds(100,60,524,335);validate();publicvoidactionPerformed(ActionEvente)if(e.getSource()=Save)notepad.Save(file,year,month,day);elseif(e.getSource()=Delete)notepad.Delete(file,year,month,day);elseif(

14、e.getSource()=Read)notepad.Read(file,year,month,day);publicvoidsetCalendar(intyear,intmonth)/设置日历卡Date.set(year,month-1,1);Weekday=Date.get(Calendar.DAY_OF_WEEK)-1;if(month=1|month=2|month=3|month=5|month=7|month=8|month=10|month=12)Arrange(Weekday,31);)elseif(month=4|month=6|month=9|month=11)Arrang

15、e(Weekday,30);)elseif(month=2)if(year%4=0&&year%100!=0)|(year%400=0)Arrange(Weekday,29);)elseArrange(Weekday,28);publicvoidArrange(intWeekday,intMonthday)/把日期,按星期排列FoFofor(inti=Weekday,n=1;i<Weekday+Monthday;i+)showDayi.setText(""+n);if(n=day)showDayi.setForeground(Color.blue);s

16、howDayi.setFont(newnt("TimesRoman",Font.BOLD,20);)elseshowDayi.setFont(newnt("TimesRoman",Font.BOLD,12);showDayi.setForeground(Color.black);)n+;)for(inti=0;i<Weekday;i+)showDayi.setText("");)for(inti=Weekday+Monthday;i<42;i+)showDayi.setText("");)publici

17、ntgetYear()returnyear;)publicvoidsetYear(inty)year=y;notepad.setYear(year);)publicintgetMonth()returnmonth;)publicvoidsetMonth(intm)month=m;notepad.setMonth(month);)publicintgetDay()returnday;)publicvoidsetDay(intd)day=d;notepad.setDay(day);)publicHashtablegetHashtable()returnhashtable;)publicFilege

18、tFile()returnfile;)publicvoidmousePressed(MouseEvente)JTextFieldsource=(JTextField)e.getSource();tryday=Integer.parseInt(source.getText();notepad.setDay(day);notepad.setNews(year,month,day);notepad.setText(null);)catch(Exceptionee)publicvoidmouseClicked(MouseEvente)publicvoidmouseReleased(MouseEvent

19、e)publicvoidmouseExited(MouseEvente)publicvoidmouseEntered(MouseEvente)publicstaticvoidmain(Stringargs)Calendarcalendar=Calendar.getInstance();inty=calendar.get(Calendar.YEAR);intm=calendar.get(Calendar.MONTH)+1;intd=calendar.get(Calendar.DAY_OF_MONTH);newCalendarPad(y,m,d);NotePad类/NotePad.javaimpo

20、rtjava.awt*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjavax.swing.event.*;importjava.io.*;publicclassNotePadextendsJPanelimplementsActionListenerJTextAreatext;Hashtabletable;JLabelNews;intyear,month,day;Filefile;CalendarPadcalendar;publicNotePad(CalendarPadcalendar)this.cale

21、ndar=calendar;year=calendar.getYear();month=calendar.getMonth();day=calendar.getDay();table=calendar.getHashtable();file=calendar.getFile();News=new儿abel(""+year+"年"+month+"月"+day+"日",JLabel.CENTER);News.setFont(newFont("TimesRoman",Font.BOLD,20);tex

22、t=newJTextArea(10,15);setLayout(newBorderLayout();JPanelpSouth=newJPanel();add(News,BorderLayout.NORTH);add(pSouth,BorderLayout.SOUTH);add(newJScrollPane(text),BorderLayout.CENTER);publicvoidsetYear(intyear)this.year=year;)publicintgetYear()returnyear;)publicvoidsetMonth(intmonth)this.month=month;)p

23、ublicintgetMonth()returnmonth;)publicvoidsetDay(intday)this.day=day;)publicintgetDay()returnday;)publicvoidsetNews(intyear,intmonth,intday)News.setText(""+year+"年"+month+"月"+day+"日");)publicvoidsetText(Strings)text.setText(s);)publicvoidactionPerformed(ActionE

24、vente)保存日志按publicvoidSave(Filefile,intyear,intmonth,intday)/钮事件实现StringLogCenter=text.getText();Stringkey=""+year+""+month+""+day;tryFileInputStreaminOne=newFileInputStream(file);ObjectInputStreaminTwo=newObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOn

25、e.close();inTwo.close();catch(Exceptionee)if(table.containsKey(key)String/是更新已有的日志intm=""+year+""+month+""+day+""ok=JOptionPane.showConfirmDialog(this,m,”,JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok=JOptionPane.YES_OPTION)tryFileInputStreamin

26、One=newFileInputStream(file);ObjectInputStreaminTwo=newObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();table.remove(key);FileOutputStreamout=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.writeObject(table);objectOu

27、t.close();out.close();text.setText(null);catch(Exceptionee)Stringf="日志已更新"JOptionPane.showMessageDialog(this,f,"OptionPane.WARNING_MESSAGE);年"+month+"月"+day+"还没有日志,是否保存日志?"elseStringm=""+year+"/呆存还没有的日志intok=JOptionPane.showConfirmDialog(this,m,

28、"OptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok=JOptionPane.YES_OPTION)tryFileInputStreaminOne=newFileInputStream(file);ObjectInputStreaminTwo=newObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();table.put(key,LogCenter);FileOutputStreamout=n

29、ewFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();out.close();)catch(Exceptionee)Stringf="日志保存成功"JOptionPane.showMessageDialog(this,f,"提”,JOptionPane.WARNING_MESSAGE);publicvoidDelete(Filefile,intyear,intmont

30、h,intday)/删除日志按钮事件实现Stringkey=""+year+""+month+""+day;if(table.containsKey(key)Stringm="删除"+year+"年"+month+"月"+day+”日的日志吗?"intyes=JOptionPane.showConfirmDialog(this,m,”询”,JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(yes=J

31、OptionPane.YES_OPTION)tryFileInputStreaminOne=newFileInputStream(file);ObjectInputStreaminTwo=newObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();table.remove(key);FileOutputStreamout=newFileOutputStream(file);ObjectOutputStreamobjectOut=newObjectOutputStream(

32、out);objectOut.writeObject(table);objectOut.close();out.close();text.setText(null);catch(Exceptionee)Stringf="日志删除成功"JOptionPane.showMessageDialog(this,f,"提”,JOptionPane.WARNING_MESSAGE);elseStringf=""+year+"年"+month+"月"+day+"无记录"JOptionPane.sho

33、wMessageDialog(this,f,”,JOptionPane.WARNING_MESSAGE);读取日志publicvoidRead(Filefile,intyear,intmonth,intday)/按钮事件实现Stringkey=""+year+""+month+""+day;tryFileInputStreaminOne=newFileInputStream(file);ObjectInputStreaminTwo=newObjectInputStream(inOne);table=(Hashtable)inTwo.r

34、eadObject();inOne.close();inTwo.close();catch(Exceptionee)if(table.containsKey(key)Stringm=""+year+"年"+month+"月"+day+”已有日志,是否读取?”;intok=JOptionPane.showConfirmDialog(this,m,”OptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok=JOptionPane.YES_OPTION)text.setText

35、(String)table.get(key);II);text.setText(""+year+"年"+month+"月"+day+”日的日志elsetext.setText("");elseStringf=""+year+"年"+month+"月"+day+”日,暂无记录"JOptionPane.showMessageDialog(this,f,”OptionPane.WARNING_MESSAGE);Year类/Year.java其源代码为:

36、importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassYearextendsBoximplementsActionListenerintyear;JTextFieldshowYear=null;JButtonYear1,Year2;CalendarPadCAL;publicYear(CalendarPadCAL)super(BoxLayout.X_AXIS);showYear=newJTextField(4);FthshowYear.setFont(newont("TimesRomn",

37、Font.BOLD,14);is.CAL=CAL;year=CAL.getYear();Year2=newJButton("下年");Year1=newJButton("上年");add(Year1);add(showYear);add(Year2);showYear.addActionListener(this);Year1.addActionListener(this);Year2.addActionListener(this);设置监视器publicvoidsetYear(intyear)this.year=year;showYear.setTex

38、t(""+year);)publicintgetYear()returnyear;)/publicvoidactionPerformed(ActionEvente)上下年按钮事件的实现if(e.getSource()=Year1)上年按钮year=year-1;showYear.setText(""+year);CAL.setYear(year);CAL.setCalendar(year,CAL.getMonth();)elseif(e.getSource()=Year2)下年按钮year=year+1;showYear.setText("&q

39、uot;+year);CAL.setYear(year);CAL.setCalendar(year,CAL.getMonth();)elseif(e.getSource()=showYear)输入年份tryyear=Integer.parseInt(showYear.getText();showYear.setText(""+year);CAL.setYear(year);CAL.setCalendar(year,CAL.getMonth();)catch(NumberFormatExceptionee)showYear.setText(""+year);CAL.setYear(year);CAL.setCalendar(year,CAL.getMonth();)Month类/

温馨提示

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

评论

0/150

提交评论