⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phonebookgui.java

📁 一个电话本管理系统程序.基本上都包含了电话本的所有功能.
💻 JAVA
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.io.Serializable;
//顺序表(建立、插入、删除、修改、查找、排序、合并)
class List implements Serializable{
	String name;
	Data data[];
	int len;
	final int maxLen;

	List(String name,int maxLen){
		this.name=name;
		this.maxLen=maxLen;
		data=new Data[maxLen];
		len=0;
	}

	void ins(int i,Data d) throws Exception{
		if (find(d.getName())!=-1){
			throw new Exception("该姓名已存在");
		}
		if(len == maxLen){
			throw new Exception("顺序表已满无法插入");
		}
		if(i<0||i>len){
			throw new Exception("超出范围");
		}

		for(int j=len;j>i;j--)
			data[j] = data[j-1];

		data[i] = d;
		len++;
	}

	public void del(int i) throws Exception{
		if(len ==0){
			throw new Exception("顺序表已空无法删除");
		}
		if(i<0||i>len-1){
			throw new Exception("超出范围");
		}
		for(int j=i;j<len-1;j++)
			data[j] = data[j+1];

		len--;
	}

	public void set(int i,Data d) throws Exception{
		int f=find(d.getName());
		if (f!=-1&&f!=i){
			throw new Exception("该姓名已存在");
		}
		if(i<0||i>len-1){
			throw new Exception("超出范围");
		}
		data[i]=d;
	}

	int find(String n){
		for (int i=0;i<len;i++){
			if (data[i].getName().compareTo(n)==0)
				return i;
		}
		return -1;
	}


	public void sort(){
		for (int i=0;i<len-1;i++){
			for (int j=0;j<len-i-1;j++){
				if (data[j].getName().compareTo(data[j+1].getName())>0){
					Data temp=data[j];
					data[j]=data[j+1];
					data[j+1]=(temp);
				}
			}
		}
	}

	public List merge(List a,List b) throws Exception {
		List c=new List("",a.len+b.len+40);
		a.sort();b.sort();
		int i=0,j=0;
		while (i<a.len&&j<b.len){
			int s=a.data[i].getName().compareTo(b.data[j].getName());
			if (s<0){
				c.ins(c.len,a.data[i]);
				i++;
			}else if(s==0){
				c.ins(c.len,a.data[i]);
				i++;j++;
			}else{
				c.ins(c.len,b.data[j]);
				j++;
			}
		}

		while (i<a.len){
			c.ins(c.len,a.data[i]);
			i++;
		}
		while (j<b.len){
			c.ins(c.len,b.data[j]);
			j++;
		}
		return c;
	}



}
//数据元素
class Data implements Serializable{
	private String name;
	private int tel;

	Data(String name,int tel){
		this.name=name;
		this.tel=tel;

	}
	void setName(String name){this.name=name;	}
	String getName(){return name;}
	void setTel(int tel){this.tel=tel;}
	int getTel(){return tel;}
}
public class PhoneBookGUI implements ActionListener{
	JFrame frame;
	JScrollPane c;
	JPanel e,flow;
	JButton b[]=new JButton[8];
	String titleString[]={"插入","删除","修改","查找","排序","合并","载入","保存"};
	MyTable mt;
	JTable t;
	JFileChooser fileChooser = new JFileChooser("D:\\");;
	int result;
	List list=new List("未命名",32);

	PhoneBookGUI(){
		frame=new JFrame("孙宏达的电话本v0.8");

		mt=new MyTable();
		t=new JTable(mt);
		t.setPreferredScrollableViewportSize(new Dimension(212,10));
		c = new JScrollPane(t);

		e=new JPanel();
		flow=new JPanel();
		e.setLayout(new GridLayout(4,2,5,5));

		for (int i=0;i<8;i++){
			b[i]=new JButton(titleString[i]);
			b[i].addActionListener(this);
			e.add(b[i]);
		}


		flow.add(e);
		frame.getContentPane().add(c, BorderLayout.CENTER);
		frame.getContentPane().add(flow,BorderLayout.EAST);
		frame.pack();

        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();   
		Dimension frameSize = frame.getSize();   
		frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);

