通过主菜单对各级子菜单进行控制,并实现添加记录,查找记录,删除记录,修改记录,排序记录,以及退出系统功能的实现。一共六部分的功能模块。
上面的图就是每个模块具有的功能,而且还用到了正则表达式判断输入的是否符合规则,这个系统体现了MVC的设计模式,分工调用很清晰。
主要包含了下面几个类:
APP类:程序的主函数类,程序开始的入口
Menu类:里面都是简单页面显示的效果,没有功能的实现。
TelNoteRegex类:正则表达式,判断是否输入合格,都在这个方法中。
Operate类:业务逻辑类,全部功能的实现基本都集中在这个类中。
Person类:封装数据。
具体的实现代码:
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 Listlist=new ArrayList (); //用户添加信息业务逻辑控制 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 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 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 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 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 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 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 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 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 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 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 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 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 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 comparator=new Comparator (){ @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo(o2.getName()); } }; Collections.sort(list,comparator); showAll(); } //按用户年龄排序信息 public void orderAge(){ Comparator comparator=new Comparator (){ @Override public int compare(Person o1, Person o2) { return o1.getAge().compareTo(o2.getAge()); } }; Collections.sort(list,comparator); showAll(); } //按用户性别排序信息 public void orderSex(){ Comparator comparator=new Comparator (){ @Override public int compare(Person o1, Person o2) { return o1.getSex().compareTo(o2.getSex()); } }; Collections.sort(list,comparator); showAll(); } }
总结:这个项目让我很清晰可以明白什么是面向对象,为什么说是java是面向对象的编程语言,程序的代码都是对象在调用,也明白一个项目应该如何分工明确进行书写,功能和视图要分开,每个类都有自己特定的功能,各个类的功能不要相互卸载一起,这样的代码基本是复用不高的,如果分开明确,以后再添加功能模块的时候,只需要增加功能,无需修改之前的代码,很好的体现了开闭原则,对功能开发,对修改内容关闭,这个项目也体现了MVC的设计模式,对我而言,这个项目让我受益匪浅。