java综合练习,制作电话簿

包就像文件夹,将java类区分管理 

 在不同的包中可以出现相同的类名 

命名规则: 

     通常以域名反写为前缀 

     如:com.google.common

     包名全部小写,不能以点开头

     避免使用重复的包名 

     如:把自己项目报名写成com.google


导入包

 如何使用另一个包中的类 

使用完全限定名 如:

     java.util.Scanner 

在文件中导入 

     import java.util.Scanner; 

     再使用时就不需要加java.util.了; 

     import语句位于package语句下方



方案一:

功能:1:新增  2:删除   3:快速查找    4:修改  5:退出

运行时直接显示练习人,一目了然.代码中把不同的功能封装成各种方法,但在写代码是发现有很多代码都是重复的.总体来看,感觉代码不够精简,此方法,没有用到类_数组保存用户数据,而是把文件中数据通过中间变量进行修改或增减.

package com.phonebook.begin;

import java.io.IOException;

import com.phonebook.app.App;

public class Begin {

	public static void main(String[] args) throws IOException {
		App app = new App();
		while(true){
			int a = app.ui();
			if (a == 1){
				break;
			}
		}

	}

}
package com.phonebook.app;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class App {
	final String Path = "h:/lianxiren.txt";
	final String Mark = "\t";

	public int ui() throws IOException {
		System.out.println("                                  电话本系统1.0");
		System.out.println("  姓名         \t   电话                  \t      邮箱");
		System.out.println("==========================================");
		try {
			read();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("==========================================");
		System.out.println("1:新增          2:删除          3:快速查找           4:修改         5:退出");
		Scanner input = new Scanner(System.in);
		String choose = input.next();
		if (choose.matches("[a-zA-Z]")) {
			System.out.println("输入错误!");
		} else {
			switch (choose) {
			case "1":
				add();
				break;
			case "2":
				del();
				break;
			case "3":
				find();
				break;
			case "4":
				xiuGai();
				break;
			case "5":
				System.out.println("再见!");
				return 1;
			}
		}
		return 0;
	}

	// 读取联系人
	public void read() throws Exception {
		File f = new File(Path);
		if (!f.isFile()) {
			f.createNewFile();
		}
		BufferedReader br = new BufferedReader(new FileReader(f));
		int i = 1;
		while (true) {
			String str = br.readLine();
			
			if (str != null && str.length() > 0) {
				String[] strs = str.split(Mark);
				System.out.println(i + ":" + strs[0] + Mark + strs[1] + Mark
						+ strs[2]);
			}
			if (str == null) {
				br.close();
				return;
			}
			i++;
		}

	}

	// 新增联系人
	public void add() throws IOException {
		File f = new File(Path);
		FileWriter fw = new FileWriter(f, true);
		BufferedWriter bw = new BufferedWriter(fw);
		Scanner input = new Scanner(System.in);
		System.out.println("请输入姓名: ");
		String name = input.next();
		System.out.println("请输入电话号码: ");
		String num = input.next();
		System.out.println("请输入邮箱: ");
		String email = input.next();
		String str = name + Mark + num + Mark + email;
		bw.write("\n" + str);
		bw.flush();
		bw.close();
		fw.close();
		System.out.println("新增联系人完成!");
	}

	// 删除联系人
	public void del() throws IOException {
		Scanner input = new Scanner(System.in);
		File f = new File(Path);
		BufferedReader br = new BufferedReader(new FileReader(f));
		String[] user = new String[200];
		for (int i = 0; i < user.length; i++) {
			String str = br.readLine();
			if (str != null) {
				user[i] = str;
			}
		}
		System.out.print("请输入要删除的姓名: ");
		String delName = input.next();
		for (int i = 0; i < user.length; i++) {
			if (user[i].contains(delName)) {
				System.out.println(user[i]);
				System.out.println("你确定要删除码?");
				if (input.next().equals("y")) {
					user[i] = null;
					System.out.println("删除成功!");
					i = user.length;
				}
			}
		}
		FileWriter fw = new FileWriter(f);
		BufferedWriter bw = new BufferedWriter(fw);
		for (String s : user) {
			if (s != null) {
				bw.write(s + "\r\n");
			}
		}
		bw.flush();
		bw.close();
		fw.close();
		br.close();
	}

	// 快速查找联系人
	public void find() throws IOException {
		File f = new File(Path);
		BufferedReader br = new BufferedReader(new FileReader(f));
		Scanner input = new Scanner(System.in);
		System.out.println("请输入要查找的关键字: ");
		String str = input.next();
		for (int i = 0; i < 500; i++) {
			String s = br.readLine();
			if (s != null && s.contains(str)) {
				System.out.println(s);
			}
		}
		br.close();
		System.out.println("按y键继续..");
		String wait = input.next();
	}

	// 修改联系人
	public void xiuGai() throws IOException {
		Scanner input = new Scanner(System.in);
		File f = new File(Path);
		FileReader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);
		String[] user = new String[500];
		for (int i = 0; i < user.length; i++) {
			String s = br.readLine();
			if (s != null) {
				user[i] = s;
			}
		}
		System.out.print("请输入要修改的联系人: ");
		String re = input.next();
		boolean bool= true;
		for (int i = 0; i < user.length; i++) {
			if ( user[i] != null && user[i].contains(re)) {
				System.out.print("请输入姓名: ");
				String name = input.next();
				System.out.print("请输入电话号码: ");
				String num = input.next();
				System.out.print("请输入邮箱: ");
				String email = input.next();
				user[i] = name + Mark + num + Mark + email;
				bool = false;
				break;
				
			}
		}
		if (!bool){
			System.out.println("修改完成!");
		}else{
			System.out.println("找不到该联系人!");
		}
		FileWriter fw = new FileWriter(f);
		BufferedWriter bw = new BufferedWriter(fw);
		for (int i = 0; i < user.length; i++) {
			if (user[i] != null) {
				bw.write(user[i] + "\r\n");
			}
		}
		bw.flush();
		bw.close();
		fw.close();
		br.close();
		fr.close();
	}

}

-------

方案二:

功能: 1 新增   2:修改   3:查找   4:删除   5:显示全部  6:退出

代码: 代码复用性比方案一高.写代码时思路比较清晰,也比较简单.用到了自定义类_数组.为了防止提示空指针异常,中间有很多小细节要注意.数据的读取与保存也有很多地方要注意,非常容易出错

package com.phonebook.update;

import java.io.IOException;

public class KaiShi {

	public static void main(String[] args) throws IOException {
		App app = new App();
		while (true) {
			app.begin();
		}

	}

}

--

package com.phonebook.update;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

import com.phonebook.user.User;

public class App {
	final String Path = "h:/mingdan.txt";
	final String Mark = "\t";
	User[] user = new User[500];

	public void begin() throws IOException {
		read();
		Scanner input = new Scanner(System.in);

		while (true) {
			System.out.println("      电话簿1.2");
			System.out.println("===================");
			System.out.println("      1:新增");
			System.out.println("      2:修改");
			System.out.println("      3:查找");
			System.out.println("      4:删除");
			System.out.println("      5:显示全部");
			System.out.println("      6:退出");
			System.out.println("===================");
			switch (input.next()) {
			case "1":
				boolean bool = false;
				for (int i = 0; i < user.length; i++) {
					if (user[i] == null) {
						User us = new User();
						System.out.print("请输入姓名: ");
						us.setName(input.next());
						System.out.print("请输入手机号: ");
						us.setNum(input.next());
						System.out.print("请输入邮箱: ");
						us.seteMail(input.next());
						user[i] = us;
						bool = true;
						break;

					}
				}
				if (!bool) {
					System.out.println("内存已满");
				} else {
					System.out.println("新增成功!");
				}
				break;
			case "2":
				System.out.println("请输入要修改的联系人的姓名: ");
				String reName = input.next();
				boolean bool1 = false;
				for (int i = 0; i < user.length; i++) {
					if (user[i] != null && user[i].getName().equals(reName)) {
						System.out.print("请输入姓名: ");
						user[i].setName(input.next());
						System.out.print("请输入手机号: ");
						user[i].setNum(input.next());
						System.out.print("请输入邮箱: ");
						user[i].seteMail(input.next());
						bool1 = true;
						break;
					}
				}
				if (bool1) {
					System.out.println("修改联系人完成!");
				} else {
					System.out.println("为找到该联系人!");
				}
				break;
			case "3":
				System.out.println("请输入要查找的关键字: ");
				String find = input.next();
				System.out.println("--------------------------------------");
				for (int i = 0; i < user.length; i++) {
					if (user[i] != null) {
						String ff = user[i].getName() + user[i].getNum()
								+ user[i].geteMail();
						if (ff.contains(find)) {
							System.out.println(user[i].getName() + Mark
									+ user[i].getNum() + Mark
									+ user[i].geteMail());
						}
					}
				}
				System.out.println("--------------------------------------");
				System.out.println("按任意键继续...");
				input.next();
				break;
			case "4":
				System.out.println("请输入要删除的联系人的姓名: ");
				String delName = input.next();
				boolean bool2 = false;
				for (int i = 0; i < user.length; i++) {
					if (user[i] != null && user[i].getName().equals(delName)) {
						user[i] = null;
						bool2 = true;
						break;
					}
				}
				if (bool2) {
					System.out.println("删除联系人成功!");
				} else {
					System.out.println("未找到该联系人!");
				}
				break;
			case "5":
				System.out.println("姓名        \t         手机号\t        邮箱");
				System.out
						.println("--------------------------------------------");
				for (int i = 0; i < user.length; i++) {
					if (user[i] != null) {
						System.out.println(user[i].getName() + Mark
								+ user[i].getNum() + Mark + user[i].geteMail());
					}
				}
				System.out
						.println("--------------------------------------------");
				System.out.println("按任意键继续...");
				input.next();
				break;
			case "6":
				save();
				System.out.println("再见!");
				return;
			}

		}
	}

	// 读取本地数据
	public void read() throws IOException {
		File f = new File(Path);
		if (!f.isFile()) {
			f.createNewFile();
		}
		FileReader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);
		for (int i = 0; i < 500; i++) {
			String str = br.readLine();
			if (str != null && str.length() > 0) {
				String[] strs = str.split(Mark);
				User us = new User();
				us.setName(strs[0]);
				us.setNum(strs[1]);
				us.seteMail(strs[2]);
				user[i] = us;
			}
		}
	}

	// 把数据保存到本地
	public void save() throws IOException {
		File f = new File(Path);
		FileWriter fw = new FileWriter(f);
		BufferedWriter bw = new BufferedWriter(fw);
		for (int i = 0; i < user.length; i++) {
			if (user[i] != null) {
				String str = user[i].getName() + Mark + user[i].getNum() + Mark
						+ user[i].geteMail();
				bw.write(str + "\r\n");
			}
		}
		bw.flush();
		bw.close();
		fw.close();
	}
}

---

package com.phonebook.user;

public class User {
	private String name;
	private String num;
	private String eMail;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String geteMail() {
		return eMail;
	}
	public void seteMail(String eMail) {
		this.eMail = eMail;
	}
	
	

}






你可能感兴趣的:(java,包,电话簿,电话本,保存本地)