java课程设计日记本Word文档下载推荐.docx
《java课程设计日记本Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java课程设计日记本Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
1.2.2接口需求
软件功能比较简单,暂时不需要接口方面的需求。
1.3目标软件其他需求
a.运行环境需求:
要求安装JavaDevelopmentKit(JDK)v1.5或以上版本环境。
b.进度要求:
2009年6月底必须完成开发,并通过测试。
2概要设计
本课程设计是一个实用的日记本程序,主要实现日记撰写、按月份、日期分类日记、字体设置、身份认证、音乐播放、背景随机变化等。
一个普通的日记本无需使用数据库,如果要使用数据库则没有适合的数据库可以使用,桌面数据库太小不能满足需求,而其他大型数据库则又昂贵而不合算,所写我要开发的日记将以文本文件(windows下的.txt文件格式)来存储,这样做的好处是显而易见的。
2.1登陆验证
日记是个人的隐私,通常日记的拥有者不希望他人看到自己所写的日记,为了实现基本的保密,程序进行了用户身份认证,来确认是否有权使用。
认证流程如下:
图2-1身份验证功能流程
2.2日记本各部分功能
日记本的基本功能就是撰写日记,对写好的日记要能够进行保存、修改、删除等操作。
这些都是一个日记本所具有的最基本的功能,除此之外本日记本还增加了其他功能。
具体模块功能有:
a编辑日记:
c音乐播放的功能。
d编辑背景变换的功能。
e身份验证的功能。
f日记文件加密存储的功能。
具体功能层出图如下所示:
图2-2日记本层次功能
3详细设计
下面是程序的全部代码与详细注释。
/***************************************
*程序文件名称:
Diary.java
*功能:
日历本
***************************************/
packagediary;
importjavax.swing.*;
importjavax.swing.tree.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.event.*;
importjava.io.*;
importsun.audio.*;
importjava.util.*;
//日记本类
classRememberextendsJFrameimplementsTreeSelectionListener,ActionListener
{
JTreetree=null;
inti=0,r=255,g=255,b=255;
JTextAreatext=newJTextArea("
"
20,30);
DefaultMutableTreeNoderoot;
DefaultMutableTreeNodemonth[]=newDefaultMutableTreeNode[13];
//对象数组
JButtonb_save=newJButton("
保存"
),
b_del=newJButton("
删除"
b_fontCommen=newJButton("
普通"
b_fontBig=newJButton("
大字"
b_fontRed=newJButton("
红色"
b_fontBlue=newJButton("
蓝色"
b_music_on=newJButton("
音乐ON/OFF"
b_music_n=newJButton("
上首"
b_music_p=newJButton("
下首"
b_bg=newJButton("
背景"
);
StringDiaryRoot="
diaries\\"
;
intmusic_on=0,m_now=0;
String[]musics={"
Alone.wav"
"
Dreaming.wav"
dyinginthesun.wav"
EndCredits.wav"
lolita.wav"
Numb.wav"
ThePary.wav"
小茉莉.wav"
};
InputStreamis=null;
//构造方法,完成界面及树结点初始化,音乐文件列表初始化
Remember()
{
Containercon=getContentPane();
DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("
日记本"
//设置以月份为节点的树,不考虑闰年的影响。
for(i=1;
i<
=12;
i++)
month[i]=newDefaultMutableTreeNode("
"
+i+"
月"
root.add(month[i]);
}
//设置不同月份的节点
//处理有31天的月份
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
for(intj=1;
j<
=31;
j++){
Strings1=month[i].toString();
Strings2=j+"
日.txt"
Filefile=newFile(DiaryRoot+s1+s2);
//如果这一天写了日记则相应节点后面添加一个“*”来标志
if(file.exists()==true)
month[i].add(newDefaultMutableTreeNode(j+"
日*"
));
else
日"
//处理有30天的月份
elseif(i==4||i==6||i==9||i==11)
=30;
//处理有28天的月份
else
{
=28;
j++){
//设置监听
b_save.addActionListener(this);
b_del.addActionListener(this);
b_music_on.addActionListener(this);
b_music_n.addActionListener(this);
b_music_p.addActionListener(this);
b_fontRed.addActionListener(this);
b_fontCommen.addActionListener(this);
b_fontBig.addActionListener(this);
b_fontBlue.addActionListener(this);
b_bg.addActionListener(this);
//创建树及其面板
tree=newJTree(root);
JPanelp=newJPanel();
//设置边界布局
p.setLayout(newBorderLayout());
JScrollPanescrollpane_1=newJScrollPane(text);
//带滚动条的面板放置到中间,可以占据最大空间位置
p.add(scrollpane_1,BorderLayout.CENTER);
//设置面板,放置"
和"
按钮等按钮,面板放在上部
JPanelp_1=newJPanel();
p_1.add(b_save);
p_1.add(b_del);
p_1.add(b_fontCommen);
p_1.add(b_fontBig);
p_1.add(b_fontRed);
p_1.add(b_fontBlue);
p_1.add(b_music_on);
p_1.add(b_music_n);
p_1.add(b_music_p);
p_1.add(b_bg);
//设置布局
p.add(p_1,BorderLayout.NORTH);
JScrollPanescrollpane_2=newJScrollPane(tree);
JSplitPanesplitpane=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,scrollpane_2,p);
tree.addTreeSelectionListener(this);
con.add(splitpane);
//设置窗体适配器,关闭功能
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}});
setVisible(true);
setBounds(100,150,500,600);
//处理树节点事件
publicvoidvalueChanged(TreeSelectionEvente)
//清空文本区中的内容
text.setText("
if(e.getSource()==tree)
//定义被选中的节点
DefaultMutableTreeNodenode=
(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
//如果是叶节点,则可以对文件进行操作
if(node.isLeaf())
//日记以“-月-日.txt”的形式存储,所以要消除“*”号的影响
Stringstr=node.toString();
str=str.substring(0,str.length()-1);
for(inti=0;
if(node.getParent()==month[i])
try{
Stringtemp=null;
//打开以节点(“*”号影响已经消除)所定义的文本为文件名的文件
Filef=newFile(DiaryRoot+node.getParent().toString()+str+"
.txt"
//建立文本文件输入流,读取文件
FileReaderfile=newFileReader(f);
BufferedReaderin=newBufferedReader(file);
//将读到的文件内容添加到文本区中,按行读入
while((temp=in.readLine())!
=null)
text.append(temp+'
\n'
file.close();
in.close();
catch(FileNotFoundExceptione1){}
catch(IOExceptione1){}
}
//处理按钮事件
publicvoidactionPerformed(ActionEvente)
//处理"
按钮的事件
if(e.getSource()==b_save)
//保存文件时去除“*”号
str=str.replace("
*"
"
//保存文件
try{
//建立以节点所定义的文本为文件名的文件
//建立文本文件输出流
FileWritertofile=newFileWriter(f);
BufferedWriterout=newBufferedWriter(tofile);
//将文本区中的内容写到文件缓冲区
out.write(text.getText(),0,(text.getText()).length());
//将缓冲区中的内容写到文件
out.flush();
tofile.close();
out.close();
//处理点出"
elseif(e.getSource()==b_del)
//删除文件时消除“*”好影响
//把删除命令写到一个批处理文件中
FileWritertofile=newFileWriter("
del.bat"
Stringtemp1="
del"
+f.getAbsoluteFile().toString();
out.write(temp1,0,temp1.length());
out.newLine();
catch(IOExceptione1){}
//调用执行删除文件的方法,del()执行上面创建的批处理文件del.bat
del();
//处理"
按钮事件
elseif(e.getSource()==b_fontBig)
text.setFont(newFont("
Serif"
1,18));
elseif(e.getSource()==b_fontCommen)
0,12));
text.setForeground(Color.black);
elseif(e.getSource()==b_fontRed)
text.setForeground(Color.red);
elseif(e.getSource()==b_fontBlue)
text.setForeground(Color.blue);
音乐ON"
elseif(e.getSource()==b_music_on)
//判断音乐开关变量music_on
if(music_on==0)music_on=1;
elseif(music_on==1)music_on=0;
try
{
//如果正在播放时被按下,就停止当前正在播放的音乐
AudioPlayer.player.stop(is);
//用输入流创建一个AudioStream对象,并打开给对象
is=getClass().getResource("
sounds\\"
+musics[m_now]).openStream();
if(music_on==1)
{
//播放音乐,播放完毕后关闭
AudioPlayer.player.start(is);
while(is==null)
AudioPlayer.player.stop(is);
}
}
catch(IOExceptione1){}
、"
if(e.getSource()==b_music_n)
//实现循环,当到达最后时可以返回到第一个音乐
m_now=(m_now+1)%6;
//关闭正在播放的音乐,重新创建并播放新的音乐
AudioPlayer.player.stop(is);
if(e.getSource()==b_music_p)
m_now=(m_now-1)%6;
is=getClass().getResource("
elseif(e.getSource()==b_bg)
//随机变化背景颜色
//随机+-操作,当op>
0.5时做减法负责做加法,
doubleop=Math.random();
doublec=Math.random()*10;
if(op>
0.5)
//使r,g,b三个标志RGB的变量减小一个随机的大小小在0-50之间的数
if(c<
4)r-=Math.random()*50;
if(c>
4&
&
c<
7)g-=Math.random()*50;
7)b-=Math.random()*50;
if(op<
=0.5)
//使r,g,b三个标志RGB的变量增加一个随机的大小小在0-50之间的数
if(c<
text.setBackground(newColor(r,g,b));
//删除文件
voiddel()
//