该项目是用于日常生活中记录联系人信息的一款智能小工具。 实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删 除、排序等功能。该项目是以Windows控制台为运行平台,所有的操作都应在控制台 上进行。亮点是,数据校验使用了正则表达式。
项目结构
App类
package java;
/**
* 电话本项目入口类
*/
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 java;
/**
* 生成项目中的所有的菜单
*/
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 java;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* 核心业务类
*/
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.searchByAdd();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(this.list.size());
}
/**
* 查询全部记录
*/
public void showAll(){
if(this.list.size() == 0){
System.out.println("没有任何记录");
return ;
}
for(int i=0;i<this.list.size();i++){
System.out.println(this.list.get(i));
}
}
/**
* 按姓名查询记录
*/
public void searchByName(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String name = telNoteRegex.nameValidate();
boolean flag = true;
for(int i =0;i<this.list.size();i++){
if(name.equals(this.list.get(i).getName())){
System.out.println(this.list.get(i));
flag = false;
}
}
if(flag){
System.out.println("没有此人记录");
}
}
/**
* 按年龄查询记录
*/
public void searchByAge(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String age = telNoteRegex.ageValidate();
boolean flag = true;
for(int i=0;i<this.list.size();i++){
if(age.equals(this.list.get(i).getAge())){
System.out.println(this.list.get(i));
flag = false;
}
}
if(flag){
System.out.println("没有此人记录");
}
}
/**
* 按性别查询记录
*/
public void searchBySex(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String sex = telNoteRegex.sexValidate();
boolean flag = true;
for(int i=0;i<this.list.size();i++){
if(sex.equalsIgnoreCase(this.list.get(i).getSex())){
System.out.println(this.list.get(i));
flag = false;
}
}
if(flag){
System.out.println("没有此人记录");
}
}
/**
* 按电话号码查询记录
*/
public void searchByTelNum(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String telNum = telNoteRegex.telNumValidate();
boolean flag = true;
for(int i=0;i<this.list.size();i++){
if(telNum.equals(this.list.get(i).getTelNum())){
System.out.println(this.list.get(i));
flag = false;
}
}
if(flag){
System.out.println("没有此人记录");
}
}
/**
* 按地址查询记录
*/
public void searchByAdd(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String address = telNoteRegex.addressValidate();
boolean flag = true;
for(int i=0;i<this.list.size();i++){
if(address.equals(this.list.get(i).getAddress())){
System.out.println(this.list.get(i));
flag = false;
}
}
if(flag){
System.out.println("没有此人记录");
}
}
/**
* 修改指定记录
*/
public void modifyOperation(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
Menu menu = new Menu();
//对被修改的记录的序号进行验证,可以使用对菜单项验证的方法来完成
System.out.println("请输入记录的序号");
int itemNum = telNoteRegex.menuItemValidate(1,this.list.size());
menu.subModifyMenu();
int menuItem = telNoteRegex.menuItemValidate(1,6);
switch(menuItem){
case 1: String name = telNoteRegex.nameValidate(); (this.list.get(itemNum - 1)).setName(name);break;
case 2: String age = telNoteRegex.ageValidate();(this.list.get(itemNum-1)).setAge(age); break;
case 3: String sex = telNoteRegex.sexValidate();(this.list.get(itemNum - 1)).setSex(sex); break;
case 4: String telNum = telNoteRegex.telNumValidate();(this.list.get(itemNum-1)).setTelNum(telNum); break;
case 5: String address = telNoteRegex.addressValidate();(this.list.get(itemNum -1)).setAddress(address); break;
case 6: return;
}
}
/**
* 删除指定记录
*/
public void deleteOperation(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
System.out.println("请输入记录序号");
int itemNum = telNoteRegex.menuItemValidate(1,this.list.size());
this.list.remove(itemNum -1);
//重新为记录设置新的序号
for(int i=0;i<this.list.size();i++){
(this.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<this.list.size();i++){
(this.list.get(i)).setId(i+1);
}
}
/**
* 按用户年龄排序记录
*/
public void orderAge(){
Collections.sort(this.list,new OrderByAge());
for(int i=0;i<this.list.size();i++){
(this.list.get(i)).setId(i+1);
}
}
/**
* 按用户性别排序记录
*/
public void orderSex(){
Collections.sort(this.list,new OrderBySex());
for(int i=0;i<this.list.size();i++){
(this.list.get(i)).setId(i+1);
}
}
/**
* 按姓名排序的比较器
*/
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 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) {
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("#").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);
return sb.toString();
}
}
TelNoteRegex类
package java;
import java.util.Scanner;
/**
* 数据校验类
*/
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 ( ){
//验证姓名的正则表达式
String regex = "[a-zA-Z]{1,10}";
//创建Scanner对象
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 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 ="[m|M|f|F]{1}";
//创建Scanner对象
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("输入性别:(男 m or M) (女 f or 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 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 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 regex = new TelNoteRegex();
/*int menuItem = regex.menuItemValidate(1,6);
System.out.println(menuItem);*/
/*String name = regex.nameValidate();
System.out.println(name);*/
/*String age = regex.ageValidate();
System.out.println(age);*/
/* String sex = regex.sexValidate();
System.out.println(sex);*/
/*String telNum = regex.telNumValidate();
System.out.println(telNum);*/
String address = regex.addressValidate();
System.out.println(address);
}
}