java实验课程——电话簿

创建名为Tel的包

一、创建App类实现菜单对象的创建

package Tel;
public class App {
   //创建Menu对象
 public static void main(String[] args) {
  Menu menu = new Menu();
  menu.mainMenu();
 }
}
二、创建Menu类
package Tel;
import java.util.Scanner;
public class Menu {
 Scanner sc1 = new Scanner(System.in);
 TelNodeRegex telnoderegex = new TelNodeRegex();
 Operate operate = new Operate();
 //主菜单
 public void mainMenu(){
  System.out.println("***********************************");
  System.out.println("****************XX的电话簿***********");
  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("***********************************");
  System.out.println("------------请输入正确的数字,最大是6,最小是1");
  int num = sc1.nextInt();
  TelNodeRegex.menuRegex(num);//判断输入的数字是否有相对应的操作
  switch(num){
  case 1:
   addMenu();//添加纪录
   break;
  case 2:
   searchMenu();//查找记录
   break;
  case 3:
   modifyMenu();//修改记录
   break;
  case 4:
   deleteMenu();//删除记录
   break;
  case 5:
   orderMenu();//排序记录
   break;
  case 6:
   System.exit(0);//退出系统
   break;
  default:
   System.out.println("输入的数字不正确,请重新输入");
   mainMenu();
   break;
  }
 }
 //添加主菜单
 public void addMenu() {
  System.out.println("***********************************");
  System.out.println("***  1.添加新记录 ***");
  System.out.println("***  2.查看全记录 ***");
  System.out.println("***  3.返回上一级 ***");
  System.out.println("***********************************");
  System.out.println("------------请输入正确的数字,最大是3,最小是1");
  operate.addLogic();
 }
 //查找主菜单
 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("***********************************");
  System.out.println("------------请输入正确的数字,最大是7,最小是1");
  operate.searchLogic();
 }
 //修改主菜单
 public void modifyMenu() {
  System.out.println("***********************************");
  System.out.println("***  1.查看全记录 ***");
  System.out.println("***  2.修改指定记录 ***");
  System.out.println("***  3.返回上一级 ***");
  System.out.println("***********************************");
  System.out.println("------------请输入正确的数字,最大是3,最小是1");
  operate.modifyLogic();
 }
 //删除主菜单
 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("***********************************");
  System.out.println("------------请输入正确的数字,最大是4,最小是1");
  operate.deleteLogic();
 }
 //排序主菜单
 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("***********************************");
  System.out.println("------------请输入正确的数字,最大是5,最小是1");
  operate.orderLogic();
 }
}
三、创建进行可以实现每项操作的类,其中包含实现各种功能的方法
package Tel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;

public class Operate {
 Scanner reader = new Scanner(System.in);
 static ArrayList<Person> list = new ArrayList<Person>();
 static Menu menu = new Menu();
 //添加记录逻辑控制
 public void addLogic() {
  int number = reader.nextInt();
  switch(number){
  case 1:
   addOperation();//添加新纪录
   break;
  case 2:
   showAll();//查看全纪录
   menu.addMenu();
   break;
  case 3:
   menu.mainMenu();//返回上一级
   break;
  default:
   System.out.println("输入错误,请重新输入!");
   addLogic();
   break;
  }
 }
 //排序记录逻辑控制
 public void orderLogic() {
  int number = reader.nextInt();
  switch(number) {
  case 1 ://按姓名排序
        orderName();
        break;
       case 2 ://按年龄排序
        orderAge();
        break;
       case 3 ://按性别排序
        orderSex();
        break;
       case 4://查看全记录
        showAll();
        break;
       case 5 ://返回上一级
        menu.orderMenu();
        break;
       default:
       System.out.println("输入错误,请后重新输入!");
       orderLogic();
       break;
  }
 }
 //查找记录逻辑控制
 public void searchLogic() {
  int number = reader.nextInt();
  switch(number) {
  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:
   menu.mainMenu();//返回上一级
   break;
  default:
   System.out.println("输入错误,请重新输入!");
   searchLogic();
   break;
  }
 }
 //修改记录逻辑控制
 public void modifyLogic() {
  int number = reader.nextInt();
  switch(number) {
  case 1://查看全记录
   showAll();
   break;
  case 2://修改指定记录
   modify();
   break;
  case 3://返回上一级
   menu.mainMenu();
   break;
  default:
   System.out.println("输入错误,请重新输入!");
   modifyLogic();
  }
 }
 //删除记录逻辑控制
 public void deleteLogic() {
  int number = reader.nextInt();
  switch(number) {
  case 1://查看全记录
   showAll();
   break;
  case 2://删除指定记录
   delete();
   break;
  case 3://删除全部
   deleteAll();
   break;
  case 4://返回上一级
   menu.mainMenu();
   break;
  default:
   System.out.println("输入错误,请重新输入!");
   modifyLogic();
  }
 }
 //增加联系人操作
 public void addOperation() {
  for(int i = 0; i < 100; i++) {
   System.out.println("请输入要添加的联系人信息:");
   System.out.println("请输入姓名:(1-20位字母)");
   String name = reader.next();
   name = TelNodeRegex.nameRegex(name);//对输入的姓名格式进行验证
   System.out.println("请输入年龄:(1-130)");
   int age = reader.nextInt();
   age = TelNodeRegex.ageRegex(age);
   System.out.println("请输入性别:(m/M或f/F)");
   String sex = reader.next();
   sex = TelNodeRegex.sexRegex(sex);
   System.out.println("请输入电话号码:(6-11位数字)");
   String phone = reader.next();
   phone = TelNodeRegex.telNumRegex(phone);
   System.out.println("请输入地址;(1-50位字母或数字)");
   String address = reader.next();
   address = TelNodeRegex.addressRegex(address);
   //创建Person对象并初始化
   Person p = new Person();
   int id = 1;
   p.setId(id);
   p.setName(name);
   p.setAge(age);
   p.setSex(sex);
   p.setPhone(phone);
   p.setAddress(address);
   
   //添加到list中
   list.add(p);
   System.out.println("录入成功!");
   System.out.println("是否继续录入?是请按1,否请按2");
   int message = reader.nextInt();
   if(message != 1) {
    break;
   }
   id = id++;
  }
  menu.addMenu();
 }
 //显示全部联系人信息
 public void showAll() {
  
  int id = 1;
  Iterator<Person> it = list.iterator();
  while(it.hasNext()){
   Person p = new Person();
   p = it.next();
   p.setId(id++);//设置list中联系人的id,并自增,按顺序输出
   System.out.println("序号:"+p.getId()+"# "+p);
  }
  System.out.println("");
  menu.mainMenu();
 }
 //按姓名查找联系人
 public void searchByName() {
  System.out.println("请输入想要查找的联系人姓名:(3-15)个字母");
  String name = reader.next();
  name = TelNodeRegex.nameRegex(name);
  
  Iterator<Person> it = list.iterator();//利用迭代器在list中进行遍历
  boolean b = false;
  while(it.hasNext()) {
   /*Person person = new Person
    * person = (Person)it.next();
    */
   Person person = it.next();
   if(person.getName().equals(name)) {
    System.out.println("您所要查询的联系人信息如下:");
    System.out.println(person);
    System.out.println("");
    b = true;
   }
   if(!b) {
    System.out.println("查无此人!");
   }
  }
  menu.searchMenu();
 }
 //根据年龄查找
 public void searchByAge() {
  System.out.println("请输入想要查找的联系人的年龄:(0-200)");
  int age = reader.nextInt();
  age = TelNodeRegex.ageRegex(age);
  Iterator<Person> it = list.iterator();
  boolean b = false;
  while(it.hasNext()) { 
   Person person = it.next();
   if(person.getAge() == age) {
    System.out.println("您所要查询的联系人信息如下");
    System.out.println(person);
    System.out.println("");
    b = true;
   }
   if(!b) {
    System.out.println("查无此人!");
   }
  }
  menu.searchMenu();
 }
 //根据性别查找
 public void searchBySex() {
  System.out.println("请输入要查找联系人的性别:(m/M或f/F)");
  String sex =reader.next();
  sex = TelNodeRegex.sexRegex(sex);
  Iterator<Person> it = list.iterator();
  boolean b = false;
  while(it.hasNext()) {
   Person person = it.next();
   if(person.getSex().equals(sex)) {
    System.out.println("您所要查询的联系人信息如下:");
    System.out.println(person);
    System.out.println("");
    b = true;
   }
   if(!b) {
    System.out.println("查无此人!");
   }
  }
  menu.searchMenu();
 }
 //根据电话号码进行查找
 public void searchByTelNum() {
  System.out.println("请输入要查找联系人的电话号码:(6-11位数字)");
  String telNum = reader.next();
  telNum = TelNodeRegex.telNumRegex(telNum);
  Iterator<Person> it = list.iterator();
  boolean b = false;
  while(it.hasNext()) {
   Person person = it.next();
   if(person.getPhone().equals(telNum)) {
    System.out.println("您所要查询的联系人信息如下:");
    System.out.println(person);
    System.out.println("");
    b = true;
   }
   if(!b) {
    System.out.println("查无此人!");
   }
  }
  menu.searchMenu();
 }
 //根据住址进行查找
 public void searchByAdd() {
  System.out.println("请输入要查找联系人的地址:(1-10位数字或字母)");
  String address = reader.next();
  address = TelNodeRegex.addressRegex(address);//对输入的地址进行验证
  Iterator<Person> it = list.iterator();
  boolean b = false;
  while(it.hasNext()) {
   Person person = it.next();
   if(person.getAddress().equals(address)) {
    System.out.println("您所要查询的联系人信息如下:");
    System.out.println(person);
    System.out.println("");
    b = true;
   }
   if(!b) {
    System.out.println("查无此人!");
   }
  }
  menu.searchMenu();
 }
 //修改联系人信息逻辑控制
 public void modify() {
  for(int i = 0;i< 100;i++) {
   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("*************************");
      System.out.println("请输入正确的数字,最小是1,最大是6:");
   
      int number = reader.nextInt();
      switch(number) {
      case 1://修改姓名
       modifyName();
       break;
      case 2://修改年龄
       modifyAge();
       break;
      case 3://修改性别
       modifySex();
       break;
      case 4://修改号码
       modifyTelNum();
       break;
      case 5://修改住址
       modifyAddress();
       break;
      case 6://返回主菜单
       menu.mainMenu();
       break;
      default:
       System.out.println("输入错误,请重新输入!");
       searchLogic();
       break;
      }
  }
 }
 //修改姓名
  public void modifyName() {
   System.out.println("请输入您所要修改的联系人编号:");
   int id = 1;
   int num = reader.nextInt();
   if(num > list.size()) {
    System.out.println("对不起,找不到此编号的联系人!");
    modify();
   }
   System.out.println("请输入您所要修改的新的姓名:(3-15)个字母");
   String name = reader.next();
   name = TelNodeRegex.nameRegex(name);
   list.get(id-1).setName(name);//找到id对应的联系人并重新设置他的姓名
   System.out.println("修改成功!");
   System.out.println("");
   modify();
 }
  //修改联系人的年龄
  public void modifyAge() {
   System.out.println("请输入您所要修改的联系人编号:");
   int id = 1;
   int num = reader.nextInt();
   if(num > list.size()) {
    System.out.println("对不起,找不到此编号的联系人!");
    modify();
   }
   System.out.println("请输入您所要修改的新的年龄:(0-200)");
   int age = reader.nextInt();
   age = TelNodeRegex.ageRegex(age);
   list.get(id-1).setAge(age);
   System.out.println("修改成功!");
   System.out.println("");
   modify();
  }
  //修改联系人的性别
  public void modifySex() {
   System.out.println("请输入您所要修改的联系人编号:");
   int id = 1;
   int num = reader.nextInt();
   if(num > list.size()) {
    System.out.println("对不起,找不到此编号的联系人!");
    modify();
   }
   System.out.println("请输入您所要修改的新的性别:(m/M或f/F)");
   String sex = reader.next();
   sex = TelNodeRegex.sexRegex(sex);
   list.get(id-1).setSex(sex);
   System.out.println("修改成功!");
   System.out.println("");
   modify();
  }
  ///修改联系人的电话号码
  public void modifyTelNum() {
   System.out.println("请输入您所要修改的联系人编号:");
   int id = 1;
   int num = reader.nextInt();
   if(num > list.size()) {
    System.out.println("对不起,找不到此编号的联系人!");
    modify();
   }else {
    System.out.println("请输入您所要修改的新的电话号码:(6-11位数字)");
    String telnum = reader.next();
    telnum = TelNodeRegex.telNumRegex(telnum);
    list.get(id-1).setPhone(telnum);
    System.out.println("修改成功!");
    System.out.println("");
    modify();
   }
  }
  //修改联系人的住址
  public void modifyAddress() {
   System.out.println("请输入您所要修改的联系人编号:");
   int id = 1;
   int num = reader.nextInt();
   if(num > list.size()) {
    System.out.println("对不起,找不到此编号的联系人!");
    modify();
   }
   System.out.println("请输入您所要修改的新的地址:(1-10位数字或字母)");
   String address = reader.next();
   address = TelNodeRegex.addressRegex(address);
   list.get(id-1).setAddress(address);
   System.out.println("修改成功!");
   System.out.println("");
   modify();
  }
  //删除指定联系人
  public void delete() {
   System.out.println("请输入要删除联系人的序号:");
   int Id = reader.nextInt();
   list.remove(Id - 1);
   System.out.println("删除成功!");
   /*Iterator<Person> it = list.iterator();
   while(it.hasNext()) {
    Person person = it.next();
    if(person.getId() == Id) {
     it.remove();
        System.out.println("删除成功!");
        break;
    }
   }*/
   deleteLogic();
  }
  //清空电话簿
  public void deleteAll() {
   Iterator<Person> it = list.iterator();
      while(it.hasNext()){
       it.remove();
        System.out.println("删除成功!"); 
      }
      System.out.println("电话簿已清空!");
      deleteLogic();
  }
  //根据姓名排序
  public void orderName() {
   Collections.sort(list,new NameComparator());
      System.out.println("排序成功!");
      orderLogic();
  }
  //根据年龄排序
  public void orderAge() {
   Collections.sort(list,new AgeComparator());
      System.out.println("排序成功!");
      orderLogic();
  }
  //根据性别排序
  public void orderSex() {
   Collections.sort(list,new SexComparator());
      System.out.println("排序成功!");
      orderLogic();
  }
    
