通讯录

此项目是为了让那些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 }

 

posted @ 2015-09-02 11:17  独年荒岛  阅读(174)  评论(0编辑  收藏  举报