这是我们这一学期的实践大作业~
花了大概七八个小时写出来的......
用Vector集合储存信息,实现了增删改查和排序、退出六个基本功能~
说实话感觉多余且麻烦,但要求是这样,我也没办法......
一共五个文件,分别为Person、Menu、App、Operate、TelNoteRegex:
Person类为实例类
Menu类定义一个主菜单和各个子菜单的方法
App类只有一个作用,在主方法中创建Menu类的对象,并调用主菜单方法......
Operate类就是各个具体操作的实现方法
TelNoteRegex类定义了对信息进行验证的方法,毕竟输入的信息不能什么都接受~
好了下边贴代码:
App.java
class Application { public static void main(String[] args) { Menu menu = new Menu(); menu.mainMenu(); } }
Menu.java
import java.util.*; public class Menu { Operate operate = new Operate(); Scanner in = new Scanner(System.in); public void mainMenu() { while(true) { 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("请选择您要进行的操作(1~6):"); String choice = in.nextLine().replace(" ",""); switch(choice) { case "1": printLine(); addMenu(); break; case "2": printLine(); searchMenu(); break; case "3": printLine(); modifyMenu(); break; case "4": printLine(); deleteMenu(); break; case "5": printLine(); orderMenu(); break; case "6": exitMenu(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } } } //添加记录对应的菜单 public void addMenu() { int a = 1; while(true) { System.out.println("☆1:添加新纪录"); System.out.println("☆2:查看全纪录"); System.out.println("☆3:返回上一级"); System.out.println("请选择您要进行的操作(1~3):"); String choice01 = in.nextLine().replace(" ",""); switch(choice01) { case "1": operate.addOperation(); break; case "2": operate.showAll(); break; case "3": a = 0; printLine(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } if(a == 0) break; } } //查找记录所对应的菜单 public void searchMenu() { int a = 1; while(true) { 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("请输入您的选择(1~7):"); String choice02 = in.nextLine().replace(" ",""); switch(choice02) { case "1": operate.searchByName(); printLine(); break; case "2": operate.searchByAge(); printLine(); break; case "3": operate.searchBySex(); printLine(); break; case "4": operate.searchByTelNum(); printLine(); break; case "5": operate.searchByAddress(); printLine(); break; case "6": operate.showAll(); printLine(); break; case "7": a = 0; printLine(); break; default: System.out.println("您的选择有误!请重新输入!"); printLine(); } if(a == 0) break; } } //修改记录对应的菜单 public void modifyMenu() { int a = 1; while(true) { System.out.println("☆1:查看全记录"); System.out.println("☆2:修改指定记录"); System.out.println("☆3:返回上一级"); System.out.println("请输入您的选择(1~3):"); String choice03 = in.nextLine().replace(" ",""); switch(choice03) { case "1": operate.showAll(); break; case "2": subModifyMenu(); break; case "3": a = 0; printLine(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } if(a == 0) break; } } //修改信息的子菜单 public void subModifyMenu() { int a = 1; while(true) { printLine(); 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("请输入您的选择(1~6):"); String choice0301 = in.nextLine().replace(" ",""); switch(choice0301) { case "1": operate.modify("name"); break; case "2": operate.modify("age"); break; case "3": operate.modify("sex"); break; case "4": operate.modify("telNum"); break; case "5": operate.modify("address"); break; case "6": a = 0; printLine(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } if(a == 0) break; } } //删除记录对应的菜单 public void deleteMenu() { int a= 1; while(true) { System.out.println("☆1:查看全记录"); System.out.println("☆2:删除指定记录"); System.out.println("☆3:删除全部记录"); System.out.println("☆4:返回上一级"); System.out.println("请输入您的选择(1~4):"); String choice04 = in.nextLine().replace(" ",""); switch(choice04) { case "1": operate.showAll(); break; case "2": operate.delete(); Menu.printLine(); break; case "3": operate.deleteAll(); Menu.printLine(); break; case "4": a = 0; printLine(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } if(a == 0) break; } } //排序记录对应的菜单 public void orderMenu() { int a = 1; while(true) { System.out.println("☆1:按姓名排序"); System.out.println("☆2:按年龄排序"); System.out.println("☆3:按性别排序"); System.out.println("☆4:查看全部记录"); System.out.println("☆5:返回上一级"); System.out.println("请输入您的选择(1~5):"); String choice05 = in.nextLine().replace(" ",""); switch(choice05) { case "1": operate.orderName(); break; case "2": operate.orderAge(); break; case "3": operate.orderSex(); break; case "4": operate.showAll(); break; case "5": a = 0; printLine(); break; default: System.out.println("您的输入有误!请重新输入!"); printLine(); } if(a == 0) break; } } //退出操作对应的菜单 public void exitMenu() { System.out.println("您确定要退出吗?(y/n)"); String choice06 = in.nextLine().replace(" ",""); if(choice06.equals("Y") || choice06.equals("y")) { System.out.println("您已经成功退出!"); printLine(); System.exit(0); } else if(choice06.equals("N") || choice06.equals("n")) { System.out.println("您已经取消了退出操作!"); } else { System.out.println("您的输入有误!默认取消退出操作!"); } printLine(); } //打印分割线 public static void printLine() { System.out.println("----------------------------------------------------------------" +"----------------------------------------------------------"); } //打印信息栏 public static void printInfo() { System.out.println("序号\t\t"+"姓名\t\t"+"年龄\t\t"+"性别\t\t"+"电话号码\t\t"+"地址\t\t"); } }
Operate.java
import java.util.*; public class Operate { Scanner in = new Scanner(System.in); Vector<Person> vector = new Vector<Person>(); TelNoteRegex regex = new TelNoteRegex(); //添加信息方法 public void addOperation() { int a = 1; String name; String age; String sex; String telNum; String address; System.out.println("输入姓名,1~10位字母:"); name = in.nextLine().replace(" ",""); System.out.println("输入年龄,1~100+"); age = in.nextLine().replace(" "," "); System.out.println("输入性别(男M或m),女(F或f):"); sex = in.nextLine().replace(" ",""); System.out.println("输入电话号码,6~10位数字:"); telNum = in.nextLine().replace(" ",""); System.out.println("输入地址,1~50位字母或数字:"); address = in.nextLine().replace(" ",""); if(!regex.nameRegex(name)) { a = 0; System.out.println("您输入的姓名格式不符合要求"); } if(!regex.ageRegex(age)) { a = 0; System.out.println("您输入的年龄格式不符合要求"); } if(!regex.sexRegex(sex)) { a = 0; System.out.println("您输入的性别格式不符合要求"); } if(!regex.telNumRegex(telNum)) { a = 0; System.out.println("您输入的电话号码格式不符合要求"); } if(!regex.addressRegex(address)) { a = 0; System.out.println("您输入的地址格式不符合要求"); } if(a == 1) { Person p1 = new Person(name,age,sex,telNum,address); vector.add(p1); System.out.println("添加成功!"); } Menu.printLine(); } //显示全部信息方法 public void showAll() { if(vector.isEmpty()) System.out.println("没有任何信息记录!"); else { Menu.printInfo(); Enumeration<Person> en = vector.elements(); int id = 0; while(en.hasMoreElements()) { Person p2 = en.nextElement(); System.out.print(id+1+"\t\t"); System.out.println(p2); id++; } } Menu.printLine(); } //按姓名查找 public void searchByName() { System.out.println("请输入要查找的名字:"); String str = in.nextLine().replace(" ",""); Menu.printInfo(); for(Person p3 : vector) { if(p3.getName().equals(str)) System.out.println(p3); } } //按年龄查找 public void searchByAge() { System.out.println("请输入要查找的年龄:"); String str = in.nextLine().replace(" ",""); Menu.printInfo(); for(Person p3 : vector) { if(p3.getAge().equals(str)) System.out.println(p3); } } //按性别查找 public void searchBySex() { System.out.println("请输入要查找的性别(男M或m),女(F或f):"); String str = in.nextLine().replace(" ",""); Menu.printInfo(); for(Person p3 : vector) { if(p3.getSex().equals(str)) System.out.println(p3); } } //按电话号码查找 public void searchByTelNum() { System.out.println("请输入要查找的电话号码:"); String str = in.nextLine().replace(" ",""); Menu.printInfo(); for(Person p3 : vector) { if(p3.getTelNum().equals(str)) System.out.println(p3); } } //按地址查找 public void searchByAddress() { System.out.println("请输入要查找的地址:"); String str = in.nextLine().replace(" ",""); Menu.printInfo(); for(Person p3 : vector) { if(p3.getAddress().equals(str)) System.out.println(p3); } } //按姓名排序信息 public void orderName() { Collections.sort( vector,new nameComparator()); System.out.println("排序成功!"); System.out.println("按姓名排序的结果如下:"); showAll(); } //自定义姓名排序类 class nameComparator implements Comparator<Person> { public int compare(Person p1,Person p2) { return p1.getName().compareTo(p2.getName()); } } //按年龄排序信息 public void orderAge() { Collections.sort( vector,new ageComparator()); System.out.println("排序成功!"); System.out.println("按年龄排序的结果如下:"); showAll(); } //自定义年龄排序类 class ageComparator implements Comparator<Person> { public int compare(Person p1,Person p2) { return Integer.valueOf(p1.getAge()).compareTo(Integer.valueOf(p2.getAge())); } } //按性别排序信息 public void orderSex() { Collections.sort( vector,new sexComparator()); System.out.println("排序成功!"); showAll(); } //自定义性别排序类 class sexComparator implements Comparator<Person> { public int compare(Person p1,Person p2) { return p1.getSex().compareTo(p2.getSex()); } } //删除指定信息方法 public void delete() { if(vector.isEmpty()) System.out.println("没有任何信息记录!"); else { Menu.printInfo(); Enumeration<Person> en = vector.elements(); int id = 0; while(en.hasMoreElements()) { Person p2 = en.nextElement(); System.out.print(id+1+"\t\t"); System.out.println(p2); id++; } System.out.println("请输入您要删除的信息的序号(1~"+id+")"); String num = in.nextLine().replace(" ",""); if(!regex.isAllDigit(num)) { System.out.println("您的输入有误!"); } else { int num1 = Integer.valueOf(num); if(num1<1) System.out.println("您的输入有误!"); else { vector.remove(num1-1); System.out.println("删除成功!"); } } } } //删除所有信息方法 public void deleteAll() { System.out.println("您确定要删除全部信息吗?(y/n)"); String choice = in.nextLine().replace(" ",""); if(choice.equals("Y") || choice.equals("y")) { Enumeration<Person> en = vector.elements(); while(en.hasMoreElements()) { vector.clear(); System.out.println("信息已经被全部删除!"); } } else if(choice.equals("N") || choice.equals("n")) { System.out.println("已取消删除操作!"); } else { System.out.println("您的输入有误!默认取消删除操作!"); } } //修改信息方法 public void modify( String choice) { int id = 0; if(vector.isEmpty()) System.out.println("没有任何信息记录!"); else { Menu.printInfo(); Enumeration<Person> en = vector.elements(); while(en.hasMoreElements()) { Person p2 = en.nextElement(); System.out.print(id+1+"\t\t"); System.out.println(p2); id++; } } System.out.println("请输入您要修改的信息的序号(1~"+id+")"); String num = in.nextLine().replace(" ",""); if(!regex.isAllDigit(num)) { System.out.println("您的输入有误!"); } else { int num1 = Integer.valueOf(num); if(num1<1 || num1>id) System.out.println("您的输入有误!"); else { if(choice.equals("name")) { System.out.println("请输入新的姓名"); String newName = in.nextLine().replace(" ",""); if(!regex.nameRegex(newName)) System.out.println("您输入的新姓名不符合格式!"); else { vector.elementAt(num1-1).setName(newName); System.out.println("姓名修改成功!"); } } else if(choice.equals("age")) { System.out.println("请输入新的年龄:"); String newAge = in.nextLine().replace(" ",""); if(!regex.ageRegex(newAge)) System.out.println("您输入的新姓名不符合格式!"); else { vector.elementAt(num1-1).setAge(newAge); System.out.println("年龄修改成功!"); } } else if(choice.equals("sex")) { System.out.println("请输入新的性别(男M或m),女(F或f):"); String newSex = in.nextLine().replace(" ",""); if(!regex.sexRegex(newSex)) System.out.println("您输入的新性别不符合格式!"); else { vector.elementAt(num1-1).setSex(newSex); System.out.println("性别修改成功!"); } } else if(choice.equals("telNum")) { System.out.println("请输入新的年龄:"); String newTelNum = in.nextLine().replace(" ",""); if(!regex.telNumRegex(newTelNum)) System.out.println("您输入的新电话号码不符合格式!"); else { vector.elementAt(num1-1).setTelNum(newTelNum); System.out.println("电话号码修改成功!"); } } else if(choice.equals("address")) { System.out.println("请输入新的地址:"); String newAddress = in.nextLine().replace(" ",""); if(!regex.addressRegex(newAddress)) System.out.println("您输入的新地址不符合格式!"); else { vector.elementAt(num1-1).setAddress(newAddress); System.out.println("地址修改成功!"); } } } } } }
TelNoteRegex.java
public class TelNoteRegex { //检查姓名是否符合格式 public boolean nameRegex(String name) { boolean b = true; if(name.length()<1 || name.length()>10) { b = false; } char [] array = name.toCharArray(); for(int i=0;i<array.length;i++) { if( !(array[i] >='A' && array[i] <='Z') && !(array[i] >='a' && array[i] <='z') ) { b = false; break; } } return b; } //检查年龄是否符合各式 public boolean ageRegex(String age) { boolean b = true; if(!isAllDigit(age)) return false; else { int num = Integer.parseInt(age); if(num<=0 || num>200) return false; } return b; } //检查性别是否符合要求 public boolean sexRegex(String sex) { boolean b = true; if( !sex.equals("M") && !sex.equals("m") && !sex.equals("F") && !sex.equals("f")) b = false; return b; } //检查电话号码 public boolean telNumRegex(String telNum) { boolean b = true; if(!isAllDigit(telNum)) return false; else { if( !( telNum.length() >=6 && telNum.length() <=10)) return false; } return b; } //检查地址 public boolean addressRegex(String address) { boolean b = true; if( address.length()<1 || address.length()>50 ) return false; char array[] = address.toCharArray(); for(int i=0;i<array.length;i++) { if( !( ( array[i]>='0' && array[i]<='9' ) || ( array[i]>='a' && array[i]<='z' ) || ( array[i]>='A' && array[i]<='Z' ) ) ) b = false; } return b; } //检查传入的字符串是否全部为数字 public boolean isAllDigit(String str) { boolean b = true; char array[] = str.toCharArray(); for(int i=0;i<array.length;i++) { if( !(array[i] >='0' && array[i] <='9')) { b = false; break; } } return b; } }
Person.java
public class Person { private int id; private String name; private String age; private String sex; private String telNum; private String address; public Person(){} public Person(String name, String age, String sex, String telNum, String address) { super(); 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; } public String toString() { String str = null; if( sex.equals("M") || sex.equals("m") ) str = "男"; else if( sex.equals("F") || sex.equals("f") ) str = "女"; return name+"\t\t"+age+"\t\t"+str+"\t\t"+telNum+"\t\t"+address; } }
其实Person类中定义的Id属性根本就没用上,因为在后边的排序操作时所有的信息的顺序都可能会被打乱......所以正在显示全部信息的时候才给它们加上了Id,这个Id是在showAll()方法体内定义的,在其他需要输出的地方也都是这样解决的......我才疏学浅,暂时没想到更好的解决办法~如果有大神有办法,还请在评论区中不吝赐教!