标Java电话薄期末大作业

//主类
package phone;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Phone {
	public static ArrayList<Person> list = new ArrayList<Person>();//创建静态ArrayList类对象方便其他类的调用

	public static void main(String[] args) throws Exception {
		Person p1 = new Person(3, "houzi", "18", "m", "17530530178", "beijing");//在list中添加duixiang
		Person p2 = new Person(2, "jing", "20", "f", "18530530178", "anyang");
		Person p3 = new Person(1, "rose", "19", "m", "13530530178", "zhengzhou");
		Person p4 = new Person(6, "annie", "21", "m", "15530530178", "zhumadian");
		Person p5 = new Person(4, "honey", "17", "f", "18830530178", "zhoukou");
		Person p6 = new Person(5, "tom", "31", "f", "15130530178", "sanmenxia");
		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		list.add(p5);
		list.add(p6);
		Menu m = new Menu();//创建Menu对象
		m.show();//显示菜单
	}

}


package phone;

public class Person {
	private int user_id;// 用户ID 属性
	private String user_name;// 用户姓名属性
	private String user_age;// 用户年龄属性
	private String user_sex;// 用户性别属性
	private String user_telNum;// 用户电话号码属性
	private String user_address;// 用户地址属性

	public Person() {
	}

	public Person(int user_id, String user_name, String user_age, String user_sex, String user_telNum,
			String user_address) {
		super();
		this.user_id = user_id;
		this.user_name = user_name;
		this.user_age = user_age;
		this.user_sex = user_sex;
		this.user_telNum = user_telNum;
		this.user_address = user_address;
	}

	public int getuser_Id() {
		return user_id;
	}

	public void setuser_Id(int id) {
		this.user_id = id;
	}

	public String getuser_Age() {
		return user_age;
	}

	public void setuser_Age(String age) {
		this.user_age = age;
	}

	public String getuser_Sex() {
		return user_sex;
	}

	public void setuser_Sex(String sex) {
		this.user_sex = sex;
	}

	public String getuser_TelNum() {
		return user_telNum;
	}

	public void setuser_TelNum(String telNum) {
		this.user_telNum = telNum;
	}

	public String getuser_Address() {
		return user_address;
	}

	public void setuser_Address(String address) {
		this.user_address = address;
	}

	public String getuser_Name() {
		return user_name;
	}

	public void setuser_Name(String name) {
		this.user_name = name;
	}

	public String toString() {
		return "id=" + this.user_id + " name=" + this.user_name + " age=" + this.user_age + " sex=" + this.user_sex
				+ " telNum=" + this.user_telNum + " address=" + this.user_address + "\r\n";
	}
}
package phone;

import java.util.*;

public class Operate {
	TelNoteRegex tn = new TelNoteRegex();
	static Menu m = new Menu();// 注意这里 必须加静态 
	ArrayList<Person> list = Phone.list;//通过不同类之间调用同一个List
	Scanner sc = new Scanner(System.in);
	
	// 一添加记录------------------------------------------------------------------------
	public void addlogic() throws Exception {
		String num = sc.nextLine();
		if (num.equals("1") || num.equals("2") || num.equals("3")) {
			switch (num) {
			case "1":
				addTel();// 添加新记录
				break;
			case "2":
				display();// 查看全记录
				m.addMenu();
				break;
			case "3":
				m.show();
				break;
			}
		} else {
			System.out.println("你输入有误,请重新输入!");
			addlogic();
		}

	}

	// 具体添加********************************
	public void addTel() throws Exception {
		System.out.println("请输入姓名(小于15个字符)");
		String name = sc.next();
		name = tn.nameRegex(name);// 正则表达式判断
		System.out.println("请输入年龄1-100");
		String age = sc.next();
		age = tn.age(age);
		System.out.println("请输入性别    M/m   F/f");
		String sex = sc.next();
		sex = tn.sexRegex(sex);
		System.out.println("请输入11位手机号码");
		String telNum = sc.next();
		telNum = tn.telRegex(telNum);
		System.out.println("请输入住址(小于15个英文字符)");
		String address = sc.next();
		address = tn.addressRegex(address);
		int count = 6;
		count++;
		Person p = new Person(count, name, age, sex, telNum, address);
		list.add(p);
		System.out.println("添加成功");
		m.addMenu();
	}

