




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计课程设计报告题 目: 电子日历记事本的设计 院 (系): 信息科学与工程学院 专业班级: 计算机科学与技术1201班 学生姓名: 程伟 学 号: 20121183011 指导教师: 吴奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制 面向对象程序设计 课程设计任务书一、设计(调查报告/论文)题目 电子日历记事本的设计二、设计(调查报告/论文)主要内容内容: 设计GUI界面的日历记事本,系统将记事本与日历相结合,可在任何时间记载编辑或查看相关内容日志,系统可实现基本的辅助办公与行政管理。 基本功能与要求: 设计记事本编辑器程序,所有编辑功能可以在菜单栏中选择,包括编辑、保存、打开、剪切、复制等操作,能打开和显示已存在的文本文件,界面设计要求采用类组件实现。 设计日历系统,要求用图形用户界面实现,用户可以方便地在任何日期编辑有关内容以及查看某个日期记载的内容。日历可以按年/月前后翻动,当鼠标单击“上一年/上一月”按钮时,当前日历的年份/月份将减一;当鼠标左键单击“下一年/下一月”按钮,当前日历的年份/月份将加一。 使用鼠标左键在要选择的日期上单击,如有记事内容,程序将弹出对话框提示用户是否用记事本显示该内容或编辑新内容,同时可将记事本的新内容保存起来,形成一个日志供用户日后使用。 设计用户密码功能或对信息内容加密,提高系统的安全性。三、原始资料1.面向对象程序设计课程设计指导书2. 耿祥义JAVA大学实用教程北京:清华大学出版社,2009四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:清华大学出版社,20094 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20 年 月 日目 录1需求与总体设计11.1需求分析11.2总体设计思路11.2.1功能图11.2.2类图22详细设计.32.1 CalendarPad类说明32.2 Year类说明32.3 Month 类模块42.4 NotePad类说明43编码实现63.1 CalendarPad模块63.2 Year模块113.3 Month 模块143.4 NotePad模块164系统运行与测试234.1程序主界面234.2日志查看无日志234.3建立日志244.4日志查看有日志244.5删除日志26总结271需求与总体设计1.1需求分析根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行记录的功能,设计出简洁方便美观的GUI界面。将本程序主界面可以分为四个部分:日历日期信息展示、年份、月份、记事本内容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendarPad创建动日历记事本软件的主界面,且该类中含有main方法,程序从该类开始执行。再用余下的year、mouth、NotePad类来显示并改变日期和实现记事本的功能。 1.2总体设计思路1. 可以编辑日历的日期2. 可以判断当前日期是否存在日志记录3. 对有日志记录的日期,可以对该日期的日志记录进行修改和删除4. 对没有日志记录的日期,可以创建并保存新建的日志记录5. 对保存的日志加密,查看时得输入密码1.2.1功能图 1.2.2类图2详细设计2.1 CalendarPad类说明该模块设计主要主要包含以下成员变量:年(year) 月(month)日(day)存放日期的表(Hashtable)存放日志的文件(File)主要方法有:创建程序主面板的构造方法(CalendarPad)处理ActionEvent事件的接口方法(actionPerformed)程序开始运行的main()方法。表1 日历记事本系统主面板与日历板模块(CalendarPad.java)类名CalendarPadpublic接口MouseListenerpublic方法CalendarPad(int,int,int)设置日历牌(int,int)排列号码(int,int)main()publicpublic voidpublic voidpublic static void2.2 Year类说明该模块用于实现日历记事本系统中关于年的设置模块中包含的主要成员变量有用于改变年的按钮(Jbutton 明年 去年),显示年的文本框(JTextField)模块中包含的主要方法有用于设置年的方法(setYear),用于获取年的方法(getYear)和处理ActionEvent事件的接口方法(actionPerformed)等表2 日历记事本系统年设置模块(Year.java)类名Yearpublic接口ActionListenerpublic方法setYear()getYear()actionPerformed(ActionEvent e)public voidpublic intpublic void2.3 Month 类模块该模块用于实现日历记事本系统中关于月的设置模块中包含的主要成员变量有用于改变月的按钮(Jbutton 上月 下月),显示月的文本框(JTextField)模块中包含的主要方法有用于设置月的方法(setMonth),用于获取月的方法(getMonth)和处理ActionEvent事件的接口方法(actionPerformed)等表3 日历记事本系统月设置模块(Month.java)类名Monthpublic接口ActionListenerpublic方法setMonth()getMonth()actionPerformed(ActionEvent e)public voidpublic intpublic void2.4 NotePad类说明该模块中包含的主要成员变量有文本框(JTextArea),按钮(JButton 保存日志 删除日志),用于存放日志记录的文件(File)以及响应相关操作的信息提示(JLabel)该模块中包含的主要方法有设置信息条,设置文本区,获取日志内容,保存日志,删除日志表4 日历记事本系统记事本模块(NotePad.java)类名NotePadpublic接口ActionListenerpublic方法设置信息条()设置文本区()获取日志内容()保存日志()删除日志()public voidpublic voidpublic voidpublic voidpublic void3编码实现源代码import java.util.Calendar;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.Hashtable;import java.util.*;import javax.swing.event.*;public class CalendarPad extends JFrame implements MouseListenerint year,month,day; /定义全局变量的三个属性Hashtable hashtable; File file; /定义一个文件变量JTextField showDay; /定义一个文本框组数 JLabel title;Calendar 日历;int 星期几; NotePad notepad=null; /定义一个NotePad对象,必须先给其处置null才能在下面使用Month 负责改变月;Year 负责改变年;String 星期=SUN,MON,TUE,WED,THU,FRI,SAT; /日历表的文字显示JPanel leftPanel,rightPanel; /定义左右两个面板,左边用来显示日历,右边用来显示记事本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; /设置year的值this.month=month;this.day=day;负责改变年=new Year(this); /将当前对象的所有操作和属性赋值给year,使Year类的对象可以进行相应的操作负责改变年.setYear(year);负责改变月=new Month(this);负责改变月.setMonth(month);title=new JLabel7; /创建一个标签数组 showDay=new JTextField42; /显示每一天的文本框数组,表示共有42个文本框,每个文本框显示一天for(int j=0;j7;j+)titlej=new JLabel();titlej.setText(星期j);titlej.setBorder(BorderFactory.createRaisedBevelBorder(); /显示每一天的文本框数组,表示共有42个文本框,每个文本框显示一leftCenter.add(titlej);title0.setForeground(Color.blue);title6.setForeground(Color.blue);for(int i=0;i42;i+)showDayi=new JTextField(); /创建显示每一天的文本框showDayi.addMouseListener(this); /注册鼠标事件监听器showDayi.setEditable(false); /设置为不可编辑,即用户不能在此文本框里编辑文本,只能用来显示内容leftCenter.add(showDayi); /将文本框添加到中心面板 日历=Calendar.getInstance(); /调用Calendar的getInstance的方法获取默认时区和语言环境获得一个日历Box box=Box.createHorizontalBox();box.add(负责改变年);box.add(负责改变月);leftNorth.add(box); /在此面板中放入查询的按钮以及输入和显示年月的文本框leftPanel.setLayout(new BorderLayout(); /设置左面板的布局方式leftPanel.add(leftNorth,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(split,BorderLayout.CENTER);con.validate();hashtable=new Hashtable();file=new File(日历记事本.txt);if(!file.exists() /如果文件不存在 tryFileOutputStream out=new FileOutputStream(file); /将文件内容保存在电脑上ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(hashtable); /将内容加密保存.objectOut.close();out.close();catch(IOException 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,600,285);/设置边界大小validate();public void 设置日历牌(int year,int month)日历.set(year,month-1,1);星期几=日历.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 月天数)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);elseshowDayi.setFont(new Font(TimesRoman,Font.BOLD,12);showDayi.setForeground(Color.black);if(i%7=6)showDayi.setForeground(Color.blue);if(i%7=0)showDayi.setForeground(Color.blue);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.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();tryday=Integer.parseInt(source.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)public static void main(String args)Calendar calendar=Calendar.getInstance(); /调用Calendar的getInstance的方法获取默认时区和语言环境获得一个日历 int y=calendar.get(Calendar.YEAR); /返回给定日历字段的值 int m=calendar.get(Calendar.MONTH)+1; /因为第一个月分时从0开始的,故显示月份的时候要+1,否则显示的结果就少一个月 int d=calendar.get(Calendar.DAY_OF_MONTH); /返回给定日历字段的值 new CalendarPad(y,m,d); /此构造函数默认显示的是当前系统下的日历 class Year extends Box implements ActionListenerint year; /定义一个int型的变量,用来存储当前系统的年份 JTextField showYear=null; /定义一个显示当前年份的文本框 JButton 明年,去年; /定义两个实现显示上一年和下一年的按钮CalendarPad 日历; /定义一个CalendarPad的全局变量public Year(CalendarPad 日历) /有参构造函数获取从CalendarPad类传递的对象参数super(BoxLayout.X_AXIS);showYear=new JTextField(4); /定义设置显示年份的长度为4showYear.setForeground(Color.blue);showYear.setFont(new Font(TimesRomn,Font.BOLD,14);this.日历=日历; /将当前方法的变量传值给全局变量,供其他方法使用year=日历.getYear(); /调用当前系统的年份并赋值给year明年=new JButton(下年);去年=new JButton(上年);add(去年); /添加按钮到窗体add(showYear);add(明年);showYear.addActionListener(this); /注册监听器去年.addActionListener(this);明年.addActionListener(this);public void setYear(int year)this.year=year;showYear.setText(+year); /设置文本框内容为year的值public int getYear()return year;public void actionPerformed(ActionEvent e)if(e.getSource()=去年)year=year-1;showYear.setText(+year);日历.setYear(year);日历.设置日历牌(year,日历.getMonth();else if(e.getSource()=明年)year=year+1;showYear.setText(+year);日历.setYear(year);日历.设置日历牌(year,日历.getMonth();else if(e.getSource()=showYear)tryyear=Integer.parseInt(showYear.getText();showYear.setText(+year);日历.setYear(year);日历.设置日历牌(year,日历.getMonth();catch(NumberFormatException ee)showYear.setText(+year);日历.setYear(year);日历.设置日历牌(year,日历.getMonth();class Month extends Box implements ActionListenerint 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);showMonth.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;elsethis.month=1;showMonth.setText(+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 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);class NotePad extends JPanel implements ActionListenerJTextArea text;JButton 保存日志,删除日志;Hashtable table;JLabel 信息条;int year,month,day;File file; CalendarPad calendar;public NotePad(CalendarPad calendar)this.calendar=calendar;year=calendar.getYear();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(保存日志);删除日志=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 actionPerformed(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 setDay(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;tryFileInputStream inOne=new FileInputStream(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) String str = JOptionPane.showInputDialog(null,请输入密码,消息对话框,JOptionPane.INFORMATION_MESSAGE); long num = Integer.parseInt(str); if(num!=123456) JOptionPane.showInputDialog(this,密码不正确!,确认对话框,JOptionPane.WARNING_MESSAGE); else if(num=123456) int n =JOptionPane.showConfirmDialog(this,确认正确吗?,确认对话框,JOptionPane.YES_NO_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;String m=+year+年+month+月+day+保存日志吗?;int ok=JOptionPane.showConfirmDialog(this,m,询问,JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok=JOptionPane.YES_OPTION)tryFileInputStream inOne=new FileInputStream(file);ObjectInputStream inTwo=new ObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();table.put(key,日志内容);FileOutputStream out=new FileOutputStream(file);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();out.close();catch(Exception ee)public void 删除日志(int year,int month,int day)String key=+year+month+day;if(table.containsKey(key)String m=删除+year+年+month+月+day+日的日志吗?;int ok
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合成气梭菌发酵乙醇的机制、现状与前景探析
- 合作学习赋能:普通高中英语词汇教学的创新与实践
- 教师招聘之《小学教师招聘》综合提升测试卷带答案详解(培优b卷)
- 2025年教师招聘之《幼儿教师招聘》题库综合试卷附参考答案详解(考试直接用)
- 2025年教师招聘之《幼儿教师招聘》测试卷附参考答案详解【预热题】
- 2025年公务员时事政治试题库附参考答案详解(培优a卷)
- 教师招聘之《小学教师招聘》通关模拟卷附参考答案详解(典型题)
- 教师招聘之《小学教师招聘》考前冲刺练习题库提供答案解析【历年真题】附答案详解
- 2025年教师招聘之《小学教师招聘》考试题库附参考答案详解【考试直接用】
- 2025内蒙古呼伦贝尔东北阜丰生物科技有限公司招聘8人笔试备考及完整答案详解一套
- 二年级语文上册《有趣的动物》课件PPT
- 不干胶贴标机设计学士学位论文
- 《劳动合同书》-河南省人力资源和社会保障厅劳动关系处监制(2016.11.15)
- 钢轨检测报告
- 战略管理:概念与案例
- GB/T 3505-2009产品几何技术规范(GPS)表面结构轮廓法术语、定义及表面结构参数
- GB/T 11186.1-1989涂膜颜色的测量方法第一部分:原理
- 09S304 卫生设备安装图集
- 功能材料概论-课件
- 微纳加工课件
- 危重病人紧急气道管理课件
评论
0/150
提交评论