




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目:日历记事本一、实验内容 用所学的Java知识,设计出日历记事本程序。(其中:保存、读取和删除过程)二、需求分析 建立日历记事本界面,其中包括时钟、日历和记事大部分操作、显示、清除 所编写的程序可以正常运算; 所编写的程序可以正确记事;三、实验目的 1、加深对Java语言的了解,增强Java的编写能力; 2、巩固专业知识,Java复习语言的类及其他基础内容; 3、增强学生的动手实践能力,开拓学生的视野; 4、丰富学生的想象力及独立思考能力。四、组员及分工廖俊军:CalendarMessage、CalendarPad、NotePad刘伟才:CalendarWindow伍 星:Clock五、系统总体设计: 主要功能模块的算法设计思路如下:1、 主类(CalendarWindow.java)主要功能介绍:(1) 运行的标志;(2) 调用包中的各种类。(3) 界面代码及主函数的书写(4) 窗口的排版及按钮的位置摆放(5) 实现各按钮和标签的创建和功能2、 数据类(CalendarMessage.java)主要功能介绍:用来刻画和“日期”有关的数据。3、 数据显示和修改类(CalendarPad.java)主要功能介绍:用来表示“日历”,即负责显示和修改CalendarMessage对象中的日期数据。4、 记事本类(NotePad.java)主要功能介绍:创建以提供编辑、读取、保存和删除日志的功能。5、 时钟类(Clock.java)主要功能介绍:负责显示时钟。6、 图像类(CalendarImage.java)主要功能介绍:负责绘制图像。六、程序详细设计:代码如下:1、 主类(CalendarWindow.java)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 notePad; 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(./dailyRecord); dir.mkdir(); showDay=new JTextField42; for(int i=0;i12) month=1; showMonth.setText( +month); calendarMessage.setMonth(month); calendarPad.setCalendarMessage(calendarMessage); calendarPad.showMonthCalendar(); notePad.setShowMessage(year,month,day); doMark(); else if(e.getSource()=previousMonth) /、“上一月” month-; if(month1) month=12; showMonth.setText( +month); calendarMessage.setMonth(month); calendarPad.setCalendarMessage(calendarMessage); calendarPad.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;ia.length;i+) if(!(Character.isDigit(ai) boo=true; if(boo=true) /弹出“警告”消息对话框 JOptionPane.showMessageDialog(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(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(MouseEvent 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) public 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 不再是焦点所有者。 指示 Component 已获得或失去输入焦点的低级别事件。 Component com=(Component)e.getSource(); com.setBackground(backColor); public void doMark() for(int i=0;ishowDay.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); mess.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;kdayFile.length;k+) if(dayFilek.equals(key+.txt) boo=true; break; return boo; public static void main(String args) new CalendarWindow(); 2、 数据类(CalendarMessage.java)import java.util.Calendar;public class CalendarMessage int year=-1,month=-1,day=-1; / 为什么要附上负值? public void setYear(int year) this.year=year; public int getYear() return year; public void setMonth(int month) if(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 rili=Calendar.getInstance(); rili.set(year,month-1,1);/将日历翻到year年month月1日,注意0表示一月.11表示十二月 int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1; /星期天对应是0,以此类推星期一是1.星期六是6。 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)&(year%100!=0)|(year%400=0) dayAmount=29; else dayAmount=28; /*日对应星期*/ for(int i=0;i星期几;i+) /Calendar所得到的星期几和i对比,小于它的为空标签 dayi=; for(int i=星期几,n=1;i星期几+dayAmount;i+) dayi=String.valueOf(n); n+; for(int i=星期几+dayAmount;i42;i+)/当月所存在日数之后的都是空标签 dayi=; return day; 3、 数据显示和修改类(CalendarPad.java)import javax.swing.*;import java.awt.*;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六; 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;j7;j+) titlej=new JLabel(); titlej.setFont(new Font(TimesRoman,Font.BOLD,12); /设置标签内容的字体 titlej.setText(星期j); /设置标签内容为上述标签对应的 String【】组的内容 titlej.setHorizontalAlignment(JLabel.CENTER); /设置标签内容居中显示 titlej.setBorder(BorderFactory.createRaisedBevelBorder(); /设置边框 north.add(titlej); /将上述标签添加到north面板中 title0.setForeground(Color.red); title6.setForeground(Color.blue); /设置标签颜色 public void setShowDayTextField(JTextField text) /“日“对应的文本框 showDay=text; for(int i=0;ishowDay.length;i+) showDayi.setFont(new Font(TimesRoman,Font.BOLD,15); showDayi.setHorizontalAlignment(JTextField.CENTER);/设置文本框内容居中显示 showDayi.setEditable(false); /设置文本框不可编辑 center.add(showDayi); /把文本框添加到center面板中 ?这些文本框怎么成矩阵排列的? public void setCalendarMessage(CalendarMessage calendarMessage) this.calendarMessage=calendarMessage; public void showMonthCalendar() String a=calendarMessage.getMonthCalendar(); for(int i=0;i42;i+) showDayi.setText(ai); /设置文本框内容为calendarMessage.getMonthCalendar()函数返回的“日” validate(); /切换到下一个面板进行操作 4、 记事本类(NotePad.java)import java.awt.*;import javax.swing.*;import java.io.*;import java.awt.event.*;public class NotePad 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); showMessage.setForeground(Color.blue); /人本内容颜色 showMessage.setBackground(Color.pink); /文本框背景颜色 showMessage.setBorder(BorderFactory.createRaisedBevelBorder(); /设置边框 showMessage.setEditable(false); /文本框不可编辑 menu=new JPopupMenu(); / itemCopy=new JMenuItem(复制); / 日志 itemCut=new JMenuItem(剪切); / 书写 itemPaste=new JMenuItem(粘贴); / 面板 itemClear=new JMenuItem(清空); / 中的 itemCopy.addActionListener(this); / 鼠标 itemCut.addActionListener(this); / 监听 itemPaste.addActionListener(this); / 功能 itemClear.addActionListener(this); / * * menu.add(itemCopy); / *鼠标菜单功能* menu.add(itemCut); / * * menu.add(itemPaste); / menu.add(itemClear); text=new JTextArea(10,10); /JTextArea()中的10,10表示什么?能输入多少字节? text.addMouseListener(new MouseAdapter() /文本域添加鼠标监听 new MouseAdapter()什么意思? “接收鼠标事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。” public void mousePressed(MouseEvent e) if(e.getModifiers()=InputEvent.BUTTON3_MASK) menu.show(text,e.getX(),e.getY(); /如果鼠标按下右键则获取坐标的并显示菜单 ); setLayout(new BorderLayout(); add(showMessage,BorderLayout.NORTH); /获取年月日的文本框添加到面板 add(new JScrollPane(text),BorderLayout.CENTER); /JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口。 / 可以有一个列标题和一个行标题。 public void setShowMessage(int year,int month,int day) showMessage.setText(+year+年+month+月+day+日); /创建获得年月日的函数, public void save(File dir,int year,int month,int day) /日记的保存! /File文件和目录路径名的抽象表示形式。 日记内容保存路径! String dailyContent=text.getText(); /日记内容为文本域获得的文本内容 String fileName=+year+month+day+.txt; /形成 TXT 格式的文本组 String key=+year+month+day; /TXT文本的获取“钥匙”组 String dayFile=dir.list(); /保存路径中的文本清单列表 boolean boo=false; /判断语句 for(int k=0;kdayFile.length;k+) if(dayFilek.startsWith(key) /清单中寻找“钥匙”,直到获得后跳出循环。 boo=true; break; if(boo) /如果false,表示已有日记内容 String m=+year+年+month+月+day+已有日志,将新的内容添加到日志吗?; int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok=JOptionPane.YES_OPTION) /JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。选择 YES 时从类方法返回的值。 try if(boo) /有日记内容存在的时候 String fileNamen=+year+month+day+.txt; File deleteFile=new File(dir,fileNamen); deleteFile.delete(); /deleteFiled调用JAVA中的清除函数进行清除 else String n=+year+年+month+月+day+无日志记录; JOptionPane.showMessageDialog(this,n,提示,JOptionPane.WARNING_MESSAGE); File f=new File(dir,fileName); RandomAccessFile out=new RandomAccessFile(f,rw);/RandomAccessFile此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。 /rw 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 long fileEnd=out.length(); byte bb=dailyContent.getBytes(); /获取dailyContent.getBytes()中的内容 /FileOutputStream fos = new FileOutputStream(fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 8663:2025 EN Information technology - Brain-computer interfaces - Vocabulary
- 国家能源内江市2025秋招面试专业追问及参考综合管理岗位
- 中国移动铜陵市2025秋招笔试行测经典题及答案
- 中国广电荆州市2025秋招笔试行测题库及答案通信技术类
- 国家能源六盘水市2025秋招面试专业追问及参考综合管理岗位
- 中国广电昌吉回族自治州2025秋招供应链采购类专业追问清单及参考回答
- 防城港市中石油2025秋招面试半结构化模拟题及答案安全环保与HSE岗
- 鞍山市中石油2025秋招面试半结构化模拟题及答案炼油工艺技术岗
- 西安市中石油2025秋招面试半结构化模拟题及答案油品分析质检岗
- 郴州市中储粮2025秋招笔试粮食政策与企业文化50题速记
- 2025离婚起诉状民事诉状(离婚案件用)
- 前端Vue3项目实战教程
- 智算中心高性能计算系统设计方案
- 中央八项规定精神应知应会测试题有答案【夺分金卷】附答案详解
- 2025年茅台酒厂考试试题及答案
- (20250731)房屋市政工程基孔肯雅热、登革热防控检查(自查)表
- 新媒体渠道管理办法
- 2025年浙江省人事考试工作(4月26日事业单位笔试)笔试历年典型考题及考点剖析附带答案详解
- (医疗质量及标准)JCI医院评审标准(第四版)版
- 机械加工工艺与工具知识测试试卷
- 沈阳停车收费管理办法
评论
0/150
提交评论