📄 tele_phonebook.java.java
字号:
import java.io.*;
import java.util.*;
/********IOmethods.java***********************/
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;
}
}
/*********Personal.java***********************/
class Personal extends IOmethods
{
protected final int namel=12,mobilel=12,telel=14,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);
}//将Personal实例化,新建一个Personal的方法d[0]
}
/*********Database.java***********************/
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);
}
}
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();
}
}
}
/*********xrx_Phonebook.java*****************/
public class xrx_Phonebook
{
static public void main(String arg[])throws IOException
{
(new Database()).run();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -