java个人记事本总结报告.docx
- 文档编号:20662057
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:55
- 大小:133.31KB
java个人记事本总结报告.docx
《java个人记事本总结报告.docx》由会员分享,可在线阅读,更多相关《java个人记事本总结报告.docx(55页珍藏版)》请在冰豆网上搜索。
java个人记事本总结报告
计算机学院
工程实践Ⅰ
总结报告
个人记事本
小组序号:
组员姓名:
年级班级:
指导教师姓名:
提交日期:
1引言
使用语言:
JAVA
软件平台:
Eclipse
选此题目动机:
此题目具有一定的挑战性,需要结合GUI图形设计、IO流操作和文件的相关内容,可以对自己的java编程能力加以提升。
应用型课题:
1)巩固和提高java编程技术。
2)培养掌握成学设计的基本思路和方法。
3)加强研发、调试程序的能力。
4)增强分析、解决问题的能力。
5)提高科技论文写作能力。
目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。
按照教学培养计划要求,学生在学习完课本中指定课时的知识后,应安排一定课时的课程设计。
其主要目的是使学生深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等。
故此“个人记事本”应运而生。
本课程设计是为了配合Java程序设计课程,帮助学生深入学习掌握Java语言,熟练运用这个工具而设立的课程。
通过课程设计各个项目的综合训练,加强学生对JAVA语言的理解,检验学生对专业理论知识理解与掌握的程度,锻炼学生综合运用JAVA程序设计处理所学的知识实际分析问题、解决问题的能力,使课堂上的理论在实践中得到运用,提高学生的综合素质,为学生毕业后的实际工作打好基础。
同时也满足了大多数同学对于一款简单易用的日记本软件的需求。
2项目需求分析及方案
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:
30:
30
3)测试数据3:
c、cc、2012/07/07、07:
30:
30
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)输出模块
fp.createNewFile();
FileOutputStreamfout=newFileOutputStream(fp);
ObjectOutputStreamoout=newObjectOutputStream(fout);
oout.writeObject(a);
oout.close();
fout.close();
程序结构图:
4项目详细设计
本部分主要描述自己所做项目主要模块的详细设计的主要内容。
指出程序开发过程中主要模块的实现技术、数据结构及关键程序函数之间调用关系。
4.1数据类型的定义
无
4.2各函数的伪码算法
1)主函数
publicclassMain{
publicstaticvoidmain(String[]args){
Timedatat=newTimedata();//时间的类
Souls=newSoul();//窗口
while(true){
t.setDeadline();
}
}
}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();
FileOutputStreamfout=newFileOutputStream(fp);
ObjectOutputStreamoout=newObjectOutputStream(fout);
oout.writeObject(a);
oout.close();
fout.close();
}
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 endPanel.add(jbFind[i]); jbFind[i].addActionListener(this); } this.add(endPanel); //设置窗体的关闭动作、标题、大小位置以及可见性 this.setTitle("Soul是这个窗口的类"); this.setBounds(400,0,WIDTH,HEIGHT); this.setVisible(true); //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("月: "),newJLabel("日: ")}; privateJLabel[]jlArray1=newJLabel[]{newJLabel("时: "),newJLabel("分: "),newJLabel("秒: ")}; //创建标签 JTextFieldjlResult=newJTextField(); //("您设定的日期为: "+time.y+"年"+time.m+"月"+time.d+"日时间为: "+time.hh+"时"+time.mm+"分"+time.ss+"秒");//创建ArrayList对象 privateArrayList //创建三个微调模型 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;i<=12;i++) { al.add(i+"月"); } //将ArrayList设置为SpinnerListModel的模型 slm.setList(al); //设置SpinnerListModel模型的当前值 slm.setValue("5月");*/ //对几个标签及微调控件进行处理 for(inti=0;i { //设置标签的大小位置,并添加进容器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]); //设置微调控件的大小位置,并添加进容器JPanel中 js1[i].setBounds(50+i*120,80,60,26); this.add(js1[i]); //为三个微调控件注册了ChangeEvent事件监听器 js1[i].addChangeListener(this); } //将JPanel容器添加进窗体 //this.add(jp); //将标签添加进窗体 this.add(jlResult,BorderLayout.SOUTH); 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); } 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) { 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); } /* //获取选择的年 publicintgety(ChangeEven
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 个人 记事本 总结报告