java个人记事本总结报告Word格式文档下载.docx
《java个人记事本总结报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java个人记事本总结报告Word格式文档下载.docx(55页珍藏版)》请在冰点文库上搜索。
2.1程序的基本功能
1.系统界面的左侧是日历。
该日历可以按年份前后翻动,鼠标单击“上年”按钮时,当前的日历的年份减一;
当鼠标左键单击“下年”按钮,当前日历年份加一。
2.该日历也可以在某年内按月前后翻动,鼠标单击“上月”按钮时,当前的日历的月份减一;
当鼠标左键单击“下月”按钮,当前日历月份加一。
3.使用鼠标左键单击选定的日期,如已有记录内容,系统将弹出对话框提示该日已有记录内容,并询问用户是否用记事本显示该内容。
4.当用户不想继续操作当前事件时,可以点击删除按钮加以删除。
2.2输入输出要求
其他要求:
用户可以方便地在任何日期记录下有关内容或查看某个日期的记录内容。
通过按按钮“上年”和“下年”对年份进行翻页。
通过按按钮“上月”和“下月”对月份进行翻页,以及对时间的操作。
如果到达预期的时间会自动弹出对话框提醒用户进行下一步操作。
在弹出的对话框中用户可以对当前事件加以编辑操作。
2.3测试数据
1)测试数据1:
a、aa、2010/05/05、05:
30:
30
2)测试数据2:
b、bb、201106/06、06:
3)测试数据3:
c、cc、2012/07/07、07:
2.4设计方案
3项目概要设计
3.1抽象数据类型的定义
String[]show=newString[1000];
3.2模块组成
1)主程序模块
publicclassMain{
publicstaticvoidmain(String[]args){
Timedatat=newTimedata();
Souls=newSoul();
while(true){
t.setDeadline();
}
}
}
2)输入模块
fp.createNewFile();
FileInputStreamfin=newFileInputStream(fp);
ObjectInputStreamoin=newObjectInputStream(fin);
p=(Case)oin.readObject();
fin.close();
oin.close();
3)背景图标模块
//加载窗体图标图像
Imageicon=Toolkit.getDefaultToolkit().getImage("
/small.jpg"
);
//设置窗体图标
this.setIconImage(icon);
//设置窗体的关闭动作、标题、大小位置以及可见性
this.setTitle("
Soul是这个窗口的类"
this.setBounds(0,0,WIDTH,HEIGHT);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
4)输出模块
FileOutputStreamfout=newFileOutputStream(fp);
ObjectOutputStreamoout=newObjectOutputStream(fout);
oout.writeObject(a);
oout.close();
fout.close();
程序结构图:
4项目详细设计
本部分主要描述自己所做项目主要模块的详细设计的主要内容。
指出程序开发过程中主要模块的实现技术、数据结构及关键程序函数之间调用关系。
4.1数据类型的定义
无
4.2各函数的伪码算法
1)主函数
publicstaticvoidmain(String[]args){
//时间的类
//窗口
}2)输入函数
a.Name=record.getText();
//获取文本框内容
a.Summary=detail.getText();
//获取文本域内容
publicvoidstateChanged(ChangeEvente)//由微调模型空间完成时间设定
{
Casea=newCase();
//获取选择的年
a.y=((Integer)(js[0].getValue())).intValue();
//获取选择的月
a.m=((Integer)(js[1].getValue())).intValue();
//获取选择的日
a.d=((Integer)(js[2].getValue())).intValue();
//更新结果显示标签的内容
a.hh=((Integer)(js1[0].getValue())).intValue();
a.mm=((Integer)(js1[1].getValue())).intValue();
a.ss=((Integer)(js1[2].getValue())).intValue();
//jlResult.setText("
您设定的日期为:
"
+year+"
年"
+month+"
月"
+day+"
日时间为:
+hour+"
时"
+munite+"
分"
+second+"
秒"
newFiles().fSave("
新建记事本"
a);
3)加法函数
publicvoidfSave(Stringfname,Casea){
try{
Filefc=newFile("
MyRecord"
fc.mkdir();
Filefp=newFile(fc,fname);
//创建该文件
fp.createNewFile();
catch(IOExceptione){}
}
4)输出函数
publicFind(Stringname){
Name=name;
Casea=newFiles().fOpen(name);
//this.setOpaque(false);
//将contentPane设置成透明
this.setLayout(newGridLayout(4,1));
this.setBounds(300,400,300,300);
JPanelrecordPanel=newJPanel();
recordPanel.setLayout(newBorderLayout());
recordPanel.setBackground(Color.LIGHT_GRAY);
record=newJTextField(40);
record.setText(a.Name);
recordPanel.add(record,BorderLayout.SOUTH);
JLabelrecordLabel=newJLabel(name);
recordPanel.add(recordLabel,BorderLayout.CENTER);
//recordPanel.setBounds(400,200,100,100);
this.add(recordPanel);
JPaneldetailPanel=newJPanel();
detailPanel.setLayout(newBorderLayout());
detailPanel.setBackground(Color.WHITE);
detail=newJTextArea(8,15);
detail.setText(a.Summary);
detailPanel.add(detail,BorderLayout.SOUTH);
JLabeldetailLabel=newJLabel("
详情:
detailPanel.add(detailLabel,BorderLayout.CENTER);
//detailPanel.setBounds(400,500,100,100);
this.add(detailPanel);
JPaneltimePanel=newJPanel();
timePanel.setLayout(newBorderLayout());
timePanel.setBackground(Color.LIGHT_GRAY);
Casexx=newFiles().fOpen(name);
time=newTimec(xx.y,xx.m,xx.d,xx.hh,xx.mm,xx.ss);
this.add(time);
JPanelendPanel=newJPanel();
endPanel.setBackground(Color.LIGHT_GRAY);
for(inti=0;
i<
jbFind.length;
i++){
endPanel.add(jbFind[i]);
jbFind[i].addActionListener(this);
this.add(endPanel);
this.setBounds(400,0,WIDTH,HEIGHT);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
4.3各函数间的调用关系
各个函数之间的调用关系如图4-1所示。
图4-1函数之间的调用关系图
5调试分析
5.1问题1
5.1.1问题描述
时间表分布紊乱,不能正常显示有文件丢失现象。
5.1.2解决方案
对所有菜单项进行注册监听。
当进行除保存以外的菜单项的功能外,在actionPerformed中要编写判断界面是否已经打开或者编辑了文件,如果是,在进行别的功能之前,先对本文件的保存功能,以免文件的丢失。
在具体实现中可以用变量i来判断文件是否处于保存状态。
5.1.3解决结果
窗口正常显示。
5.2问题2
5.2.1问题描述
注释与窗口重叠
5.2.2解决方案
调整布局器并设定边界布局,更改XY坐标。
5.2.3解决结果
6使用说明及测试结果
6.1使用说明
打开本应用程序,通过添加删除等按钮编辑日常行程安排,并加以保存删除。
用户可以根据自己的需要添加任意时间任意地点的安排,画面美观,方便使用。
6.2测试方案及结果
1.打开主界面,鼠标移动至桌面左侧,查看功能选项。
2.选定一个日期写日志。
3.对日历添加,删除日志。
4.修改年份,查看一些日志。
下图为时间窗口的显示情况:
下图为更改时间并保存:
7源代码及可执行程序
packageMyNotePad;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
importjava.util.*;
importjavax.swing.event.*;
//定义该类继承自JFrame
publicclassSoulextendsJFrameimplementsActionListener
{
privateintWIDTH=1366;
privateintHEIGHT=786;
publicclassTimecextendsJPanelimplementsChangeListener
inty,m,d,hh,mm,ss;
Timetime=newTime();
//创建JPanel容器
privateJPaneljp=newJPanel();
//创建三个标签的标签数组
privateJLabel[]jlArray=newJLabel[]{newJLabel("
年:
),newJLabel("
月:
日:
)};
privateJLabel[]jlArray1=newJLabel[]{newJLabel("
时:
分:
秒:
//创建标签
JTextFieldjlResult=newJTextField();
//("
您设定的日期为:
+time.y+"
+time.m+"
+time.d+"
+time.hh+"
+time.mm+"
+time.ss+"
//创建ArrayList对象
privateArrayList<
String>
al=newArrayList<
();
//创建三个微调模型
privateSpinnerNumberModelsnm1=newSpinnerNumberModel(time.y,2000,3000,1);
privateSpinnerNumberModelsnm2=newSpinnerNumberModel(time.m,1,12,1);
privateSpinnerNumberModelsnm3=newSpinnerNumberModel(time.d,1,31,1);
privateSpinnerNumberModels1=newSpinnerNumberModel(time.hh,0,23,1);
privateSpinnerNumberModels2=newSpinnerNumberModel(time.mm,0,60,1);
privateSpinnerNumberModels3=newSpinnerNumberModel(time.ss,0,60,1);
//创建微调控件数组
privateJSpinner[]js={newJSpinner(snm1),newJSpinner(snm2),newJSpinner(snm3)};
privateJSpinner[]js1={newJSpinner(s1),newJSpinner(s2),newJSpinner(s3)};
publicTimec()
//设置JPanel容器的布局管理器
this.setLayout(null);
/*//为ArrayList初始化元素
for(inti=1;
=12;
i++)
{
al.add(i+"
//将ArrayList设置为SpinnerListModel的模型
slm.setList(al);
//设置SpinnerListModel模型的当前值
slm.setValue("
5月"
*/
//对几个标签及微调控件进行处理
js.length;
//设置标签的大小位置,并添加进容器JPanel中
jlArray[i].setBounds(20+i*110,20,80,30);
this.add(jlArray[i]);
//设置微调控件的大小位置,并添加进容器JPanel中
js[i].setBounds(50+i*120,20,60,26);
this.add(js[i]);
//为三个微调控件注册了ChangeEvent事件监听器
js[i].addChangeListener(this);
//设置标签的大小位置,并添加进容器JPanel中
jlArray1[i].setBounds(20+i*110,80,80,30);
this.add(jlArray1[i]);
js1[i].setBounds(50+i*120,80,60,26);
this.add(js1[i]);
js1[i].addChangeListener(this);
//将JPanel容器添加进窗体
//this.add(jp);
//将标签添加进窗体
this.add(jlResult,BorderLayout.SOUTH);
publicTimec(intyear,intmonth,intday,inthour,intminute,intsecond){
super();
//创建三个微调模型
snm1=newSpinnerNumberModel(year,2000,3000,1);
snm2=newSpinnerNumberModel(month,1,12,1);
snm3=newSpinnerNumberModel(day,1,24,1);
//创建三个微调模型
s1=newSpinnerNumberModel(hour,0,23,1);
s2=newSpinnerNumberModel(minute,0,60,1);
s3=newSpinnerNumberModel(second,0,60,1);
//实现ChangeListener接口中的方法
publicvoidstateChanged(ChangeEvente)
/*
publicintgety(ChangeEven