	// 打印电话记录*******************************
	public void display() throws Exception {
		Iterator<Person> it = list.iterator();
		while(it.hasNext()) {
			Person p = it.next();
			System.out.println("id=" + p.getuser_Id() + " name=" + p.getuser_Name() + " age=" + p.getuser_Age() + " sex=" + p.getuser_Sex()
					+ " telNum=" + p.getuser_TelNum() + " address=" + p.getuser_Address() + "\r\n"
	);
		}
//		for (Object obj : list) {
//			System.out.println(obj);
//		}
		System.out.println("以上是有人员记录!");
	}

	// 二查找操作的具体方法----------------------------
	public void searchlogic() throws Exception {
		String num = sc.nextLine();
		// 判断用户输入的操作是否正确
		if (num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4") || num.equals("5")
				|| num.equals("6") || num.equals("7")) {
			switch (num) {
			case "1":
				nameSearch();
				m.seeMenu();
				break;// 1按姓名查找
			case "2":
				ageSearch();
				m.seeMenu();
				break;// 2按年龄查找
			case "3":
				sexSearch();
				m.seeMenu();
				break;// 3 按性别查找
			case "4":
				numberSearch();
				m.seeMenu();
				break;// 4 按号码查找
			case "5":
				addressSearch();
				m.seeMenu();
				break;// 5 按住址查找
			case "6":
				display();
				m.seeMenu();
				break;// 6 查看全记录
			case "7":
				m.show();
				break;// 7 返回上一级
			}

		} else {
			System.out.println("你的输入有误!请重新输入:");
			searchlogic();
		}
	}

