欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现简单控制台通讯录

程序员文章站 2022-10-19 20:13:51
通过主菜单对各级子菜单进行控制,并实现添加记录,查找记录,删除记录,修改记录,排序记录,以及退出系统功能的实现。一共六部分的功能模块。 上面的图就是每个模块具有...

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

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