java實現(xiàn)簡單控制臺通訊錄
通過主菜單對各級子菜單進行控制,并實現(xiàn)添加記錄,查找記錄,刪除記錄,修改記錄,排序記錄,以及退出系統(tǒng)功能的實現(xiàn)。一共六部分的功能模塊。

上面的圖就是每個模塊具有的功能,而且還用到了正則表達式判斷輸入的是否符合規(guī)則,這個系統(tǒng)體現(xiàn)了MVC的設(shè)計模式,分工調(diào)用很清晰。
主要包含了下面幾個類:

APP類:程序的主函數(shù)類,程序開始的入口
Menu類:里面都是簡單頁面顯示的效果,沒有功能的實現(xiàn)。
TelNoteRegex類:正則表達式,判斷是否輸入合格,都在這個方法中。
Operate類:業(yè)務(wù)邏輯類,全部功能的實現(xiàn)基本都集中在這個類中。
Person類:封裝數(shù)據(jù)。

具體的實現(xiàn)代碼:
App類的實現(xiàn)代碼:
package com.bjsxt.iphone;
public class App {
public static void main(String[] args) {
new App().start();
}
public void start(){
Menu m=new Menu();
Operate o=new Operate();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.mainMenu();
int key=reg.menuRegex(1, 6);
switch(key){
case 1:
o.addLogic();
break;
case 2:
o.searchLogic();
break;
case 3:
o.modifyLogicLogic();
break;
case 4:
o.deleteLogic();
break;
case 5:
o.orderLogic();
break;
case 6:
System.exit(0);
break;
}
}
}
}
Person類具體的實現(xiàn)代碼:
package com.bjsxt.iphone;
public class Person {
private int id;//用戶ID屬性
private String name;//用戶姓名屬性
private String age;//用戶年齡屬性
private String sex;//用戶性別屬性
private String telNum;//用戶電話號碼屬性
private String address;//用戶地址屬性
public Person(){}
public Person(int id,String name,String age,String sex,String telNum,String address){
this.id=id;
this.name=name;
this.age=age;
this.sex=sex;
this.telNum=telNum;
this.address=address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTelNum() {
return telNum;
}
public void setTelNum(String telNum) {
this.telNum = telNum;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
TelNoteRegex類具體代碼:
package com.bjsxt.iphone;
import java.util.Scanner;
public class TelNoteRegex {
//對菜單項校驗
@SuppressWarnings("resource")
public int menuRegex(int min,int max){
String regex="[0-9]{1}";
Scanner sc=new Scanner(System.in);
while(true){
String input=sc.nextLine();
//根據(jù)合法性的校驗
if(input.matches(regex)){
int key=Integer.parseInt(input);
if(key>=min && key<=max){
return key;
}else{
System.out.println("輸入的菜單項不符合要求!");
}
}else{
System.out.println("輸入內(nèi)容不正確!");
}
}
}
//用戶輸入姓名的驗證
@SuppressWarnings("resource")
public String nameRegex(String name){
String pattern ="[\\u4e00-\\u9fa5]+";
String str=name;
Scanner sc=new Scanner(System.in);
while(true){
if(str.matches(pattern)){
return str;
}else{
System.out.println("輸入不合法字符,請重新輸入中文漢字");
str=sc.nextLine();
continue;
}
}
}
//用戶輸入年齡的驗證
@SuppressWarnings("resource")
public String ageRegex(String age){
String pattern ="^([0-9]|[0-9]{2}|100)$";
String str=age;
Scanner sc=new Scanner(System.in);
while(true){
if(str.matches(pattern)){
return str;
}else{
System.out.println("輸入不合法字符,請重新輸入數(shù)字");
str=sc.nextLine();
continue;
}
}
}
//用戶性別的驗證
@SuppressWarnings("resource")
public String sexRegex(String sex){
String pattern ="[男女MmFf]";
String str=sex;
Scanner sc=new Scanner(System.in);
while(true){
if(str.matches(pattern)){
return str;
}else{
System.out.println("輸入不合法字符,請重新輸入男女MmFf");
str=sc.nextLine();
continue;
}
}
}
//用戶輸入電話號碼的驗證
@SuppressWarnings("resource")
public String telNumRegex(String telNum){
String pattern ="[0-9]{11}";
String str=telNum;
Scanner sc=new Scanner(System.in);
while(true){
if(str.matches(pattern)){
return str;
}else{
System.out.println("輸入不合法字符,請重新輸入11位的手機號碼");
str=sc.nextLine();
continue;
}
}
}
//用戶輸入地址的驗證
@SuppressWarnings("resource")
public String addressRegex(String address){
String pattern ="[a-zA-Z[0-9]]{1,15}";
String str=address;
Scanner sc=new Scanner(System.in);
while(true){
if(str.matches(pattern)){
return str;
}else{
System.out.println("輸入不合法字符,請重新輸入1到15個英文大小寫或是數(shù)字");
str=sc.nextLine();
continue;
}
}
}
}
Menu類代碼的具體實現(xiàn):
package com.bjsxt.iphone;
public class Menu {
//主界面
public void mainMenu() {
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 退出系統(tǒng) **");
System.out.println("*************************");
}
//添加界面
public void addMenu () {
System.out.println("*************************");
System.out.println("** 1 添加新記錄 **");
System.out.println("** 2 查看全記錄 **");
System.out.println("** 3 返回上一級 **");
System.out.println("*************************");
}
//查找界面
public void searchMenu () {
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("*************************");
}
//修改界面
public void modifyMenu () {
System.out.println("*************************");
System.out.println("** 1 查看全記錄 **");
System.out.println("** 2 修改指定記錄 **");
System.out.println("** 3 返回上一級 **");
System.out.println("*************************");
}
//修改子界面
public void subModifyMenu () {
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("*************************");
}
//刪除界面
public void deleteMenu () {
System.out.println("*************************");
System.out.println("** 1 查看全記錄 **");
System.out.println("** 2 刪除指定記錄 **");
System.out.println("** 3 刪除全部記錄 **");
System.out.println("** 4 返回上一級 **");
System.out.println("*************************");
}
//排序界面
public void orderMenu () {
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("*************************");
}
}
Operate類的具體實現(xiàn):
package com.bjsxt.iphone;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Operate{
private List<Person> list=new ArrayList<Person>();
//用戶添加信息業(yè)務(wù)邏輯控制
public void addLogic(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.addMenu();
int key=reg.menuRegex(1, 3);
switch(key){
case 1:
addOperation ();
break;
case 2:
showAll();
break;
case 3:
return;
}
}
}
//用戶查詢信息業(yè)務(wù)邏輯控
public void searchLogic(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.searchMenu();
int key=reg.menuRegex(1, 7);
switch(key){
case 1:
searchByName();
break;
case 2:
searchByAge();
break;
case 3:
searchBySex();
break;
case 4:
searchByTelNum();
break;
case 5:
searchByAdd();
break;
case 6:
showAll();
break;
case 7:
return;
}
}
}
//修改信息業(yè)務(wù)邏輯控制
public void modifyLogicLogic(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.modifyMenu();
int key=reg.menuRegex(1, 3);
switch(key){
case 1:
showAll();
break;
case 2:
modifyLogicLogic1();
break;
case 3:
return;
}
}
}
//修改有三層跳轉(zhuǎn)
public void modifyLogicLogic1(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.subModifyMenu();
int key=reg.menuRegex(1, 6);
switch(key){
case 1:
nameModify();
break;
case 2:
ageModify();
break;
case 3:
sexModify();
break;
case 4:
telNumModify();
break;
case 5:
addressModify();
break;
case 6:
return;
}
}
}
//刪除信息業(yè)務(wù)邏輯控制
public void deleteLogic(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.deleteMenu();
int key=reg.menuRegex(1, 4);
switch(key){
case 1:
showAll();
break;
case 2:
delete();
break;
case 3:
deleteAll();
break;
case 4:
return;
}
}
}
//排序信息業(yè)務(wù)邏輯控制
public void orderLogic(){
Menu m=new Menu();
TelNoteRegex reg=new TelNoteRegex();
while(true){
m.orderMenu();
int key=reg.menuRegex(1, 5);
switch(key){
case 1:
orderName();
break;
case 2:
orderAge();
break;
case 3:
orderSex();
break;
case 4:
showAll();
break;
case 5:
return;
}
}
}
//添加新用戶信息
@SuppressWarnings("resource")
public void addOperation (){
TelNoteRegex reg=new TelNoteRegex();
Scanner sc=new Scanner(System.in);
System.out.println("請輸入聯(lián)系人id:");
String id=sc.nextLine();
System.out.println("請輸入要添加的姓名:");
String name=sc.nextLine();
name=reg.nameRegex(name);
System.out.println("請輸入要添加的年齡:");
String age=sc.nextLine();
age=reg.ageRegex(age);
System.out.println("請輸入要添加的性別:");
String sex=sc.nextLine();
sex=reg.sexRegex(sex);
System.out.println("請輸入要添加的手機號碼:");
String telNum=sc.nextLine();
telNum=reg.telNumRegex(telNum);
System.out.println("請輸入要添加的地址:");
String address=sc.nextLine();
address=reg.addressRegex(address);
int personId=Integer.parseInt(id);
Person p=new Person(personId,name,age,sex,telNum,address);
list.add(p);
}
// //判斷序號是否已經(jīng)存在插入成功失敗
// @SuppressWarnings("resource")
// public String judgeId(String id){
// Scanner sc=new Scanner(System.in);
// Iterator<Person> it=list.iterator();
// String newId=id;
// while(it.hasNext()){
// Person p=(Person)it.next();
// if(newId.equals(p.getId())){
// System.out.println("此序號已經(jīng)存在,請重新輸入序號");
// newId=sc.nextLine();
// continue;
// }else{
// return newId;
// }
// }
// return id;
// }
//查詢?nèi)坑脩粜畔?
public void showAll(){
System.out.println("序號\t\t"+"姓名\t\t"+"年齡\t\t"+"性別\t\t"+"手機號\t\t"+"地址");
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
//按姓名查詢用戶信息
@SuppressWarnings("resource")
public void searchByName(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("輸入你要查詢的姓名:");
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
name=reg.nameRegex(name);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(name.equals(p.getName())){
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
}
//按年齡查詢用戶信息
@SuppressWarnings("resource")
public void searchByAge(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("輸入你要查詢的年齡:");
Scanner sc=new Scanner(System.in);
String age=sc.nextLine();
age=reg.ageRegex(age);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(age.equals(p.getAge())){
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
}
//按性別查詢用戶信息
@SuppressWarnings("resource")
public void searchBySex(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("輸入你要查詢的性別:");
Scanner sc=new Scanner(System.in);
String sex=sc.nextLine();
sex=reg.sexRegex(sex);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(sex.equals(p.getSex())){
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
}
//按電話號碼查詢用戶信息
@SuppressWarnings("resource")
public void searchByTelNum(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("輸入你要查詢的電話號碼:");
Scanner sc=new Scanner(System.in);
String telNum=sc.nextLine();
telNum=reg.telNumRegex(telNum);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(telNum.equals(p.getTelNum())){
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
}
//按地址查詢用戶信息
@SuppressWarnings("resource")
public void searchByAdd(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("輸入你要查詢的地址:");
Scanner sc=new Scanner(System.in);
String address=sc.nextLine();
address=reg.addressRegex(address);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(address.equals(p.getAddress())){
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}
}
}
// //修改指定記錄信息
// public void modify(){
// System.out.println("請輸入你要修改的信息:");
//
// }
//修改姓名信息
@SuppressWarnings("resource")
public void nameModify(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("請輸入你要修改的序號:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
System.out.println("請輸入你要修改的姓名:");
String name=sc.nextLine();
name=reg.nameRegex(name);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
p.setName(name);
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}else{
System.out.println("修改失敗,請重試!");
}
}
}
//修改年齡信息
@SuppressWarnings("resource")
public void ageModify(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("請輸入你要修改的序號:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
System.out.println("請輸入你要修改的年齡:");
String age=sc.nextLine();
age=reg.ageRegex(age);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
p.setAge(age);
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}else{
System.out.println("修改失敗,請重試!");
}
}
}
//修改性別信息
@SuppressWarnings("resource")
public void sexModify(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("請輸入你要修改的序號:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
System.out.println("請輸入你要修改的性別:");
String sex=sc.nextLine();
sex=reg.sexRegex(sex);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
p.setSex(sex);
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}else{
System.out.println("修改失敗,請重試!");
}
}
}
//修改號碼信息
@SuppressWarnings("resource")
public void telNumModify(){
System.out.println("請輸入你要修改的序號:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
System.out.println("請輸入你要修改的電話號碼:");
String telNum=sc.nextLine();
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
p.setTelNum(telNum);
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}else{
System.out.println("修改失敗,請重試!");
}
}
}
//修改地址信息
@SuppressWarnings("resource")
public void addressModify(){
TelNoteRegex reg=new TelNoteRegex();
System.out.println("請輸入你要修改的序號:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
System.out.println("請輸入你要修改的地址:");
String address=sc.nextLine();
address=reg.addressRegex(address);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
p.setAddress(address);
System.out.println(p.getId()+"#"+"\t\t"+p.getName()+"\t\t"+p.getAge()+"\t\t"+p.getSex()+"\t\t"+p.getTelNum()+"\t\t"+p.getAddress());
}else{
System.out.println("修改失敗,請重試!");
}
}
}
//刪除指定用戶信息
@SuppressWarnings("resource")
public void delete(){
System.out.println("請輸入你要刪除的id:");
Scanner sc=new Scanner(System.in);
String num=sc.nextLine();
int id=Integer.parseInt(num);
Iterator<Person> it=list.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
if(id==p.getId()){
list.remove(id);
System.out.println("刪除成功");
}else{
System.out.println("刪除失敗");
}
}
}
//刪除全部用戶信息
public void deleteAll(){
list.clear();
System.out.println("刪除成功");
}
//按用戶姓名排序信息
public void orderName(){
Comparator<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
};
Collections.sort(list,comparator);
showAll();
}
//按用戶年齡排序信息
public void orderAge(){
Comparator<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
};
Collections.sort(list,comparator);
showAll();
}
//按用戶性別排序信息
public void orderSex(){
Comparator<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getSex().compareTo(o2.getSex());
}
};
Collections.sort(list,comparator);
showAll();
}
}
總結(jié):這個項目讓我很清晰可以明白什么是面向?qū)ο?,為什么說是java是面向?qū)ο蟮木幊陶Z言,程序的代碼都是對象在調(diào)用,也明白一個項目應(yīng)該如何分工明確進行書寫,功能和視圖要分開,每個類都有自己特定的功能,各個類的功能不要相互卸載一起,這樣的代碼基本是復(fù)用不高的,如果分開明確,以后再添加功能模塊的時候,只需要增加功能,無需修改之前的代碼,很好的體現(xiàn)了開閉原則,對功能開發(fā),對修改內(nèi)容關(guān)閉,這個項目也體現(xiàn)了MVC的設(shè)計模式,對我而言,這個項目讓我受益匪淺。
相關(guān)文章
解決Jackson解析嵌套類問題(MismatchedInputException)
這篇文章主要介紹了解決Jackson解析嵌套類問題(MismatchedInputException),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖源碼解析
這篇文章主要介紹了Springboot基于Redisson實現(xiàn)Redis分布式可重入鎖,本文通過案例源碼分析給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
mybatis多對多關(guān)聯(lián)實戰(zhàn)教程(推薦)
下面小編就為大家?guī)硪黄猰ybatis多對多關(guān)聯(lián)實戰(zhàn)教程(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

