在大二第一学期的时候,在学习了JAVA中的输入输出流后老师要我们做一个通讯录。其功能可以添加删除和在关闭时保存信息,保存和导入数据用的技术是纯粹的IO流,没有设计到数据库,呵呵,功能是实现出来了,但效率可能不怎么好,希望高手们看完后给小弟点意见,我会改进的,OK,以下是我的原代码和试用方法说明:
代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.border.*;
import java.util.*;
class People implements Serializable
{
static int j;
static int j2=0;
static int j3=0;
static int munber=0; //这个就是整个程序的计数器
private static final long serialVersionUID = 3757263881374182471L;
String ID;
String Name;
String Address;
String Phone;
String Work;
protected Object length;
People(String ID,String Name,String Address,String Phone,String Work)
{
this.ID=ID;
this.Name=Name;
this.Address=Address;
this.Phone=Phone;
this.Work=Work;
}
String getID()
{
return ID;
}
String getName()
{
return Name;
}
String getAddress()
{
return Phone;
}
String getWork()
{
return Work;
}
static public String id()//变数据为字符
{
int jj=j;
Integer id=new Integer(2);
id=jj;
String iD=id.toString();
return iD;
}
static public String id2()//添加自加功能的方法,显示在文本框上
{
int j1=j+1;
Integer id2=new Integer(1);
id2=j1;
String jd=id2.toString();
return jd;
}
public String getValue()
{
String value="ID号:"+ this.ID+" "+"姓名:"+this.Name+" "+"地址:"+this.Address+" "+"电话:"+this.Phone+" "+"单位:"+this.Work+'\n';
return value;
}
}
public class tongxunlu extends JFrame
{
private static final long serialVersionUID = 1057782438609006743L;
//初始化窗口实现类
JTextField ID;
JTextField Name;
JTextField Address;
JTextField Phone;
JTextField Work;
JTextField IDc;
JTextField Namec;
JTextField Addressc;
JTextField Phonec;
JTextField Workc;
JButton Add;
JButton Clear;
JButton Load;
JButton Save;
JButton Delect;
JButton Check;
JPanel P1;
JPanel P2;
JTextArea Show;
JTextArea Show2;
JTabbedPane p;
Box baseBox,baseBox2,boxV1,boxV2,boxV3,boxV4,boxV5;
FileOutputStream fileOut;
ObjectOutputStream objectOut;
FileInputStream fileIn;
ObjectInputStream objectIn;
FileOutputStream fileOut2;
FileInputStream fileIn2;
DataInputStream dataInput;
DataOutputStream dataOutput;
FileWriter out;
FileReader in;
People p1[]=new People[100]; //构造存储数组
People personLoad[]=new People[100];
People personSave[]=new People[100];
People person[]=new People[100]; //定义person为保存对象的数组,容量是100个对象
tongxunlu (String s)
{ super(s);
Container con=getContentPane();
Show=new JTextArea();
Show2=new JTextArea();
p=new JTabbedPane();
P1=new JPanel();
P2=new JPanel();
ID=new JTextField(4);
Name=new JTextField(6);
Address=new JTextField(20);
Phone=new JTextField(8);
Work=new JTextField(18);
IDc=new JTextField(4);
Namec=new JTextField(6);
Addressc=new JTextField(20);
Phonec=new JTextField(8);
Workc=new JTextField(18);
Add=new JButton("添加");
Clear=new JButton("清空");
Load=new JButton("导入资料");
Delect=new JButton("删除");
Save=new JButton("保存");
Check=new JButton("查询");
boxV1=Box.createVerticalBox();
boxV1.add(new JLabel("输入您的ID:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的姓名:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的地址:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的电话:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的单位:"));
boxV2=Box.createVerticalBox();
boxV2.add(ID);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Name);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Address);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Phone);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Work);
baseBox=Box.createHorizontalBox();
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(10));
baseBox.add(boxV2);
boxV3=Box.createVerticalBox();
boxV3.add(new JLabel("输入您要查找或删除的ID:"));
boxV3.add(Box.createVerticalStrut(8));
boxV4=Box.createVerticalBox();
boxV4.add(Box.createVerticalStrut(100));
boxV4.add(IDc);
boxV4.add(Box.createVerticalStrut(110));
boxV5=Box.createVerticalBox();
boxV5.add(Check);
boxV5.add(Box.createVerticalStrut(8));
boxV5.add(Delect);
boxV5.add(Box.createVerticalStrut(8));
baseBox2=Box.createHorizontalBox();
baseBox2.add(boxV3);
baseBox2.add(Box.createHorizontalStrut(10));
baseBox2.add(boxV4);
baseBox2.add(Box.createHorizontalStrut(10));
baseBox2.add(boxV5);
p.add("添加信息", baseBox);
p.add("查询或删除", baseBox2);
p.add("显示",new JScrollPane(Show));
p.add("资料库",new JScrollPane(Show2));
p.validate();
P2.add(Add);
P2.add(Clear);
P2.add(Save);
P2.add(Load);
con.add(p,BorderLayout.CENTER);
con.add(P2,BorderLayout.SOUTH);
con.validate();
setBounds(0,0,333,333);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Add.addActionListener(new ActionListener(){ //至此完成了窗口的设置.以下开始功能实现了
public void actionPerformed(ActionEvent e){
String iid=ID.getText();
People.j=Integer.parseInt(iid);
ID.setText(People.id2());
String name=Name.getText();
String address=Address.getText();
String phone=Phone.getText();
String work=Work.getText();
int count=People.j-1; //记录添加人数下标
try{
personSave[count]=new People(People.id(),name,address,phone,work);
String value=personSave[count].getValue();
String value2="您刚刚添加的信息是:"+value;
Show.insert(value2,Show.getDocument().getLength());//可在当前显示插入信息
}
catch(Exception a){System.out.println(a);}
}
});
Save.addActionListener(new ActionListener(){ //此方法可以把保存数组里面的所有当前对象写入文件
public void actionPerformed(ActionEvent e2){
try{
File f=new File("a.txt");
fileOut=new FileOutputStream(f);
objectOut=new ObjectOutputStream(fileOut);
}
catch(Exception a)
{
System.out.println(a);
}
for(int i2=0;i2<=People.j-1;i2++)
{
try {
objectOut.writeObject(personSave[i2]);
}
catch (IOException e22) {
e22.printStackTrace();
}
}
}
});
Load.addActionListener(new ActionListener(){ //此方法可以把文件里面的保存对象读入
public void actionPerformed(ActionEvent e2){
try{
int n=0;
fileIn=new FileInputStream("a.txt");
objectIn=new ObjectInputStream(fileIn);
while(( personSave[n]=(People)objectIn.readObject())!=null)
{ Show2.insert(personSave[n].getValue(),Show2.getDocument().getLength());
People.munber=n; //计数器计数
n=n+1;
}
}
catch(Exception a)
{System.out.println(a.getMessage()); }
}});
Clear.addActionListener(new ActionListener(){ //此方法可以清楚文本框,方便填写
public void actionPerformed(ActionEvent e){
Address.setText("");
Name.setText("");
Work.setText("");
Phone.setText("");
}
});
Check.addActionListener(new ActionListener(){ //此方法运用数据结构方法在链表里进行查找
public void actionPerformed(ActionEvent e){
LinkedList<People> list=new LinkedList<People>();
for(int k=0;k<=People.munber;k++)
{
list.add(personSave[k]);
}
int f=0;
String iid=IDc.getText(); //把文本框的字符转为可以参加运算的整型数字
f=Integer.parseInt(iid);
People find=list.get(f-1);
String message="您要查找的人的信息是:"+">"+find.getValue()+"\n";
Show.insert(message,Show.getDocument().getLength());
}
});
Delect.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
LinkedList<People> list=new LinkedList<People>();
for(int k=0;k<=People.munber;k++)
{
list.add(personSave[k]);
}
int d=0;
String iid=IDc.getText();
d=Integer.parseInt(iid);
People delect=list.remove(d-1);
String message="您已经删除了的人的信息是:"+">"+delect.getValue()+"\n";
Show.insert(message,Show.getDocument().getLength());
// People replace=list.set(d-1, new People("", "", "", "", ""));
try{ //通过覆盖达到利用数据结构删除文件信息的功能
File f=new File("a.txt");
fileOut=new FileOutputStream(f);
objectOut=new ObjectOutputStream(fileOut);
}
catch(Exception a)
{
System.out.println(a);
}
for(int i2=0;i2<=People.munber;i2++)
{
personSave[i2]=list.get(i2);
try {
objectOut.writeObject(personSave[i2]);
}
catch (IOException e22) {
e22.printStackTrace();
}
}
}
});
}
public static void main(String args[])
{
new tongxunlu("通讯录");
}
}
代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.border.*;
import java.util.*;
class People implements Serializable
{
static int j;
static int j2=0;
static int j3=0;
static int munber=0; //这个就是整个程序的计数器
private static final long serialVersionUID = 3757263881374182471L;
String ID;
String Name;
String Address;
String Phone;
String Work;
protected Object length;
People(String ID,String Name,String Address,String Phone,String Work)
{
this.ID=ID;
this.Name=Name;
this.Address=Address;
this.Phone=Phone;
this.Work=Work;
}
String getID()
{
return ID;
}
String getName()
{
return Name;
}
String getAddress()
{
return Phone;
}
String getWork()
{
return Work;
}
static public String id()//变数据为字符
{
int jj=j;
Integer id=new Integer(2);
id=jj;
String iD=id.toString();
return iD;
}
static public String id2()//添加自加功能的方法,显示在文本框上
{
int j1=j+1;
Integer id2=new Integer(1);
id2=j1;
String jd=id2.toString();
return jd;
}
public String getValue()
{
String value="ID号:"+ this.ID+" "+"姓名:"+this.Name+" "+"地址:"+this.Address+" "+"电话:"+this.Phone+" "+"单位:"+this.Work+'\n';
return value;
}
}
public class tongxunlu extends JFrame
{
private static final long serialVersionUID = 1057782438609006743L;
//初始化窗口实现类
JTextField ID;
JTextField Name;
JTextField Address;
JTextField Phone;
JTextField Work;
JTextField IDc;
JTextField Namec;
JTextField Addressc;
JTextField Phonec;
JTextField Workc;
JButton Add;
JButton Clear;
JButton Load;
JButton Save;
JButton Delect;
JButton Check;
JPanel P1;
JPanel P2;
JTextArea Show;
JTextArea Show2;
JTabbedPane p;
Box baseBox,baseBox2,boxV1,boxV2,boxV3,boxV4,boxV5;
FileOutputStream fileOut;
ObjectOutputStream objectOut;
FileInputStream fileIn;
ObjectInputStream objectIn;
FileOutputStream fileOut2;
FileInputStream fileIn2;
DataInputStream dataInput;
DataOutputStream dataOutput;
FileWriter out;
FileReader in;
People p1[]=new People[100]; //构造存储数组
People personLoad[]=new People[100];
People personSave[]=new People[100];
People person[]=new People[100]; //定义person为保存对象的数组,容量是100个对象
tongxunlu (String s)
{ super(s);
Container con=getContentPane();
Show=new JTextArea();
Show2=new JTextArea();
p=new JTabbedPane();
P1=new JPanel();
P2=new JPanel();
ID=new JTextField(4);
Name=new JTextField(6);
Address=new JTextField(20);
Phone=new JTextField(8);
Work=new JTextField(18);
IDc=new JTextField(4);
Namec=new JTextField(6);
Addressc=new JTextField(20);
Phonec=new JTextField(8);
Workc=new JTextField(18);
Add=new JButton("添加");
Clear=new JButton("清空");
Load=new JButton("导入资料");
Delect=new JButton("删除");
Save=new JButton("保存");
Check=new JButton("查询");
boxV1=Box.createVerticalBox();
boxV1.add(new JLabel("输入您的ID:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的姓名:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的地址:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的电话:"));
boxV1.add(Box.createVerticalStrut(31));
boxV1.add(new JLabel("请输入您的单位:"));
boxV2=Box.createVerticalBox();
boxV2.add(ID);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Name);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Address);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Phone);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(Work);
baseBox=Box.createHorizontalBox();
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(10));
baseBox.add(boxV2);
boxV3=Box.createVerticalBox();
boxV3.add(new JLabel("输入您要查找或删除的ID:"));
boxV3.add(Box.createVerticalStrut(8));
boxV4=Box.createVerticalBox();
boxV4.add(Box.createVerticalStrut(100));
boxV4.add(IDc);
boxV4.add(Box.createVerticalStrut(110));
boxV5=Box.createVerticalBox();
boxV5.add(Check);
boxV5.add(Box.createVerticalStrut(8));
boxV5.add(Delect);
boxV5.add(Box.createVerticalStrut(8));
baseBox2=Box.createHorizontalBox();
baseBox2.add(boxV3);
baseBox2.add(Box.createHorizontalStrut(10));
baseBox2.add(boxV4);
baseBox2.add(Box.createHorizontalStrut(10));
baseBox2.add(boxV5);
p.add("添加信息", baseBox);
p.add("查询或删除", baseBox2);
p.add("显示",new JScrollPane(Show));
p.add("资料库",new JScrollPane(Show2));
p.validate();
P2.add(Add);
P2.add(Clear);
P2.add(Save);
P2.add(Load);
con.add(p,BorderLayout.CENTER);
con.add(P2,BorderLayout.SOUTH);
con.validate();
setBounds(0,0,333,333);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Add.addActionListener(new ActionListener(){ //至此完成了窗口的设置.以下开始功能实现了
public void actionPerformed(ActionEvent e){
String iid=ID.getText();
People.j=Integer.parseInt(iid);
ID.setText(People.id2());
String name=Name.getText();
String address=Address.getText();
String phone=Phone.getText();
String work=Work.getText();
int count=People.j-1; //记录添加人数下标
try{
personSave[count]=new People(People.id(),name,address,phone,work);
String value=personSave[count].getValue();
String value2="您刚刚添加的信息是:"+value;
Show.insert(value2,Show.getDocument().getLength());//可在当前显示插入信息
}
catch(Exception a){System.out.println(a);}
}
});
Save.addActionListener(new ActionListener(){ //此方法可以把保存数组里面的所有当前对象写入文件
public void actionPerformed(ActionEvent e2){
try{
File f=new File("a.txt");
fileOut=new FileOutputStream(f);
objectOut=new ObjectOutputStream(fileOut);
}
catch(Exception a)
{
System.out.println(a);
}
for(int i2=0;i2<=People.j-1;i2++)
{
try {
objectOut.writeObject(personSave[i2]);
}
catch (IOException e22) {
e22.printStackTrace();
}
}
}
});
Load.addActionListener(new ActionListener(){ //此方法可以把文件里面的保存对象读入
public void actionPerformed(ActionEvent e2){
try{
int n=0;
fileIn=new FileInputStream("a.txt");
objectIn=new ObjectInputStream(fileIn);
while(( personSave[n]=(People)objectIn.readObject())!=null)
{ Show2.insert(personSave[n].getValue(),Show2.getDocument().getLength());
People.munber=n; //计数器计数
n=n+1;
}
}
catch(Exception a)
{System.out.println(a.getMessage()); }
}});
Clear.addActionListener(new ActionListener(){ //此方法可以清楚文本框,方便填写
public void actionPerformed(ActionEvent e){
Address.setText("");
Name.setText("");
Work.setText("");
Phone.setText("");
}
});
Check.addActionListener(new ActionListener(){ //此方法运用数据结构方法在链表里进行查找
public void actionPerformed(ActionEvent e){
LinkedList<People> list=new LinkedList<People>();
for(int k=0;k<=People.munber;k++)
{
list.add(personSave[k]);
}
int f=0;
String iid=IDc.getText(); //把文本框的字符转为可以参加运算的整型数字
f=Integer.parseInt(iid);
People find=list.get(f-1);
String message="您要查找的人的信息是:"+">"+find.getValue()+"\n";
Show.insert(message,Show.getDocument().getLength());
}
});
Delect.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
LinkedList<People> list=new LinkedList<People>();
for(int k=0;k<=People.munber;k++)
{
list.add(personSave[k]);
}
int d=0;
String iid=IDc.getText();
d=Integer.parseInt(iid);
People delect=list.remove(d-1);
String message="您已经删除了的人的信息是:"+">"+delect.getValue()+"\n";
Show.insert(message,Show.getDocument().getLength());
// People replace=list.set(d-1, new People("", "", "", "", ""));
try{ //通过覆盖达到利用数据结构删除文件信息的功能
File f=new File("a.txt");
fileOut=new FileOutputStream(f);
objectOut=new ObjectOutputStream(fileOut);
}
catch(Exception a)
{
System.out.println(a);
}
for(int i2=0;i2<=People.munber;i2++)
{
personSave[i2]=list.get(i2);
try {
objectOut.writeObject(personSave[i2]);
}
catch (IOException e22) {
e22.printStackTrace();
}
}
}
});
}
public static void main(String args[])
{
new tongxunlu("通讯录");
}
}