Java面向对象:电话本系统-初级版本
【写在前面】:针对于刚刚接触当前知识的小白,大神绕道~
题目:
电话本系统
电话本系统设计共可以保存200个联系人,可以使用数组实现。
实现功能:
请输入要选择的功能:
- 新增一个联系人
- 查找指定的联系人
- 查找所有的联系人
- 修改联系人信息
- 删除联系人信息
- 退出系统
功能要求:
1、新增一个联系人,联系人的编号,姓名,性别,年龄,手机号,身份证号由用户从控制台录入
2、按照姓名查找符合条件的所有的联系人(有可能有联系人同名情况,如果同名,全部列出)
3、查询所有的联系人
4、选择一个联系人修改信息
5、可以把无效的联系人删除
题目考察点:
面向对象思想、数组使用、equals()方法的重写、toString()方法重写等
思路概要:
1.创建联系人类,封装属性,提供公有的get、set方法
2.根据题目要求创建联系人数组。
3.创建联系人操作类,用于对象的增删改查等。
注意点:
1.对联系人的增删改查要验证是否存在(已存在则不能再次添加,使用身份证号作为其唯一标识;删除、修改时联系人不存在则不可进行操作),因为是对联系人的值进行比较,所以在自定义类型(Linkman)中重写equals()。
2.重写toString()以达到按既定的输出格式输出内容。
package xx
/**
* 联系人类
* @author w
* @version
* @since
*/
public class Linkman {
//联系人的编号,姓名,性别,年龄,手机号,身份证号
/**
* 编号
*/
private int id;
/**
* 姓名
*/
private String name;
/**
* 性别
*/
private String sex;
/**
* 年龄
*/
private int age;
/**
* 手机号
*/
private String phone;
/**
* 身份证号
*/
private String pId;
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId;
}
//重写toString,以便将对象以想要的方式输出
@Override
public String toString() {
return id +"\t"+ name +"\t"+ sex +"\t"+ age +"\t"+ phone +"\t"+ pId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((pId == null) ? 0 : pId.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
//重写以便将对象进行比值
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Linkman other = (Linkman) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (pId == null) {
if (other.pId != null)
return false;
} else if (!pId.equals(other.pId))
return false;
if (phone == null) {
if (other.phone != null)
return false;
} else if (!phone.equals(other.phone))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
}
package xx
import java.util.Scanner;
/**
* 联系人操作类
*
* @author
* @version
* @since
*/
public class LinkmanManager {
/**
* 首页菜单方法
*
* @param linkmans
* 联系人参数
*/
public void showMenu(Linkman[] linkmans) {
System.out.println("************************************");
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("************************************");
Scanner scan = new Scanner(System.in);
System.out.println("请输入您的选择号码<1-6>:");
int choice1 = scan.nextInt();
switch (choice1) {
case 1:
addLinkman(linkmans);
break;
case 2:
searchByName(linkmans);
break;
case 3:
searchAll(linkmans);
break;
case 4:
modifyLinkman(linkmans);
break;
case 5:
delLinkman(linkmans);
break;
case 6:
// 调用退出系统方法
System.out.println("谢谢使用~");
System.exit(0);
break;
default:
System.out.println("输入有误,请重新选择<1-6>");
break;
}
// 除了退出系统 其它情况下操作完,都返回主菜单
if (choice1 != 6) {
showMenu(linkmans);
}
}
/**
* 新增联系人方法
*/
public void addLinkman(Linkman[] linkmans) {
// 联系人要求从键盘接收
Scanner scan = new Scanner(System.in);
// 创建一个对象来接收属性值
Linkman man1 = new Linkman();
// 接收属性值
System.out.println("请输入联系人的编号:");
man1.setId(scan.nextInt());
System.out.println("请输入联系人姓名:");
man1.setName(scan.next());
System.out.println("输入联系人性别:");
man1.setSex(scan.next());
System.out.println("输入联系人年龄:");
man1.setAge(scan.nextInt());
System.out.println("请输入联系人的手机号");
man1.setPhone(scan.next());
System.out.println("请输入联系人的身份证号:");
man1.setpId(scan.next());
// 根据信息判断数据是否合法
boolean flag = false;// 标记是否录入数据重复 默认不重复
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i] != null && linkmans[i].equals(man1)) {
flag = true;// 身份证重复,存在重复的人
break;
}
}
if (flag) {// 存在重复的人
System.out.println("联系人已存在,是否继续添加联系人?(y表示继续,其他表示不继续):");
String choice2 = scan.next();
if (choice2.equals("y")) {// 选择y则继续添加
addLinkman(linkmans);//重新开始添加
}
} else {// 数据不重复则保存新增的联系人
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i] == null) {// 将数据存在空位置上
linkmans[i] = man1;
System.out.println("添加联系人成功");
break;
}
}
}
}
/**
* 查找指定联系人方法
*/
public void searchByName(Linkman[] linkmans){
//遍历输出数组非空位置的元素,即联系人(如不限制非空则会报空指针异常)
Scanner scan = new Scanner(System.in);
System.out.println("请输入要查询的姓名:");
String name = scan.next();
//标记是否存在要找的人
boolean flag = false;
System.out.println("编号\t姓名\t性别\t年龄\t手机号\t身份证号");
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i]!=null&&linkmans[i].getName().equals(name)) {
System.out.println(linkmans[i].toString());
flag = true;
}
}
if (flag==false) {
System.out.println("查无此人~");
}
}
/**
* 查找所有联系人方法
*/
public void searchAll(Linkman[] linkmans){
//遍历输出数组非空位置的元素,即联系人(如不限制非空则会报空指针异常)
System.out.println("编号\t姓名\t性别\t年龄\t手机号\t身份证号");
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i]!=null) {
System.out.println(linkmans[i].toString());
}
}
}
/**
* 修改修改联系人方法
*/
public void modifyLinkman(Linkman[] linkmans) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要修改的联系人的身份证号:");
String pId = scan.next();
//遍历判断非空元素是否有需要修改的联系人
boolean flag = false;
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i]!=null&&linkmans[i].getpId().equals(pId)) {
System.out.println("请输入新的编号");
linkmans[i].setId(scan.nextInt());
System.out.println("请输入新的姓名");
linkmans[i].setName(scan.next());
System.out.println("请输入新的性别");
linkmans[i].setSex(scan.next());
System.out.println("请输入新的手机号");
linkmans[i].setPhone(scan.next());
System.out.println("修改成功~");
flag = true;
}
}
if (flag == false) {
System.out.println("该联系人不存在~");
}
}
/**
* 删除联系人方法
*/
public void delLinkman(Linkman[] linkmans) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要删除的联系人的姓名:");
String name = scan.next();
//遍历判断非空元素是否有可删除的联系人
boolean flag = false;
for (int i = 0; i < linkmans.length; i++) {
if (linkmans[i]!=null&&linkmans[i].getName().equals(name)) {
linkmans[i] = null;
flag = true;
System.out.println("删除成功 !");
}
}
if (flag == false) {
System.out.println("该联系人不存在~");
}
}
}
package xx
/**
* 电话本系统测试类
* @author
* @version
* @since
*/
public class Test {
public static void main(String[] args) {
//创建联系人数组
Linkman[] linkmans = new Linkman[200];
//电话本操作对象
LinkmanManager m = new LinkmanManager();
//对象调方法
m.showMenu(linkmans);
}
}
测试结果:
************************************
请输入要选择的功能:
1. 新增一个联系人
2. 查找指定的联系人
3. 查找所有的联系人
4. 修改联系人信息
5. 删除联系人信息
6. 退出系统
************************************
请输入您的选择号码<1-6>:
1
请输入联系人的编号:
01
请输入联系人姓名:
zhangsan
输入联系人性别:
man
输入联系人年龄:
18
请输入联系人的手机号
13366778787
请输入联系人的身份证号:
123456789000000001
添加联系人成功
************************************
请输入要选择的功能:
1. 新增一个联系人
2. 查找指定的联系人
3. 查找所有的联系人
4. 修改联系人信息
5. 删除联系人信息
6. 退出系统
************************************
请输入您的选择号码<1-6>:
1
请输入联系人的编号:
02
请输入联系人姓名:
lisi
输入联系人性别:
women
输入联系人年龄:
22
请输入联系人的手机号
13377778888
请输入联系人的身份证号:
123456789000000002
添加联系人成功
************************************
请输入要选择的功能:
1. 新增一个联系人
2. 查找指定的联系人
3. 查找所有的联系人
4. 修改联系人信息
5. 删除联系人信息
6. 退出系统
************************************
请输入您的选择号码<1-6>:
1
请输入联系人的编号:
03
请输入联系人姓名:
zhangsan
输入联系人性别:
women
输入联系人年龄:
26
请输入联系人的手机号
13366667777
请输入联系人的身份证号:
123456789000000003
添加联系人成功
************************************
请输入要选择的功能:
1. 新增一个联系人
2. 查找指定的联系人
3. 查找所有的联系人
4. 修改联系人信息
5. 删除联系人信息
6. 退出系统
************************************
请输入您的选择号码<1-6>:
2
请输入要查询的姓名:
zhangsan
编号 姓名 性别 年龄 手机号 身份证号
1 zhangsan man 18 13366778787 123456789000000001
3 zhangsan women 26 13366667777 123456789000000003