电子日历记事本--Java课程设计

更新时间:2024-05-01 06:51:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《 面向对象程序设计》

课程设计报告

题 目: 电子日历记事本的设计 院 (系): 信息科学与工程学院 专业班级: 计算机科学与技术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大学实用教程.北京:清华大学出版社,2009. [4] 邹林达.陈国君 Java2程序设计基础.北京:清华大学出版社,2010. [5] 邹林达.Java2程序设计基础实验指导.北京:清华大学,2010. 指导教师(签名): 20 年 月 日

目 录

1需求与总体设计 .......................................................... 1 1.1需求分析 .............................................................. 1 1.2总体设计思路 .......................................................... 1 1.2.1功能图 .............................................................. 1 1.2.2类图 ................................................................ 2 2详细设计.................................................................3 2.1 CalendarPad类说明 .................................................... 3 2.2 Year类说明 ........................................................... 3 2.3 Month 类模块 .......................................................... 4 2.4 NotePad类说明 ........................................................ 4 3编码实现 ................................................................ 6 3.1 CalendarPad模块 ..................................... 错误!未定义书签。 3.2 Year模块 ............................................ 错误!未定义书签。 3.3 Month 模块 ........................................... 错误!未定义书签。 3.4 NotePad模块 ......................................... 错误!未定义书签。 4系统运行与测试 ......................................................... 20 4.1程序主界面 ........................................................... 20 4.2日志查看——无日志 ................................................... 20 4.3建立日志 ............................................................. 21 4.4日志查看——有日志 ................................................... 21 4.5删除日志 ............................................................. 23 总结 ..................................................................... 24

1需求与总体设计

1.1需求分析

根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行记录的功能,设计出简洁方便美观的GUI界面。

将本程序主界面可以分为四个部分:日历日期信息展示、年份、月份、记事本内容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendarPad创建动日历记事本软件的主界面,且该类中含有main方法,程序从该类开始执行。再用余下的year、mouth、NotePad类来显示并改变日期和实现记事本的功能。

1.2总体设计思路

1. 可以编辑日历的日期

2. 可以判断当前日期是否存在日志记录

3. 对有日志记录的日期,可以对该日期的日志记录进行修改和删除 4. 对没有日志记录的日期,可以创建并保存新建的日志记录 5. 对保存的日志加密,查看时得输入密码 1.2.1功能图

电子日历记事本的系统记事本编辑器日历系统密码查看日志编辑日志编辑日期

1

1.2.2类图

Month-year-month-day+Month()+setMonth()+getMont()+actionPerformed()Year-year-month-day+Year()+setYear()+getYear()+actionPerformed()Calendarpad- year- month- day-file-calendarPad-showYear-showMonth-week+CalendarPad()+设置日历牌()+排列号码()+getYear()+setYear()+getMonth()+setMonth()+getDay()+setDay()+getHashtable()+mousePressed()+main()Notepad-text-file-delte-save-year-month-day+notepad()+actionPerforme()+setYear()+setMonth()+getMonth()+setDay()+设置信息条()+获取日志内容()+保存日志()+删除日志()2

2详细设计

2.1 CalendarPad类说明

该模块设计主要主要包含以下成员变量:

年(year) 月(month) 日(day)

存放日期的表(Hashtable) 存放日志的文件(File)

创建程序主面板的构造方法(CalendarPad)

处理ActionEvent事件的接口方法(actionPerformed) 程序开始运行的main()方法。

表1 日历记事本系统主面板与日历板模块(CalendarPad.java)

主要方法有:

类名 接口 CalendarPad MouseListener CalendarPad(int,int,int) public public public public void public void public static void 方法 设置日历牌(int,int) 排列号码(int,int) main() 2.2 Year类说明

该模块用于实现日历记事本系统中关于年的设置

模块中包含的主要成员变量有用于改变年的按钮(Jbutton 明年 去年),显示年的文本框(JTextField)

模块中包含的主要方法有用于设置年的方法(setYear),用于获取年的方法(getYear)和处理ActionEvent事件的接口方法(actionPerformed)等

3

表2 日历记事本系统年设置模块(Year.java)

类名 Year 接口 ActionListener setYear() 方法 getYear() actionPerformed(ActionEvent e) public public public void public int public void 2.3 Month 类模块

该模块用于实现日历记事本系统中关于月的设置

模块中包含的主要成员变量有用于改变月的按钮(Jbutton 上月 下月),显示月的文本框(JTextField)

模块中包含的主要方法有用于设置月的方法(setMonth),用于获取月的方法(getMonth)和处理ActionEvent事件的接口方法(actionPerformed)等

表3 日历记事本系统月设置模块(Month.java)

类名 Month 接口 ActionListener setMonth() 方法 getMonth() actionPerformed(ActionEvent e) public public public void public int public void 2.4 NotePad类说明

该模块中包含的主要成员变量有文本框(JTextArea),按钮(JButton 保存日志 删除日志),用于存放日志记录的文件(File)以及响应相关操作的信息提示(JLabel)

该模块中包含的主要方法有设置信息条,设置文本区,获取日志内容,保存日志,删除日志

4

表4 日历记事本系统记事本模块(NotePad.java)

类名 NotePad 接口 ActionListener 设置信息条() 设置文本区() 方法 获取日志内容() 保存日志() 删除日志() public public public void public void public void public void public void 5

3编码实现

源代码

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 MouseListener { int year,month,day; //定义全局变量的三个属性 Hashtable hashtable; File file; //定义一个文件变量 JTextField showDay[]; //定义一个文本框组数 JLabel title[]; Calendar 日历; int 星期几; NotePad notepad=null; //定义一个NotePad对象,必须先给其处置null才能在下面使用 Month 负责改变月; Year 负责改变年; String 星期[]={\

//日历表的文字显示 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);

6

明年=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的值 }

