java程序设计实验报告.docx
- 文档编号:13163005
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:26
- 大小:573.44KB
java程序设计实验报告.docx
《java程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《java程序设计实验报告.docx(26页珍藏版)》请在冰点文库上搜索。
java程序设计实验报告
华北电力大学
实验报告
|
|
实验名称基于Java的简易通讯录系统
课程名称面向对象程序设计(JAVA)
|
|
专业班级:
软件1001学生姓名:
李东萍
学号:
201009020108成绩:
指导教师:
刘书刚崔克彬实验日期:
2011.7.6
一、实验目的
综合应用所学的知识分析问题、解决问题,提高实际编程能力及程序调试能力。
二、实验内容及要求
设计并实现一个个人通信录,能记录人员的各种通信信息。
支持通信录条目的添加、查找、删除、修改。
要求:
1)通信录需记录的个人信息自行设计。
2)要求采用图形用户界面(GUI),界面效果及事件处理方式自行设计,尽量考虑美观与易用性。
3)系统结构设计应采用面向对象的思想,发现问题域中的事物(常称为实体),抽象成类,建立实体类之间的关系。
同时建立实体类与界面类之间的关系。
要求程序结构设清晰合理。
三、实验仪器与设备
计算机,JDK,Eclipse。
四、问题分析与系统设计
问题分析
本系统是一个通讯录,它可以显示一个人的姓名、电话号码和家庭住址。
实现时应该有添加、删除、修改三菜单对输入信息进行操作处理,还可以加上查找、查看全部、确定删除、保存、退出这几个按钮对显示信息进行处理,这样才能做出一个符合要求的通讯录。
设计思想
首先设计好界面,再设计好相应的类,最后通过事件监听将两者联系起来。
设计结果
1.界面。
界面采用FlowLayout布局管理器,先是菜单栏,再是按钮,最后是文本框。
菜单栏里有删除、修改、添加三个菜单,“删除”下有菜单项目“界面查找”和“查找修改”,“修改”下有菜单项目“界面删除”和“查找删除”,“添加”下有菜单项目“指定添加”和“末尾添加”,按钮排在菜单下面,依次是查找、查看全部、排列、确定删除、保存、退出。
2.类。
这次我们只设计一个主类,其他的类都在这个主类里作为嵌套类使用。
主类是从界面类里继承的,里面有读出类、写入类、还有两个监听类,一个监听界面修改,一个监听按钮。
读出类用来从文件里读出所需信息,写入类用来把信息存储在文件中。
监听界面修改类则是处理用户在文本框进行的信息操作,监听按钮类则是处理用户通过按钮进行的信息操。
五、实验结果
1.初始界面
2.1添加→指定添加→在粉色的文本框里添加信息(姓名、电话、家庭住址,信息与信息间用空格隔开)
2.2添加→末尾添加→按提示输入姓名、号码和住址。
3查找→按提示输入姓名
4修改→界面修改→按提示操作
修改后再查找则显示出修改后的信息了
5.1删除→界面删除→按提示操作
5.2删除→查找删除→按提示删除
再查找删除了的人时,有如下显示:
6查看全部
六、总结与体会
本次程序设计,我们一起设计了界面和用文件写入和读出这块,收获最大的便是文件这里。
因为不是特别了解文件这方面的内容,我们借鉴了其他类似的写入和读出的代码,虽然不是特别严谨,但也完成了对信息的存储和读取,而且这使我们对文件有了更深的了解。
publicvoidread()//从文件中读取数据
{
inty=0;
while(tongxunlu[y]!
=null)//清空数组,及时的更新
{
tongxunlu[y]=null;
y++;
}
try{
Stringfilepath="D:
/file1.txt";
Filef=newFile(filepath);
InputStreamReaderread=newInputStreamReader(newFileInputStream(f),"GBK");
BufferedReaderreader=newBufferedReader(read);
Stringline;
inti=0;
txtarea.setText("");
while((line=reader.readLine())!
=null)//以行读取文件流
{
tongxunlu[i]=line;
i++;
txtarea.append(line+"\n");
}
}
catch(IOExceptione)
{
System.out.println("filereadError");
}
}
publicvoidwrite()//把Textarea中的内容写入到文件中
{
try
{
Filefl=newFile("D:
/file1.txt");
FileWriterfw=newFileWriter(fl);
BufferedWriterbw=newBufferedWriter(fw);
Stringgt=txtarea.getText();
bw.write(gt,0,gt.length());
bw.flush();
fw.close();
}
catch(Exceptione1)
{
System.out.println("Error");
}
}
因为操作里很多地方都会用到写入和读出,所以我们把写入和读出分别作为一个类,方便了调用。
读取类里我们采取的是先清除再更新的方法,中间还调用了以行读取文件流的方法。
界面我们是一起讨论完成的,然后我们就分头写菜单栏的的事件监听。
我主要负责的是添加。
1.先创建一个添加的菜单:
Menumenu3=newMenu("添加");
2.再创建两个选项:
MenuItemmenuitem5=newMenuItem("指定添加");
MenuItemmenuitem6=newMenuItem("末尾添加");
3.把选项加到菜单里:
menu3.add(menuitem5);
menu3.add(menuitem6);
4事件监听:
4.1指定添加
if(e.getSource()==menuitem5)//监听用户想在特定的位置添加信息
{
JOptionPane.showMessageDialog(null,"请在选定的位置添加后单击“保存”按钮完成");
//弹出帮助信息框
txtarea.setText("");
read();//调用读出
}
4.2末尾添加
if(e.getSource()==menuitem6)//实现添加信息至末尾
{
txtarea.setText("");
read();
Stringreadname=JOptionPane.showInputDialog("请输入姓名");//弹出提示输入对话框
Stringreadnumber=JOptionPane.showInputDialog("请输入号码");
Stringaddress=JOptionPane.showInputDialog("请输入住址");
if(readname==null||readnumber==null||address==null){}//用户临时取消添加时的操作
else
txtarea.append(readname+""+readnumber+""+address+"\n");
write();//调用写入
}
4.3保存
if(e.getSource()==menuitem1)//监听到界面修改的事件时
{
JOptionPane.showMessageDialog(null,"请在文本区域中修改后单击“保存”按钮完成");
//输出帮助消息框
txtarea.setText("");
read();
}
由于这次实验时间相对紧张,还有很多东西需要改进,如排序我们没有解释,因为其中出了些问题没能很好解决,还有这个通讯录不能支持电话号码的查找,这是一大缺陷。
界面的显示也没能弄得好看些,特别是如果实在文本框输入信息保存时,这些信息还是会显示在文本框里,信息多了,给人一种杂乱的感觉。
我们如果要做好一个程序,首先要了解这种系统原定义好给我们的类和方法,熟练地运用这些类和方法会大大减少我们的工作,而且也会使我们的程序更加紧凑,美观。
附件:
源程序清单
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.Arrays;
importjavax.swing.*;
publicclassHeroextendsFrame
{//定义界面的各种组件
Buttonbuttonfind=newButton("查找");
Buttonbuttondel=newButton("确定删除");
Buttonbuttonsave=newButton("保存");
Buttonbuttonexit=newButton("退出");
Buttonbuttonall=newButton("查看全部");
Buttonbuttonpailie=newButton("排列");
TextAreatxtarea=newTextArea("",12,40,10);
Stringtongxunlu[]=newString[100];
MenuBarmenubar1=newMenuBar();
Menumenu1=newMenu("删除");
Menumenu2=newMenu("修改");
Menumenu3=newMenu("添加");
MenuItemmenuitem1=newMenuItem("界面修改");
MenuItemmenuitem2=newMenuItem("查找修改");
MenuItemmenuitem3=newMenuItem("界面删除");
MenuItemmenuitem4=newMenuItem("查找删除");
MenuItemmenuitem5=newMenuItem("指定添加");
MenuItemmenuitem6=newMenuItem("末尾添加");
publicvoidread()//从文件中读取数据
{
inty=0;
while(tongxunlu[y]!
=null)//清空数组,及时的更新
{
tongxunlu[y]=null;
y++;
}
try{
Stringfilepath="D:
/file1.txt";
Filef=newFile(filepath);
InputStreamReaderread=newInputStreamReader(newFileInputStream(f),"GBK");
BufferedReaderreader=newBufferedReader(read);
Stringline;
inti=0;
txtarea.setText("");
while((line=reader.readLine())!
=null)//以行读取文件流
{
tongxunlu[i]=line;
i++;
txtarea.append(line+"\n");
}
}
catch(IOExceptione)
{
System.out.println("filereadError");
}
}
publicvoidwrite()//把Textarea中的内容写入到文件中
{
try
{
Filefl=newFile("D:
/file1.txt");
FileWriterfw=newFileWriter(fl);
BufferedWriterbw=newBufferedWriter(fw);
Stringgt=txtarea.getText();
bw.write(gt,0,gt.length());
bw.flush();
fw.close();
}
catch(Exceptione1)
{
System.out.println("Error");
}
}
publicstaticvoidmain(Stringss[])//主执行函数入口点
{
Heroframe1=newHero();
FlowLayoutflow=newFlowLayout();
frame1.setLayout(flow);
frame1.setBounds(120,50,200,100);
frame1.setSize(350,300);
frame1.setBackground(Color.blue);
frame1.setTitle("通讯录");
frame1.setVisible(true);
}
publicHero()//构造函数,添加组件及设置监听
{
menubar1.add(menu1);
menubar1.add(menu2);
menubar1.add(menu3);
menu1.add(menuitem3);
menu1.add(menuitem4);
menu2.add(menuitem1);
menu2.add(menuitem2);
menu3.add(menuitem5);
menu3.add(menuitem6);
setMenuBar(menubar1);
menuitem1.addActionListener(newmenubar());
menuitem2.addActionListener(newmenubar());
menuitem3.addActionListener(newmenubar());
menuitem4.addActionListener(newmenubar());
menuitem5.addActionListener(newmenubar());
menuitem6.addActionListener(newmenubar());
add(buttonfind);
add(buttonall);
add(buttonpailie);
add(buttondel);
add(buttonsave);
add(buttonexit);
add(txtarea);
txtarea.setBackground(Color.PINK);
buttonall.addActionListener(newoperation());
buttonsave.addActionListener(newoperation());
buttonexit.addActionListener(newoperation());
buttonpailie.addActionListener(newoperation());
buttondel.addActionListener(newoperation());
buttonfind.addActionListener(newoperation());
addWindowListener(newwindowLis());
}
classmenubarimplementsActionListener
{//定义一个类监听菜单栏并执行相应事件
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==menuitem1)//监听到界面修改的事件时
{
JOptionPane.showMessageDialog(null,"请在文本区域中修改后单击“保存”按钮完成");
//输出帮助消息框
txtarea.setText("");
read();
}
if(e.getSource()==menuitem2)//监听到查找修改的事件时
{
inti=0;
Stringfindname=JOptionPane.showInputDialog("请输入姓名");//提示输入查找的姓名
read();//更新数据数组的内容
while(true)//根据输入信息循环查找
{
if(tongxunlu[i].startsWith(findname))//若找到在相应位置修改
{
Stringresult=JOptionPane.showInputDialog("请输入修改结果");
tongxunlu[i]=result;
JOptionPane.showMessageDialog(null,"单击确定完成修改");
break;
}
i++;
if(tongxunlu[i]==null)//找不到输出相应信息
{
JOptionPane.showMessageDialog(null,"没有这个人");
break;
}
}
intj=0;
txtarea.setText("");
while(tongxunlu[j]!
=null)//更新文本区域内的内容
{
txtarea.append(tongxunlu[j]+"\n");
j++;
}
write();//更新文件
}
if(e.getSource()==menuitem3)//监听到在界面删除
{
JOptionPane.showMessageDialog(null,"请在文本区域中选定要删除的文本后单击“确定删除”按钮完成");
txtarea.setText("");
read();
}
if(e.getSource()==menuitem4)//检查用户执行“查找删除”时提示用户输入姓名
{
inti=0;
Stringfindname=JOptionPane.showInputDialog("请输入要删除的姓名");//提示用户删除姓名
read();
while(true)
{
if(tongxunlu[i].startsWith(findname))
{
JOptionPane.showMessageDialog(null,"单击确定完成删除");
//输出成功删除信息并清空删除的记录
intj=i;
while(tongxunlu[j]!
=null){
tongxunlu[j]=tongxunlu[j+1];
j++;
}
break;
}
i++;
if(tongxunlu[i]==null)
{
JOptionPane.showMessageDialog(null,"删除失败,没有这个人");//输出提示失败的信息
break;
}
}
intj=0;
txtarea.setText("");
while(tongxunlu[j]!
=null)//更新文件
{
txtarea.append(tongxunlu[j]+"\n");
j++;
}
write();
}
if(e.getSource()==menuitem5)//监听用户想在特定的位置添加信息
{
JOptionPane.showMessageDialog(null,"请在选定的位置添加后单击“保存”按钮完成");
//弹出帮助信息框
txtarea.setText("");
read();
}
if(e.getSource()==menuitem6)//实现添加信息至末尾
{
txtarea.setText("");
read();
Stringreadname=JOptionPane.showInputDialog("请输入姓名");//弹出提示输入对话框
Stringreadnumber=JOptionPane.showInputDialog("请输入号码");
Stringaddress=JOptionPane.showInputDialog("请输入住址");
if(readname==null||readnumber==null||address==null){}//用户临时取消添加时的操作
else
txtarea.append(readname+""+readnumber+""+address+"\n");
write();
}
}
}
classoperationimplementsActionListener//监听按钮类事件
{
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==buttonall)
{
txtarea.setText("");//清空当前的文本区域以更新
read();
}
if(e.getSource()==buttonexit)//实现退出功能并检查用户是否正确保存修改,没有则提示用户是否修改
{
bytebuf[]=newbyte[1000];
try
{
FileInputStreamfis=newFileInputStream("D:
/file1.txt");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 程序设计 实验 报告