		frame.setVisible(true);
	}

	public void actionPerformed(ActionEvent e){
		String cmd=e.getActionCommand();
		if (cmd=="插入"){
			new insDialog(frame);

		}else if (cmd=="删除"){
			int c=t.getSelectedRowCount();
			int select[]=t.getSelectedRows();
			for (int i=c-1;i>=0;i--){
				try{
					list.del(select[i]);
				}catch(Exception exp){}
			}
			mt.fireTableDataChanged(); 
		}else if (cmd=="修改"){
			int c=t.getSelectedRowCount();
			try{
				if (c<1){
					throw new Exception("请选中一个项目");
				}else if(c>1){
					throw new Exception("一次只能改一个项目");
				}else{
					new setDialog(frame);
				}
			}catch(Exception exp){
				new errorDialog(exp);
			}
		}else if (cmd=="查找"){
			new findDialog(frame);
		}else if (cmd=="排序"){
			list.sort();
			mt.fireTableDataChanged(); 
		}else if (cmd=="载入"){
			File file=null;
			fileChooser.setDialogTitle("载入");
			result = fileChooser.showOpenDialog(frame);
			if (result == JFileChooser.APPROVE_OPTION){
				file = fileChooser.getSelectedFile();
				try {
					ObjectInputStream in = new ObjectInputStream(
							new FileInputStream(file));
					list= (List)in.readObject();
					in.close();
				}catch (Exception exception){
					new errorDialog(exception);
				}
				mt.fireTableDataChanged();
			}
		}else if (cmd=="保存"){
			File file=null;
			fileChooser.setDialogTitle("保存");
			result = fileChooser.showSaveDialog(frame);
			if (result == JFileChooser.APPROVE_OPTION){
				file = fileChooser.getSelectedFile();
				try {
					ObjectOutputStream out = new ObjectOutputStream(
							new FileOutputStream(file));
					out.writeObject(list);
					out.close();
				}catch (Exception exception){
					new errorDialog(exception);
				}
			}

		}else if (cmd=="合并"){
			File file=null;
			List list2=null;
			fileChooser.setDialogTitle("合并");
			result = fileChooser.showOpenDialog(frame);
			if (result == JFileChooser.APPROVE_OPTION){
				file = fileChooser.getSelectedFile();
				try {
					ObjectInputStream in = new ObjectInputStream(
							new FileInputStream(file));
					list2= (List)in.readObject();
					in.close();
					list=list.merge(list,list2);
				}catch (Exception exp){
					new errorDialog(exp);
				}
				mt.fireTableDataChanged(); 
			}
		}

	}

	class MyTable extends AbstractTableModel{
		String[] n = {"姓名","电话"};
		public int getColumnCount() {
			return n.length;
		}
		public int getRowCount() {
			return list.len;
		}
		public String getColumnName(int col) {
			return n[col];
		}
		public Object getValueAt(int row, int col) {
			switch(col){
			case 0:return list.data[row].getName();
			case 1:return list.data[row].getTel();
			default:return "";
			}

		}
	}
	class myDialog implements ActionListener{
		JDialog dialog;
		JPanel p=new JPanel();
		JButton
		ok=new JButton("确定"),
		cancel=new JButton("取消");
		JLabel
		namel=new JLabel("姓名:"),
		tell=new JLabel("电话:");
		JTextField
		nametf=new JTextField(7),
		teltf=new JTextField(7);
		void launch(){
			p.add(namel);
			p.add(nametf);
			p.add(tell);
			p.add(teltf);
			p.add(ok);
			p.add(cancel);
			ok.addActionListener(this);
			cancel.addActionListener(this);	
			dialog.add(p);
			dialog.setSize(140,120);
			dialog.setResizable(false);
			dialog.setLocationRelativeTo(frame);
			dialog.setVisible(true);
		}
		void action()throws Exception{};
		public void actionPerformed(ActionEvent event){
			String cmd=event.getActionCommand();
			if (cmd=="确定"){
				try{
					action();
				}catch(NumberFormatException exp){
					new errorDialog(new Exception("电话为整数"));
				}catch(Exception exp){
					new errorDialog(exp);
				}
			}else if (cmd=="取消"){
				dialog.dispose();
			}
		}
	}

	class insDialog extends myDialog{
		insDialog(JFrame f){
			dialog=new JDialog(frame,"插入",true);
			launch();
		}
		void action()throws Exception{
			list.ins(list.len,new Data(nametf.getText(),Integer.parseInt(teltf.getText())));
			nametf.setText("");
			teltf.setText("");
			mt.fireTableDataChanged(); 
		}
	}

	class setDialog extends myDialog{
		int select[]=t.getSelectedRows();
		setDialog(JFrame f){
			dialog=new JDialog(f,"修改",true);
			nametf.setText(list.data[select[0]].getName());
			teltf.setText(Integer.toString(list.data[select[0]].getTel()));
			launch();
		}
		void action()throws Exception{
			String name=nametf.getText();
			String tel=teltf.getText();
			list.set(select[0],new Data(name,Integer.parseInt(tel)));
			mt.fireTableDataChanged(); 
			dialog.dispose();
		}
	}

	class findDialog extends myDialog{
		findDialog(JFrame f){
			dialog=new JDialog(f,"查找",true);
			teltf.setEditable(false);
			launch();
		}
		void action()throws Exception{
			int index=list.find(nametf.getText());
			if(index==-1){
				throw new Exception("没有找到!");
			}else{
				teltf.setText(Integer.toString(list.data[index].getTel()));
			}
		}
	}

	class errorDialog implements ActionListener{
		JDialog dialog;
		JPanel p;
		JButton ok=new JButton("确定");

		errorDialog(Exception e){
			dialog=new JDialog(frame,"错误!",true);
			p=new JPanel();
			ok=new JButton("确定");

			p.add(new JLabel(e.getMessage()));
			p.add(ok);
			ok.addActionListener(this);
			dialog.add(p);
			dialog.pack();
			dialog.setResizable(false);
			dialog.setLocationRelativeTo(frame);
			dialog.setResizable(false);
			dialog.setVisible(true);
		}
		void action(){};
		public void actionPerformed(ActionEvent event){
			String cmd=event.getActionCommand();
			if (cmd=="确定"){dialog.dispose();}
		}
	}
	public static void main(String[] args) {
		new PhoneBookGUI();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -