java实现简单控制台通讯录

作者:侪哥哥 时间:2023-05-24 14:33:20 

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

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的设计模式,对我而言,这个项目让我受益匪浅。

来源:http://blog.csdn.net/chai_ge_ge/article/details/77110632

标签:java,控制台,通讯录
0
投稿

猜你喜欢

  • 在Java中按值调用和按引用调用

    2021-12-26 20:09:21
  • android studio生成aar包并在其他工程引用aar包的方法

    2021-07-23 21:28:30
  • Android中通知Notification使用实例(振动、灯光、声音)

    2021-09-28 20:00:01
  • C#中的时间显示格式(12小时制VS24小时制)

    2021-10-19 12:58:41
  • Spring boot配置绑定和配置属性校验的方式详解

    2022-04-21 03:06:06
  • Java实现答答租车系统

    2022-07-12 01:38:17
  • C#实现计算年龄的简单方法汇总

    2022-12-26 01:12:41
  • Android中Notification通知用法详解

    2023-02-24 02:37:51
  • Spring ComponentScan的扫描过程解析

    2023-01-04 08:49:58
  • MyBatis配置的应用与对比jdbc的优势

    2023-08-27 07:03:47
  • Java虚拟机之类加载

    2022-11-15 05:19:19
  • Flowable执行完毕的流程查找方法

    2023-01-30 08:53:36
  • JAVA IO API使用详解

    2021-07-27 14:45:48
  • Android RecycleView和线型布局制作聊天布局

    2022-08-01 15:36:56
  • 利用C#代码实现图片旋转360度

    2022-04-11 05:24:38
  • Springboot Session共享实现原理及代码实例

    2022-12-16 03:29:52
  • java打印菱形及直角和等腰三角形的方法

    2023-01-08 20:46:55
  • C#中Linq的入门教程

    2023-12-23 16:20:52
  • Java Web实现自动登陆功能

    2023-09-06 04:17:53
  • C#如何利用反射将枚举绑定到下拉框详解

    2022-09-12 01:48:09
  • asp之家 软件编程 m.aspxhome.com