**自己写的简单通讯录管理项目**

有集合基本的增删改查,我还没有学数据库什么的,就用对象序列化和反序列化来保存信息了。

本人菜鸟一枚,有不足之处请多指点。

package aatroxcarry.txl;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

public class Start {

public static void main(String[] args) throws Exception {

Crud crud = new Crud();

// 通讯录信息只会在正常退出时保存。

System.out.println("    欢迎使用通讯录管理系统!");

while (true) {

crud.print();

String command = crud.input.next();

switch (command) {

case "1":

crud.one();

break;

case "2":

crud.two();

break;

case "3":

crud.three();

break;

case "4":

crud.four();

break;

case "5":

crud.five();

break;

case "6":

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(crud.file));

oos.writeObject(crud.txl);

oos.close();

System.out.println("通讯录的信息已保存在 " + crud.file + " 路径下。");

System.out.println("感谢您的使用,再见~");

System.exit(0);

default:

System.out.println("输入有误!");

break;

}

}

}

}

package aatroxcarry.txl;

import java.io.Serializable;

@SuppressWarnings("serial")

public class Person implements Serializable{

private String name;//姓名

private int age;//年龄

private String sex;//性别

private long telephone;//电话

private String address;//地址

public Person(String name, int age, String sex, long telephone, String address) {

this.name = name;

this.age = age;

this.sex = sex;

this.telephone = telephone;

this.address = address;

}

@Override

public String toString() {

return name + "\t" + age + "\t" + sex + "\t" + telephone + "\t" + address;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public long getTelephone() {

return telephone;

}

public void setTelephone(long telephone) {

this.telephone = telephone;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

package aatroxcarry.txl;

import java.io.EOFException;

import java.io.File;

import java.io.FileInputStream;

import java.io.ObjectInputStream;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Scanner;

public class Crud {

Scanner input;

ArrayList txl;//英语不好,通讯录就用拼音表示了。

ObjectInputStream ois;

File file;

@SuppressWarnings("unchecked")

public Crud() throws Exception {

input = new Scanner(System.in);

//保存的路径,可以修改

file = new File("c:/txl.dat");

if(!file.exists()){

file.createNewFile();

}

try {

ois = new ObjectInputStream(new FileInputStream(file));

txl = (ArrayList) ois.readObject();

} catch (EOFException e) {

txl = new ArrayList<>();

}

}

public void print(){

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("**************************");

System.out.println("输入要使用的功能:");

}

//查看通讯录中的对象

public void see(){

if(txl.size() == 0){

System.out.println("通讯录中无任何记录!");

return;

}

System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");

for(int i = 0; i < txl.size(); i++){

System.out.println(i+1 + "\t" + txl.get(i).toString());

}

}

/**

* 从键盘输入姓名、年龄、性别、电话、地址的方法。

* 由于后面有多处需要键盘输入这些属性,直接把这些输入写成方法,

* 简化代码,方便调用。

* @return 输入的姓名、年龄、性别、电话、地址

*/

public String inputName(){

System.out.println("输入姓名:");

String name = input.next();

return name;

}

public int inputAge(){

int age;

while(true){

System.out.println("输入年龄:");

String tempAge = input.next();

//利用正则判断

if(!tempAge.matches("[1-9]\\d?")){

System.out.println("请输入正确的年龄!(1~99之间)");

continue;

}

age = Integer.parseInt(tempAge);

break;

}

return age;

}

public String inputSex(){

String sex;

while (true) {

System.out.println("输入性别,(男 or 女)");

sex = input.next();

//利用正则判断,性别只能是男或女

if(!sex.matches("男|女")){

System.out.println("输入的性别不符合要求,请重新输入!");

continue;

}

break;

}

return sex;

}

public long inputTelephone(){

long telephone;

outer :

while(true){

System.out.println("输入电话号码:");

String tempTelephone = input.next();

//利用正则判断,规定号码必须是11位,以1开头。

if(!tempTelephone.matches("1\\d{10}")){

System.out.println("请输入正确的电话号码!(以1开头,共11位)");

continue;

}

telephone = Long.parseLong(tempTelephone);

//判断号码是否已经存在,若存在,则重新输入

for(int i = 0; i < txl.size(); i++){

if(txl.get(i).getTelephone() == telephone){

System.out.println("此号码已经存在,请重新输入!");

continue outer;

}

}

break;

}

return telephone;

}

public String inputAddress(){

String address;

while(true){

System.out.println("输入地址:");

address = input.next();

//利用正则判断,地址中应该不包含数字

if(!address.matches("[^0-9]+")){

System.out.println("地址输入有误!不能包含数字。");

continue;

}

break;

}

return address;

}

public void one() throws Exception{

while(true){

System.out.println("***************************");

System.out.println("** 1 添加新记录      **");

System.out.println("** 2 查看全记录      **");

System.out.println("** 3 返回上一级      **");

System.out.println("***************************");

String command = input.next();

switch(command){

case "1":

//调用输入姓名、年龄、性别、电话、地址的方法

txl.add(new Person(inputName(), inputAge(), inputSex(), inputTelephone(), inputAddress()));

System.out.println("添加记录成功!");

break;

case "2":

see();

break;

case "3":

return;

default :

System.out.println("输入有误!");

break;

}

}

}

/**

* 由于姓名、年龄、性别、住址的查找算法相同,就直接定义成一个方法

* @param type 根据type传的参数来判断查找的属性(姓名、年龄、性别、住址)

* @param obj 具体要查找的内容

*/

public void find(String type, Object obj){

//如果内容匹配则将其索引保存到list集合中。

ArrayList list = new ArrayList();

for (int i = 0; i < txl.size(); i++) {

if("姓名".equals(type)){

if(txl.get(i).getName().equals(obj)){

list.add(i);

continue;

}

}else if("年龄".equals(type)){

if(txl.get(i).getAge() == (int)obj){

list.add(i);

continue;

}

}else if("性别".equals(type)){

if(txl.get(i).getSex().equals(obj)){

list.add(i);

continue;

}

}else if("住址".equals(type)){

if(txl.get(i).getAddress().equals(obj)){

list.add(i);

continue;

}

}

}

//遍历list,根据list中的内容来取得txl中的索引

if(list.size() != 0){

System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");

for(int i = 0; i < list.size(); i++){

System.out.println(list.get(i) + 1 + "\t" + txl.get(list.get(i)).toString());

}

}else{

System.out.println("没有找到此" + type + "的人!");

}

}

public void two(){

if(txl.isEmpty()){

System.out.println("通讯录中无任何记录!请先进行添加!");

return;

}

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("** 7 返回上一级      **");

System.out.println("***************************");

String command = input.next();

switch(command){

case "1":

String name = inputName();

find("姓名", name);

break;

case "2":

int age = inputAge();

find("年龄", age);

break;

case "3":

String sex = inputSex();

find("性别", sex);

break;

case "4":

//查找电话的标记。

boolean telephoneFlag = false;

long telephone;

while(true){

System.out.println("输入电话号码:");

String tempTelephone = input.next();

//利用正则判断,规定号码必须是11位,以1开头。

if(!tempTelephone.matches("1\\d{10}")){

System.out.println("请输入正确的电话号码!(以1开头,共11位)");

continue;

}

telephone = Long.parseLong(tempTelephone);

break;

}

//遍历查找

int i = 0;

for(; i < txl.size(); i++){

//如果找到,标记为true。

if(txl.get(i).getTelephone() == telephone){

telephoneFlag = true;

break;

}

}

//利用标记判断是否找到。

if(telephoneFlag){

System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");

System.out.println((i + 1) + "\t" + txl.get(i).toString());

}else{

System.out.println("没有找到此号码的人!");

}

break;

case "5":

String address = inputAddress();

find("住址", address);

break;

case "6":

see();

break;

case "7":

return;

default :

System.out.println("输入有误!");

break;

}

}

}

public void three() throws Exception{

if(txl.isEmpty()){

System.out.println("通讯录中无任何记录!请先进行添加!");

return;

}

while(true){

System.out.println("***************************");

System.out.println("** 1 查看全纪录      **");

System.out.println("** 2 修改指定目录     **");

System.out.println("** 3 返回上一级      **");

System.out.println("***************************");

String command = input.next();

switch(command){

case "1":

see();

break;

case "2":

int xuhao;

while(true){

System.out.println("输入修改的序号:");

String tempIndex = input.next();

if(!tempIndex.matches("\\d+")){

System.out.println("序号输入错误,请重新输入!");

continue;

}

xuhao = Integer.parseInt(tempIndex);

if (xuhao <= 0 || xuhao > txl.size()) {

System.out.println("序号越界!请重新输入!");

continue;

}

break;

}

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("***************************");

String xiugai = input.next();

switch(xiugai){

case "1":

String name = inputName();

txl.get(xuhao - 1).setName(name);

System.out.println("姓名修改成功!");

break;

case "2":

int age = inputAge();

txl.get(xuhao - 1).setAge(age);

System.out.println("年龄修改成功!");

break;

case "3":

String sex = inputSex();

txl.get(xuhao - 1).setSex(sex);

System.out.println("性别修改成功!");

break;

case "4":

long telephone = inputTelephone();

txl.get(xuhao - 1).setTelephone(telephone);

System.out.println("号码修改成功!");

break;

case "5":

String address = inputAddress();

txl.get(xuhao - 1).setAddress(address);

System.out.println("地址修改成功!");

break;

case "6":

break;

default :

System.out.println("输入有误!");

break;

}

break;

case "3":

return;

default :

System.out.println("输入有误!");

break;

}

}

}

public void four() throws Exception{

if(txl.isEmpty()){

System.out.println("通讯录中无任何记录!请先进行添加!");

return;

}

while(true){

System.out.println("***************************");

System.out.println("** 1 查看全纪录      **");

System.out.println("** 2 删除指定目录     **");

System.out.println("** 3 删除全部目录     **");

System.out.println("** 4 返回上一级      **");

System.out.println("***************************");

String command = input.next();

switch(command){

case "1":

see();

break;

case "2":

int xuhao;

System.out.println("请输入要删除的记录序号:");

while(true){

String tempIndex = input.next();

if(!tempIndex.matches("\\d+")){

System.out.println("序号输入错误,请重新输入!");

continue;

}

xuhao = Integer.parseInt(tempIndex);

if (xuhao <= 0 || xuhao > txl.size()) {

System.out.println("序号越界!请重新输入!");

continue;

}

break;

}

txl.remove(xuhao - 1);

System.out.println("删除成功!");

break;

case "3":

System.out.println("确定删除全部目录?");

System.out.println("确定 or 取消");

String remove = input.next();

switch(remove){

case "确定":

txl.clear();

System.out.println("通讯录已清空!");

break;

case "取消":

break;

default :

System.out.println("输入有误!");

break;

}

break;

case "4":

return;

default :

System.out.println("输入有误!");

break;

}

}

}

public void five() throws Exception{

if(txl.isEmpty()){

System.out.println("通讯录中无任何记录!请先进行添加!");

return;

}

while(true){

System.out.println("***************************");

System.out.println("** 1 按姓名排序      **");

System.out.println("** 2 按年龄排序      **");

System.out.println("** 3 按性别排序      **");

System.out.println("** 4 按号码排序      **");

System.out.println("** 6 查看全记录      **");

System.out.println("** 7 返回上一级      **");

System.out.println("***************************");

String command = input.next();

switch(command){

case "1":

System.out.println("未完成~");

break;

case "2":

Collections.sort(txl, ( p1, p2)->

p1.getAge() - p2.getAge()

);

System.out.println("按年龄排序完成!");

break;

case "3":

System.out.println("未完成~");

break;

case "4":

Collections.sort(txl, ( p1, p2)->{

if(p1.getTelephone() > p2.getTelephone()){

return 1;

}

if(p1.getTelephone() < p2.getTelephone()){

return -1;

}

return 0;

});

System.out.println("按号码排序完成!");

break;

case "6":

see();

break;

case "7":

return;

default :

System.out.println("输入有误!");

break;

}

}

}

}

java通讯录工程_JAVA通讯录管理小项目相关推荐

  1. Java初学者轻便易于上手的小项目(2020最新)

    对于很多朋友来说,Java是学习编程的开始,也有很多朋友希望通过Java可以找到工作,那么当我们学习了Java的基础知识之后,我们急需要一些项目去帮我们整理一下自己学习的知识点以及提高一下编程能力,对 ...

  2. java 扫雷游戏_java的扫雷小游戏(超简单)

    这学期的专业选修课选了java,由于之前已经学过了C++,数据结构和操作系统的原因吧!所以感觉上手还是比较容易的-- 于是,实验课老师并没有要求那样一次次的做实验交实验报告,而是在最后一次实验课上,利 ...

  3. java 药店管理系统_java药店管理平台

    每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个基于web的java药店管理平台,采用当前非常流行的B/S体系结构,以JAVA作为开发技术,主要依赖SSM技术框架,mysql数据库建立本 ...

  4. java 模拟停车_Java多线程编程小实例模拟停车场系统

    下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下: Park类 public class Park { boolean []park=new bo ...

  5. java飞机场模拟程序_java 飞机大战 小游戏源码

    [实例简介] 本项目是一个使用java做的一个飞机大战的小游戏,一个英雄机,初始有三次生命,当打中蜜蜂会有一次生命奖励,当打中敌机会有相应分数奖励,但如果被敌机打中会失去一次生命机会.如果生命都失去, ...

  6. java hibernate详细_Java事务管理学习之Hibernate详细介绍

    hibernate是jdbc轻量级的封装,本身不具备事务管理的能力,在事物管理层面,一般是委托于底层的jdbc和jta来完成调度的.下面这篇文章主要给大家介绍了Java事务管理学习之Hibernate ...

  7. java gc原理_Java内存管理以及GC工作原理

    1.内存管理简介 内存管理的职责为分配内存,回收内存. 没有自动内存管理的语言/平台容易发生错误. 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知. 另一 ...

  8. java 录屏_java 录屏 小工具源码(idea)

    [实例简介]录制的视频保存在 java.io.tmpdir 目录,windows通常为 C:\Users\Administrator\AppData\Local\Temp [实例截图] 点击播放后,效 ...

  9. java web 爬虫_Java开源Web爬虫项目

    原标题:Java开源Web爬虫项目 百度百科解释 网络爬虫:网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚 ...

最新文章

  1. WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(下)
  2. [ Luogu 3924 ] 康纳的线段树
  3. java清除浏览器记录_java – 如何在Selenium测试中清除浏览器缓存
  4. 全球首发!惯性导航导论(剑桥大学)第六部分
  5. [转载] Python 中 pass 语句的作用是什么?
  6. mysql主主双机互备(三)
  7. NOIP2013 复盘
  8. 【Keras】使用 TPU 训练 TensorFlow 模型
  9. 服务器运维辐射,【服务器辐射】服务器辐射大吗_服务器防辐射_服务器辐射距离_佰佰安全网...
  10. 信息安全数学基础自学笔记1——群
  11. 判断设备访问类型是PC端还是WAP端
  12. 对接高德接口心得,本篇不涉及具体接口
  13. [Flutter]微信分享并从分享链接跳回APP指定页面
  14. XingGAN for Person Image Generation(人体姿势生成笔记)
  15. 推荐系统与知识图谱(2)
  16. 国产系统UOS上的可视化大屏电子看板系统
  17. mysql存储图片的几种方式_PHPmysql存储照片的两种方式
  18. 从零构建区块链量化交易平台课程总结-思维模型和方法论提炼
  19. 计算机网络安全ipc默认共享,IPC$、ADMIN$、C$、D$都是什么?如何关闭取消删除Windows默认共享...
  20. Firefly-RK3399 Linux内核编译

热门文章

  1. 我国首次举办工业互联网“人机对抗”竞赛 检验独创理论独有技术有效性
  2. C语言能够被替换吗?
  3. 用三国杀讲分布式算法,太舒适了吧?
  4. 从 Ops 到 NoOps,阿里文娱智能运维的关键:自动化应用容量管理
  5. Python2 圆满落幕,Python 继续辉煌! | 原力计划
  6. 为提升 DCP 传输效率,阿里工程师竟然这样做!
  7. 打开容器世界的大门: Docker、POD 初探
  8. 余承东:华为6G研发还需10年;库克“iPhone 11势头强劲”;TensorFlow 2.0正式版发布​ | 极客头条...
  9. 摆脱剧荒!教你用 Python 一步步爬取豆瓣电影新榜单
  10. “Oracle 不会放弃 Java!”