各个主要的类
App类:
package Moose;
/**
*电话本项目入口类
*/
public class App {
/**
* 启动电话本项目
* @param args
*/
public static void main(String[] args) {
App app = new App();
app.start();
}
/**
* 控制主菜单
*/
public void start(){
Menu menu = new Menu();
TelNoteRegeX regeX = new TelNoteRegeX();
Operate operate = new Operate();
while (true){
menu.mainMenu();
int item = regeX.menuItemValidate(1,6);
switch (item) {
case 1: {
operate.addLogic();
break;
}
case 2: {
operate.searchLogic();
break;
}
case 3: {
operate.modifyLogic();
break;
}
case 4:{
operate.deleteLogic();
break;
}
case 5:{
operate.orderLogic();
break;
}
case 6:{
System.exit(0);
}
}
}
}
}
Menu类
package Moose;
/**
* 生成项目中的所有菜单
*/
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 Moose;
import java.util.*;
/**
* 核心业务类
*/
public class Operate {
private List<Person> list;
public Operate(){
this.list = new ArrayList<>();
}
/**
* 用户添加的业务逻辑控制
*/
public void addLogic(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
while(true){
menu.addMenu();
int item = telNoteRegeX.menuItemValidate(1,3);
switch (item){
case 1:this.addOperation();break;
case 2:this.showAll();break;
case 3:return;
}
}
}
/**
* 用户查询记录的业务逻辑控制
*/
public void searchLogic(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
while (true){
menu.searchMenu();
int item = telNoteRegeX.menuItemValidate(1,7);
switch (item){
case 1:this.searchByName();break;
case 2:this.searchByAge();break;
case 3:this.searchBySex();break;
case 4:this.searchByTelNum();break;
case 5:this.searchByAddress();break;
case 6:this.showAll();break;
case 7:return;
}
}
}
/**
* 修改记录的业务逻辑控制
*/
public void modifyLogic(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
while (true){
menu.ModifyMenu();
int item = telNoteRegeX.menuItemValidate(1,3);
switch (item){
case 1:this.showAll();break;
case 2:this.ModifyOperation();break;
case 3:return;
}
}
}
/**
* 删除记录的业务逻辑控制
*/
public void deleteLogic(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
while (true){
menu.deleteMenu();
int item = telNoteRegeX.menuItemValidate(1,4);
switch (item){
case 1:this.showAll();break;
case 2:this.deleteOperation();break;
case 3:this.deleteAllOperation();break;
case 4:return;
}
}
}
/**
* 排序记录的业务逻辑控制
*/
public void orderLogic(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
while (true){
menu.orderMenu();
int item =telNoteRegeX.menuItemValidate(1,5);
switch (item){
case 1:this.orderName();break;
case 2:this.orderAge();break;
case 3:this.orderSex();break;
case 4:this.showAll();break;
case 5:return;
}
}
}
/**
* 添加新记录信息
*/
public void addOperation(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.nameValidate();
String age = telNoteRegeX.ageValidate();
String sex = telNoteRegeX.sexValidate();
String telnum = telNoteRegeX.telNumValidate();
String address = telNoteRegeX.addressValidate();
Person person = new Person(name,age,sex,telnum,address);
this.list.add(person);
person.setId(list.size());
}
/**
* 查询全部记录
*/
public void showAll(){
if(list.size() == 0){
System.out.println("当前没有任何记录");
return;
}else {
for (Person p:list){
System.out.println(p);
}
}
}
/**
* 按姓名查询
*/
public void searchByName(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.nameValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (name.equals(list.get(i).getName())){
System.out.println(list.get(i));
flag = false;
}
}
if (flag)
System.out.println("无此人记录");
}
/**
* 按年龄查询
*/
public void searchByAge(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.ageValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (name.equals(list.get(i).getAge())){
System.out.println(list.get(i));
flag = false;
}
}
if (flag)
System.out.println("无此人记录");
}
/**
* 按性别查询
*/
public void searchBySex(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.sexValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (name.equalsIgnoreCase(list.get(i).getSex())){
System.out.println(list.get(i));
flag = false;
}
}
if (flag)
System.out.println("无此人记录");
}
/**
* 按电话号码查询
*/
public void searchByTelNum(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.telNumValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (name.equals(list.get(i).getTelNum())){
System.out.println(list.get(i));
flag = false;
}
}
if (flag)
System.out.println("无此人记录");
}
/**
* 按地址查询
*/
public void searchByAddress(){
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
String name = telNoteRegeX.addressValidate();
boolean flag = true;
for (int i = 0;i<list.size();i++){
if (name.equals(list.get(i).getAddress())){
System.out.println(list.get(i));
flag = false;
}
}
if (flag)
System.out.println("无此人记录");
}
/**
* 修改指定记录
*/
public void ModifyOperation(){
Menu menu = new Menu();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
System.out.println("记录如下,请输入要修改的记录的序号");
this.showAll();
//对修改的序号进行验证,可以使用对菜单项验证的方法完成
int itemNum = telNoteRegeX.menuItemValidate(1,list.size());
menu.subModifyMenu();
int menuItem = telNoteRegeX.menuItemValidate(1,6);
switch (menuItem){
case 1:{
String name = telNoteRegeX.nameValidate();
list.get(itemNum-1).setName(name);
break;
}case 2:{
String age = telNoteRegeX.ageValidate();
list.get(itemNum-1).setAge(age);
break;
}case 3:{
String sex = telNoteRegeX.sexValidate();
list.get(itemNum-1).setSex(sex);
break;
}case 4:{
String telnum = telNoteRegeX.telNumValidate();
list.get(itemNum-1).setTelNum(telnum);
break;
}case 5:{
String address = telNoteRegeX.addressValidate();
list.get(itemNum-1).setAddress(address);
break;
}
case 6 :return;
}
}
/**
* 删除指定记录
*/
public void deleteOperation(){
System.out.println("全部记录如下,请输入要删除的记录的序号");
this.showAll();
TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
//对删除的序号进行验证,可以使用对菜单项验证的方法完成
int delitem = telNoteRegeX.menuItemValidate(1, list.size());
list.remove(delitem-1);
//重新为记录设置序号
for (int i = 0;i<list.size();i++ ){
list.get(i).setId(i+1);
}
System.out.println("删除成功,请继续操作");
}
/**
* 删除全部记录
*/
public void deleteAllOperation(){
this.list.clear();
System.out.println("电话本内容已经清空,请继续操作");
}
/**
* 按用户姓名排序记录
*/
public void orderName(){
Collections.sort(this.list,new OrderByName());
//重新设置记录的序号
for (int i = 0;i<list.size();i++ ){
list.get(i).setId(i+1);
}
System.out.println("已经按名字排序完成,请继续操作");
}
/**
* 按用户年龄排序记录
*/
public void orderAge(){
Collections.sort(this.list,new OrderByAge());
//重新设置记录的序号
for (int i = 0;i<list.size();i++ ){
list.get(i).setId(i+1);
}
System.out.println("已经按年龄排序完成,请继续操作");
}
/**
* 按用户性别排序记录
*/
public void orderSex(){
Collections.sort(this.list,new OrderBySex());
//重新设置记录的序号
for (int i = 0;i<list.size();i++ ){
list.get(i).setId(i+1);
}
System.out.println("已经按性别排序完成,请继续操作");
}
/**
* 按用户姓名排序的比较器
*/
class OrderByName implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
}
/**
* 按用户年龄排序的比较器
*/
class OrderByAge implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
}
/**
* 按用户性别排序的比较器
*/
class OrderBySex implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getSex().compareTo(o2.getSex());
}
}
}
Person类代码
package Moose;
/**
* 实体类
*/
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) {
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;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("序号:").append(this.id).append("\t");
sb.append("姓名:").append(this.name).append("\t\t");
sb.append("年龄:").append(this.age).append("\t\t");
sb.append("性别:").append(this.sex).append("\t\t");
sb.append("电话号码:").append(this.telNum).append("\t\t");
sb.append("地址:").append(this.address).append("\t\t");
return sb.toString();
}
}
TelNoteRegeX类代码
package Moose;
import java.util.Scanner;
import java.util.SortedMap;
/**
* 电话本数据校验类
*/
public class TelNoteRegeX {
/**
* 对菜单项的校验
* @param min
* @param max
* @return
*/
public int menuItemValidate(int min,int max){
//定义验证菜单项的正则表达式
String regex = "[1-9]{1}";
//创建键盘输入对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入正确的数字,最小是:"+min+"\t"+"最大是"+max);
String input = scanner.nextLine();
if(input.matches(regex)){
int inputNum = Integer.parseInt(input);
if (inputNum >=min && inputNum<=max){
return inputNum;
}else {
System.out.println("输入数字错误,请检查");
}
}
else
System.out.println("数字输入错误,请检查");
}
}
/**
* 对用户输入的姓名校验
* 要求是字母组成,长度在1-10之间
* @return
*/
public String nameValidate(){
//定义验证姓名的正则表达式,字母大小写长度1-10
String regex ="[A-z]{1,10}";
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入姓名,由大小写字母组成,长度1-10:");
String input = scanner.nextLine();
if (input.matches(regex)){
return input;
}else {
System.out.println("姓名输入有误,请检查");
}
}
}
/**
* 对用户输入的年龄校验
* 年龄的格式要求:10-99之间的
* @return
*/
public String ageValidate(){
//定义验证用户年龄的正则表达式
String regex = "[1-9]{1}[0-9]{1}";
//创建键盘输入对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入用户年龄, 要求年龄在10-99:");
String input = scanner.nextLine();
if (input.matches(regex)){
return input;
}else {
System.out.println("年龄输入有误,请检查");
}
}
}
/**
* 对用户输入的性别校验
* 性别的输入要求:男(M或者m),女(F或者f)
* @return
*/
public String sexValidate(){
//定义验证用户性别的正则表达式
String regex = "[F|f|M|m]{1}";
//创建键盘输入对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入用户性别, 性别的输入要求:男(M或者m),女(F或者f)");
String input = scanner.nextLine();
if (input.matches(regex)){
return input;
}else{
System.out.println("性别输入有误,请检查");
}
}
}
/**
* 对用户输入的电话号码校验
* 电话号码要求:允许带有区号的座机号,允许手机号
* @return
*/
public String telNumValidate(){
//定义验证用户手机号的正则表达式
String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
//创建键盘输入对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入用户电话号码,电话号码要求:允许带有区号的座机号,允许手机号");
String input = scanner.nextLine();
if (input.matches(regex)){
return input;
}else {
System.out.println("电话号码输入有误,请检查");
}
}
}
/**
* 对用户输入的地址校验
* 地址格式要求:字母或者数字组成,长度1-50
* @return
*/
public String addressValidate(){
//定义验证用户地址的正则表达式
String regex = "\\w{1,50}";
//创建键盘输入对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入用户地址,地址格式要求:字母或者数字组成,长度1-50");
String input = scanner.nextLine();
if (input.matches(regex)){
return input;
}else {
System.out.println("用户地址输入有误,请检查");
}
}
}
// //测试
// public static void main(String[] args) {
// TelNoteRegeX telNoteRegeX = new TelNoteRegeX();
// int num = telNoteRegeX.menuItemValidate(1, 7);
// String name = telNoteRegeX.nameValidate();
// String telNumValidate = telNoteRegeX.telNumValidate();
// String ageValidate = telNoteRegeX.ageValidate();
// String addressValidate = telNoteRegeX.addressValidate();
// String sexValidate = telNoteRegeX.sexValidate();
// System.out.println(num);
// System.out.println(name);
// System.out.println(telNumValidate);
// System.out.println(ageValidate);
// System.out.println(addressValidate);
// System.out.println(sexValidate);
// }
}
运行结果:
打包后的运行结果:
打包的程序稍后上传