	// 1按姓名查找
	private void nameSearch() {
		System.out.println("请输入姓名:");
		String user_Name = sc.nextLine();
		user_Name = tn.nameRegex(user_Name);// 正则表达式判断
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (user_Name.equals(per.getuser_Name())) {
				System.out.println("id: " + per.getuser_Id() + "  姓名:" + per.getuser_Name() + "  性别:"
						+ per.getuser_Sex() + "  年龄:" + per.getuser_Age() + "  手机号:" + per.getuser_TelNum() + "  住址:"
						+ per.getuser_Address());
				flag = 0;
			}

		}
		if (flag == 1) {
			System.out.println("还某有添加这个嘞!");
		}
	}

	// 2按年龄查找
	private void ageSearch() {
		System.out.println("请输入年龄:");
		String user_age = sc.nextLine();
		user_age = tn.age(user_age);
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (user_age.equals(per.getuser_Age())) {
				System.out.println("id: " + per.getuser_Id() + "  年龄:" + per.getuser_Age() + "  性别:" + per.getuser_Sex()
						+ "  姓名:" + per.getuser_Name() + "  手机号:" + per.getuser_TelNum() + "  住址:"
						+ per.getuser_Address());
				flag = 0;
			}

		}
		if (flag == 1) {
			System.out.println("还某有添加这个嘞!");
		}
	}

	// 3按性别查找
	private void sexSearch() {
		System.out.println("请输入性别:");
		String user_sex = sc.nextLine();
		user_sex = tn.sexRegex(user_sex);
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (user_sex.equals(per.getuser_Sex())) {
				System.out.println("id: " + per.getuser_Id() + "  性别:" + per.getuser_Sex() + "  姓名:"
						+ per.getuser_Name() + "  年龄:" + per.getuser_Age() + "  手机号:" + per.getuser_TelNum() + "  住址:"
						+ per.getuser_Address());
				flag = 0;
			}

		}
		if (flag == 1) {
			System.out.println("还某有添加这个嘞!");
		}
	}

	// 4按号码查找
	private void numberSearch() {
		System.out.println("请输入号码:");
		String user_TelNum = sc.nextLine();
		user_TelNum = tn.telRegex(user_TelNum);// 判断
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (user_TelNum.equals(per.getuser_TelNum())) {
				System.out.println("id: " + per.getuser_Id() + "  手机号:" + per.getuser_TelNum() + "  性别:"
						+ per.getuser_Sex() + "  年龄:" + per.getuser_Age() + "  姓名:" + per.getuser_Name() + "  住址:"
						+ per.getuser_Address());
				flag = 0;
			}

		}
		if (flag == 1) {
			System.out.println("还某有添加这个嘞!");
		}
	}

	// 5按住址查找
	private void addressSearch() {
		System.out.println("请输入住址:");
		String user_Address = sc.nextLine();
		user_Address = tn.addressRegex(user_Address);// 判断
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (user_Address.equals(per.getuser_Address())) {
				System.out.println("id: " + per.getuser_Id() + "  手机号:" + per.getuser_TelNum() + "  性别:"
						+ per.getuser_Sex() + "  年龄:" + per.getuser_Age() + "  姓名:" + per.getuser_Name() + "  住址:"
						+ per.getuser_Address());
				flag = 0;
			}

		}
		if (flag == 1) {
			System.out.println("还某有添加这个嘞!");
		}
	}

	// 三修改记录------------------------------------------------------------------------
	public void modlogic() throws Exception {
		String num = sc.nextLine();
		// 判断用户输入的操作是否正确
		if (num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4") || num.equals("5")
				|| num.equals("6") || num.equals("7")) {
			switch (num) {
			case "1":
				nameMod();
				m.modMenu();
				break;// 1修改姓名
			case "2":
				ageMod();
				m.modMenu();
				break;// 2修改年齡
			case "3":
				sexMod();
				m.modMenu();
				break;// 3 修改性別
			case "4":
				numberMod();
				m.modMenu();
				break;// 4 修改电话
			case "5":
				addressMod();
				m.modMenu();
				break;// 5 修改地址
			case "6":
				display();
				m.modMenu();
				break;// 6 查看修改记录
			case "7":
				m.show();
				break;// 7 返回上一级
			}

		} else {
			System.out.println("操作有问题呀!:");
			modlogic();
		}
	}

	private void addressMod() {
		System.out.println("你想修改谁的地址:");
		String modname1 = sc.nextLine();
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (modname1.equals(per.getuser_Name())) {
				System.out.println("想改到那:");
				String modaddress = sc.nextLine();
				modaddress = tn.addressRegex(modaddress);
				per.setuser_Address(modaddress);
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("某有这个人!");
		} else {
			System.out.println("修改完毕!");
		}
	}

	private void numberMod() {
		System.out.println("你想修改谁的电话:");
		String modname1 = sc.nextLine();
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (modname1.equals(per.getuser_Name())) {
				System.out.println("想改成啥:");
				String modtel = sc.nextLine();
				modtel = tn.telRegex(modtel);
				per.setuser_TelNum(modtel);
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("某有这个人!");
		} else {
			System.out.println("修改完毕!");
		}
	}

	private void sexMod() {
		System.out.println("谁要变性??:");
		String modname1 = sc.nextLine();
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (modname1.equals(per.getuser_Name())) {
				System.out.println("请输入m/M f/F:");
				String modsex = sc.nextLine();
				modsex = tn.sexRegex(modsex);
				per.setuser_Sex(modsex);
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("某有这个人!");
		} else {
			System.out.println("修改完毕!");
		}
	}

	private void ageMod() {
		System.out.println("你想修改谁的年龄");
		String modname1 = sc.nextLine();
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (modname1.equals(per.getuser_Name())) {
				System.out.println("想改到几岁");
				String modage = sc.nextLine();
				modage = tn.age(modage);
				per.setuser_Age(modage);
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("某有这个人!");
		} else {
			System.out.println("修改完毕!");
		}
	}

	private void nameMod() {
		System.out.println("你想修改谁的姓名");
		String modname1 = sc.nextLine();
		int flag = 1;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (modname1.equals(per.getuser_Name())) {
				System.out.println("想改成啥:");
				String modname2 = sc.nextLine();
				modname2 = tn.nameRegex(modname2);// 对用户名再次判断
				per.setuser_Name(modname2);
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("某有这个人!");
		} else {
			System.out.println("修改完毕!");
		}
	}

	// 删除----------------------------------------------------------
	public void deleteLogic() throws Exception {
		String num = sc.nextLine();
		// 判断用户输入的操作是否正确
		if (num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4")) {
			switch (num) {
			case "1":
				removeAll();// 1删除所有
				m.deleteMenu();
				break;
			case "2":
				removeName();// 2指定姓名删除
				m.deleteMenu();
				break;
			case "3"://3查看记录
				display();
				m.deleteMenu();
				break;
			case "4": // 4 返回上一级
				m.show();
				break;

			}

		} else {
			System.out.println("操作有问题呀!:");
			deleteLogic();
		}

	}

	// 1删除所有
	private void removeAll() {

		list.removeAll(list);
		System.out.println("已删除所有记录");

	}

	// 2指定姓名删除
	private void removeName() {
		System.out.println("请输入要删除的人姓名:");
		String name = sc.nextLine();
		int flog = 0;
		Iterator<Person> it = list.iterator();
		while (it.hasNext()) {
			Person per = it.next();
			if (name.equals(per.getuser_Name())) {
				it.remove();
				System.out.println("删除成功!");
				flog = 1;
			}
		}
		if (flog == 0) {
			System.out.println("删除失败 没有该人员!");
		}
	}
	//排序-------------------------------------------------------------
	public void orderLogic() throws Exception {
		String num = sc.nextLine();
		// 判断用户输入的操作是否正确
		if (num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4") || num.equals("5")
				|| num.equals("6")|| num.equals("7")) {
			switch (num) {
			case "1":
				nameOrder();
				m.orderMenu();
				break;// 1排序姓名
			case "2":
				ageOrder();
				m.orderMenu();
				break;// 2排序年齡
			case "3":
				idOrder();
				m.orderMenu();
				break;// 3 排序ID
			case "4":
				numberOrder();
				m.orderMenu();
				break;// 4 排序电话
			case "5":
				addressOrder();
				m.orderMenu();
				break;// 5 排序地址
			case "6":
				display();
				m.orderMenu();
				break;// 6 查看记录
			case "7":
				m.show();
				break;// 7 返回上一级
			}

		} else {
			System.out.println("操作有问题呀!:");
			orderLogic();
		}
		
	}
	//1排序姓名
	private void nameOrder() {
		Collections.sort(list,new NameComparator());
		System.out.println("排序完成");	
	}
	//2排序年齡
	private void numberOrder() {
		Collections.sort(list,new TelComparator());
		System.out.println("排序完成");		
	}
	// 3 排序ID
	private void idOrder() {
		Collections.sort(list,new idComparator());
		System.out.println("排序完成");	
	}
	// 4 排序电话
	private void ageOrder() {
		Collections.sort(list,new AgeComparator());
		System.out.println("排序完成");	
	}
	// 5 排序地址
	private void addressOrder() {
		Collections.sort(list,new AddressComparator());
		System.out.println("排序完成");	
	}
	//自定义姓名排序类
	class NameComparator implements Comparator<Person>{

		public int compare(Person o1, Person o2) {
			return o1.getuser_Name().compareTo(o2.getuser_Name());
		}
	}
	//自定义id排序类
	class idComparator implements Comparator<Person>{

		public int compare(Person o1, Person o2) {
			
			return Integer.valueOf(o1.getuser_Id()).compareTo(Integer.valueOf(o2.getuser_Id()));
		}
	}
	//自定义年齡排序类
	class AgeComparator implements Comparator<Person>{

		public int compare(Person o1, Person o2) {
			return Integer.valueOf(o1.getuser_Age()).compareTo(Integer.valueOf(o2.getuser_Age()));
		}
		
	}
	//自定义手机号排序类
	class TelComparator implements Comparator<Person>{
		
		public int compare(Person o1, Person o2) {
			return o1.getuser_TelNum().compareTo(o2.getuser_TelNum());
		}
		
	}
	//自定义地址排序类
	class AddressComparator implements Comparator<Person>{
		
		public int compare(Person o1, Person o2) {
			return o1.getuser_Address().compareTo(o2.getuser_Address());
		}
		
	}

}
package phone;