public int getYear() {

return year; }

public void actionPerformed(ActionEvent e) {

if(e.getSource()==去年) {

year=year-1;

showYear.setText(\ 日历.setYear(year);

日历.设置日历牌(year,日历.getMonth()); }

else if(e.getSource()==明年) {

year=year+1;

showYear.setText(\ 日历.setYear(year);

日历.设置日历牌(year,日历.getMonth()); }

else if(e.getSource()==showYear) {

try { year=Integer.parseInt(showYear.getText()); showYear.setText(\ 日历.setYear(year); 日历.设置日历牌(year,日历.getMonth());

12

} catch(NumberFormatException ee) { showYear.setText(\ 日历.setYear(year); 日历.设置日历牌(year,日历.getMonth()); } } } }

class Month extends Box implements ActionListener { int 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(\ 下月=new JButton(\下月\ 上月=new JButton(\上月\ add(上月); add(showMonth); add(下月); 上月.addActionListener(this); 下月.addActionListener(this); showMonth.setText(\ } public void setMonth(int month) { if(month<=12&&month>=1) { this.month=month; } else

13

{

this.month=1; }

showMonth.setText(\}

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(\ }

else if(e.getSource()==下月) {

if(month<12) { month=month+1; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); }

else if(month==12) { month=1; 日历.setMonth(month); 日历.设置日历牌(日历.getYear(),month); }

showMonth.setText(\ }

14

} }

class NotePad extends JPanel implements ActionListener { JTextArea 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(\年\月\日\ 信息条.setFont(new Font(\ 信息条.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);

15

}

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(\年\月\日\}

public void 设置文本区(String s) {

16

text.setText(s); } public void 获取日志内容(int year,int month,int day) { String key=\ try { FileInputStream 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=\年\月\这一天有日志记载,想看吗?\ int ok=JOptionPane.showConfirmDialog(this,m,\询问\

JOptionPane.QUESTION_MESSAGE); if(ok==JOptionPane.YES_OPTION) {

String str = JOptionPane.showInputDialog(null,\请输入密码\消息对话框\

long num = Integer.parseInt(str); if(num!=123456){ JOptionPane.showInputDialog(this,\密码不正确!\确认对话框\ } else if(num==123456){ int n =JOptionPane.showConfirmDialog(this,\确认正确吗?\确认对话框\ text.setText((String)table.get(key)); } } else

{ text.setText(\ } } else

{ text.setText(\无记录\ }

17

} public void 保存日志(int year,int month,int day) { String 日志内容=text.getText(); String key=\ String m=\年\月\保存日志吗?\ int ok=JOptionPane.showConfirmDialog(this,m,\询问

\ if(ok==JOptionPane.YES_OPTION) { try { FileInputStream 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=\ if(table.containsKey(key)) { String m=\删除\年\月\日的日志吗?\ int ok=JOptionPane.showConfirmDialog(this,m,\询问

\ if(ok==JOptionPane.YES_OPTION) { try { FileInputStream inOne=new FileInputStream(file); ObjectInputStream inTwo=new ObjectInputStream(inOne);

18

table=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); table.remove(key); FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(table); objectOut.close(); out.close(); text.setText(null); } catch(Exception ee) {} } } else { String m=\年\月\无日志记录\ JOptionPane.showMessageDialog(this,m,\提示\ } } }

19

4系统运行与测试

4.1程序主界面

图1 日历记事本系统主界面

4.2日志查看——无日志

图2 无日志界面

20

4.3建立日志

图3 保存日志

4.4日志查看——有日志

图3有日志

21

图4密码登陆

图5 查看到日志内容

22

4.5删除日志

图6删除日志界面

23

总结

经过这一次的设计,总体来说收获还是不小.刚刚开始学习Java语言的时候也曾经想过利用所学的知识来做些真东西.之前用过C语言编写过一些程序,但C语言与Java之前差异比较大,而Java语言对我来说是个新事物,对Java了解不是十分深刻,用起来也不能得心应手.但是此次的设计让我对Java有了更深刻的认识和了解,通过亲手编写Java程序不仅大大的提高了我的动手能力,更让我从更深一层来了解Java语言.尽管如此,但Java中可发掘的东西太多了,一个小小的程序不可能将全部的内容都展现出来.因此对Java,我依然还有许多不明白的地方.这将在之后的学习中进行更深层次的学习. 与指导书上的程序相比,我做出的程序要简单得多.将书上的6个类简化为4个.本来计划添加一个背景音乐,结果在调用时才发现类型不同,能力有限,调用不了,在网上找了找了很多解决办法,但是最后还是行不通,左后还是放弃了.虽然程序简单,但当程序通过编译并成功运行的时候依然让我兴奋不已.程序虽小,但其中所包含的不仅仅是一些代码.它也是对我这段时间学习的肯定.虽然这个程序成功了,但是这个过程也十分坎坷.在写代码的时候经常出现手误导致编译无法通过,这些细节都是因为平时动手不够多,编写程序不够熟练导致的,在以后的学习中也要加强动手能力,多实践.这样才能从各个方面来提高自己的水平.

24

课程设计成绩评定表

项 目 比例 得 分 成 绩 平时成绩(百分制记分) 30% 业务考核成绩(百分制记分) 70% 评 定 总评成绩(百分制记分) 100% 评定等级 指导教师(签名): 优 良 中 及格 不及格 20 年 月 日

25

本文来源:https://www.bwwdw.com/article/9jqg.html

Top