java实现简单控制台通讯录
作者:侪哥哥 发布时间:2023-05-24 14:33:20
标签:java,控制台,通讯录
通过主菜单对各级子菜单进行控制,并实现添加记录,查找记录,删除记录,修改记录,排序记录,以及退出系统功能的实现。一共六部分的功能模块。
上面的图就是每个模块具有的功能,而且还用到了正则表达式判断输入的是否符合规则,这个系统体现了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 List<Person> list=new ArrayList<Person>();
//用户添加信息业务逻辑控制
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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> 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<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
};
Collections.sort(list,comparator);
showAll();
}
//按用户年龄排序信息
public void orderAge(){
Comparator<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
};
Collections.sort(list,comparator);
showAll();
}
//按用户性别排序信息
public void orderSex(){
Comparator<Person> comparator=new Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
return o1.getSex().compareTo(o2.getSex());
}
};
Collections.sort(list,comparator);
showAll();
}
}
总结:这个项目让我很清晰可以明白什么是面向对象,为什么说是java是面向对象的编程语言,程序的代码都是对象在调用,也明白一个项目应该如何分工明确进行书写,功能和视图要分开,每个类都有自己特定的功能,各个类的功能不要相互卸载一起,这样的代码基本是复用不高的,如果分开明确,以后再添加功能模块的时候,只需要增加功能,无需修改之前的代码,很好的体现了开闭原则,对功能开发,对修改内容关闭,这个项目也体现了MVC的设计模式,对我而言,这个项目让我受益匪浅。
来源:http://blog.csdn.net/chai_ge_ge/article/details/77110632


猜你喜欢
- 一、依赖注入方式思考:向一个类中传递数据的方式有几种?普通方法(set方法)构造方法思考:依赖注入描述了在容器中建立bean与bean之间依
- SpringBoot整合Mybatis自定义 * 不起作用Mybatis插件生效的方式:1. 原始的读取mybatis-config.xml
- 本文为大家分享了 Android Retrofit 2.0框架上传图片解决方案,具体内容如下1.单张图片的上传/** * 上传一
- 本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法。分享给大家供大家参考,具体如下:一、如图二、代码实现publ
- 实现android双击后退键退出当前APP功能实现该功能基本思路是,1, 监听后退键 , 比较两次后退间隔 , 低于两秒则出发退出2, 退出
- 1、使用FileStream读写文件 文件头:using System;using System.Collections.Gene
- 1.1、获取http请求参数是一种刚需我想有的小伙伴肯定有过获取http请求的需要,比如想前置获取参数,统计请求数据做服务的接口签名校验敏感
- 一,引入dll1.ServiceStack.Common.dll2.ServiceStack.Interfaces.dll3.Service
- 题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word成功了;但是导出pdf相对麻烦了一点。两天的研究测试java导出
- 前言现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而
- 最近 IDEA 2020最后一个版本发布了 ,已经内置了Lombok插件,SpringBoot 2.1.x之后的版本也在Starter中内置
- 第1部分 TreeSet介绍TreeSet简介TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSe
- 1.springboot * 处理过滤token,并且返回结果import org.apache.commons.lang3.String
- 性能测试过程中,如果进行大量的并发时,界面容易卡死。通过非GUI(命令行)的方式是个不错的选择。windows环境1.在安装Jmeter的目
- 一、前言spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?)
- HTTPclient保持长连接首先解释一下什么是长连接当我们向一台服务器发起请求时,我们需要和对方建立一条通道,去传输数据,所谓的短连接,就
- 安卓自定义分段式的进度条,供大家参考,具体内容如下前一段时间公司新项目接到一个新需求,其中界面需要用到一个分段式的进度条,找了半天没有发现类
- 现在,汽车的踪影无处不在,公路上疾驰,大街边临停,小区中停靠,车库里停泊。管理监控如此庞大数量的汽车是个头疼的问题。精明的人们把目光放在车牌
- Linux Hadoop 2.7.3 安装搭建Hadoop实现了一个分布式文件系统(Hadoop Distributed File Syst
- 前言上一篇做了一个滑动折叠的Header控件,主要就是练习了一下滑动事件冲突的问题,控件和文章写的都不怎么样。本来想通过这篇文章的控件,整合