import java.util.Scanner;

public class Menu {
	Operate o = new Operate();
	//一级窗口
	public void show() throws Exception {
		System.out.println("------------------------\r\n" + "	1 添加纪录\r\n" + "	2 查找记录\r\n" + "	3 修改记录\r\n"
				+ "	4 删除记录\r\n" + "	5 排序记录\r\n" + "	6 退出系统\r\n" + "------------------------\r\n" + "请输入1-6的正确操作!");

		Scanner sc = new Scanner(System.in);

		while (true) {
			String num = sc.nextLine();
			// 输入一个String类型的数判断是否为正确的操作
			if (num.equals("1") || num.equals("2") || num.equals("3") || num.equals("4") || num.equals("5")
					|| num.equals("6")) {

				switch (num) {
				case "1":
					addMenu();// 添加记录
					break;
				case "2":
					seeMenu();// 查找记录
					break;
				case "3":
					modMenu();// 修改记录
					break;
				case "4":
					deleteMenu();// 删除
					break;
				case "5":
					orderMenu();// 排序记录
					break;
				case "6":
					System.out.println("Bye!");
					System.exit(0);
					break;
				}
				break;
			} else {
				System.out.println("你的输入有误,请重新输入!");
				num = sc.nextLine();
			}
		}
	}

	// 添加纪录2级窗口
	public void addMenu() throws Exception {
		System.out.println("------1:添加新记录------");
		System.out.println("------2:查看全记录------");
		System.out.println("------3:返回上一级------");
		System.out.println("请输入要进行的操作:");
		o.addlogic();//添加控制

	}