     //按姓名排序
     class NameComparator implements Comparator<Person>{
      public int compare(Person p1,Person p2){
       return p1.getName().compareTo(p2.getName());
      }
     }
    
     //按性别排序
     class SexComparator implements Comparator<Person>{
      public int compare(Person p1,Person p2){
       return p1.getSex().compareTo(p2.getSex());
      }
     }
     //按年龄排序
     class AgeComparator implements Comparator<Person>{
      public int compare(Person p1,Person p2){
       return Integer.valueOf(p1.getAge()).compareTo(Integer.valueOf(p2.getAge()));
      }
     }
}
四、Person类包含各种属性的设置和获取
package Tel;
public class Person {
 private String name;
 private int age;
 private String address;
 private String sex;
 private int Id;
 private String phone;
 //无参的构造函数
 public Person() {
  super();
  // TODO Auto-generated constructor stub
 }
 //有参的构造函数
 public Person(String name, int age, String address, String sex, String phone) {
  super();
  this.name = name;
  this.age = age;
  this.address = address;
  this.sex = sex;
  this.phone = phone;
 }
 
 @Override
 public String toString() {
  return "Person [name=" + name + ", age=" + age + ", address=" + address + ", sex=" + sex + ", Id=" + Id
    + ", phone=" + phone + "]";
 }
 //获取id
 public int getId() {
  return Id;
 }
 //设置id
 public void setId(int Id) {
  this.Id = Id;
 }
 //获取姓名
 public String getName() {
  return name;
 }
 //设置姓名
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
 
}
五、TelNodeRegex类对用户从键盘输入的内容进行格式上的控制
package Tel;
import java.util.*;
public class TelNodeRegex {
      static Scanner reader = new Scanner(System.in);
      //对主菜单进行验证
      public static int menuRegex(int number){
       while(true){
        if(number > 6 || number < 1){
         System.out.println("对不起,没有此操作");
         break;
        }
        else{
         break;
        }
       }
       return number;
      }
     
