java实现简单控制台通讯录

发布时间:2020-10-25 22:20:42 作者:侪哥哥
来源:脚本之家 阅读:171

通过主菜单对各级子菜单进行控制,并实现添加记录,查找记录,删除记录,修改记录,排序记录,以及退出系统功能的实现。一共六部分的功能模块。

java实现简单控制台通讯录

上面的图就是每个模块具有的功能,而且还用到了正则表达式判断输入的是否符合规则,这个系统体现了MVC的设计模式,分工调用很清晰。

主要包含了下面几个类:

java实现简单控制台通讯录

APP类:程序的主函数类,程序开始的入口
Menu类:里面都是简单页面显示的效果,没有功能的实现。
TelNoteRegex类:正则表达式,判断是否输入合格,都在这个方法中。
Operate类:业务逻辑类,全部功能的实现基本都集中在这个类中。
Person类:封装数据。

java实现简单控制台通讯录

具体的实现代码:

App类的实现代码:

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类具体的实现代码:

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();
   //根据合法性的校验
   if(input.matches(regex)){
    int key=Integer.parseInt(input);
    if(key>=min && key<=max){
     return key;
    }else{
     System.out.println("输入的菜单项不符合要求!");
    }
   }else{
    System.out.println("输入内容不正确!");
   }
  }

 }

 //用户输入姓名的验证
 @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("输入不合法字符,请重新输入数字");
    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个英文大小写或是数字");
    str=sc.nextLine();
    continue;
   }
  }
 }
}

Menu类代码的具体实现:

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 退出系统  **");
  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类的具体实现:

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>();
 //用户添加信息业务逻辑控制
 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;
   }
  }
 }

 //用户查询信息业务逻辑控
 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;
   }
  }
 }
 //修改信息业务逻辑控制
 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;
   }
  }
 }
 //修改有三层跳转
 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;
   }
  }
 }
 //删除信息业务逻辑控制
 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;
   }
  }
 }

 //排序信息业务逻辑控制
 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("请输入联系人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);

 }
// //判断序号是否已经存在插入成功失败
//   @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("此序号已经存在,请重新输入序号");
//      newId=sc.nextLine();
//      continue;
//     }else{
//      return newId;
//     }
//    }
//    return id;
//   }

 //查询全部用户信息
 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();
 }
}

总结:这个项目让我很清晰可以明白什么是面向对象,为什么说是java是面向对象的编程语言,程序的代码都是对象在调用,也明白一个项目应该如何分工明确进行书写,功能和视图要分开,每个类都有自己特定的功能,各个类的功能不要相互卸载一起,这样的代码基本是复用不高的,如果分开明确,以后再添加功能模块的时候,只需要增加功能,无需修改之前的代码,很好的体现了开闭原则,对功能开发,对修改内容关闭,这个项目也体现了MVC的设计模式,对我而言,这个项目让我受益匪浅。

推荐阅读:
  1. C++双向链表如何实现简单通讯录
  2. C语言如何实现简单通讯录

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java 控制台 通讯录

上一篇:web前端入门到实战:CSS box-sizing属性的正确用法

下一篇:浅析vue-router中params和query的区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》