	// 查找联系人二级窗口
	public void seeMenu() throws Exception {
		System.out.println("-------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("	7 返回上一级");
		System.out.println("----------------------");
		System.out.println("请输入正确的数字,最小是:1  最大是:7");
		o.searchlogic();
	}

	// 修改联系人信息二级窗口
	public void modMenu() throws Exception {
		System.out.println("-------3修改记录----------");
		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("	7返回上一级");
		System.out.println("------------------------");
		o.modlogic();
	}

	// 删除联系人
	public void deleteMenu() throws Exception{
		System.out.println("-------4删除记录----------");
		System.out.println("-------------------------");
		System.out.println("	1删除所有记录");
		System.out.println("	2删除指定人记录");
		System.out.println("	3查看记录");
		System.out.println("	4返回上一级");
		System.out.println("-------------------------");
		o.deleteLogic();
	}

	// 排序联系人信息
	public void orderMenu() throws Exception{
		System.out.println("-------5排序记录----------");
		System.out.println("-------------------------");
		System.out.println("	1按姓名排序");
		System.out.println("	2按年龄排序");
		System.out.println("	3按ID排序");
		System.out.println("	4按手机号排序");
		System.out.println("	5按地址排序");
		System.out.println("	6查看记录");
		System.out.println("	7返回上一级");
		System.out.println("-------------------------");
		o.orderLogic();
	}

}
package phone;

import java.util.Scanner;

public // 操作验证类

class TelNoteRegex {
	Scanner sc = new Scanner(System.in);

	// 验证名字
	public String nameRegex(String Name) {
		while (!checkName(Name)) {
			System.out.println("用户名不合法,请重新输入:");
			Name = sc.nextLine();
		}

		return Name;
	}

	// 
	public static boolean checkName(String Name) {
		if (Name.length() <= 15 && Name.length() >= 1) {

//			char c = Name.charAt(0);
			//^(([\u4e00-\u9fa5]{2,8})|([a-zA-Z]{2,16}))$
			if (Name.matches("^(([\\u4e00-\\u9fa5]{2,8})|([a-zA-Z]{1,16}))$")) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}

	// 对年龄验证
	public String age(String age) {
//		System.out.println("请输入年龄,1-100");
		Scanner scan = new Scanner(System.in);
//		String age1 = "";
		while (!age.matches("[0-9]{1,2}")) {
			System.out.println("你的输入有误,请重新输入年龄,1-100");
			age = scan.nextLine();
		}
		return age;
	}

	// 验证性别
	public String sexRegex(String sex) {
		while (true) {
			if (!(sex.equals("m") || sex.equals("f") || sex.equals("M") || sex.equals("F"))) {
				System.out.println("输入有误,请重新输入");
				sex = sc.nextLine();
			} else {
				break;
			}
		}
		return sex;

	}

	// 验证手机号
	public String telRegex(String telNum) {
		while (true) {
			if (isMobile(telNum)) {
				System.out.println(telNum + "是符合的手机号码");
				break;
			} else {
				System.out.println(telNum + "不符合,请重新输入!");
				telNum = sc.next();
			}
		}
		return telNum;
	}

	public static boolean isMobile(String str) {
		if (str.length() <= 11 && str.length() >= 6) {

//			char c = str.charAt(0);

			if (str.matches("^(1[3-9])\\d{9}$")) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}

	// 验证地址
	public String addressRegex(String address) {
		while (true) {
			int len = address.length();
			if (len > 15 || len < 1) {
				System.out.println("您的输入操作不正确!请重新输入");
				address = sc.next();
				address = addressRegex(address);
			} else {
				break;
			}
		}
		return address;
	}
}