         /*对用户输入名字的验证*/
     
         public static String  nameRegex(String name) {
          while(true) {
           if(name.length()<3||name.length()>15) {
            System.out.println("对不起,您输入的名字不合法,请重新输入!");
            name = reader.nextLine();
            nameRegex(name);
           }else {
            break;
           }
          }
          return name;
         }
         /*对用户输入年龄的验证*/
         public static int  ageRegex(int age) {
          while(true) {
           if(age<0||age>=200) {
            System.out.println("对不起,您输入的年龄不合法,请核对后重新输入!");
            age = reader.nextInt();
            ageRegex(age);
           }else {
            break;
           }
          }
          return age;
         }
         /*对用户输入性别的验证*/
         public static String sexRegex(String sex) {
          while(true) {
           if(sex.equals("f")||sex.equals("F")||sex.equals("m")||sex.equals("M")) {
            break;
           }else {
            System.out.println("对不起,您输入的性别不合法,请重新输入!");
            sex = reader.nextLine();
            sexRegex(sex);
           }
          }
          return sex;
         }
         /*对用户输入电话号码的验证*/
         public static String telNumRegex(String tel) {
          while(true) {
           if(tel.length() > 11 || tel.length() < 6) {
            System.out.println("对不起,您输入的电话号码不合法,请重新输入!");
            tel = reader.nextLine();
            telNumRegex(tel);
           }else {
            break;
           }
          }
          return tel;
         }
         /*对用户输入地址的验证*/
         public static String  addressRegex(String address) {
          while(true) {
           if(address.length()<1||address.length()>10) {
            System.out.println("对不起,您输入的住址不合法,请重新输入!");
            address = reader.nextLine();
            addressRegex(address);
           }else {
            break;
           }
          }
          return address;
         }
}
欢迎指教!! 
 

转载于:https://www.cnblogs.com/qiuyua/p/10445792.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值