import java.io.*;
import java.util.*;
class IOmethods
{
public void writeString(String s,RandomAccessFile out)throws IOException
{
for(int i=0;i<s.length();i++)
out.writeChar(s.charAt(i));
}
public String readString(int len,RandomAccessFile in)throws IOException
{
String s="";
for(int i=0;i<len;i++)
s+=in.readChar();
return s;
}
public String readline()throws IOException
{
int ch;
String s="";
while(true)
{
ch=System.in.read();
if(ch==-1||(char)ch=='\n')
break;
else if((char)ch!='\r')
s=s+(char)ch;
}
return s;
}
}
class Personal extends IOmethods
{
protected final int namel=12,mobilel=12,telel=12,emaill=25;
protected String name,mobile,tele,email;
protected final int size=(namel+mobilel+telel+emaill)*2;
Personal(){}
Personal(String n,String m,String t,String e)
{
name=n;mobile=m;tele=t;email=e;
}
public int size()
{
return size;
}
public boolean equals(Personal d)
{
return name.equals(d.name);
}
public boolean compareTo(Personal d)
{
int i=0;
i=name.compareTo(d.name);
if(i>=0)
return true;
else
return false;
}
public void writeToFile(RandomAccessFile out)throws IOException
{
writeString(name,out);
writeString(mobile,out);
writeString(tele,out);
writeString(email,out);
}
public void writeOneLine()
{
System.out.println("name "+"mobile "+"tele "
+"email ");
System.out.println(name+'\t'+mobile+'\t'+tele+'\t'+email+'\t'+'\n');
}
public void listtofile(LinkedList list,RandomAccessFile out)throws IOException
{
for(int i=0;i<list.size();i++)
{
out.seek(i*size);
((Personal)list.get(i)).writeToFile(out);
}
out.setLength(list.size()*size);
}
public void readFromFile(RandomAccessFile in)throws IOException
{
name=readString(namel,in);
mobile=readString(mobilel,in);
tele=readString(telel,in);
email=readString(emaill,in);
}
public void readname()throws IOException
{
System.out.print("Please enter name: ");
name=readline();
for(int i=name.length();i<namel;i++)
name+=' ';
}
public void readFromConsole()throws IOException
{
System.out.print("Please enter name:");
name=readline();
for(int i=name.length();i<namel;i++)
name+=' ';
System.out.print("Please enter mobile number:");
mobile=readline();
for(int i=mobile.length();i<mobilel;i++);
mobile+=' ';
System.out.print("Please enter telephone number:");
tele=readline();
for(int i=tele.length();i<telel;i++);
tele+=' ';
System.out.print("Please enter email:");
email=readline();
for(int i=email.length();i<emaill;i++);
email+=' ';
}
public void copy(Personal[] d)
{
d[0]=new Personal(name,mobile,tele,email);
}
}
class Database
{
private RandomAccessFile database;
private String fname=new String();
private IOmethods io=new IOmethods();
private LinkedList list=new LinkedList();
Database() throws IOException
{
System.out.print("Please enter the file name:");
fname=io.readline();
}
private void add(Personal d)throws IOException
{
int i=list.size();
for(int j=0;j<i;j++)
{
if(((Personal)list.get(j)).compareTo(d))
{
list.add(j,d);
return;
}
}
list.add(d);
}
private void modify(Personal d)throws IOException
{
Personal temp=new Personal();
for(int i=0;i<list.size();i++)
{
if(((Personal)list.get(i)).equals(d))
{
list.remove(i);
temp.readFromConsole();
list.add(i,temp);
System.out.println("The record to be modified has been modified:");
((Personal)list.get(i)).writeOneLine();
return;
}
}
System.out.println("The record to be modified is not exist!");
}
private void delete(Personal d)throws IOException
{
for(int i=0;i<list.size();i++)
{
if(((Personal)list.get(i)).equals(d))
{
list.remove(i);
System.out.println("The record to be deleted has been deleted!");
return;
}
}
System.out.println("The record to be deleted is not exist!");
}
private void find(Personal d)throws IOException
{
for(int i=0;i<list.size();i++)
{
if(((Personal)list.get(i)).equals(d))
{
System.out.println("The record has been found:");
((Personal)list.get(i)).writeOneLine();
System.out.println();
return;
}
}
System.out.println("The record is not exist.");
}
private void printall(LinkedList list)throws IOException
{
System.out.println("All of the records are:");
System.out.println("\nname\t\tmobile\t\ttele\t\temail\n");
for(int i=0;i<list.size();i++)
{
System.out.println(((Personal)list.get(i)).name+"\t"+
((Personal)list.get(i)).mobile+"\t\t"+((Personal)list.get(i)).tele+"\t\t"
+((Personal)list.get(i)).email+"\n\n");
}
}
public void run()throws IOException
{
database=new RandomAccessFile(fname,"rw");
Personal temp=new Personal();
if(database.getFilePointer()<database.length())
{
database.seek(database.getFilePointer());
temp.readFromFile(database);
list.add(temp);
}
database.close();
printall(list);
String option;
System.out.println("1.add 2.modify 3.delete 4.find 5.printall 6.exit\n\n");
System.out.print("Enter your option: ");
option=io.readline();
database=new RandomAccessFile(fname,"rw");
while(true){
switch(option.charAt(0))
{
case'1':
{
Personal xrx=new Personal();
xrx.readFromConsole();
add(xrx);
printall(list);
break;
}
case'2':
{
Personal xrx=new Personal();
xrx.readname();
modify(xrx);
break;
}
case'3':
{
Personal xrx=new Personal();
xrx.readname();
delete(xrx);
break;
}
case'4':
{
Personal xrx=new Personal();
xrx.readname();
find(xrx);
break;
}
case'5':
{
printall(list);
break;
}
case'6':
{
Personal xrx=new Personal();
xrx.listtofile(list,database);
database.close();
return;
}
default:
{
Personal xrx=new Personal();
System.out.println("error!");
xrx.listtofile(list,database);
break;
}
}
System.out.print("Enter an option: ");
option = io.readline();
}
}
}
public class xrx_Phonebook
{
public static void main(String arg[])throws IOException
{
(new Database()).run();
}
}
这个程序在DOS下可以创建文件,并向文件中写入内容,但如果你关闭DOS窗口,再次运行,写入的内容只会显示一条,有高手帮我改改,让他再次运行时可以显示写入的全部内容,谢谢