通讯录
此项目是为了让那些Java初学者有一个很好的练手的机会:
1 package com.bj.dxb; 2 3 public class App { 4 public static void main(String[] args) { 5 System.out.println("****此版本版权归董学斌所有****"); 6 App app = new App(); 7 app.start(); 8 } 9 10 // 主菜单控制 11 public void start() { 12 TelNoteRegex telNoteRegex = new TelNoteRegex(); 13 Operate operate = new Operate(); 14 while (true) { 15 Menu.getInstance().mainMenu(); 16 int key = telNoteRegex.menuRegex(1, 6); 17 switch (key) { 18 case 1: 19 operate.addLogic(); 20 break; 21 case 2: 22 operate.searchLogic(); 23 break; 24 case 3: 25 operate.modifyLogicLogic(); 26 break; 27 case 4: 28 operate.deleteLogic(); 29 break; 30 case 5: 31 operate.orderLogic(); 32 break; 33 case 6: 34 System.exit(0); 35 break; 36 } 37 } 38 } 39 }
1 package com.bj.dxb; 2 3 public class Menu { 4 private static Menu instance = null; 5 6 // 单例设计模式 7 private Menu() { 8 9 } 10 11 public static Menu getInstance() { 12 if (instance == null) { 13 instance = new Menu(); 14 return instance; 15 } 16 return instance; 17 } 18 19 // 主界面 20 public void mainMenu() { 21 System.out.println("*************************"); 22 System.out.println("** 1 添加记录 **"); 23 System.out.println("** 2 查找记录 **"); 24 System.out.println("** 3 修改记录 **"); 25 System.out.println("** 4 删除记录 **"); 26 System.out.println("** 5 排序记录 **"); 27 System.out.println("** 6 退出系统 **"); 28 System.out.println("*************************"); 29 } 30 31 // 添加界面 32 public void addMenu() { 33 System.out.println("*************************"); 34 System.out.println("** 1 添加新记录 **"); 35 System.out.println("** 2 查看全记录 **"); 36 System.out.println("** 3 返回上一级 **"); 37 System.out.println("*************************"); 38 39 } 40 41 // 查找界面 42 public void searchMenu() { 43 System.out.println("*************************"); 44 System.out.println("** 1 按姓名查找 **"); 45 System.out.println("** 2 按年龄查找 **"); 46 System.out.println("** 3 按性别查找 **"); 47 System.out.println("** 4 按号码查找 **"); 48 System.out.println("** 5 按住址查找 **"); 49 System.out.println("** 6 查看全记录 **"); 50 System.out.println("** 7 返回上一级 **"); 51 System.out.println("*************************"); 52 53 } 54 55 // 修改界面 56 public void modifyMenu() { 57 System.out.println("*************************"); 58 System.out.println("** 1 查看全记录 **"); 59 System.out.println("** 2 修改指定记录 **"); 60 System.out.println("** 3 返回上一级 **"); 61 System.out.println("*************************"); 62 } 63 64 // 修改子界面 65 public void subModifyMenu() { 66 System.out.println("*************************"); 67 System.out.println("** 1 修改姓名 **"); 68 System.out.println("** 2 修改年龄 **"); 69 System.out.println("** 3 修改性别 **"); 70 System.out.println("** 4 修改号码 **"); 71 System.out.println("** 5 修改住址 **"); 72 System.out.println("** 6 返回上一级 **"); 73 System.out.println("*************************"); 74 } 75 76 // 删除界面 77 public void deleteMenu() { 78 System.out.println("*************************"); 79 System.out.println("** 1 查看全记录 **"); 80 System.out.println("** 2 删除指定记录 **"); 81 System.out.println("** 3 删除全部记录 **"); 82 System.out.println("** 4 返回上一级 **"); 83 System.out.println("*************************"); 84 } 85 86 // 排序界面 87 public void orderMenu() { 88 System.out.println("*************************"); 89 System.out.println("** 1 按姓名排序 **"); 90 System.out.println("** 2 按年龄排序 **"); 91 System.out.println("** 3 按性别排序 **"); 92 System.out.println("** 4 按原始排序 **"); 93 System.out.println("** 5 查看全部记录 **"); 94 System.out.println("** 6 返回上一级 **"); 95 System.out.println("*************************"); 96 } 97 98 }
1 package com.bj.dxb; 2 3 public class Person { 4 private int id; // 用户ID 属性 5 private String name; // 用户姓名属性 6 private String age; // 用户年龄属性 7 private String sex; // 用户性别属性 8 private String telNum; // 用户电话号码属性 9 private String address; // 用户地址属性 10 11 // 无参构造方法 12 public Person() { 13 14 } 15 16 // 有参构造方法 17 public Person(int id, String name, String age, String sex, String telNum, 18 String address) { 19 this.id = id; 20 this.name = name; 21 this.age = age; 22 this.sex = sex; 23 this.telNum = telNum; 24 this.address = address; 25 } 26 27 // 获取用户ID 28 public int getId() { 29 return id; 30 } 31 32 // 设置用户ID 33 public void setId(int id) { 34 this.id = id; 35 } 36 37 // 获取用户姓名 38 public String getName() { 39 return name; 40 } 41 42 // 设置用户姓名 43 public void setName(String name) { 44 this.name = name; 45 } 46 47 // 获取用户年龄 48 public String getAge() { 49 return age; 50 } 51 52 // 设置用户年龄 53 public void setAge(String age) { 54 this.age = age; 55 } 56 57 public String getSex() { 58 return sex; 59 } 60 61 // 设置用户性别 62 public void setSex(String sex) { 63 this.sex = sex; 64 } 65 66 // 获取用户电话 67 public String getTelNum() { 68 return telNum; 69 } 70 71 // 设置用户电话 72 public void setTelNum(String telNum) { 73 this.telNum = telNum; 74 } 75 76 // 获取用户地址 77 public String getAddress() { 78 return address; 79 } 80 81 // 设置用户地址 82 public void setAddress(String address) { 83 this.address = address; 84 } 85 86 @Override 87 public String toString() { 88 return "# " + "姓名 " + name + "\t年龄 " + age + "\t性别 " + sex + "\t电话号码 " 89 + telNum + "\t住址 " + address; 90 } 91 }
1 package com.bj.dxb; 2 3 import java.util.Scanner; 4 5 /** 6 * 用户输入验证类 7 * 8 * 9 */ 10 public class TelNoteRegex { 11 12 // 对菜单输入选项的验证 13 public int menuRegex(int min, int max) { 14 Scanner scanner = new Scanner(System.in); 15 String regex = "[" + min + "-" + max + "]{1}"; 16 int i = 0; 17 while (true) { 18 System.out.println("请输入正确的数字,最小是: " + min + " 最大是: " + max); 19 String inputStr = scanner.nextLine(); 20 if (inputStr.matches(regex)) { 21 i = Integer.parseInt(inputStr); 22 return i; 23 } else { 24 System.out.println("输入数字错误,请检查"); 25 } 26 } 27 } 28 29 // 对用户输入姓名的验证 30 public String nameRegex() { 31 Scanner scanner = new Scanner(System.in); 32 String regex = "[a-zA-Z]{1,10}"; 33 while (true) { 34 System.out.println("输入姓名:1-10位字母"); 35 String inputStr = scanner.nextLine(); 36 if (inputStr.matches(regex)) { 37 return inputStr; 38 } else { 39 System.out.println("输入姓名错误,请检查"); 40 } 41 } 42 } 43 44 // 对用户输入年龄的验证 45 public String ageRegex() { 46 Scanner scanner = new Scanner(System.in); 47 String regex = "[1-9]|[1-9]\\d|1[0-2]\\d"; 48 while (true) { 49 System.out.println("输入年龄:1-100+"); 50 String inputStr = scanner.nextLine(); 51 if (inputStr.matches(regex)) { 52 return inputStr; 53 } else { 54 System.out.println("输入年龄错误,请检查"); 55 } 56 } 57 } 58 59 // 对用户输入性别的验证 60 public String sexRegex() { 61 Scanner scanner = new Scanner(System.in); 62 String regex = "[mMfF]{1}"; 63 while (true) { 64 System.out.println("输入性别,(男 m or M) (女 f or F)"); 65 String inputStr = scanner.nextLine(); 66 if (inputStr.matches(regex)) { 67 return inputStr; 68 } else { 69 System.out.println("输入性别错误,请检查"); 70 } 71 } 72 } 73 74 // 对用户输入电话号码的验证 75 public String telNumRegex() { 76 Scanner scanner = new Scanner(System.in); 77 String regex = "\\d{6,11}"; 78 while (true) { 79 System.out.println("输入电话号码,6-11位数字"); 80 String inputStr = scanner.nextLine(); 81 if (inputStr.matches(regex)) { 82 return inputStr; 83 } else { 84 System.out.println("输入电话号码错误,请检查"); 85 } 86 } 87 } 88 89 // 对用户输入地址的验证 90 public String addressRegex() { 91 Scanner scanner = new Scanner(System.in); 92 String regex = "[a-zA-z0-9]{1,50}"; 93 while (true) { 94 System.out.println("输入地址,1-50位字母或数字"); 95 String inputStr = scanner.nextLine(); 96 if (inputStr.matches(regex)) { 97 return inputStr; 98 } else { 99 System.out.println("输入地址错误,请检查"); 100 } 101 } 102 } 103 104 }
1 package com.bj.dxb; 2 3 import java.util.Collections; 4 import java.util.Comparator; 5 import java.util.Vector; 6 7 public class Operate { 8 private Vector<Person> v = new Vector<Person>(); 9 private TelNoteRegex telNoteRegex = new TelNoteRegex(); 10 private int id = 1; 11 12 // 用户添加信息业务逻辑控制 13 public void addLogic() { 14 while (true) { 15 Menu.getInstance().addMenu(); 16 int key = telNoteRegex.menuRegex(1, 3); 17 switch (key) { 18 case 1: 19 addOperation(); 20 break; 21 case 2: 22 showAll(); 23 break; 24 case 3: 25 return; 26 } 27 } 28 } 29 30 // 用户查询信息业务逻辑控制 31 public void searchLogic() { 32 int size = v.size(); 33 if (size == 0) { 34 System.out.println("电话簿没有联系人,请先添加联系人后再操作!"); 35 } else { 36 while (true) { 37 Menu.getInstance().searchMenu(); 38 int key = telNoteRegex.menuRegex(1, 7); 39 switch (key) { 40 case 1: 41 searchByName(); 42 break; 43 case 2: 44 searchByAge(); 45 break; 46 case 3: 47 searchBySex(); 48 break; 49 case 4: 50 searchByTelNum(); 51 break; 52 case 5: 53 searchByAdd(); 54 break; 55 case 6: 56 showAll(); 57 break; 58 case 7: 59 return; 60 } 61 } 62 } 63 } 64 65 // 修改信息业务逻辑控制 66 public void modifyLogicLogic() { 67 int size = v.size(); 68 if (size == 0) { 69 System.out.println("电话簿没有联系人,请先添加联系人后再操作!"); 70 } else { 71 while (true) { 72 Menu.getInstance().modifyMenu(); 73 int key = telNoteRegex.menuRegex(1, 3); 74 switch (key) { 75 case 1: 76 showAll(); 77 break; 78 case 2: 79 modify(); 80 break; 81 case 3: 82 return; 83 } 84 } 85 } 86 } 87 88 // 删除信息业务逻辑控制 89 public void deleteLogic() { 90 int size = v.size(); 91 if (size == 0) { 92 System.out.println("电话簿没有联系人,请先添加联系人后再操作!"); 93 } else { 94 while (true) { 95 Menu.getInstance().deleteMenu(); 96 int key = telNoteRegex.menuRegex(1, 4); 97 switch (key) { 98 case 1: 99 showAll(); 100 break; 101 case 2: 102 delete(); 103 break; 104 case 3: 105 deleteAll(); 106 break; 107 case 4: 108 return; 109 } 110 } 111 } 112 } 113 114 // 排序信息业务逻辑控制 115 public void orderLogic() { 116 int size = v.size(); 117 if (size == 0) { 118 System.out.println("电话簿没有联系人,请先添加联系人后再操作!"); 119 } else { 120 while (true) { 121 Menu.getInstance().orderMenu(); 122 int key = telNoteRegex.menuRegex(1, 6); 123 switch (key) { 124 case 1: 125 orderName(); 126 break; 127 case 2: 128 orderAge(); 129 break; 130 case 3: 131 orderSex(); 132 break; 133 case 4: 134 orderId(); 135 break; 136 case 5: 137 showAll(); 138 break; 139 case 6: 140 return; 141 } 142 } 143 } 144 } 145 146 // 添加新用户信息 147 public void addOperation() { 148 String name = telNoteRegex.nameRegex(); 149 String age = telNoteRegex.ageRegex(); 150 String sex = telNoteRegex.sexRegex(); 151 String telNum = telNoteRegex.telNumRegex(); 152 String address = telNoteRegex.addressRegex(); 153 Person person = new Person(id, name, age, sex, telNum, address); 154 boolean tag = v.add(person); 155 if (tag) { 156 id++; 157 System.out.println("添加联系人成功!请继续操作!!"); 158 } else { 159 System.out.println("添加联系人失败!"); 160 } 161 } 162 163 // 查询全部用户信息 164 public void showAll() { 165 int i = 0; 166 for (Person person : v) { 167 System.out.println("序号 " + (i + 1) + person.toString()); 168 i++; 169 } 170 if (i == 0) { 171 System.out.println("没有任何记录"); 172 } 173 } 174 175 // 按姓名查询用户信息 176 public void searchByName() { 177 String name = telNoteRegex.nameRegex(); 178 int i = 0; 179 for (Person person : v) { 180 if (name.equals(person.getName())) { 181 System.out.println("序号 " + (i + 1) + person.toString()); 182 i++; 183 } 184 } 185 if (i == 0) { 186 System.out.println("没有此人记录"); 187 } 188 } 189 190 // 按年龄查询用户信息 191 public void searchByAge() { 192 String age = telNoteRegex.ageRegex(); 193 int i = 0; 194 for (Person person : v) { 195 if (age.equals(person.getAge())) { 196 System.out.println("序号 " + (i + 1) + person.toString()); 197 i++; 198 } 199 } 200 if (i == 0) { 201 System.out.println("没有此人记录"); 202 } 203 } 204 205 // 按性别查询用户信息 206 public void searchBySex() { 207 String sex = telNoteRegex.sexRegex(); 208 int i = 0; 209 for (Person person : v) { 210 if (sex.equals(person.getSex())) { 211 System.out.println("序号 " + (i + 1) + person.toString()); 212 i++; 213 } 214 } 215 if (i == 0) { 216 System.out.println("没有此人记录"); 217 } 218 } 219 220 // 按电话号码查询用户信息 221 public void searchByTelNum() { 222 String telNum = telNoteRegex.telNumRegex(); 223 int i = 0; 224 for (Person person : v) { 225 if (telNum.equals(person.getTelNum())) { 226 System.out.println("序号 " + (i + 1) + person.toString()); 227 i++; 228 } 229 } 230 if (i == 0) { 231 System.out.println("没有此人记录"); 232 } 233 } 234 235 // 按地址查询用户信息 236 public void searchByAdd() { 237 String address = telNoteRegex.addressRegex(); 238 int i = 0; 239 for (Person person : v) { 240 if (address.equals(person.getAddress())) { 241 System.out.println("序号 " + (i + 1) + person.toString()); 242 i++; 243 } 244 } 245 if (i == 0) { 246 System.out.println("没有此人记录"); 247 } 248 } 249 250 // 修改指定记录信息 251 public void modify() { 252 int size = v.size(); 253 if (size == 0) { 254 System.out.println("电话簿没有联系人,请先添加联系人后再操作!"); 255 } else { 256 System.out.println("请输入记录序号"); 257 int num = telNoteRegex.menuRegex(1, size); 258 while (true) { 259 Menu.getInstance().subModifyMenu(); 260 int key = telNoteRegex.menuRegex(1, 6); 261 switch (key) { 262 case 1: 263 String name = telNoteRegex.nameRegex(); 264 v.get(num - 1).setName(name); 265 System.out.println("修改成功!请继续操作!!"); 266 break; 267 case 2: 268 String age = telNoteRegex.ageRegex(); 269 v.get(num - 1).setAge(age); 270 System.out.println("修改成功!请继续操作!!"); 271 break; 272 case 3: 273 String sex = telNoteRegex.sexRegex(); 274 v.get(num - 1).setSex(sex); 275 System.out.println("修改成功!请继续操作!!"); 276 break; 277 case 4: 278 String telNum = telNoteRegex.telNumRegex(); 279 v.get(num - 1).setTelNum(telNum); 280 System.out.println("修改成功!请继续操作!!"); 281 break; 282 case 5: 283 String address = telNoteRegex.addressRegex(); 284 v.get(num - 1).setAddress(address); 285 System.out.println("修改成功!请继续操作!!"); 286 break; 287 case 6: 288 return; 289 } 290 } 291 } 292 } 293 294 // 删除指定用户信息 295 public void delete() { 296 if (v.size() == 0) { 297 System.out.println("电话薄内容已清空,请继续操作!"); 298 } else { 299 System.out.println("请输入记录序号"); 300 int num = telNoteRegex.menuRegex(1, v.size()); 301 v.remove(num - 1); 302 System.out.println("删除成功!请继续操作!!"); 303 } 304 } 305 306 // 删除全部用户信息 307 public void deleteAll() { 308 if (v.size() == 0) { 309 System.out.println("电话薄内容已清空,请继续操作!"); 310 } else { 311 boolean tag = v.removeAll(v); 312 if (tag) { 313 System.out.println("电话薄内容已清空,请继续操作!"); 314 } 315 } 316 } 317 318 // 按用户姓名排序信息 319 public void orderName() { 320 Collections.sort(v, new OrderByName()); 321 System.out.println("排序完成!"); 322 } 323 324 // 按用户年龄排序信息 325 public void orderAge() { 326 Collections.sort(v, new OrderByAge()); 327 System.out.println("排序完成!"); 328 } 329 330 // 按用户性别排序信息 331 public void orderSex() { 332 Collections.sort(v, new OrderBySex()); 333 System.out.println("排序完成!"); 334 } 335 336 // 按原始位置排序信息 337 public void orderId() { 338 Collections.sort(v, new OrderById()); 339 System.out.println("排序完成!"); 340 } 341 342 // 按照姓名排序 343 class OrderByName implements Comparator<Person> { 344 @Override 345 public int compare(Person p1, Person p2) { 346 return p1.getName().compareTo(p2.getName()); 347 } 348 } 349 350 // 按照年龄排序 351 class OrderByAge implements Comparator<Person> { 352 @Override 353 public int compare(Person p1, Person p2) { 354 int age1 = Integer.parseInt(p1.getAge()); 355 int age2 = Integer.parseInt(p2.getAge()); 356 return age1 - age2; 357 } 358 } 359 360 // 按照性别排序 361 class OrderBySex implements Comparator<Person> { 362 @Override 363 public int compare(Person p1, Person p2) { 364 return p1.getSex().compareTo(p2.getSex()); 365 } 366 } 367 368 // 按照原始顺序排序 369 class OrderById implements Comparator<Person> { 370 @Override 371 public int compare(Person o1, Person o2) { 372 int id1 = o1.getId(); 373 int id2 = o2.getId(); 374 return id1 - id2; 375 } 376 } 377 }